You now have the validation in there twice - it should be removed from execute() shouldn't it?

I think I'd construct the cron expression using a method as needed rather than sticking it in a field, too.

What do you think?

On 13/09/2006, at 8:11 PM, [EMAIL PROTECTED] wrote:

Author: oching
Date: Wed Sep 13 03:11:04 2006
New Revision: 442925

URL: http://svn.apache.org/viewvc?view=rev&rev=442925
Log:
Revised the validation for cron expression. Also revised the configure.jsp page (for the cron editor) -- removed the <table> tags.

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=442925&r1=442924&r2=442925 ====================================================================== ======== --- 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 Wed Sep 13 03:11:04 2006
@@ -18,6 +18,7 @@

 import com.opensymphony.xwork.ModelDriven;
 import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork.Validateable;
 import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.ConfigurationChangeException;
 import org.apache.maven.archiva.configuration.ConfigurationStore;
@@ -38,7 +39,7 @@
  */
 public class ConfigureAction
     extends PlexusActionSupport
-    implements ModelDriven, Preparable
+    implements ModelDriven, Preparable, Validateable
 {
     /**
      * @plexus.requirement
@@ -66,6 +67,21 @@

     private String year;

+    private String cronEx = "";
+
+    public void validate()
+    {
+ cronEx = ( second + " " + minute + " " + hour + " " + dayOfMonth + " " + month +
+                    " " + dayOfWeek + " " + year ).trim();
+
+        //validate cron expression
+        cronValidator = new CronExpressionValidator();
+
+        if( !cronValidator.validate( cronEx ) )
+        {
+            addActionError( "Invalid Cron Expression" );
+        }
+    }

     public String execute()
throws IOException, RepositoryIndexException, RepositoryIndexSearchException, ConfigurationStoreException,

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=442925&r1=442924&r2=442925 ====================================================================== ======== --- 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 Wed Sep 13 03:11:04 2006
@@ -26,95 +26,47 @@

 <h1>Configuration</h1>

+<div class="errors">
+  <ww:actionerror />
+</div>
+
 <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:label value="Indexing Schedule" labelposition="top"/>
+      <ww:div>
+        <ww:textfield name="second" label="Second" size="2"/>
+ <ww:textfield name="minute" label="Minute" labelposition="left" size="2"/>
+        <ww:textfield name="hour" label="Hour" size="2"/>
+ <ww:textfield name="dayOfMonth" label="Day Of Month" size="2"/>
+        <ww:textfield name="month" label="Month" size="2"/>
+        <ww:textfield name="dayOfWeek" label="Day Of Week" size="2"/>
+        <ww:textfield name="year" label="Year" size="4"/>
+      </ww:div>
+
+    <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:div>
+      <ww:label value="Indexing Schedule Keys:" labelposition="top"/>
+      <ww:label value="* = every" labelposition="top"/>
+      <ww:label value="? = any" labelposition="top"/>
+      <ww:label value="- = ranges" labelposition="top"/>
+      <ww:label value="/ = increments" labelposition="top"/>
+    </ww:div>
   </ww:form>
+
+  <ww: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>
+  </ww:div>

   <script type="text/javascript">
     document.getElementById("saveConfiguration_indexPath").focus();

Reply via email to