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>