Hi Deng,

- shouldn't the validation be in a validate method, overriding the one in the base class instead of in the execute action? - the HTML shouldn't have had to be changed: the ww: tags introduce table elements already. Can this please be put back?

Thanks,
Brett

On 12/09/2006, at 6:12 PM, [EMAIL PROTECTED] wrote:

Author: oching
Date: Tue Sep 12 01:12:25 2006
New Revision: 442513

URL: http://svn.apache.org/viewvc?view=rev&rev=442513
Log:
Updated cron expression editor (configure.jsp). Added validation for cron expression.

Modified:
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/ maven/archiva/web/action/admin/ConfigureAction.java maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/ admin/configure.jsp

Modified: maven/archiva/trunk/archiva-webapp/src/main/java/org/ apache/maven/archiva/web/action/admin/ConfigureAction.java URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva- webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ ConfigureAction.java?view=diff&rev=442513&r1=442512&r2=442513 ====================================================================== ======== --- maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/ maven/archiva/web/action/admin/ConfigureAction.java (original) +++ maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/ maven/archiva/web/action/admin/ConfigureAction.java Tue Sep 12 01:12:25 2006
@@ -26,6 +26,7 @@
 import org.apache.maven.archiva.indexer.RepositoryIndexException;
import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import org.codehaus.plexus.scheduler.CronExpressionValidator;

 import java.io.File;
 import java.io.IOException;
@@ -49,6 +50,23 @@
      */
     private Configuration configuration;

+    private CronExpressionValidator cronValidator;
+
+    private String second = "0";
+
+    private String minute = "0";
+
+    private String hour = "*";
+
+    private String dayOfMonth = "*";
+
+    private String month = "*";
+
+    private String dayOfWeek = "?";
+
+    private String year;
+
+
     public String execute()
throws IOException, RepositoryIndexException, RepositoryIndexSearchException, ConfigurationStoreException,
         InvalidConfigurationException, ConfigurationChangeException
@@ -56,6 +74,19 @@
// TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded // TODO: if this is changed, do we move the index or recreate it?

+ String cronEx = ( second + " " + minute + " " + hour + " " + dayOfMonth + " " + month +
+            " " + dayOfWeek + " " + year ).trim();
+
+        //validate cron expression
+        cronValidator = new CronExpressionValidator();
+        if( !cronValidator.validate( cronEx ) )
+        {
+            addActionError( "Invalid Cron Expression" );
+            return ERROR;
+        }
+
+        configuration.setIndexerCronExpression( cronEx );
+
         // Normalize the path
         File file = new File( configuration.getIndexPath() );
         configuration.setIndexPath( file.getCanonicalPath() );
@@ -79,6 +110,24 @@

     public String input()
     {
+ String[] cronEx = configuration.getIndexerCronExpression ().split( " " );
+        int i = 0;
+
+        while ( i < cronEx.length )
+        {
+            switch( i )
+            {
+                case 0 : second = cronEx[i]; break;
+                case 1 : minute = cronEx[i]; break;
+                case 2 : hour = cronEx[i]; break;
+                case 3 : dayOfMonth = cronEx[i]; break;
+                case 4 : month = cronEx[i]; break;
+                case 5 : dayOfWeek = cronEx[i]; break;
+                case 6 : year = cronEx[i]; break;
+            }
+            i++;
+        }
+
         return INPUT;
     }

@@ -92,4 +141,74 @@
     {
configuration = configurationStore.getConfigurationFromStore();
     }
-}
\ No newline at end of file
+
+    public String getSecond()
+    {
+        return second;
+    }
+
+    public void setSecond( String second )
+    {
+        this.second = second;
+    }
+
+    public String getMinute()
+    {
+        return minute;
+    }
+
+    public void setMinute( String minute )
+    {
+        this.minute = minute;
+    }
+
+    public String getHour()
+    {
+        return hour;
+    }
+
+    public void setHour( String hour )
+    {
+        this.hour = hour;
+    }
+
+    public String getDayOfMonth()
+    {
+        return dayOfMonth;
+    }
+
+    public void setDayOfMonth( String dayOfMonth )
+    {
+        this.dayOfMonth = dayOfMonth;
+    }
+
+    public String getYear()
+    {
+        return year;
+    }
+
+    public void setYear( String year )
+    {
+        this.year = year;
+    }
+
+    public String getMonth()
+    {
+        return month;
+    }
+
+    public void setMonth( String month )
+    {
+        this.month = month;
+    }
+
+    public String getDayOfWeek()
+    {
+        return dayOfWeek;
+    }
+
+    public void setDayOfWeek( String dayOfWeek )
+    {
+        this.dayOfWeek = dayOfWeek;
+    }
+}

Modified: maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB- INF/jsp/admin/configure.jsp URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva- webapp/src/main/webapp/WEB-INF/jsp/admin/configure.jsp? view=diff&rev=442513&r1=442512&r2=442513 ====================================================================== ======== --- maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/ admin/configure.jsp (original) +++ maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/ admin/configure.jsp Tue Sep 12 01:12:25 2006
@@ -29,13 +29,90 @@
 <div id="contentArea">
   <ww:actionmessage/>
<ww:form method="post" action="saveConfiguration" namespace="/ admin" validate="true"> - <ww:textfield name="indexPath" label="Index Directory" size="100" required="true"/> - <ww:textfield name="indexerCronExpression" label="Indexing Schedule"/>
-    <ww:hidden name="proxy.protocol" value="http"/>
-    <ww:textfield name="proxy.host" label="HTTP Proxy Host"/>
-    <ww:textfield name="proxy.port" label="HTTP Proxy Port"/>
-    <ww:textfield name="proxy.username" label="HTTP Proxy Username"/>
-    <ww:password name="proxy.password" label="HTTP Proxy Password"/>
+
+    <div>
+    <table>
+        <tbody>
+          <tr>
+ <th><font size="2"><ww:label theme="simple" value="Indexing Directory*:"/></font></th> + <td><ww:textfield name="indexPath" theme="simple" size="140" required="true"/></td>
+          </tr>
+          <tr>
+ <th><font size="2"><ww:label theme="simple" value="Indexing Schedule:"/></font></th>
+            <td>
+              <table>
+                <tr>
+                  <th><ww:label theme="simple" value="Second:"/></th>
+ <td><ww:textfield name="second" theme="simple" size="2"/></td>
+
+                  <th><ww:label theme="simple" value="Minute:"/></th>
+ <td><ww:textfield name="minute" theme="simple" size="2"/></td>
+
+                  <th><ww:label theme="simple" value="Hour:"/></th>
+ <td><ww:textfield name="hour" theme="simple" size="2"/></td>
+
+ <th><ww:label theme="simple" value="Day of Month:"/></th> + <td><ww:textfield name="dayOfMonth" theme="simple" size="2"/></td>
+
+                  <th><ww:label theme="simple" value="Month:"/></th>
+ <td><ww:textfield name="month" theme="simple" size="2"/></td>
+
+ <th><ww:label theme="simple" value="Day of Week:"/></th> + <td><ww:textfield name="dayOfWeek" theme="simple" size="2"/></td>
+
+ <th><ww:label theme="simple" value="Year [optional]:"/></th> + <td><ww:textfield name="year" theme="simple" size="4"/></td>
+                </tr>
+              </table>
+            </td>
+          </tr>
+        <ww:hidden name="proxy.protocol" value="http"/>
+        <tr>
+ <th><font size="2"><ww:label theme="simple" value="HTTP Proxy Host:"/></font></th>
+            <td><ww:textfield name="proxy.host" theme="simple"/></td>
+        </tr>
+        <tr>
+ <th><font size="2"><ww:label theme="simple" value="HTTP Proxy Port:"/></font></th>
+            <td><ww:textfield name="proxy.port" theme="simple"/></td>
+        </tr>
+        <tr>
+ <th><font size="2"><ww:label theme="simple" value="HTTP Proxy Username:"/></font></th> + <td><ww:textfield name="proxy.username" theme="simple"/ ></td>
+        </tr>
+        <tr>
+ <th><font size="2"><ww:label theme="simple" value="HTTP Proxy Password:"/></font></th> + <td><ww:textfield name="proxy.password" theme="simple"/ ></td>
+        </tr>
+        </tbody>
+    </table>
+    </div>
+
+    <div>
+ <p><i>For valid cron expression values for the Indexing Schedule, see <ww:a href="http://www.opensymphony.com/quartz/api/ org/quartz/CronExpression.html">here</ww:a></i></p>
+    </div>
+    <div>
+      <table>
+        <tr>
+          <b>Indexing Schedule Keys:</b>
+        </tr>
+        <tr>
+          <th>*</th>
+          <td>every</td>
+        </tr>
+        <tr>
+          <th>?</th>
+          <td>any</td>
+        </tr>
+        <tr>
+          <th>-</th>
+          <td>ranges</td>
+        </tr>
+        <tr>
+          <th>/</th>
+          <td>increments</td>
+        </tr>
+      </table>
+    </div>
     <ww:submit value="Save Configuration"/>
   </ww:form>


Reply via email to