You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/10/09 15:14:31 UTC

[isis] branch ISIS-2005_temporal-type-rendering created (now 1a42774)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-2005_temporal-type-rendering
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at 1a42774  ISIS-2005: fixes java.sql.Date rendered with -1 day offset

This branch includes the following new commits:

     new 1a42774  ISIS-2005: fixes java.sql.Date rendered with -1 day offset

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[isis] 01/01: ISIS-2005: fixes java.sql.Date rendered with -1 day offset

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-2005_temporal-type-rendering
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1a427745ed8561ff542f789fc541dd9e28b0645e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Oct 9 17:14:12 2018 +0200

    ISIS-2005: fixes java.sql.Date rendered with -1 day offset
    
    also provides de-duplication and constructor simplification
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2005
---
 .../datesql/JavaSqlDateValueSemanticsProvider.java | 11 ++-
 .../components/scalars/DateConverterAbstract.java  | 20 ++---
 .../ui/components/scalars/DateFormatSettings.java  | 86 ++++++++++++++++++++++
 .../ui/components/scalars/TextFieldValueModel.java |  3 +
 .../scalars/datepicker/DateTimeConfig.java         |  2 +
 .../datepicker/TextFieldWithDateTimePicker.java    | 12 ++-
 .../jdk8time/DateConverterForJdk8Abstract.java     | 17 +++--
 .../jdk8time/DateConverterForJdk8LocalDate.java    |  6 +-
 .../DateConverterForJdk8LocalDateTime.java         |  7 +-
 .../DateConverterForJdk8OffsetDateTime.java        |  6 +-
 .../jdkdates/DateConverterForJavaAbstract.java     | 76 +++++++++++++++++--
 .../jdkdates/DateConverterForJavaSqlDate.java      | 43 +++++------
 .../jdkdates/DateConverterForJavaSqlTimestamp.java | 41 ++++-------
 .../jdkdates/DateConverterForJavaUtilDate.java     | 39 +++-------
 .../scalars/jdkdates/JavaSqlDatePanel.java         |  6 ++
 .../scalars/jdkdates/JavaUtilDatePanel.java        |  5 ++
 .../jodatime/DateConverterForJodaAbstract.java     | 17 ++---
 .../jodatime/DateConverterForJodaDateTime.java     |  8 +-
 .../jodatime/DateConverterForJodaLocalDate.java    |  7 +-
 .../DateConverterForJodaLocalDateTime.java         |  9 +--
 20 files changed, 280 insertions(+), 141 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java
index a240e27..87a6a28 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java
@@ -68,7 +68,6 @@ public class JavaSqlDateValueSemanticsProvider extends DateValueSemanticsProvide
         cal.add(Calendar.YEAR, years);
         cal.add(Calendar.MONTH, months);
         cal.add(Calendar.DAY_OF_MONTH, days);
-
         return setDate(cal.getTime());
     }
 
@@ -86,5 +85,15 @@ public class JavaSqlDateValueSemanticsProvider extends DateValueSemanticsProvide
     protected Date now() {
         return new Date(Clock.getTime());
     }
+    
+    @Override //[ISIS-2005] java.sql.Date requires special treatment, so overriding the default
+    protected String doEncode(final Object pojo) {
+        return ((Date)pojo).toString();
+    }
+
+    @Override //[ISIS-2005] java.sql.Date requires special treatment, so overriding the default
+    protected Date doRestore(final String enString) {
+        return Date.valueOf(enString);
+    }
 
 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
index 8297f2a..15f494d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
@@ -30,17 +30,11 @@ public abstract class DateConverterAbstract<T> implements DateConverter<T> {
     private static final long serialVersionUID = 1L;
 
     private final Class<T> cls;
-    protected final String datePattern;
-    protected final String dateTimePattern;
+    protected final DateFormatSettings dateFormatSettings;
 
-    protected final int adjustBy;
-
-
-    protected DateConverterAbstract(Class<T> cls, String datePattern, String dateTimePattern, int adjustBy) {
+    protected DateConverterAbstract(Class<T> cls, DateFormatSettings dateFormatSettings) {
         this.cls = cls;
-        this.datePattern = datePattern;
-        this.dateTimePattern = dateTimePattern;
-        this.adjustBy = adjustBy;
+        this.dateFormatSettings = dateFormatSettings;
     }
 
     @Override
@@ -50,20 +44,20 @@ public abstract class DateConverterAbstract<T> implements DateConverter<T> {
 
     @Override
     public String getDatePattern(Locale locale) {
-        return datePattern;
+        return dateFormatSettings.getDatePattern();
     }
 
     @Override
     public String getDateTimePattern(Locale locale) {
-        return dateTimePattern;
+        return dateFormatSettings.getDateTimePattern();
     }
 
     protected DateTimeFormatter getFormatterForDatePattern() {
-        return DateTimeFormat.forPattern(datePattern);
+        return DateTimeFormat.forPattern(dateFormatSettings.getDatePattern());
     }
 
     protected DateTimeFormatter getFormatterForDateTimePattern() {
-        return DateTimeFormat.forPattern(dateTimePattern);
+        return DateTimeFormat.forPattern(dateFormatSettings.getDateTimePattern());
     }
 
     @Override
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateFormatSettings.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateFormatSettings.java
new file mode 100644
index 0000000..6308321
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateFormatSettings.java
@@ -0,0 +1,86 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.components.scalars;
+
+import java.io.Serializable;
+
+import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+
+public class DateFormatSettings implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    
+    private final String datePattern;
+    private final String dateTimePattern;
+    private final int adjustBy;
+    
+    // -- FACTORIES
+    
+    public static DateFormatSettings of(String datePattern, String dateTimePattern, int adjustBy) {
+        return new DateFormatSettings(datePattern, dateTimePattern, adjustBy);
+    }
+    
+    public static DateFormatSettings of(String datePattern, String dateTimePattern) {
+        return of(datePattern, dateTimePattern, /*adjustBy*/ 0);
+    }
+    
+    public static DateFormatSettings of(String datePattern) {
+        return of(datePattern, /*dateTimePattern same as*/ datePattern, /*adjustBy*/ 0);
+    }
+    
+    public static DateFormatSettings ofDateAndTime(WicketViewerSettings settings, int adjustBy) {
+        return of(settings.getDatePattern(), settings.getDateTimePattern(), adjustBy);
+    }
+    
+    public static DateFormatSettings ofDateOnly(WicketViewerSettings settings, int adjustBy) {
+        return of(settings.getDatePattern(), settings.getDatePattern(), adjustBy);
+    }
+    
+    // -- IMPLEMENTATION
+    
+    private DateFormatSettings(String datePattern, String dateTimePattern, int adjustBy) {
+        this.datePattern = datePattern;
+        this.dateTimePattern = dateTimePattern;
+        this.adjustBy = adjustBy;
+    }
+
+    public String getDatePattern() {
+        return datePattern;
+    }
+
+    public String getDateTimePattern() {
+        return dateTimePattern;
+    }
+
+    /**
+     * day offset
+     */
+    public int getAdjustBy() {
+        return adjustBy;
+    }
+
+    @Override
+    public String toString() {
+        return "DateFormatSettings [datePattern=" + datePattern + ", dateTimePattern=" + dateTimePattern + ", adjustBy="
+                + adjustBy + "]";
+    }
+
+    
+    
+}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index 4db0201..a0835e0 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -43,6 +43,9 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
     private final ScalarModelProvider scalarModelProvider;
 
     public TextFieldValueModel(ScalarModelProvider scalarModelProvider) {
+        
+        System.out.println("!!! TextFieldValueModel: "+scalarModelProvider.getModel().getObjectAsString());
+        
         this.scalarModelProvider = scalarModelProvider;
     }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
index 1f37b49..f7ee109 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/DateTimeConfig.java
@@ -38,6 +38,8 @@ import org.joda.time.format.DateTimeFormatter;
  * JavaScript widget
  */
 public class DateTimeConfig extends AbstractConfig {
+    private static final long serialVersionUID = 1L;
+
     /**
      * The earliest date that may be selected; all earlier dates will be disabled.
      */
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
index 2d270bb..4b500d4 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java
@@ -68,6 +68,8 @@ public class TextFieldWithDateTimePicker<T> extends TextField<T> implements ICon
 
     public TextFieldWithDateTimePicker(String id, IModel<T> model, Class<T> type, DateConverter<T> converter) {
         super(id, model, type);
+        
+        System.out.println("!!! model("+id+"): "+model.getObject());
 
         DateTimeConfig config = new DateTimeConfig();
 
@@ -110,11 +112,17 @@ public class TextFieldWithDateTimePicker<T> extends TextField<T> implements ICon
 
     @Override
     public T convertToObject(String value, Locale locale) {
+        
+        System.out.println("!!! picker toObject: "+value);
+        
         return converter.convertToObject(value, locale);
     }
 
     @Override
     public String convertToString(T value, Locale locale) {
+        
+        System.out.println("!!! picker toString: "+value);
+        
         return converter.convertToString(value, locale);
     }
 
@@ -162,7 +170,9 @@ public class TextFieldWithDateTimePicker<T> extends TextField<T> implements ICon
 
     IsisConfiguration getConfiguration() {
         return getIsisSessionFactory().getConfiguration();
-    }IsisSessionFactory getIsisSessionFactory() {
+    }
+    
+    IsisSessionFactory getIsisSessionFactory() {
         return IsisContext.getSessionFactory();
     }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8Abstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8Abstract.java
index a40e5c5..7ad9018 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8Abstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8Abstract.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdk8time;
 
 import org.apache.wicket.util.convert.ConversionException;
 import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 import java.time.format.DateTimeFormatter;
 import java.util.Locale;
@@ -28,29 +29,29 @@ abstract class DateConverterForJdk8Abstract<T> extends DateConverterAbstract<T>
 
     private static final long serialVersionUID = 1L;
 
-    DateConverterForJdk8Abstract(Class<T> cls, String datePattern, String dateTimePattern, int adjustBy) {
-        super(cls, datePattern, dateTimePattern, adjustBy);
+    DateConverterForJdk8Abstract(Class<T> cls, DateFormatSettings dateFormatSettings) {
+        super(cls, dateFormatSettings);
     }
-
+    
     @Override
     protected final T doConvertToObject(String value, Locale locale) {
         T dateTime = convert(value);
-        return minusDays(dateTime, adjustBy);
+        return minusDays(dateTime, dateFormatSettings.getAdjustBy());
     }
 
     @Override
     protected String doConvertToString(T value, Locale locale) {
         // for JodaLocalDate, the date time pattern is same as date pattern, so can use either to convert to string.
-        T t = plusDays(value, adjustBy);
-        return toString(t, DateTimeFormatter.ofPattern(dateTimePattern));
+        T t = plusDays(value, dateFormatSettings.getAdjustBy());
+        return toString(t, DateTimeFormatter.ofPattern(dateFormatSettings.getDateTimePattern()));
     }
 
     protected DateTimeFormatter getFormatterForDatePattern8() {
-        return DateTimeFormatter.ofPattern(datePattern);
+        return DateTimeFormatter.ofPattern(dateFormatSettings.getDatePattern());
     }
 
     protected DateTimeFormatter getFormatterForDateTimePattern8() {
-        return DateTimeFormatter.ofPattern(dateTimePattern);
+        return DateTimeFormatter.ofPattern(dateFormatSettings.getDateTimePattern());
     }
 
     protected abstract T minusDays(T value, int adjustBy);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDate.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDate.java
index 2e26654..33c575f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDate.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDate.java
@@ -21,9 +21,11 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdk8time;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 
-import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.wicket.util.convert.ConversionException;
 
+import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
+
 /**
  * Uses the same pattern for both date and date/time.  The only real consequence of this is that when converting a
  * string value to the date value, only a single pattern is used.
@@ -33,7 +35,7 @@ public class DateConverterForJdk8LocalDate extends DateConverterForJdk8Abstract<
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJdk8LocalDate(WicketViewerSettings settings, int adjustBy) {
-        super(LocalDate.class, settings.getDatePattern(), settings.getDatePattern(), adjustBy);
+        super(LocalDate.class, DateFormatSettings.ofDateOnly(settings, adjustBy));
     }
 
     @Override
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDateTime.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDateTime.java
index 380600d..e545317 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDateTime.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8LocalDateTime.java
@@ -24,6 +24,8 @@ import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
+
 import org.apache.wicket.util.convert.ConversionException;
 
 public class DateConverterForJdk8LocalDateTime extends DateConverterForJdk8Abstract<LocalDateTime> {
@@ -31,10 +33,9 @@ public class DateConverterForJdk8LocalDateTime extends DateConverterForJdk8Abstr
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJdk8LocalDateTime(WicketViewerSettings settings, int adjustBy) {
-        super(LocalDateTime.class, settings.getDatePattern(), settings.getDateTimePattern(), adjustBy);
+        super(LocalDateTime.class, DateFormatSettings.ofDateAndTime(settings, adjustBy));
     }
 
-
     @Override
     protected LocalDateTime minusDays(LocalDateTime value, int adjustBy) {
         return value.minusDays(adjustBy);
@@ -63,7 +64,7 @@ public class DateConverterForJdk8LocalDateTime extends DateConverterForJdk8Abstr
                 throw new ConversionException(
                         String.format(
                                 "Cannot convert '%s' into a date/time using pattern '%s' or '%s'",
-                                value, dateTimePattern, datePattern),
+                                value, dateFormatSettings.getDateTimePattern(), dateFormatSettings.getDatePattern()),
                         ex2	);
             }
         }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8OffsetDateTime.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8OffsetDateTime.java
index 18ae7be..8cc581a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8OffsetDateTime.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/DateConverterForJdk8OffsetDateTime.java
@@ -26,6 +26,8 @@ import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
+
 import org.apache.wicket.util.convert.ConversionException;
 
 public class DateConverterForJdk8OffsetDateTime extends DateConverterForJdk8Abstract<OffsetDateTime> {
@@ -33,7 +35,7 @@ public class DateConverterForJdk8OffsetDateTime extends DateConverterForJdk8Abst
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJdk8OffsetDateTime(WicketViewerSettings settings, int adjustBy) {
-        super(OffsetDateTime.class, settings.getDatePattern(), settings.getDateTimePattern(), adjustBy);
+        super(OffsetDateTime.class, DateFormatSettings.ofDateAndTime(settings, adjustBy));
     }
 
     @Override
@@ -79,7 +81,7 @@ public class DateConverterForJdk8OffsetDateTime extends DateConverterForJdk8Abst
                 throw new ConversionException(
                         String.format(
                                 "Cannot convert '%s' into a date/time using pattern '%s' or '%s'",
-                                value, dateTimePattern, datePattern),
+                                value, dateFormatSettings.getDateTimePattern(), dateFormatSettings.getDatePattern()),
                         ex2	);
             }
         }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java
index 7d20b62..748582b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java
@@ -18,24 +18,88 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import org.apache.wicket.util.convert.ConversionException;
 
 import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 public abstract class DateConverterForJavaAbstract<T extends java.util.Date> extends DateConverterAbstract<T> {
     private static final long serialVersionUID = 1L;
+    
+    private transient SimpleDateFormat dateOnlyPattern;
+    private transient SimpleDateFormat dateTimePattern;
 
-    public DateConverterForJavaAbstract(final Class<T> cls, final String datePattern, String dateTimePattern, String datePickerPattern, int adjustBy) {
-        super(cls, datePattern, dateTimePattern, adjustBy);
+    public DateConverterForJavaAbstract(Class<T> cls, DateFormatSettings dateFormatSettings) {
+        super(cls, dateFormatSettings);
     }
 
-    protected SimpleDateFormat newSimpleDateFormatUsingDatePattern() {
-        return new SimpleDateFormat(datePattern);
+    protected SimpleDateFormat getDateOnlyFormat() {
+        if(dateOnlyPattern==null) {
+            dateOnlyPattern = new SimpleDateFormat(dateFormatSettings.getDatePattern()); 
+        }
+        return dateOnlyPattern;
     }
 
-    protected SimpleDateFormat newSimpleDateFormatUsingDateTimePattern() {
-        return new SimpleDateFormat(dateTimePattern);
+    protected SimpleDateFormat getDateTimeFormat() {
+        if(dateTimePattern==null) {
+            dateTimePattern = new SimpleDateFormat(dateFormatSettings.getDateTimePattern()); 
+        }
+        return dateTimePattern;
     }
 
+    protected <X extends java.util.Date> T adjustDaysForward(X value) {
+        final int days = dateFormatSettings.getAdjustBy();
+        if(days==0) {
+            return temporalValueOf(value);
+        }
+        return temporalValueOf(addDaysTo(value, days));
+    }
+    
+    protected <X extends java.util.Date> T adjustDaysBackward(X value) {
+        final int days = dateFormatSettings.getAdjustBy();
+        if(days==0) {
+            return temporalValueOf(value);
+        }
+        return temporalValueOf(addDaysTo(value, -days));
+    }    
+    
+    protected T parseDateTime(String valueStr) {
+        try {
+            java.util.Date parsed = getDateTimeFormat().parse(valueStr);
+            return temporalValueOf(parsed);
+        } catch (ParseException ex) {
+            try {
+                java.util.Date parsed = getDateOnlyFormat().parse(valueStr);
+                return temporalValueOf(parsed);
+            } catch (ParseException ex2) {
+                throw new ConversionException("Value cannot be converted as a date/time", ex);
+            }
+        }
+    }
+    
+    protected T parseDateOnly(String valueStr) {
+        try {
+            java.util.Date parsed =  getDateOnlyFormat().parse(valueStr);
+            return temporalValueOf(parsed);
+        } catch (ParseException e) {
+            throw new ConversionException("Cannot convert into a date", e);
+        }
+    }
+    
+    protected abstract T temporalValueOf(java.util.Date date);
+    
+    // -- HELPER
+    
+    private final <X extends java.util.Date> T addDaysTo(X value, final int days) {
+        final Calendar cal = Calendar.getInstance();
+        cal.setTime(value);
+        cal.add(Calendar.DATE, days);
+        final java.util.Date adjusted = cal.getTime();
+        return temporalValueOf(adjusted);
+    }
 
 }
\ No newline at end of file
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
index 5b9e0ec..1217515 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
@@ -18,54 +18,47 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
 import java.util.Locale;
 
 import org.apache.wicket.util.convert.ConversionException;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 
 public class DateConverterForJavaSqlDate extends DateConverterForJavaAbstract<java.sql.Date> {
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJavaSqlDate(WicketViewerSettings settings, int adjustBy) {
-        this(settings.getDatePattern(), settings.getDatePattern(), adjustBy);
+        this(DateFormatSettings.ofDateOnly(settings, adjustBy));
     }
 
-    private DateConverterForJavaSqlDate(String datePattern, String datePickerPattern, int adjustBy) {
-        super(java.sql.Date.class, datePattern, datePattern, datePickerPattern, adjustBy);
+    private DateConverterForJavaSqlDate(DateFormatSettings dateFormatSettings) {
+        super(java.sql.Date.class, dateFormatSettings);
     }
 
     @Override
     protected java.sql.Date doConvertToObject(String value, Locale locale) throws ConversionException {
-        final Date date = convert(value);
-        final java.util.Date adjustedDate = addDays(date, 0-adjustBy);
-        return new java.sql.Date(adjustedDate.getTime());
-    }
-
-    private java.util.Date convert(String value) {
-        try {
-            return newSimpleDateFormatUsingDatePattern().parse(value);
-        } catch (ParseException e) {
-            throw new ConversionException("Cannot convert into a date", e);
-        }
+        
+        System.out.println("!!! toObject: "+value+" -> "+parseDateOnly(value)+" -> "+adjustDaysBackward(parseDateOnly(value)));
+        
+        final java.sql.Date date = parseDateOnly(value);
+        final java.sql.Date adjustedDate = adjustDaysBackward(date);
+        return adjustedDate;
     }
 
     @Override
     protected String doConvertToString(java.sql.Date value, Locale locale) {
-        return newSimpleDateFormatUsingDatePattern().format(addDays(value, adjustBy));
+        
+        final java.sql.Date adjustedDate = adjustDaysForward(value);
+        System.out.println("!!! toString: "+value+" -> "+adjustedDate+" -> "+getDateOnlyFormat().format(adjustedDate));
+        
+        return getDateOnlyFormat().format(adjustedDate);
     }
 
-    private static Date addDays(java.util.Date value, final int days) {
-        final Calendar cal = Calendar.getInstance();
-        cal.setTime(value);
-        cal.add(Calendar.DATE, days);
-        final Date adjusted = cal.getTime();
-        return adjusted;
+    @Override
+    protected java.sql.Date temporalValueOf(java.util.Date date) {
+        return new java.sql.Date(date.getTime());
     }
 
-
 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlTimestamp.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlTimestamp.java
index 717c94e..eb485c8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlTimestamp.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlTimestamp.java
@@ -18,58 +18,43 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
-import java.text.ParseException;
-import java.util.Calendar;
+import java.sql.Timestamp;
 import java.util.Date;
 import java.util.Locale;
 
 import org.apache.wicket.util.convert.ConversionException;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 
 public class DateConverterForJavaSqlTimestamp extends DateConverterForJavaAbstract<java.sql.Timestamp> {
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJavaSqlTimestamp(WicketViewerSettings settings, int adjustBy) {
-        this(settings.getDatePattern(), settings.getTimestampPattern(), adjustBy);
+        this(DateFormatSettings.ofDateAndTime(settings, adjustBy));
     }
-    public DateConverterForJavaSqlTimestamp(final String datePattern, String timestampPattern, int adjustBy) {
-        super(java.sql.Timestamp.class, datePattern, timestampPattern, timestampPattern, adjustBy);
+
+    private DateConverterForJavaSqlTimestamp(DateFormatSettings dateFormatSettings) {
+        super(java.sql.Timestamp.class, dateFormatSettings);
     }
 
     @Override
     protected java.sql.Timestamp doConvertToObject(String value, Locale locale) throws ConversionException {
-        final java.sql.Timestamp date = convert(value);
-        final java.sql.Timestamp adjustedDate = addDays(date, 0-adjustBy);
+        final java.sql.Timestamp date = parseDateTime(value);
+        final java.sql.Timestamp adjustedDate = adjustDaysBackward(date);
         return adjustedDate;
     }
 
-    private java.sql.Timestamp convert(String valueStr) {
-        try {
-            Date parsed = newSimpleDateFormatUsingDateTimePattern().parse(valueStr);
-            return new java.sql.Timestamp(parsed.getTime());
-        } catch (ParseException ex) {
-            try {
-                return new java.sql.Timestamp(newSimpleDateFormatUsingDatePattern().parse(valueStr).getTime());
-            } catch (ParseException ex2) {
-                throw new ConversionException("Value cannot be converted as a date/time", ex);
-            }
-        }
-    }
-
     @Override
     protected String doConvertToString(java.sql.Timestamp value, Locale locale) throws ConversionException {
-        final java.sql.Timestamp adjustedDate = addDays(value, adjustBy);
-        return newSimpleDateFormatUsingDateTimePattern().format(adjustedDate);
+        final java.sql.Timestamp adjustedDate = adjustDaysForward(value);
+        return getDateTimeFormat().format(adjustedDate);
     }
 
-    private static java.sql.Timestamp addDays(java.util.Date value, final int days) {
-        final Calendar cal = Calendar.getInstance();
-        cal.setTime(value);
-        cal.add(Calendar.DATE, days);
-        final java.sql.Timestamp adjusted = new java.sql.Timestamp(cal.getTime().getTime());
-        return adjusted;
+    @Override
+    protected Timestamp temporalValueOf(Date date) {
+        return new java.sql.Timestamp(date.getTime());
     }
 
 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
index bebf54f..6a633bb 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
@@ -18,57 +18,42 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
-import java.text.ParseException;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 
 import org.apache.wicket.util.convert.ConversionException;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 
 public class DateConverterForJavaUtilDate extends DateConverterForJavaAbstract<java.util.Date> {
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJavaUtilDate(WicketViewerSettings settings, int adjustBy) {
-        this(settings.getDatePattern(), settings.getDateTimePattern(), settings.getDateTimePattern(), adjustBy);
-    }
-    public DateConverterForJavaUtilDate(String datePattern, String dateTimePattern, String datePickerPattern, int adjustBy) {
-        super(java.util.Date.class, datePattern, dateTimePattern, datePickerPattern, adjustBy);
+        this(DateFormatSettings.ofDateAndTime(settings, adjustBy));
     }
 
+    private DateConverterForJavaUtilDate(DateFormatSettings dateFormatSettings) {
+        super(java.util.Date.class, dateFormatSettings);
+    }
 
     @Override
     protected java.util.Date doConvertToObject(String value, Locale locale) throws ConversionException {
-        final Date date = convert(value);
-        final Date adjustedDate = addDays(date, 0-adjustBy);
+        final Date date = parseDateTime(value);
+        final Date adjustedDate = adjustDaysBackward(date);
         return adjustedDate;
     }
-    private java.util.Date convert(String valueStr) {
-        try {
-            return newSimpleDateFormatUsingDateTimePattern().parse(valueStr);
-        } catch (ParseException ex) {
-            try {
-                return newSimpleDateFormatUsingDatePattern().parse(valueStr);
-            } catch (ParseException ex2) {
-                throw new ConversionException("Value cannot be converted as a date/time", ex);
-            }
-        }
-    }
 
     @Override
     protected String doConvertToString(java.util.Date value, Locale locale) throws ConversionException {
-        final Date adjustedDate = addDays(value, adjustBy);
-        return newSimpleDateFormatUsingDateTimePattern().format(adjustedDate);
+        final Date adjustedDate = adjustDaysForward(value);
+        return getDateTimeFormat().format(adjustedDate);
     }
 
-    private static Date addDays(java.util.Date value, final int days) {
-        final Calendar cal = Calendar.getInstance();
-        cal.setTime(value);
-        cal.add(Calendar.DATE, days);
-        final Date adjusted = cal.getTime();
-        return adjusted;
+    @Override
+    protected Date temporalValueOf(Date date) {
+        return date; //[ahuber] immutable, so just returning the same object
     }
 
 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
index e8a977a..11787c2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
 import java.sql.Date;
 
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
@@ -33,6 +34,11 @@ public class JavaSqlDatePanel extends ScalarPanelTextFieldDatePickerAbstract<jav
 
     public JavaSqlDatePanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel, java.sql.Date.class);
+        
+        System.out.println("!!! JavaSqlDatePanel ("+scalarModel.getClass()+"): "+scalarModel.getObjectAsString());
+        
+        _Exceptions.dumpStackTrace(System.out, 0, 10);
+        
         init(new DateConverterForJavaSqlDate(getSettings(), getAdjustBy()));
     }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
index e430835..cec292e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
@@ -35,6 +35,11 @@ public class JavaUtilDatePanel extends ScalarPanelTextFieldDatePickerAbstract<ja
         super(id, scalarModel, java.util.Date.class);
         init(new DateConverterForJavaUtilDate(getSettings(), getAdjustBy()));
     }
+    
+    @Override
+    protected Integer getLengthAdjustHint() {
+        return +3;
+    }
 
     @Override
     protected String getScalarPanelType() {
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java
index b3cf907..998e52a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java
@@ -18,35 +18,32 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
+import java.util.Locale;
+
 import org.apache.wicket.util.convert.ConversionException;
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
 import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
-
-import java.util.Locale;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 abstract class DateConverterForJodaAbstract<T> extends DateConverterAbstract<T> {
 
     private static final long serialVersionUID = 1L;
 
-    DateConverterForJodaAbstract(Class<T> cls, String datePattern, String dateTimePattern, int adjustBy) {
-        super(cls, datePattern, dateTimePattern, adjustBy);
+    DateConverterForJodaAbstract(Class<T> cls, DateFormatSettings dateFormatSettings) {
+        super(cls, dateFormatSettings);
     }
 
     @Override
     protected final T doConvertToObject(String value, Locale locale) {
         T dateTime = convert(value);
-        return minusDays(dateTime, adjustBy);
+        return minusDays(dateTime, dateFormatSettings.getAdjustBy());
     }
 
     @Override
     protected String doConvertToString(T value, Locale locale) {
         // for JodaLocalDate, the date time pattern is same as date pattern, so can use either to convert to string.
-        T t = plusDays(value, adjustBy);
+        T t = plusDays(value, dateFormatSettings.getAdjustBy());
         return toString(t, getFormatterForDateTimePattern());
     }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
index c65f6bc..621e0ef 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
@@ -18,21 +18,19 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import java.util.Locale;
-
 import org.apache.wicket.util.convert.ConversionException;
 import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormatter;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.joda.time.LocalDate;
-import org.joda.time.format.DateTimeFormatter;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 public class DateConverterForJodaDateTime extends DateConverterForJodaAbstract<DateTime> {
 
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJodaDateTime(WicketViewerSettings settings, int adjustBy) {
-        super(DateTime.class, settings.getDatePattern(), settings.getDateTimePattern(), adjustBy);
+        super(DateTime.class, DateFormatSettings.ofDateAndTime(settings, adjustBy));
     }
 
     @Override
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
index 9feb34a..8402468 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
@@ -18,13 +18,12 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import java.util.Locale;
-
 import org.apache.wicket.util.convert.ConversionException;
 import org.joda.time.LocalDate;
+import org.joda.time.format.DateTimeFormatter;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.joda.time.format.DateTimeFormatter;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 /**
  * Uses the same pattern for both date and date/time.  The only real consequence of this is that when converting a
@@ -35,7 +34,7 @@ public class DateConverterForJodaLocalDate extends DateConverterForJodaAbstract<
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJodaLocalDate(WicketViewerSettings settings, int adjustBy) {
-        super(LocalDate.class, settings.getDatePattern(), settings.getDatePattern(), adjustBy);
+        super(LocalDate.class, DateFormatSettings.ofDateOnly(settings, adjustBy));
     }
 
     @Override
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
index aaeb11e..a366847 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
@@ -18,24 +18,21 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import java.util.Locale;
-
 import org.apache.wicket.util.convert.ConversionException;
-import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
+import org.joda.time.format.DateTimeFormatter;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.joda.time.format.DateTimeFormatter;
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateFormatSettings;
 
 public class DateConverterForJodaLocalDateTime extends DateConverterForJodaAbstract<LocalDateTime> {
 
     private static final long serialVersionUID = 1L;
 
     public DateConverterForJodaLocalDateTime(WicketViewerSettings settings, int adjustBy) {
-        super(LocalDateTime.class, settings.getDatePattern(), settings.getDateTimePattern(), adjustBy);
+        super(LocalDateTime.class, DateFormatSettings.ofDateAndTime(settings, adjustBy));
     }
 
-
     @Override
     protected LocalDateTime minusDays(LocalDateTime value, int adjustBy) {
         return value.minusDays(adjustBy);