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


Reply via email to