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 }