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());
        }
 
        /**


Reply via email to