Author: ehillenius Date: Sun Jun 24 14:23:32 2007 New Revision: 550287 URL: http://svn.apache.org/viewvc?view=rev&rev=550287 Log: WICKET-629
Modified: incubator/wicket/trunk/jdk-1.4/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DatePicker.java Modified: incubator/wicket/trunk/jdk-1.4/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DatePicker.java URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DatePicker.java?view=diff&rev=550287&r1=550286&r2=550287 ============================================================================== --- incubator/wicket/trunk/jdk-1.4/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DatePicker.java (original) +++ incubator/wicket/trunk/jdk-1.4/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DatePicker.java Sun Jun 24 14:23:32 2007 @@ -61,6 +61,24 @@ */ public class DatePicker extends AbstractBehavior implements IHeaderContributor { + /** + * Exception thrown when the bound component does not produce a format this + * date picker can work with. + */ + private static final class UnableToDetermineFormatException extends WicketRuntimeException + { + private static final long serialVersionUID = 1L; + + public UnableToDetermineFormatException() + { + super("This behavior can only be added to components that either implement " + + ITextFormatProvider.class.getName() + + " AND produce a non-null format, or that use" + + " converters that this datepicker can use to determine" + + " the pattern being used. Alternatively, you can extend " + + " the date picker and override getDatePattern to provide your own"); + } + } private static final long serialVersionUID = 1L; @@ -79,9 +97,9 @@ */ public void bind(Component component) { + this.component = component; checkComponentProvidesDateFormat(component); component.setOutputMarkupId(true); - this.component = component; } /** @@ -192,6 +210,24 @@ } /** + * Check that this behavior can get a date format out of the component it is + * coupled to. It checks whether [EMAIL PROTECTED] #getDatePattern()} produces a + * non-null value. If that method returns null, and exception will be thrown + * + * @param component + * the component this behavior is being coupled to + * @throws UnableToDetermineFormatException + * if this date picker is unable to determine a format. + */ + private final void checkComponentProvidesDateFormat(Component component) + { + if (getDatePattern() == null) + { + throw new UnableToDetermineFormatException(); + } + } + + /** * Append javascript to the initialization function for the YUI widget. Can * be used by subclasses to conveniently extend configuration without having * to write a separate contribution. @@ -211,45 +247,6 @@ } /** - * Check that this behavior can get a date format out of the component it is - * coupled to. if you override this method to allow for other types (such as - * your own), you should override [EMAIL PROTECTED] #getDatePattern()} as well. This - * method should return normally if the component is accepted or throw a RTE - * when it is not. - * - * @param component - * the component this behavior is being coupled to - * @throws WicketRuntimeException - * if the component is not support. - */ - protected void checkComponentProvidesDateFormat(Component component) - { - - if (component instanceof ITextFormatProvider) - { - // were ok - return; - } - - IConverter converter = component.getConverter(DateTime.class); - if (!(converter instanceof DateConverter)) - { - converter = component.getConverter(Date.class); - } - if (converter instanceof DateConverter) - { - - return; // This is ok - } - throw new WicketRuntimeException( - "this behavior can only be added to components that either implement " - + ITextFormatProvider.class.getName() + " or that use " - + DateConverter.class.getName() + " configured with an instance of " - + SimpleDateFormat.class.getName() - + " (like Wicket's default configuration has)"); - } - - /** * Gives overriding classes the option of adding (or even changing/ * removing) configuration properties for the javascript widget. See <a * href="http://developer.yahoo.com/yui/calendar/">the widget's @@ -287,31 +284,32 @@ /** * Gets the date pattern to use for putting selected values in the coupled - * component. If you override this method to support components that would - * otherwise not be supported, you should override - * [EMAIL PROTECTED] #checkComponentProvidesDateFormat(Component)} and let it return - * normally. + * component. * * @return The date pattern */ protected String getDatePattern() { - + String format = null; if (component instanceof ITextFormatProvider) { - return ((ITextFormatProvider)component).getTextFormat(); + format = ((ITextFormatProvider)component).getTextFormat(); + // it is possible that components implement ITextFormatProvider but + // don't provide a format } - else + + if (format == null) { - // cast from hell, but we checked before whether we could IConverter converter = component.getConverter(DateTime.class); if (!(converter instanceof DateConverter)) { converter = component.getConverter(Date.class); } - return ((SimpleDateFormat)((DateConverter)converter).getDateFormat(component + format = ((SimpleDateFormat)((DateConverter)converter).getDateFormat(component .getLocale())).toPattern(); } + + return format; } /**