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