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    }