Repository: wicket
Updated Branches:
  refs/heads/master 5877b8ff9 -> 003c72d4c


WICKET-6576 parse pattern

support different from format pattern

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/003c72d4
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/003c72d4
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/003c72d4

Branch: refs/heads/master
Commit: 003c72d4c043e6e87b05e0073b802f3c4bd47182
Parents: 5877b8f
Author: Sven Meier <svenme...@apache.org>
Authored: Mon Aug 6 23:12:42 2018 +0200
Committer: Sven Meier <svenme...@apache.org>
Committed: Mon Aug 6 23:12:42 2018 +0200

----------------------------------------------------------------------
 .../wicket/examples/datetime/DateTimePage.html  |  6 ++
 .../wicket/examples/datetime/DateTimePage.java  | 12 ++-
 .../html/form/datetime/LocalDateTextField.java  | 91 ++++++++++++++------
 .../form/datetime/LocalDateTextFieldTest.java   | 26 ++++--
 4 files changed, 100 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/003c72d4/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
index 7778689..19b021a 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
@@ -27,6 +27,12 @@
        
                        <hr/>
 
+                       <h3>LocalDateTextField formatting with dd-MM-yyyy and 
parsing with d-M-yyyy</h3>
+                       <input wicket:id="date" type="text" />
+                       <br/>
+
+                       <hr/>
+
                        <h3>LocalDateTimeField (default time 00:00)</h3>
                        <span wicket:id="datetime0"></span><br/>
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/003c72d4/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
index de0f8ea..3548c09 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.examples.datetime;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
@@ -30,6 +31,7 @@ import java.util.stream.Collectors;
 import org.apache.wicket.Session;
 import org.apache.wicket.examples.WicketExamplePage;
 import org.apache.wicket.examples.forminput.FormInputApplication;
+import 
org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTextField;
 import 
org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeField;
 import 
org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeTextField;
 import org.apache.wicket.extensions.markup.html.form.datetime.TimeField;
@@ -68,6 +70,9 @@ public class DateTimePage extends WicketExamplePage
        private LocalTime time2 = LocalTime.of(22, 15);
 
        @SuppressWarnings("unused")
+       private LocalDate date = LocalDate.now();
+
+       @SuppressWarnings("unused")
        private LocalDateTime dateTime0 = LocalDateTime.now();
 
        @SuppressWarnings("unused")
@@ -126,6 +131,9 @@ public class DateTimePage extends WicketExamplePage
                        }
                });
 
+               final LocalDateTextField dateField = new 
LocalDateTextField("date", new PropertyModel<>(this, "date"), "dd-MM-yyyy", 
"d-M-yyyy");
+               form.add(dateField);
+
                final LocalDateTimeField datetimeField0 = new 
LocalDateTimeField("datetime0",
                        new PropertyModel<>(this, "dateTime0"))
                {
@@ -161,7 +169,7 @@ public class DateTimePage extends WicketExamplePage
                form.add(new Label("datetime1-label", zonedDateTime1));
 
                IModel<ZonedDateTime> zonedDateTime2 = new 
PropertyModel<>(this, "dateTime2");
-               LocalDateTimeTextField datetime2 = new 
LocalDateTimeTextField("datetime2",
+               LocalDateTimeTextField datetimeField2 = new 
LocalDateTimeTextField("datetime2",
                        new ZonedToLocalDateTimeModel(zonedDateTime2)
                        {
                                private static final long serialVersionUID = 1L;
@@ -178,7 +186,7 @@ public class DateTimePage extends WicketExamplePage
                                        return targetZone;
                                }
                        }, FormatStyle.SHORT, FormatStyle.SHORT);
-               form.add(datetime2);
+               form.add(datetimeField2);
                form.add(new Label("datetime2-label", zonedDateTime2));
 
                final ZonedDateTimeField datetimeField3 = new 
ZonedDateTimeField("datetime3",

http://git-wip-us.apache.org/repos/asf/wicket/blob/003c72d4/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
index 68d46de..a26f2b1 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
@@ -20,7 +20,9 @@ import java.time.LocalDate;
 import java.time.chrono.IsoChronology;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
+import java.time.format.DateTimeParseException;
 import java.time.format.FormatStyle;
+import java.time.temporal.TemporalAccessor;
 import java.util.Locale;
 
 import 
org.apache.wicket.markup.html.form.AbstractTextComponent.ITextFormatProvider;
@@ -28,6 +30,7 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.LocalDateConverter;
+import org.apache.wicket.util.string.Strings;
 
 /**
  * A TextField that is mapped to a <code>java.time.LocalDate</code> object and 
that uses java.time time to
@@ -51,12 +54,42 @@ public class LocalDateTextField extends 
TextField<LocalDate> implements ITextFor
         * 
         * @param id
         *            the component id
+        * @param pattern
+        *            the pattern to use
+        */
+       public LocalDateTextField(String id, String pattern)
+       {
+               this(id, null, pattern);
+       }
+       
+       /**
+        * Construct with a pattern.
+        * 
+        * @param id
+        *            the component id
         * @param model
         *            the model
         * @param pattern
         *            the pattern to use
         */
-       public LocalDateTextField(String id, IModel<LocalDate> model, String 
datePattern)
+       public LocalDateTextField(String id, IModel<LocalDate> model, String 
pattern)
+       {
+               this(id, model, pattern, pattern);
+       }
+
+       /**
+        * Construct with pattern for formatting and parsing.
+        * 
+        * @param id
+        *            the component id
+        * @param model
+        *            the model
+        * @param formatPattern
+        *            the pattern to use for formatting
+        * @param parsePattern
+        *            the pattern to use for parsing
+        */
+       public LocalDateTextField(String id, IModel<LocalDate> model, String 
formatPattern, String parsePattern)
        {
                super(id, model, LocalDate.class);
 
@@ -64,30 +97,52 @@ public class LocalDateTextField extends 
TextField<LocalDate> implements ITextFor
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public DateTimeFormatter getDateTimeFormatter(Locale 
locale)
+                       protected DateTimeFormatter getDateTimeFormatter()
                        {
-                               return 
DateTimeFormatter.ofPattern(datePattern).withLocale(locale);
+                               return 
DateTimeFormatter.ofPattern(formatPattern);
+                       }
+
+                       /**
+                        * Overwritten to support a custom parse pattern.
+                        */
+                       @Override
+                       public LocalDate convertToObject(final String value, 
Locale locale)
+                       {
+                               if (Strings.isEmpty(value))
+                               {
+                                       return null;
+                               }
+
+                               DateTimeFormatter dateTimeFormatter = 
DateTimeFormatter.ofPattern(parsePattern).withLocale(locale);
+                               TemporalAccessor temporalAccessor;
+                               try {
+                                       temporalAccessor = 
dateTimeFormatter.parse(value);
+                               } catch (DateTimeParseException ex) {
+                                       throw newConversionException("Cannot 
parse '" + value, value, locale);
+                               }
+                               
+                               return createTemporal(temporalAccessor);
                        }
 
                        @Override
                        public String getTextFormat(Locale locale)
                        {
-                               return datePattern;
+                               return formatPattern;
                        }
                };
        }
 
        /**
-        * Construct with a pattern.
+        * Construct with a style.
         * 
         * @param id
         *            the component id
-        * @param pattern
-        *            the pattern to use
+        * @param dateStyle
+        *            the style to use
         */
-       public LocalDateTextField(String id, String datePattern)
+       public LocalDateTextField(String id, FormatStyle dateStyle)
        {
-               this(id, null, datePattern);
+               this(id, null, dateStyle);
        }
 
        /**
@@ -108,9 +163,9 @@ public class LocalDateTextField extends 
TextField<LocalDate> implements ITextFor
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public DateTimeFormatter getDateTimeFormatter(Locale 
locale)
+                       protected DateTimeFormatter getDateTimeFormatter()
                        {
-                               return 
DateTimeFormatter.ofLocalizedDate(dateStyle).withLocale(locale);
+                               return 
DateTimeFormatter.ofLocalizedDate(dateStyle);
                        }
 
                        @Override
@@ -121,20 +176,6 @@ public class LocalDateTextField extends 
TextField<LocalDate> implements ITextFor
                };
        }
 
-
-       /**
-        * Construct with a style.
-        * 
-        * @param id
-        *            the component id
-        * @param dateStyle
-        *            the style to use
-        */
-       public LocalDateTextField(String id, FormatStyle dateStyle)
-       {
-               this(id, null, dateStyle);
-       }
-
        /**
         * @return The specialized converter.
         * @see org.apache.wicket.Component#createConverter(java.lang.Class)

http://git-wip-us.apache.org/repos/asf/wicket/blob/003c72d4/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
index 1d50158..0026e7f 100644
--- 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
@@ -17,15 +17,12 @@
 package org.apache.wicket.extensions.markup.html.form.datetime;
 
 import java.time.LocalDate;
-import java.time.format.FormatStyle;
-import java.util.Locale;
 
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.util.convert.converter.LocalDateConverter;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.FormTester;
@@ -52,12 +49,25 @@ public class LocalDateTextFieldTest extends WicketTestCase
        @Test
        public void dateNotNullTest()
        {
-               LocalDate date = LocalDate.of(2017, 02, 13);
+               LocalDate date = LocalDate.of(2017, 02, 03);
                TestPage page = new TestPage(null);
                tester.startPage(page);
                FormTester formTester = tester.newFormTester("form", false);
-               formTester.setValue("field",
-                       new LocalDateConverter().convertToString(date, 
Locale.forLanguageTag("en-US")));
+               formTester.setValue("field", "03-02-2017");
+               formTester.submit();
+               tester.assertNoErrorMessage();
+               LocalDate d = page.field.getModelObject();
+               assertEquals(date, d);
+       }
+
+       @Test
+       public void dateParsePatternTest()
+       {
+               LocalDate date = LocalDate.of(2017, 02, 03);
+               TestPage page = new TestPage(null);
+               tester.startPage(page);
+               FormTester formTester = tester.newFormTester("form", false);
+               formTester.setValue("field", "3-2-2017");
                formTester.submit();
                tester.assertNoErrorMessage();
                LocalDate d = page.field.getModelObject();
@@ -75,9 +85,9 @@ public class LocalDateTextFieldTest extends WicketTestCase
                        Form<Void> form = new Form<>("form");
                        add(form);
 
-                       form.add(field = new LocalDateTextField("field", 
Model.of(val), FormatStyle.SHORT));
+                       form.add(field = new LocalDateTextField("field", 
Model.of(val), "dd-MM-yyyy", "d-M-yyyy"));
                }
-
+               
                @Override
                public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
                        Class<?> containerClass)

Reply via email to