001    package hirondelle.web4jtools.codegenerator.sql;
002    
003    import hirondelle.web4j.model.AppException;
004    import hirondelle.web4j.action.ActionImpl;
005    import hirondelle.web4j.request.RequestParser;
006    import hirondelle.web4j.action.ResponsePage;
007    import hirondelle.web4jtools.util.TemplatedPage;
008    import java.util.*;
009    
010    import hirondelle.web4jtools.codegenerator.codes.UiStyle;
011    import hirondelle.web4jtools.codegenerator.feature.Feature;
012    import hirondelle.web4jtools.codegenerator.feature.FeatureAction;
013    import hirondelle.web4jtools.codegenerator.field.Field;
014    import hirondelle.web4jtools.codegenerator.field.FieldAction;
015    
016    /**
017    * Generate the .sql file needed for the feature, and serve it in plain text.
018    * 
019    * <P>The .sql file is used by the DAO class.
020    */
021    public final class SqlAction extends ActionImpl {
022      
023      public SqlAction(RequestParser aRequestParser){
024        super(LIST_AND_EDIT, aRequestParser);
025      }
026    
027      @Override public ResponsePage execute() throws AppException {
028        addToRequest("primaryKey", getPrimaryKeyName());
029        addToRequest("orderBy", getOrderBy());
030        addToRequest("sortOrder", getSortOrder());
031        
032        UiStyle uiStyle = getUiStyle();
033        if ( UiStyle.ListAndEdit == uiStyle ) {
034          //use default forward
035        }
036        else if ( UiStyle.ShowAndApply == uiStyle ) {
037          setResponsePage(SHOW_AND_APPLY);
038        }
039        else {
040          throw new AssertionError("Unexpected value for UiStyle : " + uiStyle);
041        }
042        
043        return getResponsePage();
044      }
045      
046      // PRIVATE //
047      private static final ResponsePage LIST_AND_EDIT = TemplatedPage.getPlain("Sql File","listAndEdit.jsp", SqlAction.class);
048      private static final ResponsePage SHOW_AND_APPLY = TemplatedPage.getPlain("Sql File", "showAndApply.jsp", SqlAction.class);
049      
050      private UiStyle getUiStyle() {
051        Feature feature = (Feature)getFromSession(FeatureAction.FEATURE_KEY);
052        return feature.getUiStyle();
053      }
054      
055      private String getPrimaryKeyName(){
056        String result = null;
057        List<Field> fields = (List<Field>)getFromSession(FieldAction.FIELDS_KEY);
058        for(Field field: fields){
059          if ( field.getIsPrimaryKey() ) {
060            result = field.getName();
061            break;
062          }
063        }
064        return result;
065      }
066      
067      private String getOrderBy() {
068        String result = "?";
069        List<Field> fields = (List<Field>)getFromSession(FieldAction.FIELDS_KEY);
070        for (Field field : fields){
071          if ( field.getIsOrderByField() ) {
072            result = field.getName().toString();
073            break;
074          }
075        }
076        return result;
077      }
078      
079      private String getSortOrder(){
080        String result = "";
081        List<Field> fields = (List<Field>)getFromSession(FieldAction.FIELDS_KEY);
082        for (Field field : fields){
083          if ( field.getIsOrderByField() ) {
084            result = field.getSortOrder().toString();
085          }
086        }
087        return result;
088      }
089    }