You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/05/03 13:18:46 UTC

git commit: ISIS-392: improvements to Wicket date/time fields.

Updated Branches:
  refs/heads/master 9b651e2e5 -> 69e6329cf


ISIS-392: improvements to Wicket date/time fields.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/69e6329c
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/69e6329c
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/69e6329c

Branch: refs/heads/master
Commit: 69e6329cfc08c18baf333b3d9fe76d6b49ac33fe
Parents: 9b651e2
Author: Dan Haywood <da...@apache.org>
Authored: Fri May 3 12:18:25 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Fri May 3 12:18:25 2013 +0100

----------------------------------------------------------------------
 ...t_thenResponseHeaders_CacheControl_ok_TODO.java |    9 +
 ...st_thenResponseHeaders_ContentType_ok_TODO.java |   30 +++
 ...ct_thenResponseHeaders_ContentType_ok_TODO.java |   30 +++
 .../ui/components/scalars/DateConverter.java       |   11 +
 .../components/scalars/DateConverterAbstract.java  |   42 ++++
 .../scalars/ScalarPanelTextFieldAbstract.java      |   23 ++-
 .../ScalarPanelTextFieldDatePickerAbstract.java    |   81 +++-----
 .../scalars/ScalarPanelTextFieldNumeric.java       |   13 +-
 .../ScalarPanelTextFieldParseableAbstract.java     |    2 +-
 .../ui/components/scalars/TextFieldValueModel.java |    2 +-
 .../scalars/TextFieldWithDateConverter.java        |   44 ++++
 .../isisapplib/DateConverterForApplibDate.java     |   31 +++
 .../isisapplib/DateConverterForApplibDateTime.java |   31 +++
 .../scalars/isisapplib/IsisDatePanel.html          |    2 +-
 .../scalars/isisapplib/IsisDatePanel.java          |   79 +-------
 .../scalars/isisapplib/IsisDateTimePanel.html      |    2 +-
 .../scalars/isisapplib/IsisDateTimePanel.java      |   12 +-
 .../scalars/isisapplib/IsisPasswordPanel.java      |    2 +-
 .../jdkdates/DateConverterForJavaAbstract.java     |   23 ++
 .../jdkdates/DateConverterForJavaSqlDate.java      |   30 +++
 .../jdkdates/DateConverterForJavaUtilDate.java     |   32 +++
 .../scalars/jdkdates/JavaSqlDatePanel.html         |    2 +-
 .../scalars/jdkdates/JavaSqlDatePanel.java         |   13 +-
 .../scalars/jdkdates/JavaUtilDatePanel.html        |    2 +-
 .../scalars/jdkdates/JavaUtilDatePanel.java        |   15 +--
 .../scalars/jdkmath/JavaMathBigIntegerPanel.java   |    2 +-
 .../jodatime/DateConverterForJodaAbstract.java     |   24 +++
 .../jodatime/DateConverterForJodaDateTime.java     |   33 +++
 .../jodatime/DateConverterForJodaLocalDate.java    |   29 +++
 .../DateConverterForJodaLocalDateTime.java         |   34 +++
 .../scalars/jodatime/JodaDateTimePanel.html        |    4 +-
 .../scalars/jodatime/JodaDateTimePanel.java        |   16 +--
 .../scalars/jodatime/JodaLocalDatePanel.html       |    4 +-
 .../scalars/jodatime/JodaLocalDatePanel.java       |   16 +--
 .../scalars/jodatime/JodaLocalDateTimePanel.html   |    4 +-
 .../scalars/jodatime/JodaLocalDateTimePanel.java   |   15 +--
 .../scalars/string/MultiLineStringPanel.java       |    2 +-
 .../core/tck/dom/scalars/DateTimeValuedEntity.java |  161 +++++++++++++++
 .../scalars/DateTimeValuedEntityRepository.java    |   44 ++++
 .../scalars/DateTimeValuedEntityFixture.java       |   47 +++++
 .../dom/src/main/java/dom/todo/ToDoItem.java       |    3 +-
 ..._restful_jdo-viewer-webapp-with-fixtures.launch |   20 ++
 .../src/main/webapp/WEB-INF/isis.properties        |    2 +-
 43 files changed, 790 insertions(+), 233 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_thenResponseHeaders_CacheControl_ok_TODO.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_thenResponseHeaders_CacheControl_ok_TODO.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_thenResponseHeaders_CacheControl_ok_TODO.java
index dbdedb6..78b051b 100644
--- a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_thenResponseHeaders_CacheControl_ok_TODO.java
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_thenResponseHeaders_CacheControl_ok_TODO.java
@@ -39,4 +39,13 @@ public class Get_thenResponseHeaders_CacheControl_ok_TODO {
         client = new RestfulClient(webServer.getBase());
     }
 
+    
+    @Ignore("TODO")
+    @Test
+    public void xxx() throws Exception {
+        
+        // 2.13
+        // Cache-Control, also Pragma, Date, Expires
+        
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenList_thenResponseHeaders_ContentType_ok_TODO.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenList_thenResponseHeaders_ContentType_ok_TODO.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenList_thenResponseHeaders_ContentType_ok_TODO.java
new file mode 100644
index 0000000..8942905
--- /dev/null
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenList_thenResponseHeaders_ContentType_ok_TODO.java
@@ -0,0 +1,30 @@
+package org.apache.isis.viewer.restfulobjects.tck.domainobjectorservice.id.action.invoke;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.core.webserver.WebServer;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulClient;
+import org.apache.isis.viewer.restfulobjects.tck.IsisWebServerRule;
+
+public class Get_whenList_thenResponseHeaders_ContentType_ok_TODO {
+
+    @Rule
+    public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+    protected RestfulClient client;
+
+    @Before
+    public void setUp() throws Exception {
+        final WebServer webServer = webServerRule.getWebServer();
+        client = new RestfulClient(webServer.getBase());
+    }
+
+    @Ignore
+    @Test
+    public void todo() throws Exception {
+        // 2.4.2, content-type should include "x-ro-element-type"
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenObject_thenResponseHeaders_ContentType_ok_TODO.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenObject_thenResponseHeaders_ContentType_ok_TODO.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenObject_thenResponseHeaders_ContentType_ok_TODO.java
new file mode 100644
index 0000000..2373289
--- /dev/null
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Get_whenObject_thenResponseHeaders_ContentType_ok_TODO.java
@@ -0,0 +1,30 @@
+package org.apache.isis.viewer.restfulobjects.tck.domainobjectorservice.id.action.invoke;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.core.webserver.WebServer;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulClient;
+import org.apache.isis.viewer.restfulobjects.tck.IsisWebServerRule;
+
+public class Get_whenObject_thenResponseHeaders_ContentType_ok_TODO {
+
+    @Rule
+    public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+    protected RestfulClient client;
+
+    @Before
+    public void setUp() throws Exception {
+        final WebServer webServer = webServerRule.getWebServer();
+        client = new RestfulClient(webServer.getBase());
+    }
+
+    @Ignore
+    @Test
+    public void todo() throws Exception {
+        // 2.4.2, content-type should include "x-ro-domain-type"
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverter.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverter.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverter.java
new file mode 100644
index 0000000..a303425
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverter.java
@@ -0,0 +1,11 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars;
+
+import java.util.Locale;
+
+import org.apache.wicket.util.convert.IConverter;
+
+public interface DateConverter<T> extends IConverter<T> {
+    Class<T> getConvertableClass();
+    String getDatePattern(Locale locale);
+    String getDateTimePattern(Locale locale);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
new file mode 100644
index 0000000..be1f006
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
@@ -0,0 +1,42 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars;
+
+import java.util.Locale;
+
+
+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 DateConverterAbstract(Class<T> cls, String datePattern, String dateTimePattern) {
+        this.cls = cls;
+        this.datePattern = datePattern;
+        this.dateTimePattern = dateTimePattern;
+    }
+
+    public Class<T> getConvertableClass() {
+        return cls;
+    }
+    
+    public String getDatePattern(Locale locale) {
+        return datePattern;
+    }
+    public String getDateTimePattern(Locale locale) {
+        return dateTimePattern;
+    }
+    
+    @Override
+    public T convertToObject(String value, Locale locale) {
+        return value != null? doConvertToObject(value, locale): null;
+    }
+    @Override
+    public String convertToString(T value, Locale locale) {
+        return value != null? doConvertToString(value, locale): null;
+    }
+
+    protected abstract T doConvertToObject(String value, Locale locale);
+    protected abstract String doConvertToString(T value, Locale locale);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 9d45ac7..d6b3932 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -47,6 +47,9 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     private static final String ID_SCALAR_NAME = "scalarName";
+    
+    protected static final String ID_SCALAR_VALUE = "scalarValue";
+
     private static final String ID_FEEDBACK = "feedback";
 
     protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
@@ -64,9 +67,17 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return textField;
     }
 
+    protected AbstractTextComponent<T> createTextFieldForRegular() {
+        return createTextField(ID_SCALAR_VALUE);
+    }
+
+    protected TextField<T> createTextField(final String id) {
+        return new TextField<T>(id, new TextFieldValueModel<T>(this), cls);
+    }
+
     @Override
     protected FormComponentLabel addComponentForRegular() {
-        textField = createTextField();
+        textField = createTextFieldForRegular();
         textField.setOutputMarkupId(true);
 
         addStandardSemantics();
@@ -100,7 +111,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         // parsing, not wicket
     }
 
-    protected abstract AbstractTextComponent<T> createTextField();
 
 
     private FormComponentLabel createFormComponentLabel() {
@@ -133,10 +143,14 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     protected void setTextFieldSizeIfSpecified(AbstractTextComponent<T> textField) {
         final Integer size = determineSize();
         if (size != null) {
-            textField.add(new AttributeModifier("size", Model.of("" + size)));
+            setTextFieldSize(textField, size);
         }
     }
 
+    protected void setTextFieldSize(AbstractTextComponent<T> textField, int size) {
+        textField.add(new AttributeModifier("size", Model.of("" + size)));
+    }
+    
     @SuppressWarnings("unchecked")
     protected Integer determineSize() {
         return firstValueOf(getModel(), TypicalLengthFacet.class, MaxLengthFacet.class);
@@ -155,6 +169,9 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     /**
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#COMPACT compact} format.
+     * 
+     * <p>
+     * This default implementation uses a {@link Label}, however it may be overridden if required.
      */
     @Override
     protected Component addComponentForCompact() {

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
index 8177234..9666d67 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
@@ -19,14 +19,13 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
-import java.util.Date;
+import java.io.Serializable;
 
-import org.apache.wicket.datetime.PatternDateConverter;
-import org.apache.wicket.datetime.markup.html.form.DateTextField;
+import org.apache.wicket.Component;
 import org.apache.wicket.extensions.yui.calendar.DatePicker;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.Model;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
@@ -37,51 +36,19 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 /**
  * Panel for rendering scalars representing dates, along with a date picker.
  */
-public abstract class ScalarPanelTextFieldDatePickerAbstract<T> extends ScalarPanelTextFieldAbstract<java.util.Date> {
+public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializable> extends ScalarPanelTextFieldAbstract<T> {
 
     private static final long serialVersionUID = 1L;
 
-    private static final String DATE_PATTERN = "dd-MM-yyyy"; // TODO: yui calendar does not seem to understand 'dd-MMM-yyyy' (interprets as dd-MM-yyyy)
-    
-    private final String idScalarValue;
+    private final DateConverter<T> converter;
 
-    public ScalarPanelTextFieldDatePickerAbstract(final String id, String idScalarValue, final ScalarModel scalarModel) {
-        super(id, scalarModel, java.util.Date.class);
-        this.idScalarValue = idScalarValue;
+    public ScalarPanelTextFieldDatePickerAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls, DateConverter<T> converter) {
+        super(id, scalarModel, cls);
+        this.converter = converter;
     }
-
-    protected abstract java.util.Date asDate(final T pojo);
-    protected abstract T asPojo(final java.util.Date date);
-
-    @Override
-    protected AbstractTextComponent<java.util.Date> createTextField() {
-        final TextField<java.util.Date> textField = DateTextField.withConverter(idScalarValue, new Model<java.util.Date>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public java.util.Date getObject() {
-                final ObjectAdapter adapter = getModel().getObject();
-                if (adapter == null) {
-                    return null;
-                }
-                @SuppressWarnings("unchecked")
-                final T pojo = (T) adapter.getObject();
-                final java.util.Date date = asDate(pojo);
-                return date;
-            }
-
-            @Override
-            public void setObject(final java.util.Date date) {
-                if(date == null) {
-                    getModel().setObject(null);
-                    return;
-                }
-                final T pojo = asPojo(date);
-                final ObjectAdapter adapter = adapterFor(pojo);
-                getModel().setObject(adapter);
-            }
-        }, new PatternDateConverter(DATE_PATTERN, true));
-        return textField;
+    
+    protected TextField<T> createTextField(final String id) {
+        return new TextFieldWithDateConverter<T>(id, new TextFieldValueModel<T>(this), cls, converter);
     }
 
     @Override
@@ -96,6 +63,10 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T> extends ScalarPa
             {
                 return "${calendar}.cfg.setProperty(\"navigator\",true,false); ${calendar}.render();";
             }
+            @Override
+            protected String getDatePattern() {
+                return converter.getDatePattern(getLocale());
+            }
         };
         datePicker.setShowOnFieldClick(true);
         datePicker.setAutoHide(true);
@@ -104,16 +75,28 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T> extends ScalarPa
         addObjectAdapterValidator();
     }
 
+    protected Component addComponentForCompact() {
+        final AbstractTextComponent<T> textField = createTextField(ID_SCALAR_IF_COMPACT);
+        final IModel<T> model = textField.getModel();
+        final T object = (T) model.getObject();
+        model.setObject(object);
+        
+        textField.setEnabled(false);
+        setTextFieldSize(textField, converter.getDateTimePattern(getLocale()).length());
+        
+        addOrReplace(textField);
+        return textField;
+    }
+
     private void addObjectAdapterValidator() {
-        final AbstractTextComponent<Date> textField = getTextField();
+        final AbstractTextComponent<T> textField = getTextField();
 
-        textField.add(new IValidator<java.util.Date>() {
+        textField.add(new IValidator<T>() {
             private static final long serialVersionUID = 1L;
 
             @Override
-            public void validate(final IValidatable<java.util.Date> validatable) {
-                final java.util.Date proposedValue = validatable.getValue();
-                final T proposed = asPojo(proposedValue);
+            public void validate(final IValidatable<T> validatable) {
+                final T proposed = validatable.getValue();
                 final ObjectAdapter proposedAdapter = adapterFor(proposed);
                 String reasonIfAny = scalarModel.validate(proposedAdapter);
                 if (reasonIfAny != null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index c50062a..a5535d4 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -34,7 +34,6 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extends ScalarPanelTextFieldAbstract<T> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public ScalarPanelTextFieldNumeric(final String id, final ScalarModel scalarModel, final Class<T> cls) {
         super(id, scalarModel, cls);
@@ -43,27 +42,17 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend
     @Override
     protected void addSemantics() {
         super.addSemantics();
-        
     }
 
     @Override
-    protected AbstractTextComponent<T> createTextField() {
+    protected AbstractTextComponent<T> createTextFieldForRegular() {
         return createTextField(ID_SCALAR_VALUE);
     }
 
-    /**
-     * Helper method for subtypes.
-     */
-    protected TextField<T> createTextField(final String id) {
-        return new TextField<T>(id, new TextFieldValueModel<T>(this), cls);
-    }
-
-    //@SuppressWarnings("unchecked")
     protected Component addComponentForCompact() {
         final AbstractTextComponent<T> textField = createTextField(ID_SCALAR_IF_COMPACT);
         final IModel<T> model = textField.getModel();
         final T object = (T) model.getObject();
-        //model.setObject((T) (object != null? object.getObject(): null));
         model.setObject(object);
         
         textField.setEnabled(false);

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
index f681d89..fa2f887 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
@@ -47,7 +47,7 @@ public abstract class ScalarPanelTextFieldParseableAbstract extends ScalarPanelT
     }
 
     @Override
-    protected AbstractTextComponent<String> createTextField() {
+    protected AbstractTextComponent<String> createTextFieldForRegular() {
         final AbstractTextComponent<String> textField = new TextField<String>(idTextField, new Model<String>() {
             private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index fd1c044..4f69b40 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -29,7 +29,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 /**
  * For custom {@link ScalarPanelTextFieldAbstract}s to use as the {@link Model}
- * of their {@link TextField} (as constructed in {@link ScalarPanelTextFieldAbstract#createTextField()}).
+ * of their {@link TextField} (as constructed in {@link ScalarPanelTextFieldAbstract#createTextFieldForRegular()}).
  */
 public class TextFieldValueModel<T extends Serializable> extends Model<T> {
     

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldWithDateConverter.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldWithDateConverter.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldWithDateConverter.java
new file mode 100644
index 0000000..42725b8
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldWithDateConverter.java
@@ -0,0 +1,44 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars;
+
+import java.util.Locale;
+
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.convert.IConverter;
+
+
+public class TextFieldWithDateConverter<T> extends TextField<T> implements IConverter<T> {
+
+    private static final long serialVersionUID = 1L;
+    
+    private final DateConverter<T> converter;
+
+    public TextFieldWithDateConverter(String id, IModel<T> model, Class<T> type, DateConverter<T> converter) {
+        super(id, model, type);
+        this.converter = converter;
+    }
+
+    @Override
+    public T convertToObject(String value, Locale locale) {
+        return converter.convertToObject(value, locale);
+    }
+
+    @Override
+    public String convertToString(T value, Locale locale) {
+        return converter.convertToString(value, locale);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <C> IConverter<C> getConverter(Class<C> type) {
+        // we use isAssignableFrom rather than a simple == to handle
+        // the persistence of JDO/DataNucleus:
+        // if persisting a java.sql.Date, the object we are given is actually a 
+        // org.datanucleus.store.types.simple.SqlDate (a subclass of java.sql.Date)
+        if (converter.getConvertableClass().isAssignableFrom(type)) {
+            return (IConverter<C>) converter;
+        } 
+        return super.getConverter(type);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDate.java
new file mode 100644
index 0000000..74a061d
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDate.java
@@ -0,0 +1,31 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
+
+import java.util.Locale;
+
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.DateConverterForJavaUtilDate;
+
+public class DateConverterForApplibDate extends DateConverterAbstract<org.apache.isis.applib.value.Date> {
+
+    private static final long serialVersionUID = 1L;
+    
+    private final DateConverterForJavaUtilDate converter;
+    
+    public DateConverterForApplibDate(String datePattern) {
+        super(org.apache.isis.applib.value.Date.class, datePattern, datePattern);
+        converter = new DateConverterForJavaUtilDate(datePattern, datePattern);
+    }
+    
+    @Override
+    protected org.apache.isis.applib.value.Date doConvertToObject(String value, Locale locale) {
+        final java.util.Date javaUtilDate = converter.convertToObject(value, locale);
+        return new org.apache.isis.applib.value.Date(javaUtilDate);
+    }
+
+    @Override
+    protected String doConvertToString(org.apache.isis.applib.value.Date value, Locale locale) {
+        return converter.convertToString(value.dateValue(), locale);
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDateTime.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDateTime.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDateTime.java
new file mode 100644
index 0000000..71810c7
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/DateConverterForApplibDateTime.java
@@ -0,0 +1,31 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
+
+import java.util.Locale;
+
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.DateConverterForJavaUtilDate;
+
+public class DateConverterForApplibDateTime extends DateConverterAbstract<org.apache.isis.applib.value.DateTime> {
+
+    private static final long serialVersionUID = 1L;
+    
+    private final DateConverterForJavaUtilDate converter;
+    
+    public DateConverterForApplibDateTime(String datePattern, String dateTimePattern) {
+        super(org.apache.isis.applib.value.DateTime.class, datePattern, dateTimePattern);
+        converter = new DateConverterForJavaUtilDate(datePattern, dateTimePattern);
+    }
+    
+    @Override
+    protected org.apache.isis.applib.value.DateTime doConvertToObject(String value, Locale locale) {
+        final java.util.Date javaUtilDate = converter.convertToObject(value, locale);
+        return new org.apache.isis.applib.value.DateTime(javaUtilDate);
+    }
+
+    @Override
+    protected String doConvertToString(org.apache.isis.applib.value.DateTime value, Locale locale) {
+        return converter.convertToString(value.dateValue(), locale);
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html
index 18aa42d..89cbbd1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html
@@ -33,7 +33,7 @@
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+                <input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
index cbb5b5c..609d1b4 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
@@ -19,92 +19,19 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.datetime.markup.html.form.DateTextField;
-import org.apache.wicket.extensions.yui.calendar.DatePicker;
-import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.validation.IValidatable;
-import org.apache.wicket.validation.IValidator;
-import org.apache.wicket.validation.ValidationError;
-
 import org.apache.isis.applib.value.Date;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link Date Isis' applib.Date}.
  */
-public class IsisDatePanel extends ScalarPanelTextFieldAbstract<java.util.Date> {
+public class IsisDatePanel extends ScalarPanelTextFieldDatePickerAbstract<org.apache.isis.applib.value.Date> {
 
     private static final long serialVersionUID = 1L;
 
-    private static final String ID_SCALAR_VALUE = "scalarValue";
-    private static final String DATE_PATTERN = "MM/dd/yyyy"; // TODO: i18n, see for example http://apache-wicket.1842946.n4.nabble.com/DatePicker-format-td1847739.html
-
     public IsisDatePanel(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel, java.util.Date.class);
-    }
-
-    @Override
-    protected AbstractTextComponent<java.util.Date> createTextField() {
-        final TextField<java.util.Date> textField = DateTextField.forDatePattern(ID_SCALAR_VALUE, new Model<java.util.Date>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public java.util.Date getObject() {
-                final ObjectAdapter adapter = getModel().getObject();
-                if (adapter == null) {
-                    return null;
-                }
-                final Date noDate = (Date) adapter.getObject();
-                return noDate.dateValue();
-            }
-
-            @Override
-            public void setObject(final java.util.Date date) {
-                final Date noDate = new Date(date);
-                final ObjectAdapter adapter = adapterFor(noDate);
-                getModel().setObject(adapter);
-            }
-        }, DATE_PATTERN);
-        return textField;
+        super(id, scalarModel, org.apache.isis.applib.value.Date.class, new DateConverterForApplibDate("dd-MM-yyyy"));
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-
-        final DatePicker datePicker = new DatePicker();
-        getTextField().add(datePicker);
-
-        addObjectAdapterValidator();
-    }
-
-    private void addObjectAdapterValidator() {
-        final ScalarModel scalarModel = getModel();
-        final AbstractTextComponent<java.util.Date> textField = getTextField();
-
-        textField.add(new IValidator<java.util.Date>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void validate(final IValidatable<java.util.Date> validatable) {
-                final java.util.Date proposedValue = validatable.getValue();
-                final Date proposed = new Date(proposedValue);
-                final ObjectAdapter proposedAdapter = adapterFor(proposed);
-                final String reasonIfAny = scalarModel.validate(proposedAdapter);
-                if (reasonIfAny != null) {
-                    final ValidationError error = new ValidationError();
-                    error.setMessage(reasonIfAny);
-                    validatable.error(error);
-                }
-            }
-        });
-    }
-
-    private ObjectAdapter adapterFor(final Object pojo) {
-        return getAdapterManager().adapterFor(pojo);
-    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html
index 4e6f870..5ae35c8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html
@@ -33,7 +33,7 @@
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+                <input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
index aa50073..13954ac 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
@@ -20,23 +20,17 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link DateTime Isis' applib.DateTime}.
  */
-public class IsisDateTimePanel extends ScalarPanelTextFieldParseableAbstract {
+public class IsisDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<org.apache.isis.applib.value.DateTime> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisDateTimePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
-    }
-
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
+        super(id, scalarModel, org.apache.isis.applib.value.DateTime.class, new DateConverterForApplibDateTime("dd-MM-yyyy", "dd-MM-yyyy HH:mm"));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
index 5c61316..7cb8139 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
@@ -45,7 +45,7 @@ public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected AbstractTextComponent<String> createTextField() {
+    protected AbstractTextComponent<String> createTextFieldForRegular() {
         final PasswordTextField passwordField = new PasswordTextField(idTextField, new Model<String>() {
             private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java
new file mode 100644
index 0000000..0cb505b
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaAbstract.java
@@ -0,0 +1,23 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
+
+import java.text.SimpleDateFormat;
+
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
+
+public abstract class DateConverterForJavaAbstract<T extends java.util.Date> extends DateConverterAbstract<T> {
+    private static final long serialVersionUID = 1L;
+    
+    public DateConverterForJavaAbstract(final Class<T> cls, final String datePattern, String dateTimePattern) {
+        super(cls, datePattern, dateTimePattern);
+    }
+    
+    protected SimpleDateFormat newSimpleDateFormatUsingDatePattern() {
+        return new SimpleDateFormat(datePattern);
+    }
+
+    protected SimpleDateFormat newSimpleDateFormatUsingDateTimePattern() {
+        return new SimpleDateFormat(dateTimePattern);
+    }
+    
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
new file mode 100644
index 0000000..bf02b50
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
@@ -0,0 +1,30 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
+
+import java.text.ParseException;
+import java.util.Locale;
+
+
+public class DateConverterForJavaSqlDate extends DateConverterForJavaAbstract<java.sql.Date> {
+    private static final long serialVersionUID = 1L;
+    
+    public DateConverterForJavaSqlDate(String datePattern) {
+        super(java.sql.Date.class, datePattern, datePattern);
+    }
+    
+    @Override
+    protected java.sql.Date doConvertToObject(String value, Locale locale) {
+        try {
+            final java.util.Date parsedJavaUtilDate = newSimpleDateFormatUsingDatePattern().parse(value);
+            return new java.sql.Date(parsedJavaUtilDate.getTime());
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
+    @Override
+    protected String doConvertToString(java.sql.Date value, Locale locale) {
+        return newSimpleDateFormatUsingDatePattern().format(value);
+    }
+
+    
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
new file mode 100644
index 0000000..c4b0cd9
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
@@ -0,0 +1,32 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
+
+import java.text.ParseException;
+import java.util.Locale;
+
+
+public class DateConverterForJavaUtilDate extends DateConverterForJavaAbstract<java.util.Date> {
+    private static final long serialVersionUID = 1L;
+    
+    public DateConverterForJavaUtilDate(String datePattern, String dateTimePattern) {
+        super(java.util.Date.class, datePattern, dateTimePattern);
+    }
+
+    @Override
+    protected java.util.Date doConvertToObject(String value, Locale locale) {
+        try {
+            return newSimpleDateFormatUsingDateTimePattern().parse(value);
+        } catch (ParseException e) {
+            try {
+                return newSimpleDateFormatUsingDatePattern().parse(value);
+            } catch (ParseException ex) {
+                return null;
+            }
+        }
+    }
+
+    @Override
+    protected String doConvertToString(java.util.Date value, Locale locale) {
+        return newSimpleDateFormatUsingDateTimePattern().format(value);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html
index 77dc33c..5f75575 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html
@@ -33,7 +33,7 @@
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+				<input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
index 3db77d6..e3b9797 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
@@ -22,23 +22,18 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 import java.sql.Date;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link Date java.sql.Date}.
  */
-public class JavaSqlDatePanel extends ScalarPanelTextFieldParseableAbstract {
+public class JavaSqlDatePanel extends ScalarPanelTextFieldDatePickerAbstract<java.sql.Date> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public JavaSqlDatePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
-    }
-
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
+        super(id, scalarModel, java.sql.Date.class, 
+            new DateConverterForJavaSqlDate("dd-MM-yyyy"));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html
index 29752f4..b3488fb 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html
@@ -33,7 +33,7 @@
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+				<input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
index 9e9aacc..8c1840c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
-import java.util.Date;
+
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
@@ -30,20 +30,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldD
 public class JavaUtilDatePanel extends ScalarPanelTextFieldDatePickerAbstract<java.util.Date> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public JavaUtilDatePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
-    }
-
-    @Override
-    protected Date asDate(Date pojo) {
-        return pojo;
-    }
-
-    @Override
-    protected Date asPojo(Date date) {
-        return date;
+        super(id, scalarModel, java.util.Date.class, new DateConverterForJavaUtilDate("dd-MM-yyyy", "dd-MM-yyyy HH:mm"));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
index 80bf1c4..5e5eea0 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
@@ -57,7 +57,7 @@ public class JavaMathBigIntegerPanel extends ScalarPanelTextFieldNumeric<BigInte
     }
 
     @Override
-    protected AbstractTextComponent<BigInteger> createTextField() {
+    protected AbstractTextComponent<BigInteger> createTextFieldForRegular() {
         return new TextField<BigInteger>(ID_SCALAR_VALUE, new TextFieldValueModel<BigInteger>(this), BigInteger.class) {
             private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java
new file mode 100644
index 0000000..2bbbb2c
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaAbstract.java
@@ -0,0 +1,24 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
+
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import org.apache.isis.viewer.wicket.ui.components.scalars.DateConverterAbstract;
+
+public abstract class DateConverterForJodaAbstract<T> extends DateConverterAbstract<T> {
+    
+    private static final long serialVersionUID = 1L;
+    
+    protected DateConverterForJodaAbstract(Class<T> cls, String datePattern, String dateTimePattern) {
+        super(cls, datePattern, dateTimePattern);
+    }
+
+    protected DateTimeFormatter getFormatterForDatePattern() {
+        return DateTimeFormat.forPattern(datePattern);
+    }
+
+    protected DateTimeFormatter getFormatterForDateTimePattern() {
+        return DateTimeFormat.forPattern(dateTimePattern);
+    }
+    
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
new file mode 100644
index 0000000..4ec17b8
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
@@ -0,0 +1,33 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
+
+import java.util.Locale;
+
+import org.joda.time.DateTime;
+
+public class DateConverterForJodaDateTime extends DateConverterForJodaAbstract<DateTime> {
+    
+    private static final long serialVersionUID = 1L;
+
+    public DateConverterForJodaDateTime(String datePattern, String dateTimePattern) {
+        super(DateTime.class, datePattern, dateTimePattern);
+    }
+
+    @Override
+    protected DateTime doConvertToObject(String value, Locale locale) {
+        try {
+            return getFormatterForDateTimePattern().parseDateTime(value);
+        } catch(IllegalArgumentException ex) {
+            try {
+                return getFormatterForDatePattern().parseDateTime(value);
+            } catch(IllegalArgumentException ex2) {
+                return null;
+            }
+        }
+    }
+
+    @Override
+    protected String doConvertToString(DateTime value, Locale locale) {
+        return value.toString(getFormatterForDateTimePattern());
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
new file mode 100644
index 0000000..e081b35
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
@@ -0,0 +1,29 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
+
+import java.util.Locale;
+
+import org.joda.time.LocalDate;
+
+public class DateConverterForJodaLocalDate extends DateConverterForJodaAbstract<LocalDate> {
+    
+    private static final long serialVersionUID = 1L;
+
+    public DateConverterForJodaLocalDate(String datePattern) {
+        super(LocalDate.class, datePattern, datePattern);
+    }
+
+    @Override
+    protected LocalDate doConvertToObject(String value, Locale locale) {
+        try {
+            return getFormatterForDatePattern().parseLocalDate(value);
+        } catch(IllegalArgumentException ex) {
+            return null;
+        }
+    }
+
+    @Override
+    protected String doConvertToString(LocalDate value, Locale locale) {
+        return value.toString(getFormatterForDatePattern());
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
new file mode 100644
index 0000000..cc6cb82
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
@@ -0,0 +1,34 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
+
+import java.util.Locale;
+
+import org.joda.time.LocalDateTime;
+
+public class DateConverterForJodaLocalDateTime extends DateConverterForJodaAbstract<LocalDateTime> {
+
+    private static final long serialVersionUID = 1L;
+
+    public DateConverterForJodaLocalDateTime(String datePattern, String dateTimePattern) {
+        super(LocalDateTime.class, datePattern, dateTimePattern);
+    }
+
+    @Override
+    protected LocalDateTime doConvertToObject(String value, Locale locale) {
+        try {
+            return getFormatterForDateTimePattern().parseLocalDateTime(value);
+        } catch(IllegalArgumentException ex) {
+            try {
+                return getFormatterForDatePattern().parseLocalDateTime(value);
+            } catch(IllegalArgumentException ex2) {
+                return null;
+            }
+        }
+    }
+
+    @Override
+    protected String doConvertToString(LocalDateTime value, Locale locale) {
+        return value.toString(getFormatterForDatePattern());
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html
index bb234fd..93883f3 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html
@@ -29,11 +29,11 @@
 				<label for="scalarValue" wicket:id="scalarIfRegular">
 	      			<span wicket:id="scalarName" class="scalarName">[Label text]</span>
 	      			<span class="scalarValue">
-		      			<input type="text" name="scalarValue" id="scalarValue" wicket:id="scalarValue" />
+		      			<input type="text" name="scalarValue" wicket:id="scalarValue" />
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+				<input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
index 901bf70..f51502d 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import java.util.Date;
-
 import org.joda.time.DateTime;
 import org.joda.time.LocalDateTime;
 
@@ -33,20 +31,8 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldD
 public class JodaDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<DateTime> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public JodaDateTimePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
-    }
-
-    @Override
-    protected Date asDate(DateTime pojo) {
-        return pojo.toDateTime().toDate();
+        super(id, scalarModel, DateTime.class, new DateConverterForJodaDateTime("dd-MM-yyyy", "dd-MM-yyyy HH:mm"));
     }
-
-    @Override
-    protected DateTime asPojo(Date date) {
-        return new DateTime(date.getTime());
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
index 12b5bfd..d8b955c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
@@ -25,7 +25,7 @@
 	<head></head>
 	<body>
 		<wicket:panel>
-			<div class="javaLocalDatePanel scalarNameAndValueComponentType">
+			<div class="jodaLocalDatePanel scalarNameAndValueComponentType">
 				<label for="scalarValue" wicket:id="scalarIfRegular">
 	      			<span wicket:id="scalarName" class="scalarName">[Label text]</span>
 	      			<span class="scalarValue">
@@ -33,7 +33,7 @@
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+				<input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
index ccf6583..8a6bb96 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import java.util.Date;
-
 import org.joda.time.LocalDate;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -32,21 +30,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldD
 public class JodaLocalDatePanel extends ScalarPanelTextFieldDatePickerAbstract<LocalDate> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public JodaLocalDatePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
-    }
-
-    @Override
-    protected Date asDate(LocalDate pojo) {
-        return pojo.toDateTimeAtStartOfDay().toDate();
+        super(id, scalarModel, LocalDate.class, new DateConverterForJodaLocalDate("dd-MM-yyyy"));
     }
 
-    @Override
-    protected LocalDate asPojo(Date date) {
-        return new LocalDate(date.getTime());
-    }
-
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html
index 3920a3f..0256334 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html
@@ -29,11 +29,11 @@
 				<label for="scalarValue" wicket:id="scalarIfRegular">
 	      			<span wicket:id="scalarName" class="scalarName">[Label text]</span>
 	      			<span class="scalarValue">
-		      			<input type="text" name="scalarValue" id="scalarValue" wicket:id="scalarValue" />
+		      			<input type="text" name="scalarValue" wicket:id="scalarValue" />
 		      			<span wicket:id="feedback"></span>
 	      			</span>
 				</label>
-				<label wicket:id="scalarIfCompact"></label>
+				<input type="text" wicket:id="scalarIfCompact"></input>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
index 7a84237..4b1f628 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import java.util.Date;
-
 import org.joda.time.LocalDateTime;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -32,20 +30,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldD
 public class JodaLocalDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<LocalDateTime> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public JodaLocalDateTimePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
-    }
-
-    @Override
-    protected Date asDate(LocalDateTime pojo) {
-        return pojo.toDateTime().toDate();
-    }
-
-    @Override
-    protected LocalDateTime asPojo(Date date) {
-        return new LocalDateTime(date.getTime());
+        super(id, scalarModel, LocalDateTime.class, new DateConverterForJodaLocalDateTime("dd-MM-yyyy", "dd-MM-yyyy HH:mm"));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
index 54b7bce..323af6d 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
@@ -45,7 +45,7 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
     }
 
     @Override
-    protected AbstractTextComponent<String> createTextField() {
+    protected AbstractTextComponent<String> createTextFieldForRegular() {
         final TextArea<String> textField = new TextArea<String>(idTextField, new Model<String>() {
             private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntity.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntity.java b/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntity.java
new file mode 100644
index 0000000..7ce179a
--- /dev/null
+++ b/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntity.java
@@ -0,0 +1,161 @@
+/*
+ *  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.core.tck.dom.scalars;
+
+import org.apache.isis.applib.AbstractDomainObject;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.ObjectType;
+import org.apache.isis.applib.annotation.Optional;
+import org.apache.isis.applib.annotation.Title;
+
+@javax.jdo.annotations.PersistenceCapable
+@javax.jdo.annotations.Discriminator("APLV")
+@javax.jdo.annotations.Query(
+        name="dtmv_findByStringProperty", language="JDOQL",  
+        value="SELECT FROM org.apache.isis.tck.dom.scalars.DateTimeValuedEntity WHERE stringProperty == :i")
+@ObjectType("APLV")
+public class DateTimeValuedEntity extends AbstractDomainObject {
+
+    
+    // {{ StringProperty (also title, pk)
+    private String stringProperty;
+
+    @javax.jdo.annotations.PrimaryKey
+    @Title
+    @Optional
+    @MemberOrder(sequence = "1")
+    public String getStringProperty() {
+        return stringProperty;
+    }
+
+    public void setStringProperty(final String description) {
+        this.stringProperty = description;
+    }
+
+    // }}
+
+    
+    // {{ JavaUtilDate (property)
+    private java.util.Date javaUtilDate;
+
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public java.util.Date getJavaUtilDate() {
+        return javaUtilDate;
+    }
+
+    public void setJavaUtilDate(final java.util.Date javaUtilDate) {
+        this.javaUtilDate = javaUtilDate;
+    }
+    // }}
+
+    // {{ JavaSqlDate (property)
+    private java.sql.Date javaSqlDate;
+
+    @javax.jdo.annotations.Persistent
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public java.sql.Date getJavaSqlDate() {
+        return javaSqlDate;
+    }
+
+    public void setJavaSqlDate(final java.sql.Date javaSqlDate) {
+        this.javaSqlDate = javaSqlDate;
+    }
+    // }}
+
+    // {{ ApplibDate (property)
+    private org.apache.isis.applib.value.Date applibDate;
+
+    @javax.jdo.annotations.Persistent
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public org.apache.isis.applib.value.Date getApplibDate() {
+        return applibDate;
+    }
+
+    public void setApplibDate(final org.apache.isis.applib.value.Date applibDate) {
+        this.applibDate = applibDate;
+    }
+    // }}
+
+    // {{ ApplibDateTime (property)
+    private org.apache.isis.applib.value.DateTime applibDateTime;
+
+    @javax.jdo.annotations.Persistent
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public org.apache.isis.applib.value.DateTime getApplibDateTime() {
+        return applibDateTime;
+    }
+
+    public void setApplibDateTime(final org.apache.isis.applib.value.DateTime applibDateTime) {
+        this.applibDateTime = applibDateTime;
+    }
+    // }}
+
+    // {{ JodaLocalDateTime (property)
+    private org.joda.time.LocalDateTime jodaLocalDateTime;
+
+    @javax.jdo.annotations.Persistent
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public org.joda.time.LocalDateTime getJodaLocalDateTime() {
+        return jodaLocalDateTime;
+    }
+
+    public void setJodaLocalDateTime(final org.joda.time.LocalDateTime jodaLocalDateTime) {
+        this.jodaLocalDateTime = jodaLocalDateTime;
+    }
+    // }}
+
+    // {{ JodaLocalDate (property)
+    private org.joda.time.LocalDate jodaLocalDate;
+
+    @javax.jdo.annotations.Persistent
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public org.joda.time.LocalDate getJodaLocalDate() {
+        return jodaLocalDate;
+    }
+
+    public void setJodaLocalDate(final org.joda.time.LocalDate jodaLocalDate) {
+        this.jodaLocalDate = jodaLocalDate;
+    }
+    // }}
+
+
+    // {{ JodaDateTime (property)
+    private org.joda.time.DateTime jodaDateTime;
+
+    @javax.jdo.annotations.Persistent
+    @Optional
+    @MemberOrder(name="dates", sequence = "1")
+    public org.joda.time.DateTime getJodaDateTime() {
+        return jodaDateTime;
+    }
+
+    public void setJodaDateTime(final org.joda.time.DateTime jodaDateTime) {
+        this.jodaDateTime = jodaDateTime;
+    }
+    // }}
+    
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntityRepository.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntityRepository.java b/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntityRepository.java
new file mode 100644
index 0000000..6f4c0b4
--- /dev/null
+++ b/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/DateTimeValuedEntityRepository.java
@@ -0,0 +1,44 @@
+/*
+ *  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.core.tck.dom.scalars;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.applib.annotation.ObjectType;
+import org.apache.isis.core.tck.dom.AbstractEntityRepository;
+
+@Named("DateTimeValuedEntities")
+@ObjectType("DateTimeValuedEntities")
+public class DateTimeValuedEntityRepository extends AbstractEntityRepository<DateTimeValuedEntity> {
+
+    public DateTimeValuedEntityRepository() {
+        super(DateTimeValuedEntity.class, "DateTimeValuedEntities");
+    }
+
+    /**
+     * Required to discover the DateTimeValueEntity type.
+     */
+    @Override
+    @MemberOrder(sequence = "2")
+    public DateTimeValuedEntity newEntity() {
+        return super.newEntity();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/DateTimeValuedEntityFixture.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/DateTimeValuedEntityFixture.java b/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/DateTimeValuedEntityFixture.java
new file mode 100644
index 0000000..c77b359
--- /dev/null
+++ b/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/DateTimeValuedEntityFixture.java
@@ -0,0 +1,47 @@
+/*
+ *  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.core.tck.fixture.scalars;
+
+import org.apache.isis.applib.fixtures.AbstractFixture;
+import org.apache.isis.core.tck.dom.scalars.DateTimeValuedEntity;
+import org.apache.isis.core.tck.dom.scalars.DateTimeValuedEntityRepository;
+
+public class DateTimeValuedEntityFixture extends AbstractFixture {
+
+    @Override
+    public void install() {
+        createEntity();
+        createEntity();
+        createEntity();
+        createEntity();
+        createEntity();
+    }
+
+    private DateTimeValuedEntity createEntity() {
+        return dateTimeValuesEntityRepository.newEntity();
+    }
+
+    private DateTimeValuedEntityRepository dateTimeValuesEntityRepository;
+
+    public void setDateTimeValuesEntityRepository(final DateTimeValuedEntityRepository dateTimeValuesEntityRepository) {
+        this.dateTimeValuesEntityRepository = dateTimeValuesEntityRepository;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index 42831bb..b905576 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -79,6 +79,7 @@ import com.google.common.collect.Lists;
             value="SELECT FROM dom.todo.ToDoItem WHERE ownedBy == :ownedBy && description.indexOf(:description) >= 0")
 })
 @javax.jdo.annotations.Version(strategy=VersionStrategy.VERSION_NUMBER, column="VERSION")
+@javax.jdo.annotations.Unique(name="ToDoItem_description_must_be_unique", members={"ownedBy","description"})
 @ObjectType("TODO")
 @Audited
 @PublishedObject(ToDoItemChangedPayloadFactory.class)
@@ -111,7 +112,6 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     // {{ Description
     private String description;
 
-    @javax.jdo.annotations.Unique(name="ToDoItem_description_must_be_unique")
     @RegEx(validation = "\\w[@&:\\-\\,\\.\\+ \\w]*")
     // words, spaces and selected punctuation
     @MemberOrder(sequence = "1")
@@ -510,7 +510,6 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     
 
     // {{ injected: DomainObjectContainer
-    @SuppressWarnings("unused")
     private DomainObjectContainer container;
 
     public void setDomainObjectContainer(final DomainObjectContainer container) {

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/example/application/quickstart_wicket_restful_jdo/viewer-webapp/ide/eclipse/launch/quickstart_wicket_restful_jdo-viewer-webapp-with-fixtures.launch
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/ide/eclipse/launch/quickstart_wicket_restful_jdo-viewer-webapp-with-fixtures.launch b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/ide/eclipse/launch/quickstart_wicket_restful_jdo-viewer-webapp-with-fixtures.launch
new file mode 100644
index 0000000..f9c6788
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/ide/eclipse/launch/quickstart_wicket_restful_jdo-viewer-webapp-with-fixtures.launch
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.apache.isis.runtimes.dflt.webserver/src/main/java/org/apache/isis/WebServer.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<mapAttribute key="org.eclipse.debug.core.preferred_launchers">
+<mapEntry key="[debug]" value="org.eclipse.jdt.launching.localJavaApplication"/>
+<mapEntry key="[run]" value="org.eclipse.jdt.launching.localJavaApplication"/>
+</mapAttribute>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
+<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quickstart_wicket_restful_jdo-viewer-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 -D isis.persistor.datanucleus.install-fixtures=true -t SERVER_EXPLORATION"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+</launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/69e6329c/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
index 3effdbd..8f5a51d 100644
--- a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
@@ -178,7 +178,7 @@ isis.services = objstore.jdo.todo.ToDoItemsJdo,\
 # object stores, they are used only when the object store is first initialized.
 #
 #isis.fixtures.prefix= 
-#isis.fixtures= 
+isis.fixtures=fixture.todo.ToDoItemsFixture