You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by jv...@apache.org on 2005/04/19 07:13:30 UTC
svn commit: r161842 - in maven/continuum/trunk/continuum-web/src/main:
java/org/codehaus/continuum/web/tool/CssTool.java
java/org/codehaus/continuum/web/tool/DateTool.java
resources/META-INF/plexus/components.xml
resources/templates/screens/ProjectBuild.vm
resources/templates/screens/ProjectBuilds.vm
Author: jvanzyl
Date: Mon Apr 18 22:13:29 2005
New Revision: 161842
URL: http://svn.apache.org/viewcvs?view=rev&rev=161842
Log:
o adding a date tool from vel tools and using it in the build display
templates.
Added:
maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/DateTool.java
Modified:
maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/CssTool.java
maven/continuum/trunk/continuum-web/src/main/resources/META-INF/plexus/components.xml
maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuild.vm
maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuilds.vm
Modified: maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/CssTool.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/CssTool.java?view=diff&r1=161841&r2=161842
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/CssTool.java (original)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/CssTool.java Mon Apr 18 22:13:29 2005
@@ -1,4 +1,4 @@
-package org.apache.maven.continuum.web.tool;
+package org.codehaus.continuum.web.tool;
/*
* Copyright 2004-2005 The Apache Software Foundation.
@@ -15,12 +15,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import org.codehaus.plexus.summit.pull.RequestTool;
-import org.codehaus.plexus.summit.rundata.RunData;
-
-import java.util.ArrayList;
-import java.util.List;
/**
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
Added: maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/DateTool.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/DateTool.java?view=auto&rev=161842
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/DateTool.java (added)
+++ maven/continuum/trunk/continuum-web/src/main/java/org/codehaus/continuum/web/tool/DateTool.java Mon Apr 18 22:13:29 2005
@@ -0,0 +1,855 @@
+package org.codehaus.continuum.web.tool;
+
+import java.lang.reflect.Field;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Calendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * Tool for working with {@link Date} and {@link Calendar}
+ * in Velocity templates. It is useful for accessing and
+ * formatting the "current" date as well as for formatting
+ * arbitrary {@link Date} and {@link Calendar} objects. Also
+ * the tool can be used to retrieve {@link DateFormat} instances
+ * or make conversions to and from various date types.
+ * <p><pre>
+ * Example uses:
+ * $date -> Oct 19, 2003 9:54:50 PM
+ * $date.long -> October 19, 2003 9:54:50 PM PDT
+ * $date.medium_time -> 9:54:50 PM
+ * $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
+ *
+ * $myDate -> Tue Oct 07 03:14:50 PDT 2003
+ * $date.format('medium',$myDate) -> Oct 7, 2003 3:14:50 AM
+ *
+ * Example toolbox.xml config (if you want to use this with VelocityView):
+ * <tool>
+ * <key>date</key>
+ * <scope>application</scope>
+ * <class>org.apache.velocity.tools.generic.DateTool</class>
+ * </tool>
+ * </pre></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
+ * 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$
+ */
+public class DateTool
+{
+ /**
+ * The default format to be used when none is specified.
+ *
+ * @since VelocityTools 1.1
+ */
+ public static final String DEFAULT_FORMAT = "default";
+
+ /**
+ * Default constructor.
+ */
+ public DateTool()
+ {
+ // do nothing
+ }
+
+
+ // ------------------------- system date access ------------------
+
+ /**
+ * @return the system's current time as a {@link Date}
+ */
+ public static final Date getSystemDate()
+ {
+ return getSystemCalendar().getTime();
+ }
+
+
+ /**
+ * @return the system's current time as a {@link Calendar}
+ */
+ public static final Calendar getSystemCalendar()
+ {
+ return Calendar.getInstance();
+ }
+
+
+ // ------------------------- default parameter access ----------------
+
+ /**
+ * This implementation returns the default locale. Subclasses
+ * may override this to return alternate locales. Please note that
+ * doing so will affect all formatting methods where no locale is
+ * specified in the parameters.
+ *
+ * @return the default {@link Locale}
+ */
+ public Locale getLocale()
+ {
+ return Locale.getDefault();
+ }
+
+ /**
+ * This implementation returns the default TimeZone. Subclasses
+ * may override this to return alternate timezones. Please note that
+ * doing so will affect all formatting methods where no timezone is
+ * specified in the parameters.
+ *
+ * @return the default {@link TimeZone}
+ */
+ public TimeZone getTimeZone()
+ {
+ return TimeZone.getDefault();
+ }
+
+ /**
+ * Returns a {@link Date} derived from the result of {@link #getCalendar}
+ *
+ * @return a {@link Date} derived from the result of {@link #getCalendar}
+ */
+ public Date getDate()
+ {
+ return getCalendar().getTime();
+ }
+
+ /**
+ * 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>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
+ * from the result of this method.</p>
+ *
+ * @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 the pattern or style to be used for formatting dates when none
+ * is specified. This implementation gives a 'default' date-time format.
+ * Subclasses may override this to provide a different default format.
+ *
+ * <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
+ * override this in a subclass to have a different default.</p>
+ *
+ * @since VelocityTools 1.1
+ */
+ public String getFormat()
+ {
+ return DEFAULT_FORMAT;
+ }
+
+
+ // ------------------------- date value access ---------------------------
+
+ /**
+ * Returns the year value of the date returned by {@link #getCalendar()}.
+ *
+ * @since VelocityTools 1.2
+ */
+ public Integer getYear()
+ {
+ return getYear(getCalendar());
+ }
+
+ /**
+ * Returns the year value of the specified date.
+ *
+ * @since VelocityTools 1.2
+ */
+ public Integer getYear(Object date)
+ {
+ return getValue(Calendar.YEAR, date);
+ }
+
+ /**
+ * Returns the month value of the date returned by {@link #getCalendar()}.
+ *
+ * @since VelocityTools 1.2
+ */
+ public Integer getMonth()
+ {
+ return getMonth(getCalendar());
+ }
+
+ /**
+ * Returns the month value of the specified date.
+ *
+ * @since VelocityTools 1.2
+ */
+ public Integer getMonth(Object date)
+ {
+ return getValue(Calendar.MONTH, 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
+ * 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()
+ {
+ 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
+ * 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)
+ {
+ return getValue(Calendar.DAY_OF_MONTH, date);
+ }
+
+ /**
+ * 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)
+ {
+ return getValue(field, getCalendar());
+ }
+
+ /**
+ * Returns the specified value of the specified date,
+ * or null if the field or date is invalid. The field may be
+ * 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
+ * @since VelocityTools 1.2
+ */
+ public Integer getValue(Object field, Object date)
+ {
+ if (field == null)
+ {
+ return null;
+ }
+
+ int fieldValue;
+ if (field instanceof Integer)
+ {
+ 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());
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+ return getValue(fieldValue, date);
+ }
+
+ /**
+ * Returns the specified value of the specified date,
+ * 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
+ * @since VelocityTools 1.2
+ */
+ public Integer getValue(int field, Object date)
+ {
+ Calendar cal = toCalendar(date);
+ if (cal == null)
+ {
+ return null;
+ }
+ 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
+ * allows you to retrieve the current date in standard formats by
+ * 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.
+ * <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'))
+ *
+ * @param format the formatting instructions
+ * @return a formatted representation of the date returned by
+ * {@link #getDate()}
+ * @see #format(String format, Object obj, Locale locale, TimeZone timezone)
+ * @since VelocityTools 1.1
+ */
+ public String get(String format)
+ {
+ return format(format, getDate());
+ }
+
+ /**
+ * Returns a formatted string representing the date and/or time given by
+ * {@link #getDate()} in standard, localized patterns.
+ *
+ * @param dateStyle the style pattern for the date
+ * @param timeStyle the style pattern for the time
+ * @return a formatted representation of the date returned by
+ * {@link #getDate()}
+ * @see DateFormat
+ * @see #format(String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone)
+ * @since VelocityTools 1.1
+ */
+ public String get(String dateStyle, String timeStyle)
+ {
+ 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)
+ {
+ return format(getFormat(), obj);
+ }
+
+ /**
+ * Converts the specified object to a date and returns
+ * a formatted string representing that date in the locale
+ * returned by {@link #getLocale()}.
+ *
+ * @param format the formatting instructions
+ * @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)
+ {
+ return format(format, obj, getLocale());
+ }
+
+ /**
+ * Converts the specified object to a date and returns
+ * a formatted string representing that date in the specified
+ * {@link Locale}.
+ *
+ * @param format the formatting instructions
+ * @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)
+ {
+ return format(format, obj, locale, getTimeZone());
+ }
+
+ /**
+ * Returns a formatted string representing the specified date,
+ * {@link Locale}, and {@link TimeZone}.
+ *
+ * <p>
+ * The specified format may be a standard style pattern ('full', 'long',
+ * 'medium', 'short', or 'default').
+ * </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
+ * {@link SimpleDateFormat}:
+ * <pre>
+ * Symbol Meaning Presentation Example
+ * ------ ------- ------------ -------
+ * G era designator (Text) AD
+ * y year (Number) 1996
+ * M month in year (Text & Number) July & 07
+ * d day in month (Number) 10
+ * h hour in am/pm (1~12) (Number) 12
+ * H hour in day (0~23) (Number) 0
+ * m minute in hour (Number) 30
+ * s second in minute (Number) 55
+ * S millisecond (Number) 978
+ * E day in week (Text) Tuesday
+ * D day in year (Number) 189
+ * F day of week in month (Number) 2 (2nd Wed in July)
+ * w week in year (Number) 27
+ * W week in month (Number) 2
+ * a am/pm marker (Text) PM
+ * k hour in day (1~24) (Number) 24
+ * K hour in am/pm (0~11) (Number) 0
+ * z time zone (Text) Pacific Standard Time
+ * ' escape for text (Delimiter)
+ * '' single quote (Literal) '
+ *
+ * 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 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)
+ {
+ Date date = toDate(obj);
+ DateFormat df = getDateFormat(format, locale, timezone);
+ if (date == null || df == null)
+ {
+ return null;
+ }
+ return df.format(date);
+ }
+
+
+ /**
+ * Returns the specified date as a string formatted according to the
+ * specified date and/or time styles.
+ *
+ * @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
+ * @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)
+ {
+ return format(dateStyle, timeStyle, obj, getLocale());
+ }
+
+ /**
+ * Returns the specified date as a string formatted according to the
+ * specified {@link Locale} and date and/or time styles.
+ *
+ * @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
+ * @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)
+ {
+ return format(dateStyle, timeStyle, obj, locale, getTimeZone());
+ }
+
+ /**
+ * Returns the specified date as a string formatted according to the
+ * specified {@link Locale} and date and/or time styles.
+ *
+ * @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
+ * @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)
+ {
+ Date date = toDate(obj);
+ DateFormat df = getDateFormat(dateStyle, timeStyle, locale, timezone);
+ if (date == null || df == null)
+ {
+ return null;
+ }
+ 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
+ * 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 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)
+ {
+ if (format == null)
+ {
+ return null;
+ }
+
+ DateFormat df = null;
+ // do they want a date instance
+ if (format.endsWith("_date"))
+ {
+ 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"))
+ {
+ 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)
+ {
+ // we have a custom format
+ df = new SimpleDateFormat(format, locale);
+ df.setTimeZone(timezone);
+ }
+ else
+ {
+ // they want a date-time instance
+ df = getDateFormat(style, style, locale, timezone);
+ }
+ }
+ return df;
+ }
+
+ /**
+ * 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
+ * @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)
+ {
+ 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)
+ * @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
+ * @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)
+ {
+ try
+ {
+ DateFormat df;
+ if (dateStyle < 0 && timeStyle < 0)
+ {
+ // no style was specified, use default instance
+ df = DateFormat.getInstance();
+ }
+ else if (timeStyle < 0)
+ {
+ // only a date style was specified
+ df = DateFormat.getDateInstance(dateStyle, locale);
+ }
+ else if (dateStyle < 0)
+ {
+ // only a time style was specified
+ df = DateFormat.getTimeInstance(timeStyle, locale);
+ }
+ else
+ {
+ df = DateFormat.getDateTimeInstance(dateStyle, timeStyle,
+ locale);
+ }
+ df.setTimeZone(timezone);
+ return df;
+ }
+ catch (Exception suppressed)
+ {
+ // let it go...
+ return null;
+ }
+ }
+
+ /**
+ * Checks a string to see if it matches one of the standard DateFormat
+ * style patterns: FULL, LONG, MEDIUM, SHORT, or DEFAULT. If it does,
+ * 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
+ * @since VelocityTools 1.1
+ */
+ protected int getStyleAsInt(String style)
+ {
+ // avoid needlessly running through all the string comparisons
+ if (style == null || style.length() < 4 || style.length() > 7) {
+ return -1;
+ }
+ if (style.equalsIgnoreCase("full"))
+ {
+ return DateFormat.FULL;
+ }
+ if (style.equalsIgnoreCase("long"))
+ {
+ return DateFormat.LONG;
+ }
+ if (style.equalsIgnoreCase("medium"))
+ {
+ return DateFormat.MEDIUM;
+ }
+ if (style.equalsIgnoreCase("short"))
+ {
+ return DateFormat.SHORT;
+ }
+ if (style.equalsIgnoreCase("default"))
+ {
+ return DateFormat.DEFAULT;
+ }
+ // ok, it's not any of the standard patterns
+ 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
+ * 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 obj the date to convert
+ * @return the object as a {@link Date} or <code>null</code> if no
+ * conversion is possible
+ */
+ public Date toDate(Object obj)
+ {
+ return toDate(getFormat(), obj, getLocale(), getTimeZone());
+ }
+
+ /**
+ * Converts an object to an instance of {@link Date} using the
+ * 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
+ * @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)
+ {
+ return toDate(format, obj, getLocale(), getTimeZone());
+ }
+
+ /**
+ * Converts an object to an instance of {@link Date} using the
+ * specified format and {@link Locale} 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}
+ * @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)
+ {
+ 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
+ * 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 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)
+ {
+ if (obj == null)
+ {
+ return null;
+ }
+ if (obj instanceof Date)
+ {
+ return (Date)obj;
+ }
+ if (obj instanceof Calendar)
+ {
+ return ((Calendar)obj).getTime();
+ }
+ if (obj instanceof Number)
+ {
+ Date d = new Date();
+ d.setTime(((Number)obj).longValue());
+ return d;
+ }
+ try
+ {
+ //try parsing w/a customized SimpleDateFormat
+ DateFormat parser = getDateFormat(format, locale, timezone);
+ return parser.parse(String.valueOf(obj));
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Converts an object to an instance of {@link Calendar} using the
+ * locale returned by {@link #getLocale()} if necessary.
+ *
+ * @param obj the date to convert
+ * @return the converted date
+ * @see #toCalendar(Object obj, Locale locale)
+ */
+ public Calendar toCalendar(Object obj)
+ {
+ 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 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)
+ {
+ if (obj == null)
+ {
+ return null;
+ }
+ if (obj instanceof Calendar)
+ {
+ return (Calendar)obj;
+ }
+ //try to get a date out of it
+ Date date = toDate(obj);
+ if (date == null)
+ {
+ return null;
+ }
+
+ //convert the date to a calendar
+ 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;
+ }
+
+
+ // ------------------------- default toString() implementation ------------
+
+ /**
+ * @return the result of {@link #getDate()} formatted according to the result
+ * of {@link #getFormat()}.
+ * @see #format(String format, Object obj)
+ */
+ public String toString()
+ {
+ return format(getFormat(), getDate());
+ }
+
+
+}
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?view=diff&r1=161841&r2=161842
==============================================================================
--- 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 Mon Apr 18 22:13:29 2005
@@ -67,6 +67,11 @@
<scope>request</scope>
</tool>
<tool>
+ <name>date</name>
+ <role>datetool</role>
+ <scope>global</scope>
+ </tool>
+ <tool>
<name>i18n</name>
<role>org.codehaus.plexus.i18n.I18N</role>
<scope>global</scope>
@@ -76,8 +81,14 @@
</component>
<component>
+ <role>datetool</role>
+ <implementation>org.codehaus.continuum.web.tool.DateTool</implementation>
+ <configuration/>
+ </component>
+
+ <component>
<role>csstool</role>
- <implementation>org.apache.maven.continuum.web.tool.CssTool</implementation>
+ <implementation>org.codehaus.continuum.web.tool.CssTool</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
<configuration/>
</component>
Modified: maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuild.vm
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuild.vm?view=diff&r1=161841&r2=161842
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuild.vm (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuild.vm Mon Apr 18 22:13:29 2005
@@ -4,11 +4,11 @@
<table border="1" cellspacing="2" cellpadding="3">
<tr class="a">
<th>Start Time</th>
- <td>$build.startTime</td>
+ <td>$date.format('medium',$build.startTime)</td>
</tr>
<tr class="b">
<th>End Time</th>
- <td>$build.endTime</td>
+ <td>$date.format('medium',$build.endTime)</td>
</tr>
</table>
</p>
Modified: maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuilds.vm
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuilds.vm?view=diff&r1=161841&r2=161842
==============================================================================
--- maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuilds.vm (original)
+++ maven/continuum/trunk/continuum-web/src/main/resources/templates/screens/ProjectBuilds.vm Mon Apr 18 22:13:29 2005
@@ -11,8 +11,8 @@
</tr>
#foreach ( $build in $builds )
<tr class="$class">
- <td>$build.startTime</td>
- <td>$build.endTime</td>
+ <td>$date.format('medium',$build.startTime)</td>
+ <td>$date.format('medium',$build.endTime)</td>
<td>$build.state</td>
<td><a href="$link.setPage('ProjectBuild.vm').addQueryData('view','ProjectBuild').addQueryData('buildId',$build.id).addQueryData('projectId',$project.id)">Result</a></td>
</tr>