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