continuum-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From eveni...@apache.org
Subject svn commit: r406895 [5/7] - in /maven/continuum/trunk: ./ continuum-api/src/main/java/org/apache/maven/continuum/ continuum-api/src/main/java/org/apache/maven/continuum/configuration/ continuum-api/src/main/java/org/apache/maven/continuum/execution/ co...
Date Tue, 16 May 2006 10:27:16 GMT
Added: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/servlet/RepositoryBrowseServlet.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/servlet/RepositoryBrowseServlet.java?rev=406895&view=auto
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/servlet/RepositoryBrowseServlet.java (added)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/servlet/RepositoryBrowseServlet.java Tue May 16 03:26:59 2006
@@ -0,0 +1,201 @@
+package org.apache.maven.continuum.web.servlet;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.continuum.configuration.ConfigurationService;
+import org.apache.maven.continuum.utils.PlexusContainerManager;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class RepositoryBrowseServlet
+    extends HttpServlet
+{
+    private ConfigurationService configuration;
+
+    public void init( ServletConfig servletConfig )
+        throws ServletException
+    {
+        super.init( servletConfig );
+
+        PlexusContainer container = PlexusContainerManager.getInstance().getContainer();
+
+        try
+        {
+            configuration = (ConfigurationService) container.lookup( ConfigurationService.ROLE );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ServletException( "Unable to get configuration service", e );
+        }
+    }
+
+    protected void doGet( HttpServletRequest req, HttpServletResponse res )
+        throws ServletException, IOException
+    {
+        File f = getFile( req );
+
+        if ( f.exists() )
+        {
+            doDownload( res, f );
+        }
+        else
+        {
+            res.sendError( HttpServletResponse.SC_NOT_FOUND );
+        }
+    }
+
+    private File getFile( HttpServletRequest req )
+    {
+        String path = "";
+
+        if ( StringUtils.isNotEmpty( req.getPathInfo() ) )
+        {
+            path = req.getPathInfo().substring( 1 );
+        }
+
+        //Clean url, so url like ../../../../a_file and /path/to_file like /etc/passwd won't be allow
+        String fileName = cleanUrl( path );
+
+        if ( fileName.indexOf( ".." ) >= 0 || fileName.startsWith( "/" ) )
+        {
+            throw new IllegalArgumentException( "file " + fileName + " isn't allowed." );
+        }
+
+        return new File( configuration.getDeploymentRepositoryDirectory(), fileName );
+    }
+
+    protected long getLastModified( HttpServletRequest req )
+    {
+        File f = getFile( req );
+
+        long mod;
+        if ( f.exists() )
+        {
+            mod = f.lastModified();
+        }
+        else
+        {
+            mod = super.getLastModified( req );
+        }
+        return mod;
+    }
+
+    public String getServletInfo()
+    {
+        return this.getClass().getName() + " by Continuum Team";
+    }
+
+    private void doDownload( HttpServletResponse response, File file )
+        throws IOException
+    {
+        if ( !file.isFile() )
+        {
+            response.sendError( HttpServletResponse.SC_FORBIDDEN );
+        }
+        else
+        {
+            ServletOutputStream output = response.getOutputStream();
+
+            ServletContext context = getServletConfig().getServletContext();
+
+            String mimetype = context.getMimeType( file.getName() );
+
+            if ( mimetype == null )
+            {
+                mimetype = "application/octet-stream";
+            }
+
+            response.setContentType( mimetype );
+
+            if ( !mimetype.startsWith( "text/" ) )
+            {
+                response.setHeader( "Content-Disposition", "attachement; filename=\"" + file.getName() + "\"" );
+            }
+
+            IOUtil.copy( new FileInputStream( file ), output );
+        }
+    }
+
+    private String cleanUrl( String url )
+    {
+        if ( url == null )
+        {
+            throw new NullPointerException( "The url cannot be null." );
+        }
+
+        String pathSeparator = "";
+
+        int indexOfDoubleDot = -1;
+
+        // Clean Unix path
+        if ( url.indexOf( "../" ) > 1 )
+        {
+            pathSeparator = "/";
+
+            indexOfDoubleDot = url.indexOf( "../" );
+        }
+
+        // Clean windows path
+        if ( url.indexOf( "..\\" ) > 1 )
+        {
+            pathSeparator = "\\";
+
+            indexOfDoubleDot = url.indexOf( "..\\" );
+        }
+
+        String newUrl = url;
+        if ( indexOfDoubleDot > 1 )
+        {
+            int startOfTextToRemove = url.substring( 0, indexOfDoubleDot - 1 ).lastIndexOf( pathSeparator );
+
+            String beginUrl = "";
+            if ( startOfTextToRemove >= 0 )
+            {
+                beginUrl = url.substring( 0, startOfTextToRemove );
+            }
+
+            String endUrl = url.substring( indexOfDoubleDot + 3 );
+
+            newUrl = beginUrl + pathSeparator + endUrl;
+
+            // Check if we have other double dot
+            if ( newUrl.indexOf( "../" ) > 1 || newUrl.indexOf( "..\\" ) > 1 )
+            {
+                newUrl = cleanUrl( newUrl );
+            }
+        }
+
+        return newUrl;
+    }
+}

Propchange: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/servlet/RepositoryBrowseServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/servlet/RepositoryBrowseServlet.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumStateContentGenerator.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumStateContentGenerator.java?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumStateContentGenerator.java (original)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumStateContentGenerator.java Tue May 16 03:26:59 2006
@@ -21,6 +21,8 @@
 import org.apache.maven.continuum.project.ContinuumProjectState;
 import org.codehaus.plexus.formica.web.ContentGenerator;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.summit.pull.RequestTool;
+import org.codehaus.plexus.summit.rundata.RunData;
 
 /**
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
@@ -28,8 +30,10 @@
  */
 public class ContinuumStateContentGenerator
     extends AbstractLogEnabled
-    implements ContentGenerator
+    implements ContentGenerator, RequestTool
 {
+    private String contextPath;
+
     public String generate( Object item )
     {
         int state;
@@ -42,36 +46,43 @@
         else
         {
             BuildResult buildResult = (BuildResult) item;
+
             state = buildResult.getState();
         }
 
-        if ( state == ContinuumProjectState.NEW )
+        if ( state == ContinuumProjectState.NEW || state == ContinuumProjectState.CHECKEDOUT )
         {
             return "New";
         }
         else if ( state == ContinuumProjectState.OK )
         {
-            return "<img src=\"/continuum/images/icon_success_sml.gif\" alt=\"Success\" title=\"Success\" border=\"0\" />";
+            return "<img src=\"" + contextPath +
+                "/images/icon_success_sml.gif\" alt=\"Success\" title=\"Success\" border=\"0\" />";
         }
         else if ( state == ContinuumProjectState.FAILED )
         {
-            return "<img src=\"/continuum/images/icon_warning_sml.gif\" alt=\"Failed\" title=\"Failed\" border=\"0\" />";
+            return "<img src=\"" + contextPath +
+                "/images/icon_warning_sml.gif\" alt=\"Failed\" title=\"Failed\" border=\"0\" />";
         }
         else if ( state == ContinuumProjectState.ERROR )
         {
-            return "<img src=\"/continuum/images/icon_error_sml.gif\" alt=\"Error\" title=\"Error\" border=\"0\" />";
+            return "<img src=\"" + contextPath +
+                "/images/icon_error_sml.gif\" alt=\"Error\" title=\"Error\" border=\"0\" />";
         }
         else if ( state == ContinuumProjectState.BUILDING )
         {
-            return "Building";
+            return "<img src=\"" + contextPath +
+                "/images/building.gif\" alt=\"Building\" title=\"Building\" border=\"0\">";
         }
         else if ( state == ContinuumProjectState.UPDATING )
         {
-            return "Updating";
+            return "<img src=\"" + contextPath +
+                "/images/checkingout.gif\" alt=\"Checking Out sources\" title=\"Checking Out sources\" border=\"0\">";
         }
         else if ( state == ContinuumProjectState.CHECKING_OUT )
         {
-            return "Checking Out";
+            return "<img src=\"" + contextPath +
+                "/images/checkingout.gif\" alt=\"Updating sources\" title=\"Updating sources\" border=\"0\">";
         }
         else
         {
@@ -79,5 +90,15 @@
 
             return "Unknown";
         }
+    }
+
+    public void setRunData( RunData data )
+    {
+        contextPath = data.getContextPath();
+    }
+
+    public void refresh()
+    {
+        // empty
     }
 }

Modified: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumTriggerContentGenerator.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumTriggerContentGenerator.java?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumTriggerContentGenerator.java (original)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/ContinuumTriggerContentGenerator.java Tue May 16 03:26:59 2006
@@ -29,15 +29,15 @@
     extends AbstractLogEnabled
     implements ContentGenerator
 {
-
     public String generate( Object item )
     {
         int trigger;
 
         BuildResult result = (BuildResult) item;
+
         trigger = result.getTrigger();
 
-        if ( trigger == ContinuumProjectState.TRIGGER_UNKNOWN )
+        if ( trigger == ContinuumProjectState.TRIGGER_SCHEDULED )
         {
             return "Scheduled";
         }

Modified: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/DateTool.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/DateTool.java?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/DateTool.java (original)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/DateTool.java Tue May 16 03:26:59 2006
@@ -19,8 +19,8 @@
 import java.lang.reflect.Field;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
 
@@ -39,10 +39,10 @@
  *  $date.full_date               -> Sunday, October 19, 2003
  *  $date.get('default','short')  -> Oct 19, 2003 9:54 PM
  *  $date.get('yyyy-M-d H:m:s')   -> 2003-10-19 21:54:50
- * 
+ * <p/>
  *  $myDate                        -> Tue Oct 07 03:14:50 PDT 2003
- *  $date.format('medium',$myDate) -> Oct 7, 2003 3:14:50 AM 
- *
+ *  $date.format('medium',$myDate) -> Oct 7, 2003 3:14:50 AM
+ * <p/>
  * Example toolbox.xml config (if you want to use this with VelocityView):
  * &lt;tool&gt;
  *   &lt;key&gt;date&lt;/key&gt;
@@ -50,21 +50,21 @@
  *   &lt;class&gt;org.apache.velocity.tools.generic.DateTool&lt;/class&gt;
  * &lt;/tool&gt;
  * </pre></p>
- *
+ * <p/>
  * <p>This tool is entirely threadsafe, and has no instance members.
  * It may be used in any scope (request, session, or application).
- * As such, the methods are highly interconnected, and overriding 
- * key methods provides an easy way to create subclasses that use 
+ * As such, the methods are highly interconnected, and overriding
+ * key methods provides an easy way to create subclasses that use
  * a non-default format, calendar, locale, or timezone.</p>
  *
  * @author <a href="mailto:nathan@esha.com">Nathan Bubna</a>
- * @since VelocityTools 1.0
  * @version $Revision$ $Date$
+ * @since VelocityTools 1.0
  */
 public class DateTool
 {
-    /** 
-     * The default format to be used when none is specified. 
+    /**
+     * The default format to be used when none is specified.
      *
      * @since VelocityTools 1.1
      */
@@ -78,7 +78,6 @@
         // do nothing
     }
 
-
     // ------------------------- system date access ------------------
 
     /**
@@ -98,7 +97,6 @@
         return Calendar.getInstance();
     }
 
-
     // ------------------------- default parameter access ----------------
 
     /**
@@ -141,31 +139,31 @@
      * Returns a {@link Calendar} instance created using the timezone and
      * locale returned by getTimeZone() and getLocale().  This allows subclasses
      * to easily override the default locale and timezone used by this tool.
-     *
+     * <p/>
      * <p>Sub-classes may override this method to return a Calendar instance
      * not based on the system date.
-     * Doing so will also cause the getDate(), get(String), get(String,String), 
-     * and toString() methods to return dates equivalent to the Calendar 
-     * returned by this method, because those methods return values derived 
+     * Doing so will also cause the getDate(), get(String), get(String,String),
+     * and toString() methods to return dates equivalent to the Calendar
+     * returned by this method, because those methods return values derived
      * from the result of this method.</p>
      *
-     * @return a {@link Calendar} instance created using the results of 
+     * @return a {@link Calendar} instance created using the results of
      *         {@link #getTimeZone()} and {@link #getLocale()}.
      * @see Calendar#getInstance(TimeZone zone, Locale aLocale)
      */
     public Calendar getCalendar()
     {
-        return Calendar.getInstance(getTimeZone(), getLocale());
+        return Calendar.getInstance( getTimeZone(), getLocale() );
     }
 
     /**
      * Return the pattern or style to be used for formatting dates when none
-     * is specified. This implementation gives a 'default' date-time format. 
+     * is specified. This implementation gives a 'default' date-time format.
      * Subclasses may override this to provide a different default format.
-     *
+     * <p/>
      * <p>NOTE: At some point in the future it may be feasible to configure
      * this value via the toolbox definition, but at present, it is not possible
-     * to specify custom tool configurations there.  For now you should just 
+     * to specify custom tool configurations there.  For now you should just
      * override this in a subclass to have a different default.</p>
      *
      * @since VelocityTools 1.1
@@ -175,7 +173,6 @@
         return DEFAULT_FORMAT;
     }
 
-
     // ------------------------- date value access ---------------------------
 
     /**
@@ -185,7 +182,7 @@
      */
     public Integer getYear()
     {
-        return getYear(getCalendar());
+        return getYear( getCalendar() );
     }
 
     /**
@@ -193,9 +190,9 @@
      *
      * @since VelocityTools 1.2
      */
-    public Integer getYear(Object date)
+    public Integer getYear( Object date )
     {
-        return getValue(Calendar.YEAR, date);
+        return getValue( Calendar.YEAR, date );
     }
 
     /**
@@ -205,7 +202,7 @@
      */
     public Integer getMonth()
     {
-        return getMonth(getCalendar());
+        return getMonth( getCalendar() );
     }
 
     /**
@@ -213,17 +210,17 @@
      *
      * @since VelocityTools 1.2
      */
-    public Integer getMonth(Object date)
+    public Integer getMonth( Object date )
     {
-        return getValue(Calendar.MONTH, date);
+        return getValue( Calendar.MONTH, date );
     }
 
     /**
-     * Returns the day (of the month) value of the date 
+     * Returns the day (of the month) value of the date
      * returned by {@link #getCalendar()}.
      * <br><br>
      * NOTE: Unlike java.util.Date, this returns the day of the month.
-     * It is equivalent to Date.getDate() and 
+     * It is equivalent to Date.getDate() and
      * Calendar.get(Calendar.DAY_OF_MONTH).  We could not call this method
      * getDate() because that already exists in this class with a different
      * function.
@@ -232,34 +229,34 @@
      */
     public Integer getDay()
     {
-        return getDay(getCalendar());
+        return getDay( getCalendar() );
     }
 
     /**
      * Returns the day (of the month) value for the specified date.
      * <br><br>
      * NOTE: Unlike java.util.Date, this returns the day of the month.
-     * It is equivalent to Date.getDate() and 
+     * It is equivalent to Date.getDate() and
      * Calendar.get(Calendar.DAY_OF_MONTH).  We could not call this method
      * getDate() because that already exists in this class with a different
      * function.
      *
      * @since VelocityTools 1.2
      */
-    public Integer getDay(Object date)
+    public Integer getDay( Object date )
     {
-        return getValue(Calendar.DAY_OF_MONTH, date);
+        return getValue( Calendar.DAY_OF_MONTH, date );
     }
 
     /**
-     * Return the specified value of the date returned by 
+     * Return the specified value of the date returned by
      * {@link #getCalendar()} or null if the field is invalid.
      *
      * @since VelocityTools 1.2
      */
-    public Integer getValue(Object field)
+    public Integer getValue( Object field )
     {
-        return getValue(field, getCalendar());
+        return getValue( field, getCalendar() );
     }
 
     /**
@@ -268,33 +265,33 @@
      * an Integer or it may be the name of the field as a String.
      *
      * @param field the corresponding Integer value or String name of the desired value
-     * @param date the date/calendar from which the field value will be taken
+     * @param date  the date/calendar from which the field value will be taken
      * @since VelocityTools 1.2
      */
-    public Integer getValue(Object field, Object date)
+    public Integer getValue( Object field, Object date )
     {
-        if (field == null)
+        if ( field == null )
         {
             return null;
         }
 
         int fieldValue;
-        if (field instanceof Integer)
+        if ( field instanceof Integer )
         {
-            fieldValue = ((Integer)field).intValue();
+            fieldValue = ( (Integer) field ).intValue();
         }
         // all the public static field names are upper case
         String fstr = field.toString().toUpperCase();
         try
         {
-            Field clsf = Calendar.class.getField(fstr);
-            fieldValue = clsf.getInt(Calendar.getInstance());
+            Field clsf = Calendar.class.getField( fstr );
+            fieldValue = clsf.getInt( Calendar.getInstance() );
         }
-        catch (Exception e)
+        catch ( Exception e )
         {
             return null;
         }
-        return getValue(fieldValue, date);
+        return getValue( fieldValue, date );
     }
 
     /**
@@ -302,29 +299,28 @@
      * or null if the field or date is invalid.
      *
      * @param field the int for the desired field (e.g. Calendar.MONTH)
-     * @param date the date/calendar from which the field value will be taken
+     * @param date  the date/calendar from which the field value will be taken
      * @since VelocityTools 1.2
      */
-    public Integer getValue(int field, Object date)
+    public Integer getValue( int field, Object date )
     {
-        Calendar cal = toCalendar(date);
-        if (cal == null)
+        Calendar cal = toCalendar( date );
+        if ( cal == null )
         {
             return null;
         }
-        return new Integer(cal.get(field));
+        return new Integer( cal.get( field ) );
     }
 
-
     // ------------------------- formatting methods ---------------------------
 
     /**
      * Returns a formatted string representing the date returned by
-     * {@link #getDate()}.  In its default implementation, this method 
+     * {@link #getDate()}.  In its default implementation, this method
      * allows you to retrieve the current date in standard formats by
-     * simply doing things like <code>$date.medium</code> or 
+     * simply doing things like <code>$date.medium</code> or
      * <code>$date.full</code>.  If you want only the date or time portion
-     * you can specify that along with the standard formats. (e.g. 
+     * you can specify that along with the standard formats. (e.g.
      * <code>$date.medium_date</code> or <code>$date.short_time</code>)
      * More complex or custom formats can be retrieved
      * by using the full method syntax. (e.g. $date.get('E, MMMM d'))
@@ -335,9 +331,9 @@
      * @see #format(String format, Object obj, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public String get(String format)
+    public String get( String format )
     {
-        return format(format, getDate());
+        return format( format, getDate() );
     }
 
     /**
@@ -352,24 +348,24 @@
      * @see #format(String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public String get(String dateStyle, String timeStyle)
+    public String get( String dateStyle, String timeStyle )
     {
-        return format(dateStyle, timeStyle, getDate(), getLocale());
+        return format( dateStyle, timeStyle, getDate(), getLocale() );
     }
 
 
     /**
      * Converts the specified object to a date and formats it according to
      * the pattern or style returned by {@link #getFormat()}.
-     * 
+     *
      * @param obj the date object to be formatted
      * @return the specified date formatted as a string
      * @see #format(String format, Object obj, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public String format(Object obj)
+    public String format( Object obj )
     {
-        return format(getFormat(), obj);
+        return format( getFormat(), obj );
     }
 
     /**
@@ -378,14 +374,14 @@
      * returned by {@link #getLocale()}.
      *
      * @param format the formatting instructions
-     * @param obj the date object to be formatted
+     * @param obj    the date object to be formatted
      * @return a formatted string for this locale representing the specified
      *         date or <code>null</code> if the parameters are invalid
      * @see #format(String format, Object obj, Locale locale, TimeZone timezone)
      */
-    public String format(String format, Object obj)
+    public String format( String format, Object obj )
     {
-        return format(format, obj, getLocale());
+        return format( format, obj, getLocale() );
     }
 
     /**
@@ -394,32 +390,32 @@
      * {@link Locale}.
      *
      * @param format the formatting instructions
-     * @param obj the date object to be formatted
+     * @param obj    the date object to be formatted
      * @param locale the locale to be used when formatting
      * @return the given date as a formatted string
      * @see #format(String format, Object obj, Locale locale, TimeZone timezone)
      */
-    public String format(String format, Object obj, Locale locale)
+    public String format( String format, Object obj, Locale locale )
     {
-        return format(format, obj, locale, getTimeZone());
+        return format( format, obj, locale, getTimeZone() );
     }
 
     /**
      * Returns a formatted string representing the specified date,
      * {@link Locale}, and {@link TimeZone}.
-     *
-     * <p>
+     * <p/>
+     * <p/>
      * The specified format may be a standard style pattern ('full', 'long',
      * 'medium', 'short', or 'default').
      * </p>
-     * <p>
+     * <p/>
      * You may also specify that you want only the date or time portion be
      * appending '_date' or '_time' respectively to the standard style pattern.
      * (e.g. 'full_date' or 'long_time')
      * </p>
-     * <p>
-     * If the format fits neither of these patterns, then the output 
-     * will be formatted according to the symbols defined by 
+     * <p/>
+     * If the format fits neither of these patterns, then the output
+     * will be formatted according to the symbols defined by
      * {@link SimpleDateFormat}:
      * <pre>
      *   Symbol   Meaning                 Presentation        Example
@@ -444,34 +440,33 @@
      *   z        time zone               (Text)              Pacific Standard Time
      *   '        escape for text         (Delimiter)
      *   ''       single quote            (Literal)           '
-     *
+     * <p/>
      *   Examples: "E, MMMM d" will result in "Tue, July 24"
      *             "EEE, M-d (H:m)" will result in "Tuesday, 7-24 (14:12)"
      * </pre>
      * </p>
-     * 
-     * @param format the custom or standard pattern to be used
-     * @param obj the date to format
-     * @param locale the {@link Locale} to format the date for
+     *
+     * @param format   the custom or standard pattern to be used
+     * @param obj      the date to format
+     * @param locale   the {@link Locale} to format the date for
      * @param timezone the {@link TimeZone} to be used when formatting
      * @return a formatted string representing the specified date or
      *         <code>null</code> if the parameters are invalid
      * @since VelocityTools 1.1
      */
-    public String format(String format, Object obj, 
-                         Locale locale, TimeZone timezone)
+    public String format( String format, Object obj, Locale locale, TimeZone timezone )
     {
         if ( obj == null )
         {
             return null;
         }
-        Date date = toDate(obj);
-        DateFormat df = getDateFormat(format, locale, timezone);
-        if (date == null || df == null)
+        Date date = toDate( obj );
+        DateFormat df = getDateFormat( format, locale, timezone );
+        if ( date == null || df == null )
         {
             return null;
         }
-        return df.format(date);
+        return df.format( date );
     }
 
 
@@ -481,14 +476,14 @@
      *
      * @param dateStyle the style pattern for the date
      * @param timeStyle the style pattern for the time
-     * @param obj the date to be formatted
-     * @return a formatted representation of the given date 
+     * @param obj       the date to be formatted
+     * @return a formatted representation of the given date
      * @see #format(String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public String format(String dateStyle, String timeStyle, Object obj)
+    public String format( String dateStyle, String timeStyle, Object obj )
     {
-        return format(dateStyle, timeStyle, obj, getLocale());
+        return format( dateStyle, timeStyle, obj, getLocale() );
     }
 
     /**
@@ -497,16 +492,15 @@
      *
      * @param dateStyle the style pattern for the date
      * @param timeStyle the style pattern for the time
-     * @param obj the date to be formatted
-     * @param locale the {@link Locale} to be used for formatting the date
-     * @return a formatted representation of the given date 
+     * @param obj       the date to be formatted
+     * @param locale    the {@link Locale} to be used for formatting the date
+     * @return a formatted representation of the given date
      * @see #format(String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public String format(String dateStyle, String timeStyle,
-                         Object obj, Locale locale)
+    public String format( String dateStyle, String timeStyle, Object obj, Locale locale )
     {
-        return format(dateStyle, timeStyle, obj, locale, getTimeZone());
+        return format( dateStyle, timeStyle, obj, locale, getTimeZone() );
     }
 
     /**
@@ -515,82 +509,79 @@
      *
      * @param dateStyle the style pattern for the date
      * @param timeStyle the style pattern for the time
-     * @param obj the date to be formatted
-     * @param locale the {@link Locale} to be used for formatting the date
-     * @param timezone the {@link TimeZone} the date should be formatted for
-     * @return a formatted representation of the given date 
+     * @param obj       the date to be formatted
+     * @param locale    the {@link Locale} to be used for formatting the date
+     * @param timezone  the {@link TimeZone} the date should be formatted for
+     * @return a formatted representation of the given date
      * @see java.text.DateFormat
      * @see #format(String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public String format(String dateStyle, String timeStyle,
-                         Object obj, Locale locale, TimeZone timezone)
+    public String format( String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone )
     {
-        Date date = toDate(obj);
-        DateFormat df = getDateFormat(dateStyle, timeStyle, locale, timezone);
-        if (date == null || df == null)
+        Date date = toDate( obj );
+        DateFormat df = getDateFormat( dateStyle, timeStyle, locale, timezone );
+        if ( date == null || df == null )
         {
             return null;
         }
-        return df.format(date);
+        return df.format( date );
     }
 
-
     // -------------------------- DateFormat creation methods --------------
 
     /**
      * Returns a {@link DateFormat} instance for the specified
      * format, {@link Locale}, and {@link TimeZone}.  If the format
      * specified is a standard style pattern, then a date-time instance
-     * will be returned with both the date and time styles set to the 
+     * will be returned with both the date and time styles set to the
      * specified style.  If it is a custom format, then a customized
      * {@link SimpleDateFormat} will be returned.
-     * 
-     * @param format the custom or standard formatting pattern to be used
-     * @param locale the {@link Locale} to be used
+     *
+     * @param format   the custom or standard formatting pattern to be used
+     * @param locale   the {@link Locale} to be used
      * @param timezone the {@link TimeZone} to be used
      * @return an instance of {@link DateFormat}
      * @see SimpleDateFormat
      * @see DateFormat
      * @since VelocityTools 1.1
      */
-    public DateFormat getDateFormat(String format, Locale locale, 
-                                    TimeZone timezone)
+    public DateFormat getDateFormat( String format, Locale locale, TimeZone timezone )
     {
-        if (format == null)
+        if ( format == null )
         {
             return null;
         }
 
         DateFormat df = null;
         // do they want a date instance
-        if (format.endsWith("_date"))
+        if ( format.endsWith( "_date" ) )
         {
-            String fmt = format.substring(0, format.length() - 5);
-            int style = getStyleAsInt(fmt);
-            df = getDateFormat(style, -1, locale, timezone);
+            String fmt = format.substring( 0, format.length() - 5 );
+            int style = getStyleAsInt( fmt );
+            df = getDateFormat( style, -1, locale, timezone );
         }
         // do they want a time instance?
-        else if (format.endsWith("_time"))
+        else if ( format.endsWith( "_time" ) )
         {
-            String fmt = format.substring(0, format.length() - 5);
-            int style = getStyleAsInt(fmt);
-            df = getDateFormat(-1, style, locale, timezone);
+            String fmt = format.substring( 0, format.length() - 5 );
+            int style = getStyleAsInt( fmt );
+            df = getDateFormat( -1, style, locale, timezone );
         }
         // ok, they either want a custom or date-time instance
         else
         {
-            int style = getStyleAsInt(format);
-            if (style < 0)
+            int style = getStyleAsInt( format );
+            if ( style < 0 )
             {
                 // we have a custom format
-                df = new SimpleDateFormat(format, locale);
-                df.setTimeZone(timezone);
+                df = new SimpleDateFormat( format, locale );
+                df.setTimeZone( timezone );
             }
             else
             {
                 // they want a date-time instance
-                df = getDateFormat(style, style, locale, timezone);
+                df = getDateFormat( style, style, locale, timezone );
             }
         }
         return df;
@@ -599,68 +590,65 @@
     /**
      * Returns a {@link DateFormat} instance for the specified
      * date style, time style, {@link Locale}, and {@link TimeZone}.
-     * 
-     * @param dateStyle the date style 
-     * @param timeStyle the time style 
-     * @param locale the {@link Locale} to be used
-     * @param timezone the {@link TimeZone} to be used
+     *
+     * @param dateStyle the date style
+     * @param timeStyle the time style
+     * @param locale    the {@link Locale} to be used
+     * @param timezone  the {@link TimeZone} to be used
      * @return an instance of {@link DateFormat}
      * @see #getDateFormat(int timeStyle, int dateStyle, Locale locale, TimeZone timezone)
      * @since VelocityTools 1.1
      */
-    public DateFormat getDateFormat(String dateStyle, String timeStyle,
-                                    Locale locale, TimeZone timezone)
+    public DateFormat getDateFormat( String dateStyle, String timeStyle, Locale locale, TimeZone timezone )
     {
-        int ds = getStyleAsInt(dateStyle);
-        int ts = getStyleAsInt(timeStyle);
-        return getDateFormat(ds, ts, locale, timezone);
+        int ds = getStyleAsInt( dateStyle );
+        int ts = getStyleAsInt( timeStyle );
+        return getDateFormat( ds, ts, locale, timezone );
     }
 
     /**
      * Returns a {@link DateFormat} instance for the specified
      * time style, date style, {@link Locale}, and {@link TimeZone}.
-     * 
+     *
      * @param dateStyle the date style (date will be ignored if this is
-     *        less than zero and the date style is not)
+     *                  less than zero and the date style is not)
      * @param timeStyle the time style (time will be ignored if this is
-     *        less than zero and the date style is not)
-     * @param locale the {@link Locale} to be used
-     * @param timezone the {@link TimeZone} to be used
+     *                  less than zero and the date style is not)
+     * @param locale    the {@link Locale} to be used
+     * @param timezone  the {@link TimeZone} to be used
      * @return an instance of {@link DateFormat} or <code>null</code>
      *         if an instance cannot be constructed with the given
      *         parameters
      * @since VelocityTools 1.1
      */
-    protected DateFormat getDateFormat(int dateStyle, int timeStyle, 
-                                       Locale locale, TimeZone timezone)
+    protected DateFormat getDateFormat( int dateStyle, int timeStyle, Locale locale, TimeZone timezone )
     {
         try
         {
             DateFormat df;
-            if (dateStyle < 0 && timeStyle < 0)
+            if ( dateStyle < 0 && timeStyle < 0 )
             {
                 // no style was specified, use default instance
                 df = DateFormat.getInstance();
             }
-            else if (timeStyle < 0)
+            else if ( timeStyle < 0 )
             {
                 // only a date style was specified
-                df = DateFormat.getDateInstance(dateStyle, locale);
+                df = DateFormat.getDateInstance( dateStyle, locale );
             }
-            else if (dateStyle < 0)
+            else if ( dateStyle < 0 )
             {
                 // only a time style was specified
-                df = DateFormat.getTimeInstance(timeStyle, locale);
+                df = DateFormat.getTimeInstance( timeStyle, locale );
             }
             else
             {
-                df = DateFormat.getDateTimeInstance(dateStyle, timeStyle, 
-                                                    locale);
+                df = DateFormat.getDateTimeInstance( dateStyle, timeStyle, locale );
             }
-            df.setTimeZone(timezone);
+            df.setTimeZone( timezone );
             return df;
         }
-        catch (Exception suppressed)
+        catch ( Exception suppressed )
         {
             // let it go...
             return null;
@@ -673,34 +661,35 @@
      * it will return the integer constant for that pattern.  If not, it
      * will return -1.
      *
-     * @see DateFormat
      * @param style the string to be checked
      * @return the int identifying the style pattern
+     * @see DateFormat
      * @since VelocityTools 1.1
      */
-    protected int getStyleAsInt(String style)
+    protected int getStyleAsInt( String style )
     {
         // avoid needlessly running through all the string comparisons
-        if (style == null || style.length() < 4 || style.length() > 7) {
+        if ( style == null || style.length() < 4 || style.length() > 7 )
+        {
             return -1;
         }
-        if (style.equalsIgnoreCase("full"))
+        if ( style.equalsIgnoreCase( "full" ) )
         {
             return DateFormat.FULL;
         }
-        if (style.equalsIgnoreCase("long"))
+        if ( style.equalsIgnoreCase( "long" ) )
         {
             return DateFormat.LONG;
         }
-        if (style.equalsIgnoreCase("medium"))
+        if ( style.equalsIgnoreCase( "medium" ) )
         {
             return DateFormat.MEDIUM;
         }
-        if (style.equalsIgnoreCase("short"))
+        if ( style.equalsIgnoreCase( "short" ) )
         {
             return DateFormat.SHORT;
         }
-        if (style.equalsIgnoreCase("default"))
+        if ( style.equalsIgnoreCase( "default" ) )
         {
             return DateFormat.DEFAULT;
         }
@@ -708,12 +697,11 @@
         return -1;
     }
 
-
     // ------------------------- date conversion methods ---------------
 
     /**
      * Converts an object to an instance of {@link Date} using the
-     * format returned by {@link #getFormat()},the {@link Locale} returned 
+     * format returned by {@link #getFormat()},the {@link Locale} returned
      * by {@link #getLocale()}, and the {@link TimeZone} returned by
      * {@link #getTimeZone()} if the object is not already an instance
      * of Date, Calendar, or Long.
@@ -722,27 +710,27 @@
      * @return the object as a {@link Date} or <code>null</code> if no
      *         conversion is possible
      */
-    public Date toDate(Object obj)
+    public Date toDate( Object obj )
     {
-        return toDate(getFormat(), obj, getLocale(), getTimeZone());
+        return toDate( getFormat(), obj, getLocale(), getTimeZone() );
     }
 
     /**
      * Converts an object to an instance of {@link Date} using the
-     * specified format,the {@link Locale} returned by 
+     * specified format,the {@link Locale} returned by
      * {@link #getLocale()}, and the {@link TimeZone} returned by
      * {@link #getTimeZone()} if the object is not already an instance
      * of Date, Calendar, or Long.
      *
      * @param format - the format the date is in
-     * @param obj - the date to convert
+     * @param obj    - the date to convert
      * @return the object as a {@link Date} or <code>null</code> if no
      *         conversion is possible
      * @see #toDate(String format, Object obj, Locale locale)
      */
-    public Date toDate(String format, Object obj)
+    public Date toDate( String format, Object obj )
     {
-        return toDate(format, obj, getLocale(), getTimeZone());
+        return toDate( format, obj, getLocale(), getTimeZone() );
     }
 
     /**
@@ -751,59 +739,63 @@
      * an instance of Date, Calendar, or Long.
      *
      * @param format - the format the date is in
-     * @param obj - the date to convert
+     * @param obj    - the date to convert
      * @param locale - the {@link Locale}
      * @return the object as a {@link Date} or <code>null</code> if no
      *         conversion is possible
      * @see SimpleDateFormat#parse
      */
-    public Date toDate(String format, Object obj, Locale locale)
+    public Date toDate( String format, Object obj, Locale locale )
     {
-        return toDate(format, obj, locale, getTimeZone());
+        return toDate( format, obj, locale, getTimeZone() );
     }
 
     /**
      * Converts an object to an instance of {@link Date} using the
-     * specified format, {@link Locale}, and {@link TimeZone} if the 
+     * specified format, {@link Locale}, and {@link TimeZone} if the
      * object is not already an instance of Date, Calendar, or Long.
      *
-     * @param format - the format the date is in
-     * @param obj - the date to convert
-     * @param locale - the {@link Locale}
+     * @param format   - the format the date is in
+     * @param obj      - the date to convert
+     * @param locale   - the {@link Locale}
      * @param timezone - the {@link TimeZone}
      * @return the object as a {@link Date} or <code>null</code> if no
      *         conversion is possible
      * @see #getDateFormat
      * @see SimpleDateFormat#parse
      */
-    public Date toDate(String format, Object obj, 
-                       Locale locale, TimeZone timezone)
+    public Date toDate( String format, Object obj, Locale locale, TimeZone timezone )
     {
-        if (obj == null)
+        if ( obj == null )
         {
             return null;
         }
-        if (obj instanceof Date)
+        if ( obj instanceof Date )
         {
-            return (Date)obj;
+            return (Date) obj;
         }
-        if (obj instanceof Calendar)
+        if ( obj instanceof Calendar )
         {
-            return ((Calendar)obj).getTime();
+            return ( (Calendar) obj ).getTime();
         }
-        if (obj instanceof Number) 
+        if ( obj instanceof Number )
         {
+            long value = ( (Number) obj ).longValue();
+            if ( value == 0 )
+            {
+                return null;
+            }
             Date d = new Date();
-            d.setTime(((Number)obj).longValue());
+            d.setTime( value );
             return d;
         }
         try
         {
             //try parsing w/a customized SimpleDateFormat
-            DateFormat parser = getDateFormat(format, locale, timezone);
-            return parser.parse(String.valueOf(obj));
+            DateFormat parser = getDateFormat( format, locale, timezone );
+            return parser.parse( String.valueOf( obj ) );
         }
-        catch (Exception e)
+        catch ( Exception e )
         {
             return null;
         }
@@ -817,47 +809,109 @@
      * @return the converted date
      * @see #toCalendar(Object obj, Locale locale)
      */
-    public Calendar toCalendar(Object obj)
+    public Calendar toCalendar( Object obj )
     {
-        return toCalendar(obj, getLocale());
+        return toCalendar( obj, getLocale() );
     }
 
     /**
      * Converts an object to an instance of {@link Calendar} using the
      * locale returned by {@link #getLocale()} if necessary.
      *
-     * @param obj the date to convert
+     * @param obj    the date to convert
      * @param locale the locale used
      * @return the converted date
      * @see #toDate(String format, Object obj, Locale locale)
      * @see Calendar
      */
-    public Calendar toCalendar(Object obj, Locale locale)
+    public Calendar toCalendar( Object obj, Locale locale )
     {
-        if (obj == null)
+        if ( obj == null )
         {
             return null;
         }
-        if (obj instanceof Calendar)
+        if ( obj instanceof Calendar )
         {
-            return (Calendar)obj;
+            return (Calendar) obj;
         }
         //try to get a date out of it
-        Date date = toDate(obj);
-        if (date == null)
+        Date date = toDate( obj );
+        if ( date == null )
         {
             return null;
         }
 
         //convert the date to a calendar
-        Calendar cal = Calendar.getInstance(locale);
-        cal.setTime(date);
+        Calendar cal = Calendar.getInstance( locale );
+        cal.setTime( date );
         // HACK: Force all fields to update. see link for explanation of this.
         //http://java.sun.com/j2se/1.4/docs/api/java/util/Calendar.html
         cal.getTime();
         return cal;
     }
 
+    public String getElapsedTime( Object startDate )
+    {
+        return getTimeDifference( startDate, getSystemDate() );
+    }
+
+    public String getTimeDifference( Object startDate, Object endDate )
+    {
+        Date start = toDate( startDate );
+        if ( start == null )
+        {
+            return "";
+        }
+
+        Date end = toDate( endDate );
+
+        if ( end == null )
+        {
+            end = getSystemDate();
+        }
+
+        int timeInSeconds = (int) ( ( end.getTime() - start.getTime() ) / 1000 );
+        int days, hours, minutes, seconds;
+        days = timeInSeconds / 86400;
+        timeInSeconds = timeInSeconds - ( days * 86400 );
+        hours = timeInSeconds / 3600;
+        timeInSeconds = timeInSeconds - ( hours * 3600 );
+        minutes = timeInSeconds / 60;
+        timeInSeconds = timeInSeconds - ( minutes * 60 );
+        seconds = timeInSeconds;
+
+        String elapsedTime = "";
+        if ( days > 0 )
+        {
+            elapsedTime = days + " d ";
+            elapsedTime += hours + " h ";
+            elapsedTime += minutes + " min ";
+            elapsedTime += seconds + " sec";
+        }
+        else
+        {
+            if ( hours > 0 )
+            {
+                elapsedTime = hours + " h ";
+                elapsedTime += minutes + " min ";
+                elapsedTime += seconds + " sec";
+            }
+            else
+            {
+                if ( minutes > 0 )
+                {
+                    elapsedTime = minutes + " min ";
+                    elapsedTime += seconds + " sec";
+                }
+                else
+                {
+                    elapsedTime = seconds + " sec";
+                }
+            }
+        }
+
+        return elapsedTime;
+    }
 
     // ------------------------- default toString() implementation ------------
 
@@ -868,7 +922,7 @@
      */
     public String toString()
     {
-        return format(getFormat(), getDate());
+        return format( getFormat(), getDate() );
     }
 
 

Added: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/RequestUtil.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/RequestUtil.java?rev=406895&view=auto
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/RequestUtil.java (added)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/RequestUtil.java Tue May 16 03:26:59 2006
@@ -0,0 +1,61 @@
+package org.apache.maven.continuum.web.tool;
+
+import org.codehaus.plexus.summit.pull.RequestTool;
+import org.codehaus.plexus.summit.rundata.RunData;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ * Copyright 2004-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class RequestUtil
+    implements RequestTool
+{
+    private String contextPath;
+
+    private HttpServletRequest request;
+
+    public String getParameter( String paramName )
+    {
+        return getRequest().getParameter( paramName );
+    }
+
+    public HttpServletRequest getRequest()
+    {
+        return request;
+    }
+
+    public String getContextPath()
+    {
+        return contextPath;
+    }
+
+    public void setRunData( RunData data )
+    {
+        contextPath = data.getContextPath();
+
+        request = data.getRequest();
+    }
+
+    public void refresh()
+    {
+        // empty
+    }
+}

Propchange: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/RequestUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/RequestUtil.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/WorkingCopyContentGenerator.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/WorkingCopyContentGenerator.java?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/WorkingCopyContentGenerator.java (original)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/tool/WorkingCopyContentGenerator.java Tue May 16 03:26:59 2006
@@ -17,6 +17,8 @@
  */
 
 import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.summit.pull.RequestTool;
+import org.codehaus.plexus.summit.rundata.RunData;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
@@ -29,7 +31,10 @@
  */
 public class WorkingCopyContentGenerator
     extends AbstractLogEnabled
+    implements RequestTool
 {
+    private String contextPath;
+
     private File basedir;
 
     public String generate( Object item, String baseUrl, File basedir )
@@ -40,7 +45,7 @@
 
         StringBuffer buf = new StringBuffer();
 
-        buf.append( "+&nbsp;<a href=\"" + baseUrl + "?userDirectory=/\">/</a><br />" );
+        buf.append( "+&nbsp;<a href=\"" ).append( baseUrl ).append( "?userDirectory=/\">/</a><br />" );
 
         print( directoryEntries, "&nbsp;&nbsp;", baseUrl, buf );
 
@@ -56,19 +61,21 @@
             print( obj, indent, baseUrl, buf );
         }
     }
+
     private void print( Object obj, String indent, String baseUrl, StringBuffer buf )
     {
         if ( obj instanceof File )
         {
-            File f = (File) obj;;
+            File f = (File) obj;
 
             if ( !f.isDirectory() )
             {
                 String fileName = f.getName();
 
-                if ( !".cvsignore".equals( fileName ) && !"vssver.scc".equals( fileName ) && !".DS_Store".equals( fileName ) )
+                if ( !".cvsignore".equals( fileName ) && !"vssver.scc".equals( fileName ) &&
+                    !".DS_Store".equals( fileName ) )
                 {
-                    String userDirectory = null;
+                    String userDirectory;
 
                     if ( f.getParentFile().getAbsolutePath().equals( basedir.getAbsolutePath() ) )
                     {
@@ -76,25 +83,31 @@
                     }
                     else
                     {
-                        userDirectory = f.getParentFile().getAbsolutePath().substring( basedir.getAbsolutePath().length() + 1 );
+                        userDirectory =
+                            f.getParentFile().getAbsolutePath().substring( basedir.getAbsolutePath().length() + 1 );
                     }
 
                     userDirectory = StringUtils.replace( userDirectory, "\\", "/" );
 
-                    buf.append( indent + "&nbsp;&nbsp;&nbsp;<a href=\"" + baseUrl + "?userDirectory=" + userDirectory + "&file=" + fileName + "\">" + fileName + "</a><br />" );
+                    buf.append( indent ).append( "&nbsp;&nbsp;&nbsp;<a target=\"blank\" href=\"" ).append(
+                        getFileUrl( userDirectory, fileName ) ).append( "\">" ).append( fileName ).append(
+                        "</a><br />" );
                 }
             }
             else
             {
                 String directoryName = f.getName();
 
-                if ( !"CVS".equals( directoryName ) && !".svn".equals( directoryName ) && !"SCCS".equals( directoryName ) )
+                if ( !"CVS".equals( directoryName ) && !".svn".equals( directoryName ) &&
+                    !"SCCS".equals( directoryName ) && !".bzr".equals( directoryName ) )
                 {
                     String userDirectory = f.getAbsolutePath().substring( basedir.getAbsolutePath().length() + 1 );
 
                     userDirectory = StringUtils.replace( userDirectory, "\\", "/" );
 
-                    buf.append( indent + "+&nbsp;<a href=\"" + baseUrl + "?userDirectory=" + userDirectory + "\">" + directoryName + "</a><br />" );
+                    buf.append( indent ).append( "+&nbsp;<a href=\"" ).append( baseUrl ).append(
+                        "?userDirectory=" ).append( userDirectory ).append( "\">" ).append( directoryName ).append(
+                        "</a><br />" );
                 }
             }
         }
@@ -102,5 +115,36 @@
         {
             print( (List) obj, indent + "&nbsp;&nbsp;", baseUrl, buf );
         }
+    }
+
+    private String getBrowseServletPath()
+    {
+        return contextPath + "/servlet/browse?file=";
+    }
+
+    private String getFileUrl( String directory, String fileName )
+    {
+        String filePath;
+
+        if ( StringUtils.isEmpty( directory ) || "/".equals( directory ) )
+        {
+            filePath = basedir.getName() + "/" + fileName;
+        }
+        else
+        {
+            filePath = basedir.getName() + "/" + directory + "/" + fileName;
+        }
+
+        return getBrowseServletPath() + filePath;
+    }
+
+    public void setRunData( RunData data )
+    {
+        contextPath = data.getContextPath();
+    }
+
+    public void refresh()
+    {
+        // empty
     }
 }

Modified: maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/validation/CronExpressionValidator.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/validation/CronExpressionValidator.java?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/validation/CronExpressionValidator.java (original)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/apache/maven/continuum/web/validation/CronExpressionValidator.java Tue May 16 03:26:59 2006
@@ -18,10 +18,6 @@
 
 import org.codehaus.plexus.formica.FormicaException;
 import org.codehaus.plexus.formica.validation.AbstractValidator;
-import org.codehaus.plexus.util.StringUtils;
-import org.quartz.CronTrigger;
-
-import java.text.ParseException;
 
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -33,28 +29,9 @@
     public boolean validate( String cronExpression )
         throws FormicaException
     {
-        try
-        {
-            String[] cronParams = StringUtils.split( cronExpression );
-            if ( cronParams.length < 6 || cronParams.length > 7 )
-            {
-                return false;
-            }
-
-            CronTrigger cronTrigger = new CronTrigger();
-
-            cronTrigger.setCronExpression( cronExpression );
-
-            if ( cronParams[3].equals( "?" ) || cronParams[5].equals( "?" ) )
-            {
-                return true;
-            }
+        org.codehaus.plexus.scheduler.CronExpressionValidator validator =
+            new org.codehaus.plexus.scheduler.CronExpressionValidator();
 
-            return false;
-        }
-        catch ( ParseException e )
-        {
-            return false;
-        }
+        return validator.validate( cronExpression );
     }
 }

Modified: maven/continuum/trunk/continuum-web/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/META-INF/plexus/components.xml?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/META-INF/plexus/components.xml Tue May 16 03:26:59 2006
@@ -63,6 +63,13 @@
         </requirement>
       </requirements>
     </component>
+
+    <component>
+      <role>requestUtil</role>
+      <implementation>org.apache.maven.continuum.web.tool.RequestUtil</implementation>
+      <instantiation-strategy>per-lookup</instantiation-strategy>
+    </component>
+
     <!--
     |
     | Customized PullTools Service
@@ -75,6 +82,11 @@
       <configuration>
         <tools>
           <tool>
+            <name>requestUtil</name>
+            <role>requestUtil</role>
+            <scope>request</scope>
+          </tool>
+          <tool>
             <name>link</name>
             <role>linktool</role>
             <scope>request</scope>
@@ -101,14 +113,12 @@
           </tool>
           <tool>
             <name>state</name>
-            <role>org.codehaus.plexus.formica.web.ContentGenerator</role>
-            <role-hint>continuum-state</role-hint>
-            <scope>global</scope>
+            <role>continuum-state</role>
+            <scope>request</scope>
           </tool>
           <tool>
             <name>trigger</name>
-            <role>org.codehaus.plexus.formica.web.ContentGenerator</role>
-            <role-hint>continuum-trigger</role-hint>
+            <role>continuum-trigger</role>
             <scope>global</scope>
           </tool>
           <tool>
@@ -535,6 +545,10 @@
             <expression>buildProject(#id)</expression>
           </call>
           <call>
+            <cid>buildProjectWithBuildDefinition</cid>
+            <expression>buildProjectWithBuildDefinition(#id, #buildDefinitionId)</expression>
+          </call>
+          <call>
             <cid>buildAllProjects</cid>
             <expression>buildProjects()</expression>
           </call>
@@ -562,7 +576,7 @@
            -->
           <call>
             <cid>addBuildDefinition</cid>
-            <expression>addBuildDefinition(#id,#parameters)</expression>
+            <expression>addBuildDefinitionFromParams(#id,#parameters)</expression>
           </call>
           <call>
             <cid>deleteBuildDefinition</cid>
@@ -655,14 +669,12 @@
      |-->
 
     <component>
-      <role>org.codehaus.plexus.formica.web.ContentGenerator</role>
-      <role-hint>continuum-state</role-hint>
+      <role>continuum-state</role>
       <implementation>org.apache.maven.continuum.web.tool.ContinuumStateContentGenerator</implementation>
     </component>
 
     <component>
-      <role>org.codehaus.plexus.formica.web.ContentGenerator</role>
-      <role-hint>continuum-trigger</role-hint>
+      <role>continuum-trigger</role>
       <implementation>org.apache.maven.continuum.web.tool.ContinuumTriggerContentGenerator</implementation>
     </component>
 

Modified: maven/continuum/trunk/continuum-web/src/main/resources/WEB-INF/web.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/WEB-INF/web.xml?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/WEB-INF/web.xml (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/WEB-INF/web.xml Tue May 16 03:26:59 2006
@@ -6,6 +6,16 @@
 
 <web-app>
   <servlet>
+    <servlet-name>browse</servlet-name>
+    <servlet-class>org.apache.maven.continuum.web.servlet.DownloadServlet</servlet-class>
+    <load-on-startup>6</load-on-startup>
+  </servlet>
+  <servlet>
+    <servlet-name>repository</servlet-name>
+    <servlet-class>org.apache.maven.continuum.web.servlet.RepositoryBrowseServlet</servlet-class>
+    <load-on-startup>7</load-on-startup>
+  </servlet>
+  <servlet>
     <servlet-name>continuum</servlet-name>
     <servlet-class>org.codehaus.plexus.summit.Summit</servlet-class>
     <load-on-startup>5</load-on-startup>
@@ -19,6 +29,14 @@
     </servlet-class>
   </servlet>
   -->
+  <servlet-mapping>
+    <servlet-name>browse</servlet-name>
+    <url-pattern>/continuum/browse</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>repository</servlet-name>
+    <url-pattern>/repository/*</url-pattern>
+  </servlet-mapping>
   <servlet-mapping>
     <servlet-name>continuum</servlet-name>
     <url-pattern>/continuum/*</url-pattern>

Modified: maven/continuum/trunk/continuum-web/src/main/resources/css/tigris.css
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/css/tigris.css?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/css/tigris.css (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/css/tigris.css Tue May 16 03:26:59 2006
@@ -9,8 +9,6 @@
 }
 
 .app h3, .app h4, .tabs td, .tabs th, .functnbar {
-	background-image: url(../images/nw_maj_rond.gif);
-	background-repeat: no-repeat;
 }
 
 .functnbar, .functnbar2 {
@@ -25,16 +23,16 @@
 }
 
 .functnbar3 {
-	background-color: #ddd;
+	background-color: #bbb;
 	background-image: url(../images/sw_med_rond.gif);
 }
 
 .functnbar, .functnbar2, .functnbar3 {
-	color: #000;
+	color: #333;
 }
 
 .functnbar a, .functnbar2 a, .functnbar3 a {
-	color: #000;
+	color: #333;
 	text-decoration: underline;
 }
 
@@ -48,8 +46,10 @@
 	background-image: none;
 }
 
+
+
 a:link, #navcolumn a:visited, .app a:visited, .tasknav a:visited {
-	color: blue;
+	color: #333;
 }
 
 a:link.selfref, a:visited.selfref {
@@ -58,24 +58,50 @@
 }
 
 a:active, a:hover, #leftcol a:active, #leftcol a:hover {
-	color: #f30 !important;
+	color: #f30;
+	
 }
 
-#leftcol a, #breadcrumbs a {
+#leftcol a  {
 	text-decoration: none;
+	
 }
 
+#breadcrumbs a:link{
+	text-decoration: none;
+
+}
+
+#breadcrumbs a:visited{
+	text-decoration: none;
+	color: #333
+
+}
+
+#breadcrumbs a:hover {
+	text-decoration: none;
+	color:white
+}
+
+
 .app h3, .app h4 {
-	color: #fff;
+	color: #333;
+  
 }
 
 .app h3 {
-	background-color: #333;
+	background-image: url(../images/arrow.gif);
+	background-repeat: no-repeat;
+	background-position: left bottom;
+	padding-bottom: 15px;
 }
+/* dagdag ko ung nasa itaas */
+
+
 
 .app h3 a:link, .app h3 a:visited, .app h4 a:link, .app h4 a:visited {
 	color: #fff !important;
-	text-decoration: underline;
+	/*text-decoration: underline;*/
 }
 
 .app h4 {
@@ -87,7 +113,7 @@
 }
 
 .b td {
-	background: #efefef;
+	background: #eee;
 }
 
 .warning td {
@@ -107,7 +133,7 @@
 	border-color: #999 #EEE #EEE #999;
 	border-width: 1px;
 	border-style: solid;
-}
+/*}
 
 .toolgroup {
 	background: #efefef;
@@ -117,17 +143,12 @@
 	border-bottom: 1px solid #666;
 	border-right: 1px solid #666;
 	background: #ddd;
-	color: #555;
-}
-
-.toolgroup .body {
-	border-right: 1px solid #aaa;
-	border-bottom: 1px solid #aaa;
+	color: #555; */
 }
 
 #breadcrumbs {
 	border-top: 1px solid #fff;
-	background-color: #ccc;
+	background-color: #F3B455;
 }
 
 #main {
@@ -144,18 +165,12 @@
 	border-top: 1px solid #ddd;
 }
 
-#helptext .label {
-	background-image: url(../images/icon_help_sml.gif);
-	background-repeat: no-repeat;
-	background-position: 97%;
-}
-
 body.docs {
 	background: #eee url(../images/help_logo.gif) top right no-repeat !important;
 }
 
 .docs h3, .docs h4 {
-	border-top: solid 1px #000;
+	border-top: solid 1px #333;
 }
 
 #apphead h2 em {
@@ -198,21 +213,13 @@
 
 .axial th {
 	background-color: #ddd;
-	color: black;
+	color: #555;
 }
 
 .alert {
 	background-color: #ff9;
 }
 
-.expandedwaste {
-	background: url(../images/icon_arrowwaste2_sml.gif) no-repeat;
-}
-
-.collapsedwaste {
-	background: url(../images/icon_arrowwaste1_sml.gif) no-repeat;
-}
-
 .filebrowse .expanded, .filebrowse-alt .expanded {
 	background-image: url(../images/icon_arrowfolderopen2_sml.gif);
 	background-repeat: no-repeat;
@@ -241,10 +248,6 @@
 	background: url(../images/icon_sortdown.gif) no-repeat;
 }
 
-.collapsedwaste {
-	background: url(../images/icon_arrowwaste1_sml.gif) no-repeat;
-}
-
 body .grid td {
 	border-top: 1px solid #ccc;
 	border-left: 1px solid #ccc;
@@ -259,7 +262,7 @@
 	color: #069;
 }
 
-.errormessage, .warningmessage, .donemessage, .infomessage {
+.errormessage, .warningmessage {
 	border-top: 5px solid #900;
 	border-left: 1px solid #900;
 	background-image: url(../images/icon_error_lrg.gif);
@@ -268,37 +271,16 @@
 }
 
 .warningmessage {
-	background-image: url(../images/icon_warning_lrg.gif);
-	border-color: #c60;
-}
-
-.donemessage {
-	background-image: url(../images/icon_success_lrg.gif);
-	border-color: #090;
-}
-
-.infomessage {
-	background-image: url(../images/icon_info_lrg.gif);
-	border-color: #069;
-}
-
-.docinfo {
-	background: url(../images/icon_doc_lrg.gif) no-repeat;
-}
-
-.dirinfo {
-	background: url(../images/icon_folder_lrg.gif) no-repeat;
+	background-image: url(../images/bg_warning.gif);
+	height: 48px;
+	background-position: 0px 0px;
+	background-color: white;
+	border: 0px 0px 0px 0px;
+	border-color: white;
+	color: #333;
 }
 
-.memberinfo {
-	background: url(../images/icon_members_lrg.gif) no-repeat;
-}
-
-.usergroupinfo {
-	background: url(../images/icon_usergroups_lrg.gif) no-repeat;
-}
-
-.errormark, .warningmark, .donemark, .infomark {
+.errormark, .warningmark, .donemark {
 	background: url(../images/icon_error_sml.gif) no-repeat;
 }
 
@@ -310,10 +292,6 @@
 	background-image: url(../images/icon_success_sml.gif);
 }
 
-.infomark {
-	background-image: url(../images/icon_info_sml.gif);
-}
-
 .cvsdiff, .cvsblame {
 	background-color: #ccc;
 }
@@ -410,7 +388,7 @@
 	background-color: #FCC;
 }
 
-.app .helplink, #helptext .helplink {
+.app .helplink {
 	cursor: help;
 }
 
@@ -423,6 +401,8 @@
 	font-family: Verdana, Helvetica, Arial, sans-serif;
 }
 
+th  {color:white}
+
 code, pre {
 	font-family: 'Andale Mono', Courier, monospace;
 }
@@ -432,6 +412,7 @@
 	voice-family: "\"}\"";
 	voice-family: inherit;
 	font-size: small;
+
 }
 
 small, div#footer, div#login, div.tabs th, div.tabs td, input, select, .paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs, .courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc, #leftcol, .legend, .bars {
@@ -487,6 +468,7 @@
 	voice-family: "\"}\"";
 	voice-family: inherit;
 	width: auto;
+	
 }
 
 html>body #bodycol {
@@ -506,11 +488,17 @@
 }
 
 .app h3, .app h4 {
-	padding: 5px;
-	margin-right: 2px;
-	margin-left: 2px;
+
 }
 
+.app h3		{
+
+	border-bottom: 1px solid #DFDEDE; 
+	padding: 0px 0px 1px 23px;
+  	margin-bottom: 7px;
+}
+/* dagdag ko ung nasa itaas */
+
 .app td, .app th {
 	padding: 2px 3px;
 }
@@ -637,16 +625,99 @@
 }
 
 .toolgroup {
-	margin-bottom: 6px;
+padding: 6px 0px 0px 2px;
+	
+}
+
+#legend {
+	/*height: 25px;
+	width: 161px;	
+	overflow: hidden;*/
+	background: url(../images/legendbg.gif) 8px 0 no-repeat;
+	display: block;
+}
+
+#litem1 {background: url(../images/buildnow.gif) 134px 5px no-repeat; padding-bottom: 8px;}
+#litem2 {background: url(../images/buildhistory.gif) 134px 5px no-repeat;}
+#litem3 {background: url(../images/building.gif) 134px 5px no-repeat;}
+#litem4 {background: url(../images/checkingout.gif) 134px 5px no-repeat;}
+#litem5 {background: url(../images/inqueue.gif) 134px 5px no-repeat; padding-bottom: 8px;}
+#litem6 {background: url(../images/delete.gif) 134px 5px no-repeat}
+#litem7 {background: url(../images/edit.gif) 134px 5px no-repeat; padding-bottom: 8px;}
+#litem8 {background: url(../images/icon_success_sml.gif) 134px 5px no-repeat;}
+#litem9 {background: url(../images/icon_warning_sml.gif) 134px 5px no-repeat;}
+#litem10 {background: url(../images/icon_error_sml.gif) 134px 5px no-repeat;}
+
+#legend .body {
+	font-size: 9px;
+	text-indent: 19px;
+	line-height:24px;
+	height: 25px;
+	width: 161px;	
+	display: block;
+}
+
+
+.toolgroup .body {font-size: 9px;
+	text-indent: 19px;
+	line-height:24px;
+	height: 25px;
+	width: 161px;	
+	overflow: hidden;
+	background: url(../images/super.gif) 0 0 no-repeat;
+	display: block;
+}
+
+.toolgroup .body a:link{
+	height: 25px;
+	width: 161px;	
+	color:#666;
+	overflow: hidden;
+	background: url(../images/super.gif) 0 0 no-repeat;
+	display: block;
+}
+		
+.toolgroup .body a:hover {
+	font-size: 9px;
+	text-indent: 19px;
+	line-height:24px;
+	color: #fff !important;
+	height: 25px;
+	width: 161px;
+	overflow: hidden;
+	background: url(../images/super.gif) 0 -25px no-repeat;
+	display: block;
 }
 
-.toolgroup .body {
-	padding: 4px 4px 4px 0;
+.toolgroup .body a:active {
+	font-size: 9px;
+	text-indent: 19px;
+	line-height:24px;
+	color: #fff !important;
+	height: 25px;
+	width: 161px;
+	overflow: hidden;
+	background: url(../images/super.gif) 0 -50px no-repeat;
+	display: block;
+}
+
+.toolgroup .body a:visited {
+	font-size: 9px;
+	text-indent: 19px;
+	line-height:24px;
+	color:#666;
+	height: 25px;
+	width: 161px;
+	display: block;
 }
 
 .toolgroup .label {
-	padding: 4px;
+    color:gray;
+	font-weight:bold;
+	font-size: 11px;
+	padding: 0px 0px 1px 19px;
 }
+/* inedit ko */
 
 .toolgroup .body div {
 	padding-bottom: .3em;
@@ -710,7 +781,7 @@
 	padding-left: 34px;
 }
 
-.filebrowse-alt .expanded, .filebrowse-alt .collapsed, .filebrowse-alt .leaf, .filebrowse-alt .leafnode, .expandedwaste, .collapsedwaste, .sortup, .sortdown {
+.filebrowse-alt .expanded, .filebrowse-alt .collapsed, .filebrowse-alt .leaf, .filebrowse-alt .leafnode, .sortup, .sortdown {
 	/* hide from macie5\*/
 	float: left;
 	/* resume */
@@ -744,13 +815,13 @@
 	margin-top: 0;
 }
 
-.errormessage, .warningmessage, .donemessage, .infomessage, .docinfo, .dirinfo, .memberinfo, .usergroupinfo {
+.errormessage, .warningmessage {
 	margin: .67em 0;
 	padding: .33em 0 .67em 42px;
 	min-height: 32px;
 }
 
-.errormark, .warningmark, .donemark, .infomark {
+.errormark, .warningmark, .donemark {
 	padding-left: 20px;
 	min-height: 15px;
 }
@@ -764,7 +835,7 @@
 }
 
 #leftcol {
-	width: 14em;
+	width: 16em;
 }
 
 .axial th, .axial th .strut, #leftcol .strut {
@@ -799,3 +870,8 @@
 #projectdocumentlist td.filebrowse-alt {
 	padding-right: .75em;
 }
+
+.tablehead {color: #FFFFFF;
+}
+
+#footer {background: url(../images/footerborder.gif) 0 5px; padding: 10px 0px 8px 0px;}
\ No newline at end of file

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/arrow.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/arrow.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/arrow.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/bg_warning.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/bg_warning.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/bg_warning.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/buildhistory.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/buildhistory.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/buildhistory.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/buildhistory_disabled.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/buildhistory_disabled.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/buildhistory_disabled.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/building.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/building.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/building.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/buildnow.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/buildnow.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/buildnow.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/buildnow_disabled.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/buildnow_disabled.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/buildnow_disabled.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/checkingout.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/checkingout.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/checkingout.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: maven/continuum/trunk/continuum-web/src/main/resources/images/continuum_logo_75.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/continuum_logo_75.gif?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
Binary files - no diff available.

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/delete.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/delete.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/delete.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/delete_disabled.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/delete_disabled.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/delete_disabled.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/edit.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/edit.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/edit.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/edit_disabled.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/edit_disabled.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/edit_disabled.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/footerborder.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/footerborder.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/footerborder.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/inqueue.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/inqueue.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/inqueue.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/legendbg.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/legendbg.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/legendbg.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/legendbg2.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/legendbg2.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/legendbg2.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/link.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/link.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/link.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/linkover.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/linkover.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/linkover.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/super.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/super.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/super.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/workingcopy.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/workingcopy.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/workingcopy.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/continuum/trunk/continuum-web/src/main/resources/images/workingcopy_disabled.gif
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/images/workingcopy_disabled.gif?rev=406895&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/continuum/trunk/continuum-web/src/main/resources/images/workingcopy_disabled.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: maven/continuum/trunk/continuum-web/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/localization/Continuum.properties?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/localization/Continuum.properties (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/localization/Continuum.properties Tue May 16 03:26:59 2006
@@ -74,10 +74,10 @@
 
 m1PomUrl.label = M1 POM Url
 m1PomUrl.message = Enter the URL to the Maven 1 POM
-m1PomUrl.error = You must enter a valid URL
+m1PomUrl.error = You must enter a valid URL (http, https, ftp and file protocols are allowed)
 m1PomFile.label = Upload POM
 m1PomFile.message =  Enter the local filename of the Maven 1 POM to upload
-m1PomFile.error = You must enter a valid URL
+m1PomFile.error = You must enter a valid URL (http, https, ftp and file protocols are allowed)
 
 project.title.m1.add = Add Maven 1.x Project
 
@@ -88,12 +88,12 @@
 // Maven 2
 // ----------------------------------------------------------------------
 
-m2PomUrl.label = POM Url
+m2PomUrl.label = M2 POM Url
 m2PomUrl.message =  Enter the URL to the Maven 2 POM
-m2PomUrl.error = You must enter a valid URL
+m2PomUrl.error = You must enter a valid URL (http, https, ftp and file protocols are allowed)
 m2PomFile.label = Upload POM
 m2PomFile.message =  Enter the local filename of the Maven 2 POM to upload (works only for a single project without modules).
-m2PomFile.error = You must enter a valid URL
+m2PomFile.error = You must enter a valid URL (http, https, ftp and file protocols are allowed)
 
 project.title.m2.add = Add Maven 2.0+ Project
 
@@ -135,7 +135,7 @@
 // ----------------------------------------------------------------------
 
 empty.error = This field is required
-url.error = You must provide a valid url
+url.error = You must provide a valid url (http, https, ftp and file protocols are allowed)
 urlSource.error = The URL you provided doesn't exist
 
 // ----------------------------------------------------------------------

Modified: maven/continuum/trunk/continuum-web/src/main/resources/templates/layouts/Configure.vm
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/templates/layouts/Configure.vm?rev=406895&r1=406894&r2=406895&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/templates/layouts/Configure.vm (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/templates/layouts/Configure.vm Tue May 16 03:26:59 2006
@@ -9,15 +9,16 @@
     <script src="$data.getLink("scripts/tigris.js")" type="text/javascript"></script>
   </head>
 
-  <body onload="focus()" marginwidth="0" marginheight="0" class="composite">
+  <body onload="focus()" class="composite" marginwidth="0" marginheight="0">
 
     #parse("navigations/DefaultTop.vm")
 
-    <table id="main" border="0" cellpadding="4" cellspacing="0" width="100%">
+    <table border="0" cellpadding="4" cellspacing="0" width="100%" id="main">
       <tbody>
         <tr valign="top">
           <td>
             <div id="bodycol">
+              <br />
               $screenViewContent
             </div>
           </td>



Mime
View raw message