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 }