001    package hirondelle.web4jtools.logview.directories;
002    
003    import hirondelle.web4j.action.ActionTemplateShowAndApply;
004    import hirondelle.web4j.action.ResponsePage;
005    import hirondelle.web4j.model.AppException;
006    import hirondelle.web4j.model.ModelCtorException;
007    import hirondelle.web4j.model.ModelFromRequest;
008    import hirondelle.web4j.request.RequestParameter;
009    import hirondelle.web4j.request.RequestParser;
010    
011    /**
012    * Allow user to override settings in <tt>web.xml</tt> for {@link LogInfo}. 
013    */
014    public final class LogInfoAction extends ActionTemplateShowAndApply {
015    
016      public LogInfoAction(RequestParser aRequestParser){
017        super(FORWARD, REDIRECT, aRequestParser);
018      }
019      
020      public static final RequestParameter PROJECT_NAME = RequestParameter.withLengthCheck("ProjectName");  
021      public static final RequestParameter APP_LOGGING_DIR = RequestParameter.withLengthCheck("AppLoggingDirectory");  
022      public static final RequestParameter SERVER_LOGGING_DIR = RequestParameter.withLengthCheck("ServerLoggingDirectory");  
023      public static final RequestParameter SERVER_LOG_FILE_STARTS_WITH = RequestParameter.withLengthCheck("ServerLogFileStartsWith");  
024      
025      /** Show a form with current settings. */
026      @Override protected void show() throws AppException {
027        LogInfoDAO dao  = new LogInfoDAO(getRequestParser().getRequest());
028        addToRequest(ITEM_FOR_EDIT, dao.fetch());
029      }
030      
031      /** Validate changes to current settings.  */
032      @Override protected void validateUserInput() throws AppException {
033        ModelFromRequest builder = new ModelFromRequest(getRequestParser());
034        try {
035          fLogInfo = builder.build(LogInfo.class, PROJECT_NAME, APP_LOGGING_DIR, SERVER_LOGGING_DIR, SERVER_LOG_FILE_STARTS_WITH);
036        }
037        catch (ModelCtorException ex) {
038          addError(ex);
039        }
040      }
041      
042      /** Save the changes to current settings. */
043      @Override protected void apply() throws AppException {
044        LogInfoDAO dao  = new LogInfoDAO(getRequestParser().getRequest());
045        dao.save(fLogInfo);
046      }
047      
048      // PRIVATE //
049      private LogInfo fLogInfo;
050      private static final ResponsePage FORWARD = new ResponsePage("Logging Directories", "view.jsp", LogInfoAction.class);
051      private static final ResponsePage REDIRECT = new ResponsePage("LogInfoAction.do?Operation=Show");
052    }