You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2011/03/26 06:50:56 UTC

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

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" />&nbsp;:
+  	<input type="text" wicket:id="hours" size="2" />
+   	<span wicket:id="hoursSeparator">&nbsp;:</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 &ltinput&gt 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