Author: ivaynberg
Date: Sat Mar 26 05:50:56 2011
New Revision: 1085651
URL: http://svn.apache.org/viewvc?rev=1085651&view=rev
Log:
3510
Modified:
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.html
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/TimeField.java
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.html
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.java
Modified:
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.html
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.html?rev=1085651&r1=1085650&r2=1085651&view=diff
==============================================================================
---
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.html
(original)
+++
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.html
Sat Mar 26 05:50:56 2011
@@ -18,7 +18,8 @@
<wicket:panel>
<span style="white-space: nowrap;">
<input type="text" wicket:id="date" size="12" />
- <input type="text" wicket:id="hours" size="2" /> :
+ <input type="text" wicket:id="hours" size="2" />
+ <span wicket:id="hoursSeparator"> :</span>
<input type="text" wicket:id="minutes" size="2" />
<select wicket:id="amOrPmChoice"></select>
</span>
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=1085651&r1=1085650&r2=1085651&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
Sat Mar 26 05:50:56 2011
@@ -26,6 +26,7 @@ import java.util.TimeZone;
import org.apache.wicket.Session;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.TextField;
@@ -173,6 +174,16 @@ public class DateTimeField extends FormC
// Create and add the "AM/PM" Listbox
add(amOrPmChoice = new DropDownChoice<AM_PM>(AM_OR_PM_CHOICE,
new PropertyModel<AM_PM>(
this, AM_OR_PM), Arrays.asList(AM_PM.values())));
+
+ add(new WebMarkupContainer("hoursSeparator"){
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean isVisible()
+ {
+ return minutesField.determineVisibility();
+ }
+ });
}
/**
@@ -402,15 +413,15 @@ public class DateTimeField extends FormC
}
else
{
- MutableDateTime mDate = new
MutableDateTime(modelObject);
-
// convert date to the client's time zone if we have
that info
TimeZone zone = getClientTimeZone();
if (zone != null)
{
- mDate.setZone(DateTimeZone.forTimeZone(zone));
+ modelObject = changeTimeZone(modelObject, zone);
}
+ MutableDateTime mDate = new
MutableDateTime(modelObject);
+
date = mDate.toDate();
if (use12HourFormat)
@@ -431,6 +442,32 @@ public class DateTimeField extends FormC
}
/**
+ * Change a date in another timezone
+ *
+ * @param date
+ * The input date.
+ * @param zone
+ * The target timezone.
+ * @return A new converted date.
+ */
+ public static Date changeTimeZone(Date date, TimeZone zone)
+ {
+ Calendar first = Calendar.getInstance(zone);
+ first.setTimeInMillis(date.getTime());
+
+ Calendar output = Calendar.getInstance();
+ output.set(Calendar.YEAR, first.get(Calendar.YEAR));
+ output.set(Calendar.MONTH, first.get(Calendar.MONTH));
+ output.set(Calendar.DAY_OF_MONTH,
first.get(Calendar.DAY_OF_MONTH));
+ output.set(Calendar.HOUR_OF_DAY,
first.get(Calendar.HOUR_OF_DAY));
+ output.set(Calendar.MINUTE, first.get(Calendar.MINUTE));
+ output.set(Calendar.SECOND, first.get(Calendar.SECOND));
+ output.set(Calendar.MILLISECOND,
first.get(Calendar.MILLISECOND));
+
+ return output.getTime();
+ }
+
+ /**
* Checks whether the current {@link Locale} uses the 12h or 24h time
format. This method can be
* overridden to e.g. always use 24h format.
*
Modified:
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/TimeField.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/TimeField.java?rev=1085651&r1=1085650&r2=1085651&view=diff
==============================================================================
---
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/TimeField.java
(original)
+++
wicket/trunk/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/TimeField.java
Sat Mar 26 05:50:56 2011
@@ -60,7 +60,8 @@ public class TimeField extends DateTimeF
@Override
protected void convertInput()
{
- getDateTextField().setConvertedInput(new Date());
+ Date modelObject = (Date)getDefaultModelObject();
+ getDateTextField().setConvertedInput(modelObject != null ?
modelObject : new Date());
super.convertInput();
}
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=1085651&r1=1085650&r2=1085651&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
Sat Mar 26 05:50:56 2011
@@ -72,11 +72,13 @@ public class DatePickerTest extends Wick
}
/**
+ * Tests conversion of input for DateTimeField and DateField.
+ *
* @throws Exception
*/
- public void test2() throws Exception
+ public void testDateFieldInput() throws Exception
{
- log.debug("=========== test2() =================");
+ log.debug("=========== testDateFieldInput() =================");
Class<? extends Page> pageClass = DatesPage2.class;
Date date = new GregorianCalendar(2010, 10, 6, 0, 0).getTime();
tester.getSession().setLocale(Locale.GERMAN);
@@ -98,12 +100,14 @@ public class DatePickerTest extends Wick
}
/**
- *
+ * Tests conversion of input for DateTimeField and DateField when the
client and server are in
+ * different time zones.
+ *
* @throws Exception
*/
- public void test3() throws Exception
+ public void testDateFieldInputTimezone() throws Exception
{
- log.debug("=========== test3() =================");
+ log.debug("=========== testDateFieldInputTimezone()
=================");
TimeZone tzClient = TimeZone.getTimeZone("America/Los_Angeles");
TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin");
@@ -175,9 +179,9 @@ public class DatePickerTest extends Wick
}
/**
- * Test date conversion with the server having a different current date
than the client time
- * zone.
- *
+ * Test date conversion with the server's time zone having a different
current date than the
+ * client time zone.
+ *
* @throws ParseException
*/
public void testDifferentDateTimeZoneConversion() throws ParseException
@@ -185,12 +189,11 @@ public class DatePickerTest extends Wick
log.debug("=========== testDifferentDateTimeZoneConversion()
=================");
TimeZone origJvmDef = TimeZone.getDefault();
DateTimeZone origJodaDef = DateTimeZone.getDefault();
- TimeZone tzClient = TimeZone.getTimeZone("Australia/South");
- TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin");
+ TimeZone tzClient = TimeZone.getTimeZone("GMT+14");
+ TimeZone tzServer = TimeZone.getTimeZone("GMT-12");
TimeZone.setDefault(tzServer);
DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer));
- // Locale.setDefault(Locale.GERMAN);
Class<? extends Page> pageClass = DatesPage2.class;
MutableDateTime dt = new
MutableDateTime(DateTimeZone.forTimeZone(tzClient));
@@ -222,16 +225,112 @@ public class DatePickerTest extends Wick
DateTimeZone.setDefault(origJodaDef);
}
+ /**
+ * Test date conversion with the server's time zone having a different
current date than the
+ * client time zone using a Locale with am/pm style time.
+ */
+ public void testDifferentDateTimeZoneConversionAMPM()
+ {
+ TimeZone origJvmDef = TimeZone.getDefault();
+ DateTimeZone origJodaDef = DateTimeZone.getDefault();
+ TimeZone tzClient = TimeZone.getTimeZone("GMT+14");
+ TimeZone tzServer = TimeZone.getTimeZone("GMT-12");
+
+ TimeZone.setDefault(tzServer);
+ DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer));
+
+ Class<? extends Page> pageClass = DatesPage2.class;
+ MutableDateTime dt = new
MutableDateTime(DateTimeZone.forTimeZone(tzClient));
+ dt.setDateTime(2010, 11, 6, 22, 0, 0, 0);
+ Date date = new Date(dt.getMillis());
+
+ WebClientInfo clientInfo =
(WebClientInfo)tester.getSession().getClientInfo();
+ clientInfo.getProperties().setTimeZone(tzClient);
+
+ tester.getSession().setLocale(Locale.US);
+ tester.startPage(pageClass);
+ tester.assertRenderedPage(pageClass);
+ FormTester formTester = tester.newFormTester("form");
+ formTester.setValue("dateTimeField:date", "11/06/2010");
+ formTester.setValue("dateTimeField:hours", "10");
+ formTester.setValue("dateTimeField:minutes", "00");
+ formTester.setValue("dateTimeField:amOrPmChoice", "1");
+ formTester.submit();
+
+ DatesPage2 page = (DatesPage2)tester.getLastRenderedPage();
+
+ log.debug("orig: " + date.getTime() + "; dateTime: " +
page.dateTime.getTime());
+ log.debug("orig: " + date + "; dateTime: " + page.dateTime);
+ assertEquals(0, date.compareTo(page.dateTime));
+
+ TimeZone.setDefault(origJvmDef);
+ DateTimeZone.setDefault(origJodaDef);
+ }
+
+ /**
+ * Test time conversion for TimeField. The day, month, year of the
TimeField model should not be
+ * changed. The hours and minutes should be converted to the server's
time zone based on the
+ * day, month and year of the Date model.
+ */
+ public void testTimeFieldDST()
+ {
+ TimeZone origJvmDef = TimeZone.getDefault();
+ DateTimeZone origJodaDef = DateTimeZone.getDefault();
+ TimeZone tzClient = TimeZone.getTimeZone("Canada/Eastern");
+ TimeZone tzServer = TimeZone.getTimeZone("GMT");
+
+ TimeZone.setDefault(tzServer);
+ DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer));
+ WebClientInfo clientInfo =
(WebClientInfo)tester.getSession().getClientInfo();
+ clientInfo.getProperties().setTimeZone(tzClient);
+ tester.getSession().setLocale(Locale.GERMAN);
+
+ // Test with standard time (in client time zone)
+ MutableDateTime dt = new
MutableDateTime(DateTimeZone.forTimeZone(tzClient));
+ dt.setDateTime(2010, 1, 15, 0, 0, 0, 0);
+ Date date = new Date(dt.getMillis());
+ DatesPage2 testPage = new DatesPage2();
+ testPage.time = date;
+ tester.startPage(testPage);
+ FormTester formTester = tester.newFormTester("form");
+ formTester.setValue("timeField:hours", "00");
+ formTester.setValue("timeField:minutes", "00");
+ formTester.submit();
+ assertEquals(date, testPage.time);
+
+ // Test with daylight savings time (in client time zone)
+ dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient));
+ dt.setDateTime(2010, 7, 15, 0, 0, 0, 0);
+ date = new Date(dt.getMillis());
+ testPage = new DatesPage2();
+ testPage.time = date;
+ tester.startPage(testPage);
+ formTester = tester.newFormTester("form");
+ formTester.setValue("timeField:hours", "00");
+ formTester.setValue("timeField:minutes", "00");
+ formTester.submit();
+ assertEquals(date, testPage.time);
+
+ TimeZone.setDefault(origJvmDef);
+ DateTimeZone.setDefault(origJodaDef);
+ }
+
+ /**
+ * Test StyleDateConverter with the server's time zone having a
different current date than the
+ * client time zone.
+ *
+ * @throws ParseException
+ */
public void testStyleDateConverterTimeZoneDifference() throws
ParseException
{
TimeZone origJvmDef = TimeZone.getDefault();
DateTimeZone origJodaDef = DateTimeZone.getDefault();
- TimeZone tzClient = TimeZone.getTimeZone("Etc/GMT-14");
- TimeZone tzServer = TimeZone.getTimeZone("Etc/GMT+12");
+
+ TimeZone tzClient = TimeZone.getTimeZone("GMT+14");
+ TimeZone tzServer = TimeZone.getTimeZone("GMT-12");
TimeZone.setDefault(tzServer);
DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer));
- Locale.setDefault(Locale.GERMANY);
WebClientInfo clientInfo =
(WebClientInfo)tester.getSession().getClientInfo();
clientInfo.getProperties().setTimeZone(tzClient);
@@ -242,19 +341,83 @@ public class DatePickerTest extends Wick
cal.set(2011, 10, 5, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
- Locale.setDefault(Locale.US);
-
Date dateRef = cal.getTime();
Date date = converter.convertToObject("05.11.2011",
Locale.GERMANY);
log.debug("ref: " + dateRef.getTime() + "; converted: " +
date.getTime());
log.debug("ref: " + dateRef + "; date: " + date);
- assertEquals(0, dateRef.compareTo(date));
+ assertEquals(dateRef, date);
TimeZone.setDefault(origJvmDef);
DateTimeZone.setDefault(origJodaDef);
}
+
/**
- *
+ * Validates the "value" tags of the <input> fields for
DateTimeField, DateField and
+ * TimeField when they are given Date models containing Date instances.
+ */
+ public void testDateFieldsWithDateModels()
+ {
+ TimeZone origJvmDef = TimeZone.getDefault();
+ DateTimeZone origJodaDef = DateTimeZone.getDefault();
+
+ TimeZone tzClient = TimeZone.getTimeZone("GMT-12");
+ TimeZone tzServer = TimeZone.getTimeZone("GMT+14");
+
+ TimeZone.setDefault(tzServer);
+ DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer));
+ WebClientInfo clientInfo =
(WebClientInfo)tester.getSession().getClientInfo();
+ clientInfo.getProperties().setTimeZone(tzClient);
+
+ Calendar cal = Calendar.getInstance(tzServer);
+ cal.set(2011, 5, 15, 10, 30, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ Date date = cal.getTime();
+
+ DateFormat format =
DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN);
+ format.setTimeZone(tzClient);
+ String dateRefString = format.format(date);
+ cal.setTimeZone(tzClient);
+ String hoursRefString =
Integer.toString(cal.get(Calendar.HOUR_OF_DAY));
+ String minutesRefString =
Integer.toString(cal.get(Calendar.MINUTE));
+
+ DatesPage2 testPage = new DatesPage2();
+ testPage.dateTime = date;
+ testPage.date = date;
+ testPage.time = date;
+ tester.getSession().setLocale(Locale.GERMAN);
+ tester.startPage(testPage);
+
+ String dateTimeFieldDateValue =
tester.getTagByWicketId("dateTimeField")
+ .getChild("wicket:id", "date")
+ .getAttribute("value");
+ assertEquals(dateRefString, dateTimeFieldDateValue);
+ String dateTimeFieldHoursValue =
tester.getTagByWicketId("dateTimeField")
+ .getChild("wicket:id", "hours")
+ .getAttribute("value");
+ assertEquals(hoursRefString, dateTimeFieldHoursValue);
+ String dateTimeFieldMinutesValue =
tester.getTagByWicketId("dateTimeField")
+ .getChild("wicket:id", "minutes")
+ .getAttribute("value");
+ assertEquals(minutesRefString, dateTimeFieldMinutesValue);
+ String dateFieldValue = tester.getTagByWicketId("dateField")
+ .getChild("wicket:id", "date")
+ .getAttribute("value");
+ assertEquals(dateRefString, dateFieldValue);
+ String timeFieldHoursValue =
tester.getTagByWicketId("timeField")
+ .getChild("wicket:id", "hours")
+ .getAttribute("value");
+ assertEquals(hoursRefString, timeFieldHoursValue);
+ String timeFieldMinutesValue =
tester.getTagByWicketId("timeField")
+ .getChild("wicket:id", "minutes")
+ .getAttribute("value");
+ assertEquals(minutesRefString, timeFieldMinutesValue);
+
+ TimeZone.setDefault(origJvmDef);
+ DateTimeZone.setDefault(origJodaDef);
+ }
+
+ /**
+ *
* @throws ParseException
*/
public void testDates1() throws ParseException
@@ -285,7 +448,7 @@ public class DatePickerTest extends Wick
}
/**
- *
+ *
* @throws ParseException
*/
public void testDates2() throws ParseException
@@ -316,7 +479,7 @@ public class DatePickerTest extends Wick
}
/**
- *
+ *
* @throws ParseException
*/
public void testDates3() throws ParseException
@@ -348,7 +511,7 @@ public class DatePickerTest extends Wick
/**
* Simulate what DateTimeField does
- *
+ *
* @param dateStr
* @param hours
* @param minutes
@@ -427,7 +590,7 @@ public class DatePickerTest extends Wick
/**
* Simulate what DateTimeField does
- *
+ *
* @param dateStr
* @param hours
* @param minutes
Modified:
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.html
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.html?rev=1085651&r1=1085650&r2=1085651&view=diff
==============================================================================
---
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.html
(original)
+++
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.html
Sat Mar 26 05:50:56 2011
@@ -2,8 +2,9 @@
<html>
<body>
<form wicket:id="form">
- <input type="text" wicket:id="dateTimeField" />
- <input type="text" wicket:id="dateField" />
+ <span wicket:id="dateTimeField">[dateTime field]</span>
+ <span wicket:id="dateField">[date field]</span>
+ <span wicket:id="timeField">[time field]</span>
<input type="submit" value="submit" />
</form>
</body>
Modified:
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.java?rev=1085651&r1=1085650&r2=1085651&view=diff
==============================================================================
---
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.java
(original)
+++
wicket/trunk/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage2.java
Sat Mar 26 05:50:56 2011
@@ -27,12 +27,17 @@ import org.apache.wicket.model.PropertyM
*/
public class DatesPage2 extends WebPage
{
+ private static final long serialVersionUID = 1L;
+
/** */
public Date dateTime;
/** */
public Date date;
+ /** */
+ public Date time;
+
/**
* Constructor
*/
@@ -43,5 +48,6 @@ public class DatesPage2 extends WebPage
form.add(new DateTimeField("dateTimeField", new
PropertyModel<Date>(this, "dateTime")));
form.add(new DateField("dateField", new
PropertyModel<Date>(this, "date")));
+ form.add(new TimeField("timeField", new
PropertyModel<Date>(this, "time")));
}
}
\ No newline at end of file