Dear Wiki user, You have subscribed to a wiki page or wiki category on "Jakarta-velocity Wiki" for change notification.
The following page has been changed by ChristopherTownson: http://wiki.apache.org/jakarta-velocity/ExtendedDateTool ------------------------------------------------------------------------------ - = ExtendedDateTool = == Initial Rough Version == ExtendedDateTool handles requirements for expressing a specified date relative to now as a string in a "friendly format" (e.g. "3 minutes ago", "tomorrow", "3 days from now") @@ -35, +34 @@ /** * Extension to Velocity DateTool which provides methods for expressing * Calendar objects in a human-friendly, relative format - * + * * @author <a href="mailto:[EMAIL PROTECTED]">Christopher Townson</a> - * + * * TODO externalize unit conversion methods to dedicated tool? * TODO better handling of strings/pluralisation/i8n? * TODO integration of properties with velocity.properties @@ -45, +44 @@ * is not suited to "friendly-format" */ public class ExtendedDateTool extends DateTool - { + { /** * number of milliseconds in a second */ public static final long MILLIS_TO_SECOND = 1000; - + /** * number of millseconds in a minute */ public static final long MILLIS_TO_MINUTE = 60000; - + /** * number of milliseconds in an hour */ public static final long MILLIS_TO_HOUR = 3600000; - + /** * number of milliseconds in a day */ public static final long MILLIS_TO_DAY = 86400000; - + /** * String to append to dates which are _after_ the current date */ - public static final String APPEND_FUTURE = + public static final String APPEND_FUTURE = Messages.getString("ExtendedDateTool.string.date.append.future"); - - + + /** * String to append to dates which are _before_ the current date */ - public static final String APPEND_PAST = + public static final String APPEND_PAST = Messages.getString("ExtendedDateTool.string.date.append.past"); - + /** * Strings for unit: seconds (singular) */ - public static final String UNIT_SECOND = + public static final String UNIT_SECOND = Messages.getString("ExtendedDateTool.string.unit.seconds.singular"); - + /** * String for unit seconds (plural) */ - public static final String UNIT_SECONDS = + public static final String UNIT_SECONDS = Messages.getString("ExtendedDateTool.string.unit.seconds.plural"); - + /** * String for unit: minutes (singular) */ - public static final String UNIT_MINUTE = + public static final String UNIT_MINUTE = Messages.getString("ExtendedDateTool.string.unit.minutes.singular"); - + /** * String for unit minutes (plural) */ - public static final String UNIT_MINUTES = + public static final String UNIT_MINUTES = Messages.getString("ExtendedDateTool.string.unit.minutes.plural"); - + /** * String for unit: minutes (singular) */ - public static final String UNIT_HOUR = + public static final String UNIT_HOUR = Messages.getString("ExtendedDateTool.string.unit.hours.singular"); - + /** * String for unit minutes (plural) */ - public static final String UNIT_HOURS = + public static final String UNIT_HOURS = Messages.getString("ExtendedDateTool.string.unit.hours.plural"); - + /** * String for unit: days (singular) */ - public static final String UNIT_DAY = + public static final String UNIT_DAY = Messages.getString("ExtendedDateTool.string.unit.days.singular"); - + /** * String for unit days (plural) */ - public static final String UNIT_DAYS = + public static final String UNIT_DAYS = Messages.getString("ExtendedDateTool.string.unit.days.plural"); - + /** * String for unit: 1 day into the future */ - public static final String YESTERDAY = + public static final String YESTERDAY = Messages.getString("ExtendedDateTool.string.date.yesterday"); - + /** * String for unit: 1 day into the past */ - public static final String TOMORROW = + public static final String TOMORROW = Messages.getString("ExtendedDateTool.string.date.tomorrow"); - + /** * String for unit: weeks (singular) - * + * * Not currently in use as any period over 7 days is better displayed in a * standard date format */ - public static final String UNIT_WEEK = + public static final String UNIT_WEEK = Messages.getString("ExtendedDateTool.string.unit.weeks.singular"); - + /** * String for unit: weeks (plural) - * + * * Currently only used to determine the fact that date should be * displayed in a standard format */ - public static final String UNIT_WEEKS = + public static final String UNIT_WEEKS = Messages.getString("ExtendedDateTool.string.unit.weeks.plural"); - + /** * Default output format for dates which are too distant to be suitable * for rendering in "friendly format" */ - public static final String DEFAULT_FORMAT = + public static final String DEFAULT_FORMAT = Messages.getString("ExtendedDateTOol.string.date.format.default"); /** * Returns a provided Date instance in a human-friendly String format - * + * * @param then The Calendar object to convert to human-friendly format * @return The date in a human-friendly format (e.g. 3 days ago) */ @@ -174, +173 @@ { String friendlyDate = null; String append = null; - + // get the difference between the now and then as a long long diff = getDifferenceBetweenNowAnd(then); - + // is Calendar in the past or the future? if (isPast(diff)) { @@ -188, +187 @@ { append = APPEND_FUTURE; } - + if (isSeconds(diff)) { if (isSingular(diff)) { - friendlyDate = convertMillisToSeconds(diff) + + friendlyDate = convertMillisToSeconds(diff) + " " + UNIT_SECOND + " " + append; } else { - friendlyDate = convertMillisToSeconds(diff) + + friendlyDate = convertMillisToSeconds(diff) + " " + UNIT_SECONDS + " " + append; } } @@ -206, +205 @@ { if (isSingular(diff)) { - friendlyDate = convertMillisToMinutes(diff) + + friendlyDate = convertMillisToMinutes(diff) + " " + UNIT_MINUTE + " " + append; } else { - friendlyDate = convertMillisToMinutes(diff) + + friendlyDate = convertMillisToMinutes(diff) + " " + UNIT_MINUTES + " " + append; } } @@ -224, +223 @@ } else { - friendlyDate = convertMillisToHours(diff) + + friendlyDate = convertMillisToHours(diff) + " " + UNIT_HOURS + " " + append; } } @@ -240, +239 @@ } else { - friendlyDate = convertMillisToDays(diff) + + friendlyDate = convertMillisToDays(diff) + " " + UNIT_DAYS + " " + append; } } @@ -248, +247 @@ { friendlyDate = super.format(DEFAULT_FORMAT,then.getTime()); } - + // return friendly string return friendlyDate; } - + /** * Overloaded getFriendlyDate method for convenience from templates - * + * * NB. The date format descriptor only applies to the date as it will be * returned if it is <strong>not</strong> suitable for friendly format - * + * * @param format * @param obj * @return The date in a human-friendly format (e.g. 3 days ago) @@ -266, +265 @@ public String getFriendlyDate(String format, Object obj) { return getFriendlyDate(super.toCalendar(super.toDate(format,obj))); } - + /** * Returns a Java timestamp (milliseconds since 1970-01-01) - * + * * @return long java timestamp for the current date */ public long getTimeInMillis() { return Calendar.getInstance().getTimeInMillis(); } - + /** * Returns a Java timestamp for the supplied Calendar - * + * * @param cal * @return long the Java timestamp for the supplied calendar */ @@ -287, +286 @@ { return cal.getTimeInMillis(); } - + /** * Returns the time difference between two points expressed in milliseconds - * + * * @param pointA * @param pointB * @return The time difference in milliseconds @@ -299, +298 @@ { return pointA.getTimeInMillis() - pointB.getTimeInMillis(); } - + /** * Tests whether the difference between two Calendar instances is * a matter of seconds or not - * + * * @param then The calendar instance for comparison * @return The difference in milliseconds between now and supplied Calendar * Returns a positive long if then is after now and a negative long @@ -313, +312 @@ { return getDifferenceBetween(then, Calendar.getInstance()); } - + /** * COnvert a duration expressed in milliseconds to seconds - * + * * @param millis * @return milliseconds expressed as seconds */ @@ -324, +323 @@ { return millis / MILLIS_TO_SECOND; } - + /** * Convert a duration expressed in milliseconds to minutes - * + * * @param millis * @return milliseconds expressed as minutes */ @@ -335, +334 @@ { return millis / MILLIS_TO_MINUTE; } - + /** * Convert a duration expressed in milliseconds to hours - * + * * @param millis * @return milliseconds expressed as hours */ @@ -346, +345 @@ { return millis / MILLIS_TO_HOUR; } - + /** * Convert a duration expressed in milliseconds to days - * + * * @param millis * @return milliseconds expressed as days */ @@ -357, +356 @@ { return millis / MILLIS_TO_DAY; } - + /** * Tests for positive or negative result from timestamp comparison - * + * * @param diff * @return whether or not our compared time was in the past */ @@ -369, +368 @@ if (diff < 0) { return true; - } + } else { return false; } } - + /** * Returns the appropriate time unit string for expressing a * millsecond duration in a "friendly" date format - * + * * @param diff * @return The time unit name */ @@ -388, +387 @@ if (diff > 0 && diff < 60000) { return UNIT_SECONDS; - } + } else if (diff >= 60000 && diff < 3600000) { return UNIT_MINUTES; - } + } else if (diff >= 3600000 && diff < 86400000) { return UNIT_HOURS; - } + } else if (diff >= 86400000 && diff < 604800000) { return UNIT_DAYS; - } + } else if (diff >= 604800000) { return UNIT_WEEKS; - } + } else { // default return null; } } - + /** * Returns true if the time unit string is singular; false if the string * needs to be pluralised - * + * * This method will only work on positive longs. - * + * * @param diff * @return Whether or not to pluralise the time unit string */ @@ -425, +424 @@ { // run this test now to save repeating in conditionals String units = calculateUnit(diff); - + if (units == UNIT_SECONDS && diff < 2000) { return true; - } + } else if (units == UNIT_MINUTES && diff < 120000) { return true; - } + } else if (units == UNIT_HOURS && diff < 7200000) { return true; - } + } else if (units == UNIT_DAYS && diff < 172800000) { return true; @@ -452, +451 @@ return false; } } - + /** * Do we want to talk in seconds? - * + * * @param diff * @return Whether we are dealing with seconds or not */ @@ -470, +469 @@ return false; } } - + /** * Do we want to talk in minutes? - * + * * @param diff * @return Whether we are dealing with minutes or not */ @@ -488, +487 @@ return false; } } - + /** * Do we want to talk in hours? - * + * * @param diff * @return Whether we are dealing with hours or not */ @@ -506, +505 @@ return false; } } - + /** * Do we want to talk in days? - * + * * @param diff * @return Whether we are dealing with days or not */ @@ -524, +523 @@ return false; } } - + /** * Do we want to talk in weeks? - * + * * @param diff * @return Whether we are dealing with weeks or not */ @@ -550, +549 @@ {{{ /** - * + * */ package org.apache.velocity.tools.generic; @@ -560, +559 @@ /** * Eclipse auto-generated helper class to retrieve localised Strings * for ExtendedDateTool - * + * * @author Christopher Townson */ public class Messages { @@ -584, +583 @@ /** * Accessor method for retrieving String properties - * + * * @param key The key for the String property to get * @return The string property */ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
