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, <jdonners...@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()); > } > > /** > > >