You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Martin Grigorov <mg...@apache.org> on 2010/12/21 10:21:24 UTC

Re: svn commit: r1051262 - in /wicket/trunk/wicket-datetime/src: main/java/org/apache/wicket/extensions/yui/calendar/ test/java/org/apache/wicket/extensions/yui/calendar/

DateField is no more FormComponentPanel, but now extends DateTimeField and
just sets the time related components to invisible.
Should we do the same for the recently added TimeField ?

On Mon, Dec 20, 2010 at 8:51 PM, <jd...@apache.org> wrote:

> Author: jdonnerstag
> Date: Mon Dec 20 19:51:09 2010
> New Revision: 1051262
>
> URL: http://svn.apache.org/viewvc?rev=1051262&view=rev
> Log:
> WICKET-3249 fixed DateConverter improperly converts time, causing different
> results between DateField and DateTimeField
>
> Removed:
>
>  wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateField.html
> Modified:
>
>  wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateField.java
>
>  wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
>
>  wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
>
> Modified:
> wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateField.java
> URL:
> http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateField.java?rev=1051262&r1=1051261&r2=1051262&view=diff
>
> ==============================================================================
> ---
> wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateField.java
> (original)
> +++
> wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateField.java
> Mon Dec 20 19:51:09 2010
> @@ -19,10 +19,7 @@ package org.apache.wicket.extensions.yui
>  import java.util.Date;
>
>  import org.apache.wicket.datetime.markup.html.form.DateTextField;
> -import org.apache.wicket.markup.html.form.FormComponentPanel;
>  import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.PropertyModel;
> -import org.joda.time.MutableDateTime;
>
>  /**
>  * Works on a {@link java.util.Date} object. Displays a {@link
> DateTextField} and a
> @@ -53,14 +50,10 @@ import org.joda.time.MutableDateTime;
>  *
>  * @author eelcohillenius
>  */
> -public class DateField extends FormComponentPanel<Date>
> +public class DateField extends DateTimeField
>  {
>        private static final long serialVersionUID = 1L;
>
> -       private MutableDateTime date;
> -
> -       private DateTextField dateField;
> -
>        /**
>         * Construct.
>         *
> @@ -80,116 +73,9 @@ public class DateField extends FormCompo
>        public DateField(String id, IModel<Date> model)
>        {
>                super(id, model);
> -               setType(Date.class);
> -       }
> -
> -       /**
> -        * Gets date.
> -        *
> -        * @return date
> -        */
> -       public Date getDate()
> -       {
> -               return (date != null) ? date.toDate() : null;
> -       }
> -
> -       /**
> -        * @see org.apache.wicket.markup.html.form.FormComponent#getInput()
> -        */
> -       @Override
> -       public String getInput()
> -       {
> -               // since we override convertInput, we can let this method
> return a value
> -               // that is just suitable for error reporting
> -               return dateField.getInput();
> -       }
> -
> -       /**
> -        * Sets date.
> -        *
> -        * @param date
> -        *            date
> -        */
> -       public void setDate(Date date)
> -       {
> -               this.date = (date != null) ? new MutableDateTime(date) :
> null;
> -               setDefaultModelObject(date);
> -       }
> -
> -       /**
> -        * Sets the converted input. In this case, we're really just
> interested in the nested date
> -        * field, as that is the element that receives the real user input.
> So we're just passing that
> -        * on.
> -        * <p>
> -        * Note that overriding this method is a better option than
> overriding {@link #updateModel()}
> -        * like the first versions of this class did. The reason for that
> is that this method can be
> -        * used by form validators without having to depend on the actual
> model being updated, and this
> -        * method is called by the default implementation of {@link
> #updateModel()} anyway (so we don't
> -        * have to override that anymore).
> -        * </p>
> -        *
> -        * @see
> org.apache.wicket.markup.html.form.FormComponent#convertInput()
> -        */
> -       @Override
> -       protected void convertInput()
> -       {
> -               setConvertedInput(dateField.getConvertedInput());
> -       }
> -
> -       /**
> -        * create a new {@link DateTextField} instance to be added to this
> panel.
> -        *
> -        * @param id
> -        *            The id to be used when creating the component
> -        * @param dateFieldModel
> -        *            model that should be used by the {@link
> DateTextField}
> -        * @return a new date text field instance
> -        */
> -       protected DateTextField newDateTextField(final String id,
> -               final PropertyModel<Date> dateFieldModel)
> -       {
> -               return DateTextField.forShortStyle(id, dateFieldModel);
> -       }
>
> -       /**
> -        * @see org.apache.wicket.Component#onBeforeRender()
> -        */
> -       @Override
> -       protected void onBeforeRender()
> -       {
> -               if (dateField == null)
> -               {
> -                       // intiailize datefield and datepicker
> -                       PropertyModel<Date> dateFieldModel = new
> PropertyModel<Date>(this, "date");
> -                       add(dateField = newDateTextField("date",
> dateFieldModel));
> -                       dateField.add(newDatePicker());
> -               }
> -
> -               dateField.setRequired(isRequired());
> -
> -               // obsolete with WICKET-1919
> -               // dateField.setEnabled(isEnabledInHierarchy());
> -
> -               Date d = (Date)getDefaultModelObject();
> -               if (d != null)
> -               {
> -                       date = new MutableDateTime(d);
> -               }
> -               else
> -               {
> -                       date = null;
> -               }
> -
> -               super.onBeforeRender();
> -       }
> -
> -       /**
> -        * Factory method for datepicker that will be added to the field
> -        *
> -        * @return datepicker instance
> -        */
> -       protected DatePicker newDatePicker()
> -       {
> -               return new DatePicker();
> +               get("hours").setVisible(false);
> +               get("minutes").setVisible(false);
> +               get("amOrPmChoice").setVisible(false);
>        }
>  }
>
> Modified:
> wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
> URL:
> http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java?rev=1051262&r1=1051261&r2=1051262&view=diff
>
> ==============================================================================
> ---
> wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
> (original)
> +++
> wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
> Mon Dec 20 19:51:09 2010
> @@ -23,7 +23,6 @@ import java.util.Map;
>  import java.util.TimeZone;
>
>  import org.apache.wicket.Session;
> -import org.apache.wicket.datetime.StyleDateConverter;
>  import org.apache.wicket.datetime.markup.html.form.DateTextField;
>  import org.apache.wicket.markup.html.form.DropDownChoice;
>  import org.apache.wicket.markup.html.form.FormComponentPanel;
> @@ -57,8 +56,12 @@ public class DateTimeField extends FormC
>        /**
>         * Enumerated type for different ways of handling the render part of
> requests.
>         */
> -       private static enum AM_PM {
> -               AM("AM"), PM("PM");
> +       public static enum AM_PM {
> +               /** */
> +               AM("AM"),
> +
> +               /** */
> +               PM("PM");
>
>                /** */
>                private String value;
> @@ -322,6 +325,10 @@ public class DateTimeField extends FormC
>                        try
>                        {
>                                boolean use12HourFormat = use12HourFormat();
> +                               if (hoursField.isVisibleInHierarchy() ==
> false)
> +                               {
> +                                       hours = 0;
> +                               }
>                                if (hours != null)
>                                {
>
>  date.set(DateTimeFieldType.hourOfDay(), hours %
> @@ -378,7 +385,7 @@ public class DateTimeField extends FormC
>         */
>        protected DateTextField newDateTextField(String id,
> PropertyModel<Date> dateFieldModel)
>        {
> -               return new DateTextField(id, dateFieldModel, new
> StyleDateConverter(false));
> +               return DateTextField.forShortStyle(id, dateFieldModel);
>        }
>
>        /**
>
> Modified:
> wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
> URL:
> http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java?rev=1051262&r1=1051261&r2=1051262&view=diff
>
> ==============================================================================
> ---
> wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
> (original)
> +++
> wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
> Mon Dec 20 19:51:09 2010
> @@ -19,17 +19,28 @@ package org.apache.wicket.extensions.yui
>  import java.util.Date;
>  import java.util.GregorianCalendar;
>  import java.util.Locale;
> +import java.util.TimeZone;
>
>  import org.apache.wicket.Page;
>  import org.apache.wicket.WicketTestCase;
> +import org.apache.wicket.protocol.http.request.WebClientInfo;
>  import org.apache.wicket.util.tester.DiffUtil;
>  import org.apache.wicket.util.tester.FormTester;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
>
>  /**
>  *
>  */
>  public class DatePickerTest extends WicketTestCase
>  {
> +       /** log. */
> +       private static final Logger log =
> LoggerFactory.getLogger(DatePickerTest.class);
> +
> +       /**
> +        *
> +        * @throws Exception
> +        */
>        public void test1() throws Exception
>        {
>                myTestExecution(DatesPage1.class,
> "DatesPage1_ExpectedResult.html");
> @@ -52,8 +63,48 @@ public class DatePickerTest extends Wick
>                formTester.setValue("dateField:date", "06.11.2010");
>                formTester.submit();
>                DatesPage2 page = (DatesPage2)tester.getLastRenderedPage();
> -               assertEquals(date, page.dateTime);
> -               assertEquals(date, page.date);
> +
> +               log.error("orig: " + date + "; date: " + page.date + ";
> dateTime: " + page.dateTime);
> +               assertEquals(date.toString(), page.dateTime.toString());
> +               assertEquals(date.toString(), page.date.toString());
> +       }
> +
> +       /**
> +        *
> +        * @throws Exception
> +        */
> +       public void test3() throws Exception
> +       {
> +               TimeZone tzClient =
> TimeZone.getTimeZone("America/Los_Angeles");
> +               TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin");
> +
> +               System.setProperty("user.timezone",
> tzServer.getDisplayName());
> +
> +               Class<? extends Page> pageClass = DatesPage2.class;
> +               GregorianCalendar gc = new GregorianCalendar(tzClient);
> +               gc.set(2010, 10, 06, 0, 0, 0);
> +               Date date = gc.getTime();
> +
> +               WebClientInfo clientInfo =
> (WebClientInfo)tester.getSession().getClientInfo();
> +               clientInfo.getProperties().setTimeZone(tzClient);
> +
> +               tester.getSession().setLocale(Locale.GERMAN);
> +               tester.startPage(pageClass);
> +               tester.assertRenderedPage(pageClass);
> +               FormTester formTester = tester.newFormTester("form");
> +               formTester.setValue("dateTimeField:date", "06.11.2010");
> +               formTester.setValue("dateTimeField:hours", "00");
> +               formTester.setValue("dateTimeField:minutes", "00");
> +               formTester.setValue("dateField:date", "06.11.2010");
> +               formTester.setValue("dateField:hours", "00");
> +               formTester.setValue("dateField:minutes", "00");
> +               formTester.submit();
> +
> +               DatesPage2 page = (DatesPage2)tester.getLastRenderedPage();
> +
> +               log.error("orig: " + date + "; date: " + page.date + ";
> dateTime: " + page.dateTime);
> +               assertEquals(date.toString(), page.dateTime.toString());
> +               assertEquals(date.toString(), page.date.toString());
>        }
>
>        /**
>
>
>

Re: svn commit: r1051262 - in /wicket/trunk/wicket-datetime/src: main/java/org/apache/wicket/extensions/yui/calendar/ test/java/org/apache/wicket/extensions/yui/calendar/

Posted by Andrea Del Bene <ad...@ciseonweb.it>.
+1 for making TimeField a subtype of DateTimeField. currently they have 
a considerable amount of code in common so IMHO it would be a good idea 
to put them in the same hierarchy.


> DateField is no more FormComponentPanel, but now extends DateTimeField and
> just sets the time related components to invisible.
> Should we do the same for the recently added TimeField ?
>
> On Mon, Dec 20, 2010 at 8:51 PM,<jd...@apache.org>  wrote:
>