001 package hirondelle.web4jtools.codegenerator.model; 002 003 import java.util.*; 004 import hirondelle.web4j.model.AppException; 005 import hirondelle.web4j.action.ActionImpl; 006 import hirondelle.web4j.request.RequestParser; 007 import hirondelle.web4j.action.ResponsePage; 008 import hirondelle.web4j.util.Util; 009 import hirondelle.web4jtools.util.TemplatedPage; 010 import hirondelle.web4jtools.codegenerator.codes.FieldType; 011 import hirondelle.web4jtools.codegenerator.field.Field; 012 import hirondelle.web4jtools.codegenerator.field.FieldAction; 013 014 /** 015 * Generate a Model Object for the feature, and serve as plain text. 016 * 017 * <P>Uses the {@link hirondelle.web4jtools.codegenerator.feature.Feature} and 018 * List of {@link hirondelle.web4jtools.codegenerator.field.Field} objects placed in session scope. 019 */ 020 public final class ModelAction extends ActionImpl{ 021 022 public ModelAction(RequestParser aRequestParser){ 023 super(FORWARD, aRequestParser); 024 } 025 026 @Override public ResponsePage execute() throws AppException { 027 addToRequest("imports", getImports()); 028 return getResponsePage(); 029 } 030 031 // PRIVATE // 032 private static final ResponsePage FORWARD = TemplatedPage.getPlain("Generated Model", "view.jsp", ModelAction.class); 033 034 private List<String> getImports(){ 035 List<String> result = new ArrayList<String>(); 036 037 Set<FieldType> types = getFieldTypes(); 038 039 for(FieldType type : types){ 040 //qualified name is null if in java.lang - no import required 041 if (Util.textHasContent(type.getQualifiedName())){ 042 result.add(type.getQualifiedName()); 043 } 044 } 045 046 return result; 047 } 048 049 private Set<FieldType> getFieldTypes() { 050 Set<FieldType> types = new LinkedHashSet<FieldType>(); 051 List<Field> fields = (List<Field>)getFromSession(FieldAction.FIELDS_KEY); 052 if ( fields != null ){ 053 for(Field field : fields) { 054 types.add(field.getType()); 055 } 056 } 057 return types; 058 } 059 }