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 2014/10/09 17:45:31 UTC

git commit: ISIS-910: now set up a MaxLengthFacet via ValueSemanticsProvider.

Repository: isis
Updated Branches:
  refs/heads/master 6d3332f52 -> c1b7b2e2d


ISIS-910: now set up a MaxLengthFacet via ValueSemanticsProvider.


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

Branch: refs/heads/master
Commit: c1b7b2e2dfa1be80cb16a07bd260a6b579a86966
Parents: 6d3332f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Oct 9 16:45:02 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Oct 9 16:45:02 2014 +0100

----------------------------------------------------------------------
 .../org/apache/isis/applib/adapters/Parser.java | 12 ++--
 .../apache/isis/applib/adapters/Parser2.java    | 29 +++++++++
 .../enums/EnumValueSemanticsProvider.java       |  6 +-
 .../value/MaxLengthFacetUsingParser2.java       | 66 ++++++++++++++++++++
 .../facets/object/value/ValueFacetAbstract.java | 16 +++--
 .../ValueSemanticsProviderAndFacetAbstract.java | 26 +++++---
 .../ValueSemanticsProviderAbstractTemporal.java |  2 +-
 .../BigDecimalValueSemanticsProvider.java       |  2 +-
 .../BigIntegerValueSemanticsProvider.java       |  2 +-
 .../value/blobs/BlobValueSemanticsProvider.java |  2 +-
 .../BooleanValueSemanticsProviderAbstract.java  |  5 +-
 .../ByteValueSemanticsProviderAbstract.java     |  5 +-
 .../CharValueSemanticsProviderAbstract.java     |  5 +-
 .../value/clobs/ClobValueSemanticsProvider.java |  2 +-
 .../color/ColorValueSemanticsProvider.java      |  2 +-
 .../JodaLocalDateValueSemanticsProvider.java    |  6 +-
 ...JodaLocalDateTimeValueSemanticsProvider.java |  6 +-
 .../DoubleValueSemanticsProviderAbstract.java   |  3 +-
 .../FloatValueSemanticsProviderAbstract.java    |  3 +-
 .../ImageValueSemanticsProviderAbstract.java    |  2 +-
 .../IntValueSemanticsProviderAbstract.java      |  5 +-
 .../LongValueSemanticsProviderAbstract.java     |  5 +-
 .../money/MoneyValueSemanticsProvider.java      |  2 +-
 .../PasswordValueSemanticsProvider.java         |  2 +-
 .../PercentageValueSemanticsProvider.java       |  2 +-
 .../ShortValueSemanticsProviderAbstract.java    |  5 +-
 .../string/StringValueSemanticsProvider.java    |  2 +-
 .../value/url/URLValueSemanticsProvider.java    |  4 +-
 .../value/uuid/UUIDValueSemanticsProvider.java  |  5 +-
 29 files changed, 179 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
index bc73e02..6b8cc0c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
@@ -49,7 +49,7 @@ import org.apache.isis.applib.profiles.Localization;
  * be applied to types, only to properties and parameters.
  * 
  * <p>
- * For third-party value types, eg {@link http://timeandmoney.sourceforge.net/
+ * For third-party value types, eg {@see http://timeandmoney.sourceforge.net/
  * Time-and-Money} there is no ability to write <tt>title()</tt> methods or
  * annotated with {@link TypicalLength}; so this is the main reason that this
  * interface has to deal with titles and lengths.
@@ -84,8 +84,7 @@ public interface Parser<T> {
      * 
      * <p>
      * Note that here the implementing class is acting as a factory for itself.
-     * @param localization TODO
-     * @param context
+     * @param contextPojo
      *            - the context domain object for which the text is being
      *            parsed. For example +3 might mean add 3 to the current number.
      */
@@ -108,13 +107,12 @@ public interface Parser<T> {
 
     /**
      * A title for the object that is valid but which may be easier to edit than
-     * the title provided by a
-     * {@link org.apache.isis.metamodel.facets.object.ident.TitleFacet}.
-     * 
+     * the title provided by a <code>TitleFacet</code>.
+     *
      * <p>
      * The idea here is that the viewer can display a parseable title for an
      * existing object when, for example, the user initially clicks in the
-     * field. So, a date might be rendered via a {@link TitleFacet} as
+     * field. So, a date might be rendered via a <code>TitleFacet</code> as
      * <tt>May 2, 2007</tt>, but its editable form might be <tt>20070502</tt>.
      */
     String parseableTitleOf(T existing);

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java
new file mode 100644
index 0000000..b5877c5
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser2.java
@@ -0,0 +1,29 @@
+/*
+ *  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.applib.adapters;
+
+public interface Parser2<T> extends Parser<T> {
+
+    /**
+     * The max length of objects that can be parsed (if any)
+     */
+    Integer maxLength();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
index 0f40974..7bae5ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
@@ -39,7 +39,7 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> extends ValueSemantic
         return adaptedClass.getEnumConstants()[0];
     }
 
-    private static <T extends Enum<T>> int typicalLengthFor(final Class<T> adaptedClass) {
+    private static <T extends Enum<T>> int maxLengthFor(final Class<T> adaptedClass) {
         int max = Integer.MIN_VALUE;
         for(T e: adaptedClass.getEnumConstants()) {
             final int nameLength = e.name().length();
@@ -59,8 +59,8 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> extends ValueSemantic
     public EnumValueSemanticsProvider(final FacetHolder holder, final Class<T> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
         super(
                 type(), holder,  adaptedClass, 
-                typicalLengthFor(adaptedClass), 
-                Immutability.IMMUTABLE, 
+                maxLengthFor(adaptedClass),
+                maxLengthFor(adaptedClass), Immutability.IMMUTABLE,
                 EqualByContent.HONOURED, 
                 defaultFor(adaptedClass), 
                 configuration, context);

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser2.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser2.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser2.java
new file mode 100644
index 0000000..223b054
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser2.java
@@ -0,0 +1,66 @@
+/*
+ *  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.metamodel.facets.object.value;
+
+import org.apache.isis.applib.adapters.Parser2;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class MaxLengthFacetUsingParser2 extends MaxLengthFacetAbstract{
+
+    private final Parser2<?> parser;
+    private final ServicesInjector dependencyInjector;
+
+    public MaxLengthFacetUsingParser2(final Parser2<?> parser, final FacetHolder holder, final ServicesInjector dependencyInjector) {
+        super(parser.maxLength(), holder);
+        this.parser = parser;
+        this.dependencyInjector = dependencyInjector;
+    }
+
+    @Override
+    protected String toStringValues() {
+        getDependencyInjector().injectServicesInto(parser);
+        return parser.toString();
+    }
+
+    @Override
+    public int value() {
+        getDependencyInjector().injectServicesInto(parser);
+        return parser.maxLength();
+    }
+
+    @Override
+    public String toString() {
+        return "maxLength=" + value();
+    }
+
+    // //////////////////////////////////////////////////////
+    // Dependencies (from constructor)
+    // //////////////////////////////////////////////////////
+
+    /**
+     * @return the dependencyInjector
+     */
+    public ServicesInjector getDependencyInjector() {
+        return dependencyInjector;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
index 9868dac..8bbcad3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
@@ -19,10 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.object.value;
 
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
+import org.apache.isis.applib.adapters.*;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassExtensions;
@@ -105,13 +102,13 @@ public abstract class ValueFacetAbstract extends MultipleValueFacetAbstract impl
         // An immutable value is not aggregated, it is shared.
 
         // ImmutableFacet, if appropriate
-        final boolean immutable = semanticsProvider != null ? semanticsProvider.isImmutable() : true;
+        final boolean immutable = semanticsProvider == null || semanticsProvider.isImmutable();
         if (immutable) {
             facetHolder.addFacet(new ImmutableFacetViaValueSemantics(holder));
         }
 
         // EqualByContentFacet, if appropriate
-        final boolean equalByContent = semanticsProvider != null ? semanticsProvider.isEqualByContent() : true;
+        final boolean equalByContent = semanticsProvider == null || semanticsProvider.isEqualByContent();
         if (equalByContent) {
             facetHolder.addFacet(new EqualByContentFacetViaValueSemantics(holder));
         }
@@ -131,6 +128,13 @@ public abstract class ValueFacetAbstract extends MultipleValueFacetAbstract impl
                 facetHolder.addFacet(new ParseableFacetUsingParser(parser, holder, getDeploymentCategory(context), getAuthenticationSessionProvider(), getDependencyInjector(), getAdapterMap()));
                 facetHolder.addFacet(new TitleFacetUsingParser(parser, holder, getDependencyInjector()));
                 facetHolder.addFacet(new TypicalLengthFacetUsingParser(parser, holder, getDependencyInjector()));
+                if(parser instanceof Parser2) {
+                    final Parser2 parser2 = (Parser2) parser;
+                    final Integer maxLength = parser2.maxLength();
+                    if(maxLength != null) {
+                        facetHolder.addFacet(new MaxLengthFacetUsingParser2(parser2, holder, getDependencyInjector()));
+                    }
+                }
             }
 
             // install the DefaultedFacet if we've been given a DefaultsProvider

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
index 813b92d..818eeb9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
@@ -23,11 +23,7 @@ import java.text.DecimalFormat;
 import java.text.Format;
 import java.text.NumberFormat;
 import java.util.Locale;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.applib.adapters.ValueSemanticsProvider;
+import org.apache.isis.applib.adapters.*;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
@@ -47,10 +43,11 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
-public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbstract implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProvider<T> {
+public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbstract implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser2<T>, DefaultsProvider<T> {
 
     private final Class<T> adaptedClass;
     private final int typicalLength;
+    private final Integer maxLength;
     private final boolean immutable;
     private final boolean equalByContent;
     private final T defaultValue;
@@ -81,11 +78,21 @@ public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbs
     private final IsisConfiguration configuration;
     private final ValueSemanticsProviderContext context;
 
-    public ValueSemanticsProviderAndFacetAbstract(final Class<? extends Facet> adapterFacetType, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue, final IsisConfiguration configuration,
+    public ValueSemanticsProviderAndFacetAbstract(
+            final Class<? extends Facet> adapterFacetType,
+            final FacetHolder holder,
+            final Class<T> adaptedClass,
+            final int typicalLength,
+            final Integer maxLength,
+            final Immutability immutability,
+            final EqualByContent equalByContent,
+            final T defaultValue,
+            final IsisConfiguration configuration,
             final ValueSemanticsProviderContext context) {
         super(adapterFacetType, holder, Derivation.NOT_DERIVED);
         this.adaptedClass = adaptedClass;
         this.typicalLength = typicalLength;
+        this.maxLength = maxLength;
         this.immutable = (immutability == Immutability.IMMUTABLE);
         this.equalByContent = (equalByContent == EqualByContent.HONOURED);
         this.defaultValue = defaultValue;
@@ -238,6 +245,11 @@ public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbs
         return this.typicalLength;
     }
 
+    @Override
+    public final Integer maxLength() {
+        return this.maxLength;
+    }
+
     // ///////////////////////////////////////////////////////////////////////////
     // DefaultsProvider implementation
     // ///////////////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
index 715040f..3a7b052 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
@@ -113,7 +113,7 @@ public abstract class ValueSemanticsProviderAbstractTemporal<T> extends ValueSem
      */
     public ValueSemanticsProviderAbstractTemporal(final String propertyType, final Class<? extends Facet> facetType, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue,
             final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(facetType, holder, adaptedClass, typicalLength, immutability, equalByContent, defaultValue, configuration, context);
+        super(facetType, holder, adaptedClass, typicalLength, null, immutability, equalByContent, defaultValue, configuration, context);
         configureFormats();
 
         this.propertyType = propertyType;

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
index ce1ae1c..d3b8a2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
@@ -58,7 +58,7 @@ public class BigDecimalValueSemanticsProvider extends ValueSemanticsProviderAndF
     }
 
     public BigDecimalValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, BigDecimal.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, BigDecimal.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.decimal");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
index c5024b7..4f7b603 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
@@ -55,7 +55,7 @@ public class BigIntegerValueSemanticsProvider extends ValueSemanticsProviderAndF
 
     public BigIntegerValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
 
-        super(type(), holder, BigInteger.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, BigInteger.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.int");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
index acc8b9c..2b9c214 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
@@ -54,7 +54,7 @@ public class BlobValueSemanticsProvider extends ValueSemanticsProviderAndFacetAb
     }
 
     public BlobValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, Blob.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, Blob.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, configuration, context);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueSemanticsProviderAbstract.java
index faee547..2a2a4b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanValueSemanticsProviderAbstract.java
@@ -35,10 +35,11 @@ public abstract class BooleanValueSemanticsProviderAbstract extends ValueSemanti
         return BooleanValueFacet.class;
     }
 
-    private static final int TYPICAL_LENGTH = 5;
+    private static final int MAX_LENGTH = 5;
+    private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
     public BooleanValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Boolean> adaptedClass, final Boolean defaultValue, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue, configuration, context);
     }
 
     // //////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
index eeb8b1d..ffdce2d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
@@ -39,12 +39,13 @@ public abstract class ByteValueSemanticsProviderAbstract extends ValueSemanticsP
     }
 
     private static final Byte DEFAULT_VALUE = Byte.valueOf((byte) 0);
-    private static final int TYPICAL_LENGTH = 4;
+    private static final int MAX_LENGTH = 4; // allowing for -ve sign
+    private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
     private final NumberFormat format;
 
     public ByteValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Byte> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.byte");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
index 0cee3c9..52a4dc2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueSemanticsProviderAbstract.java
@@ -37,10 +37,11 @@ public abstract class CharValueSemanticsProviderAbstract extends ValueSemanticsP
     }
 
     private static final Character DEFAULT_VALUE = Character.valueOf((char) 0);
-    private static final int TYPICAL_LENGTH = 1;
+    private static final int MAX_LENGTH = 1;
+    private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
     public CharValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Character> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
     }
 
     // //////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
index a303db7..c888060 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
@@ -52,7 +52,7 @@ public class ClobValueSemanticsProvider extends ValueSemanticsProviderAndFacetAb
     }
 
     public ClobValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, Clob.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, Clob.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, configuration, context);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/color/ColorValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/color/ColorValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/color/ColorValueSemanticsProvider.java
index b4b1138..4e4053c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/color/ColorValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/color/ColorValueSemanticsProvider.java
@@ -51,7 +51,7 @@ public class ColorValueSemanticsProvider extends ValueSemanticsProviderAndFacetA
     }
 
     public ColorValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, Color.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, Color.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE, configuration, context);
     }
 
     // //////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
index f739b23..6fa869b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
@@ -43,7 +43,9 @@ import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProv
 
 public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<LocalDate> implements JodaLocalDateValueFacet {
 
-    
+    public static final int MAX_LENGTH = 12;
+    public static final int TYPICAL_LENGTH = MAX_LENGTH;
+
     /**
      * Introduced to allow BDD tests to provide a different format string "mid-flight".
      * 
@@ -146,7 +148,7 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
      */
     public JodaLocalDateValueSemanticsProvider(
             final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, LocalDate.class, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, LocalDate.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
 
         String configuredNameOrPattern = getConfiguration().getString(CFG_FORMAT_KEY, "medium").toLowerCase().trim();
         updateTitleStringFormatter(configuredNameOrPattern);

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
index d39877c..1e65520 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
@@ -44,7 +44,9 @@ import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProv
 
 public class JodaLocalDateTimeValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<LocalDateTime> implements JodaLocalDateTimeValueFacet {
 
-    
+    public static final int MAX_LENGTH = 36;
+    public static final int TYPICAL_LENGTH = 22;
+
     /**
      * Introduced to allow BDD tests to provide a different format string "mid-flight".
      * 
@@ -147,7 +149,7 @@ public class JodaLocalDateTimeValueSemanticsProvider extends ValueSemanticsProvi
      */
     public JodaLocalDateTimeValueSemanticsProvider(
             final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, LocalDateTime.class, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, LocalDateTime.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
 
         String configuredNameOrPattern = getConfiguration().getString(CFG_FORMAT_KEY, "medium").toLowerCase().trim();
         updateTitleStringFormatter(configuredNameOrPattern);

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
index c1f5db1..180992f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
@@ -39,12 +39,13 @@ public abstract class DoubleValueSemanticsProviderAbstract extends ValueSemantic
     }
 
     private static final Double DEFAULT_VALUE = new Double(0.0d);
+    private static final int MAX_LENGTH = 25;
     private static final int TYPICAL_LENGTH = 10;
 
     private final NumberFormat format;
 
     public DoubleValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Double> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.double");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
index f4fc025..57a78af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
@@ -39,12 +39,13 @@ public class FloatValueSemanticsProviderAbstract extends ValueSemanticsProviderA
     }
 
     private static final Float DEFAULT_VALUE = new Float(0.0f);
+    private static final int MAX_LENGTH = 20;
     private static final int TYPICAL_LENGTH = 12;
 
     private final NumberFormat format;
 
     public FloatValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Float> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.float");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
index 486b372..ac69ac1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
@@ -59,7 +59,7 @@ public abstract class ImageValueSemanticsProviderAbstract<T> extends ValueSemant
 
     @SuppressWarnings("unchecked")
     public ImageValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(ImageValueFacet.class, holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE, configuration, context);
+        super(ImageValueFacet.class, holder, adaptedClass, TYPICAL_LENGTH, null, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE, configuration, context);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
index 8414df0..acbd017 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
@@ -39,12 +39,13 @@ public abstract class IntValueSemanticsProviderAbstract extends ValueSemanticsPr
     }
 
     private static final Integer DEFAULT_VALUE = Integer.valueOf(0);
-    private static final int TYPICAL_LENGTH = 9;
+    private static final int MAX_LENGTH = 9;
+    private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
     private final NumberFormat format;
 
     public IntValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Integer> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.int");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
index 96e1014..fd4f19e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
@@ -39,12 +39,13 @@ public abstract class LongValueSemanticsProviderAbstract extends ValueSemanticsP
     }
 
     private static final Long DEFAULT_VALUE = Long.valueOf(0L);
-    private static final int TYPICAL_LENGTH = 18;
+    private static final int MAX_LENGTH = 18;
+    private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
     private final NumberFormat format;
 
     public LongValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Long> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.long");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
index 0fc5fb2..631d214 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
@@ -81,7 +81,7 @@ public class MoneyValueSemanticsProvider extends ValueSemanticsProviderAndFacetA
     }
 
     public MoneyValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, Money.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, Money.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
 
         final String property = ConfigurationConstants.ROOT + "value.money.currency";
         defaultCurrencyCode = configuration.getString(property, LOCAL_CURRENCY_CODE);

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java
index e7d47cb..8511575 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/password/PasswordValueSemanticsProvider.java
@@ -49,7 +49,7 @@ public class PasswordValueSemanticsProvider extends ValueSemanticsProviderAndFac
 
     public PasswordValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration,
         final ValueSemanticsProviderContext context) {
-        super(type(), holder, Password.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE,
+        super(type(), holder, Password.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE,
             configuration, context);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
index 047a32c..4b2046a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
@@ -60,7 +60,7 @@ public class PercentageValueSemanticsProvider extends ValueSemanticsProviderAndF
     }
 
     public PercentageValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, Percentage.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, Percentage.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
 
         final String formatRequired = configuration.getString(ConfigurationConstants.ROOT + "value.format.percentage");
         if (formatRequired == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
index 042801d..9e084af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
@@ -39,12 +39,13 @@ public class ShortValueSemanticsProviderAbstract extends ValueSemanticsProviderA
     }
 
     private static final Short DEFAULT_VALUE = Short.valueOf((short) 0);
-    private static final int TYPICAL_LENGTH = 6;
+    private static final int MAX_LENGTH = 6; // allowing for -ve sign
+    private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
     private final NumberFormat format;
 
     public ShortValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Short> adaptedClass, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, adaptedClass, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
         format = determineNumberFormat("value.format.short");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueSemanticsProvider.java
index 821a2ee..eb11a86 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/string/StringValueSemanticsProvider.java
@@ -47,7 +47,7 @@ public class StringValueSemanticsProvider extends ValueSemanticsProviderAndFacet
     }
 
     public StringValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, String.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, String.class, TYPICAL_LENGTH, null, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
     }
 
     // //////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
index 3525eee..3ceaada 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/url/URLValueSemanticsProvider.java
@@ -33,10 +33,12 @@ import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProv
 
 public class URLValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<java.net.URL> implements URLValueFacet {
 
+
     public static Class<? extends Facet> type() {
         return URLValueFacet.class;
     }
 
+    public static final int MAX_LENGTH = 2083;
     private static final int TYPICAL_LENGTH = 100;
     private static final java.net.URL DEFAULT_VALUE = null; // no default
 
@@ -53,7 +55,7 @@ public class URLValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbs
             final IsisConfiguration configuration, 
             final ValueSemanticsProviderContext context) {
         super(type(), holder, java.net.URL.class, 
-                TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, 
+                TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE,
                 configuration, context);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b7b2e2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java
index 09eb879..246568c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/uuid/UUIDValueSemanticsProvider.java
@@ -37,7 +37,8 @@ public class UUIDValueSemanticsProvider extends ValueSemanticsProviderAndFacetAb
         return UUIDValueFacet.class;
     }
 
-    public static final int TYPICAL_LENGTH = 36;
+    public static final int MAX_LENGTH = 36;
+    public static final int TYPICAL_LENGTH = MAX_LENGTH;
     private static final UUID DEFAULT_VALUE = null; // no default
 
     /**
@@ -49,7 +50,7 @@ public class UUIDValueSemanticsProvider extends ValueSemanticsProviderAndFacetAb
     }
 
     public UUIDValueSemanticsProvider(final FacetHolder holder, final IsisConfiguration configuration, final ValueSemanticsProviderContext context) {
-        super(type(), holder, UUID.class, TYPICAL_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
+        super(type(), holder, UUID.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE, configuration, context);
     }
 
     // //////////////////////////////////////////////////////////////////