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

[isis] branch master updated: ISIS-2871: starting to cleanup ValueSemanticsProviders

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 01abd63  ISIS-2871: starting to cleanup ValueSemanticsProviders
01abd63 is described below

commit 01abd63c6a35b4ad10d5abbfb85658800f773bc3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Sep 14 20:19:24 2021 +0200

    ISIS-2871: starting to cleanup ValueSemanticsProviders
---
 .../choices/enums/EnumValueSemanticsProvider.java  | 24 +++--------
 .../ValueSemanticsProviderAndFacetAbstract.java    | 39 +----------------
 .../chg/v2/ChangesDtoValueSemanticsProvider.java   | 14 ++----
 .../cmd/v2/CommandDtoValueSemanticsProvider.java   | 14 ++----
 .../v2/InteractionDtoValueSemanticsProvider.java   | 14 ++----
 .../ValueSemanticsProviderAbstractTemporal.java    | 18 +++-----
 .../BigDecimalValueSemanticsProvider.java          | 24 +++--------
 .../BigIntegerValueSemanticsProvider.java          | 16 +++----
 .../value/blobs/BlobValueSemanticsProvider.java    | 17 ++++----
 .../BooleanPrimitiveValueSemanticsProvider.java    |  5 ++-
 .../BooleanValueSemanticsProviderAbstract.java     | 20 ++++-----
 .../bytes/ByteValueSemanticsProviderAbstract.java  | 13 ++----
 .../chars/CharValueSemanticsProviderAbstract.java  | 19 +++-----
 .../value/clobs/ClobValueSemanticsProvider.java    | 16 +++----
 .../JodaLocalDateValueSemanticsProvider.java       | 36 +++++++---------
 .../datesql/JavaSqlDateValueSemanticsProvider.java |  4 +-
 .../JodaDateTimeValueSemanticsProvider.java        |  4 +-
 .../JodaLocalDateTimeValueSemanticsProvider.java   | 37 +++++++---------
 .../DoubleValueSemanticsProviderAbstract.java      | 13 ++----
 .../FloatValueSemanticsProviderAbstract.java       | 13 ++----
 .../image/ImageValueSemanticsProviderAbstract.java |  7 +--
 .../JavaAwtImageValueSemanticsProvider.java        |  4 +-
 .../integer/IntValueSemanticsProviderAbstract.java | 12 ++----
 .../LocalResourcePathValueSemanticsProvider.java   | 11 ++---
 .../longs/LongValueSemanticsProviderAbstract.java  | 13 ++----
 .../value/markup/MarkupValueSemanticsProvider.java | 13 ++----
 .../password/PasswordValueSemanticsProvider.java   | 12 ++----
 .../ShortValueSemanticsProviderAbstract.java       | 13 ++----
 .../value/string/StringValueSemanticsProvider.java | 11 ++---
 .../TemporalValueSemanticsProviderAbstract.java    | 50 ++++++++++------------
 .../treenode/TreeNodeValueSemanticsProvider.java   | 21 +++++----
 .../value/url/URLValueSemanticsProvider.java       | 15 +++----
 .../value/uuid/UUIDValueSemanticsProvider.java     | 16 +++----
 ...odaLocalDateTimeValueSemanticsProviderTest.java |  8 ++--
 .../facets/MarkdownValueSemanticsProvider.java     | 13 ++----
 35 files changed, 198 insertions(+), 381 deletions(-)

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 febcde9..f1c8b18 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
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.choices.enums;
 import java.lang.reflect.Method;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.applib.services.i18n.TranslatableString;
@@ -39,7 +40,6 @@ public class EnumValueSemanticsProvider<T extends Enum<T>>
 extends ValueSemanticsProviderAndFacetAbstract<T>
 implements EnumFacet {
 
-
     private static Class<? extends Facet> type() {
         return EnumFacet.class;
     }
@@ -60,13 +60,6 @@ implements EnumFacet {
 
     private final Method titleMethod;
 
-//    /**
-//     * Required because {@link Parser} and {@link EncoderDecoder}.
-//     */
-//    public EnumValueSemanticsProvider() {
-//        this(EncapsulationPolicy.ONLY_PUBLIC_MEMBERS_SUPPORTED, null, null);
-//    }
-
     public EnumValueSemanticsProvider(
             final IntrospectionPolicy introspectionPolicy,
             final FacetHolder holder,
@@ -95,10 +88,10 @@ implements EnumFacet {
     }
 
     @Override
-    protected T doParse(final Object context, final String entry) {
+    protected T doParse(final Parser.Context context, final String entry) {
         final T[] enumConstants = getAdaptedClass().getEnumConstants();
         for (final T enumConstant : enumConstants) {
-            if (doEncode(enumConstant).equals(entry)) {
+            if (toEncodedString(enumConstant).equals(entry)) {
                 return enumConstant;
             }
         }
@@ -112,13 +105,13 @@ implements EnumFacet {
     }
 
     @Override
-    protected String doEncode(final T object) {
+    public String toEncodedString(final T object) {
         return titleString(object);
     }
 
     @Override
-    protected T doRestore(final String data) {
-        return doParse((Object)null, data);
+    public T fromEncodedString(final String data) {
+        return doParse(null, data);
     }
 
 
@@ -153,11 +146,6 @@ implements EnumFacet {
     }
 
     @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-    @Override
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
         super.visitAttributes(visitor);
         visitor.accept("titleMethod", titleMethod);
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 1d96ea5..7f2e787 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
@@ -167,14 +167,8 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
      *            - the proposed new object, as a string representation to be
      *            parsed
      */
-    protected T doParse(final Object context, final String entry) {
-        return doParse(entry, context);
-    }
+    protected abstract T doParse(final Parser.Context context, final String entry);
 
-    // REVIEW: this method used to take Localization as a third param, could now inline
-    protected T doParse(final String entry, final Object context) {
-        return doParse(context, entry);
-    }
 
     /**
      * Whether a non-null entry is required, used by parsing.
@@ -211,8 +205,6 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
      */
     protected abstract String titleString(Object object);
 
-    public abstract String titleStringWithMask(final Object value, final String usingMask);
-
     @Override
     public final int typicalLength() {
         return this.typicalLength;
@@ -232,34 +224,6 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
         return this.defaultValue;
     }
 
-    // ///////////////////////////////////////////////////////////////////////////
-    // EncoderDecoder implementation
-    // ///////////////////////////////////////////////////////////////////////////
-
-    @Override
-    public String toEncodedString(final T object) {
-        return doEncode(object);
-    }
-
-    @Override
-    public T fromEncodedString(final String data) {
-        return doRestore(data);
-    }
-
-    /**
-     * Hook method to perform the actual encoding.
-     */
-    protected abstract String doEncode(T object);
-
-    /**
-     * Hook method to perform the actual restoring.
-     */
-    protected abstract T doRestore(String data);
-
-    // ///////////////////////////////////////////////////////////////////////////
-    // Helper: Locale handling
-    // ///////////////////////////////////////////////////////////////////////////
-
     // //////////////////////////////////////////////////////////
     // Helper: createAdapter
     // //////////////////////////////////////////////////////////
@@ -286,5 +250,4 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
     }
 
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java
index f846b96..1fc3b79 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/chg/v2/ChangesDtoValueSemanticsProvider.java
@@ -56,8 +56,8 @@ implements ChangesDtoValueFacet {
 
 
     @Override
-    protected ChangesDto doParse(final Object context, final String str) {
-        return doRestore(str);
+    protected ChangesDto doParse(final Parser.Context context, final String str) {
+        return fromEncodedString(str);
     }
 
     @Override
@@ -68,12 +68,6 @@ implements ChangesDtoValueFacet {
     }
 
     @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-
-    @Override
     public String changesDtoValue(final ManagedObject object) {
         if (object == null) {
             return "";
@@ -90,12 +84,12 @@ implements ChangesDtoValueFacet {
 
 
     @Override
-    protected String doEncode(final ChangesDto changesDto) {
+    public String toEncodedString(final ChangesDto changesDto) {
         return ChangesDtoUtils.toXml(changesDto);
     }
 
     @Override
-    protected ChangesDto doRestore(final String xml) {
+    public ChangesDto fromEncodedString(final String xml) {
         return ChangesDtoUtils.fromXml(xml);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java
index 1b5ab0c..d31ed9a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/cmd/v2/CommandDtoValueSemanticsProvider.java
@@ -56,8 +56,8 @@ implements CommandDtoValueFacet {
 
 
     @Override
-    protected CommandDto doParse(final Object context, final String str) {
-        return doRestore(str);
+    protected CommandDto doParse(final Parser.Context context, final String str) {
+        return fromEncodedString(str);
     }
 
     @Override
@@ -68,12 +68,6 @@ implements CommandDtoValueFacet {
     }
 
     @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-
-    @Override
     public String commandDtoValue(final ManagedObject object) {
         if (object == null) {
             return "";
@@ -90,12 +84,12 @@ implements CommandDtoValueFacet {
 
 
     @Override
-    protected String doEncode(final CommandDto commandDto) {
+    public String toEncodedString(final CommandDto commandDto) {
         return CommandDtoUtils.toXml(commandDto);
     }
 
     @Override
-    protected CommandDto doRestore(final String xml) {
+    public CommandDto fromEncodedString(final String xml) {
         return CommandDtoUtils.fromXml(xml);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java
index ac74a2e..2c4a88a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/schema/ixn/v2/InteractionDtoValueSemanticsProvider.java
@@ -56,8 +56,8 @@ implements InteractionDtoValueFacet {
 
 
     @Override
-    protected InteractionDto doParse(final Object context, final String str) {
-        return doRestore(str);
+    protected InteractionDto doParse(final Parser.Context context, final String str) {
+        return fromEncodedString(str);
     }
 
     @Override
@@ -68,12 +68,6 @@ implements InteractionDtoValueFacet {
     }
 
     @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-
-    @Override
     public String interactionDtoValue(final ManagedObject object) {
         if (object == null) {
             return "";
@@ -90,12 +84,12 @@ implements InteractionDtoValueFacet {
 
 
     @Override
-    protected String doEncode(final InteractionDto interactionDto) {
+    public String toEncodedString(final InteractionDto interactionDto) {
         return InteractionDtoUtils.toXml(interactionDto);
     }
 
     @Override
-    protected InteractionDto doRestore(final String xml) {
+    public InteractionDto fromEncodedString(final String xml) {
         return InteractionDtoUtils.fromXml(xml);
     }
 
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 44eb240..106a8b7 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
@@ -31,6 +31,7 @@ import java.util.TimeZone;
 import java.util.function.BiConsumer;
 
 import org.apache.isis.applib.adapters.EncodingException;
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -82,7 +83,7 @@ implements DateValueFacet {
      * Allows the specific facet subclass to be specified (rather than use
      * {@link #type()}.
      */
-    public ValueSemanticsProviderAbstractTemporal(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) {
+    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) {
         super(facetType, holder, adaptedClass, typicalLength, -1, immutability, equalByContent, defaultValue);
         configureFormats();
 
@@ -124,8 +125,9 @@ implements DateValueFacet {
 
     @Override
     protected T doParse(
-            final String entry,
-            final Object context) {
+            final Parser.Context context,
+            final String entry) {
+
         buildDefaultFormatIfRequired();
         final String dateString = entry.trim();
         final String str = dateString.toLowerCase();
@@ -232,12 +234,6 @@ implements DateValueFacet {
         return format;
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        final Date date = dateValue(value);
-        return titleString(new SimpleDateFormat(usingMask), date);
-    }
-
     private String titleString(final DateFormat formatter, final Date date) {
         return date == null ? "" : formatter.format(date);
     }
@@ -247,7 +243,7 @@ implements DateValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final T object) {
+    public String toEncodedString(final T object) {
         final Date date = dateValue(object);
         return encode(date);
     }
@@ -257,7 +253,7 @@ implements DateValueFacet {
     }
 
     @Override
-    protected T doRestore(final String data) {
+    public T fromEncodedString(final String data) {
         final Calendar cal = Calendar.getInstance();
         cal.setTimeZone(UTC_TIME_ZONE);
 
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 59bd2eb..f22af91 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
@@ -88,11 +88,11 @@ implements BigDecimalValueFacet {
     // -- PARSER
 
     @Override
-    protected BigDecimal doParse(final Object context, final String entry) {
+    protected BigDecimal doParse(final Parser.Context context, final String entry) {
         try {
             return new BigDecimal(entry);
         } catch (final NumberFormatException e) {
-            throw new TextEntryParseException("Not an decimal " + entry, e);
+            throw new TextEntryParseException("Not a decimal " + entry, e);
         }
     }
 
@@ -103,32 +103,19 @@ implements BigDecimalValueFacet {
         return titleString(format, object);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // -- ENCODER DECODER
 
     @Override
-    protected String doEncode(final BigDecimal object) {
-        // for dotnet compatibility - toString pre 1.3 was equivalent to
-        // toPlainString later.
+    public String toEncodedString(final BigDecimal object) {
         try {
-            final Class<?> type = object.getClass();
-            try {
-                return (String) type.getMethod("toPlainString", (Class[]) null).invoke(object, (Object[]) null);
-            } catch (final NoSuchMethodException nsm) {
-                return (String) type.getMethod("toString", (Class[]) null).invoke(object, (Object[]) null);
-            }
+            return object.toPlainString();
         } catch (final Exception e) {
             throw new UnrecoverableException(e);
         }
-
     }
 
     @Override
-    protected BigDecimal doRestore(final String data) {
+    public BigDecimal fromEncodedString(final String data) {
         return new BigDecimal(data);
     }
 
@@ -146,5 +133,4 @@ implements BigDecimalValueFacet {
     }
 
 
-
 }
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 eb06fa6..ed8e1f8 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
@@ -32,8 +32,9 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 
-
-public class BigIntegerValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<BigInteger> implements BigIntegerValueFacet {
+public class BigIntegerValueSemanticsProvider
+extends ValueSemanticsProviderAndFacetAbstract<BigInteger>
+implements BigIntegerValueFacet {
 
     private static final int TYPICAL_LENGTH = 10;
 
@@ -74,7 +75,7 @@ public class BigIntegerValueSemanticsProvider extends ValueSemanticsProviderAndF
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected BigInteger doParse(final Object context, final String entry) {
+    protected BigInteger doParse(final Parser.Context context, final String entry) {
         try {
             return new BigInteger(entry);
         } catch (final NumberFormatException e) {
@@ -87,22 +88,17 @@ public class BigIntegerValueSemanticsProvider extends ValueSemanticsProviderAndF
         return titleString(format, object);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final BigInteger bigInt) {
+    public String toEncodedString(final BigInteger bigInt) {
         return bigInt.toString();
     }
 
     @Override
-    protected BigInteger doRestore(final String data) {
+    public BigInteger fromEncodedString(final String data) {
         return new BigInteger(data);
     }
 
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 7ae3eca..0aa242c 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
@@ -34,7 +34,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 
-
 public class BlobValueSemanticsProvider
 extends ValueSemanticsProviderAndFacetAbstract<Blob>
 implements BlobValueFacet {
@@ -64,12 +63,6 @@ implements BlobValueFacet {
         return object != null? ((Blob)object).getName(): "[null]";
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-
     // //////////////////////////////////////////////////////////////////
     // Parser
     // //////////////////////////////////////////////////////////////////
@@ -79,6 +72,11 @@ implements BlobValueFacet {
         return null;
     }
 
+    @Override
+    protected Blob doParse(final Context context, final String entry) {
+        return null;
+    }
+
     // //////////////////////////////////////////////////////////////////
     // DefaultsProvider
     // //////////////////////////////////////////////////////////////////
@@ -93,13 +91,13 @@ implements BlobValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Blob blob) {
+    public String toEncodedString(final Blob blob) {
         return blob.getName() + ":" + blob.getMimeType().getBaseType() + ":" +
         _Strings.ofBytes(_Bytes.encodeToBase64(Base64.getEncoder(), blob.getBytes()), StandardCharsets.UTF_8);
     }
 
     @Override
-    protected Blob doRestore(final String data) {
+    public Blob fromEncodedString(final String data) {
         final int colonIdx = data.indexOf(':');
         final String name  = data.substring(0, colonIdx);
         final int colon2Idx  = data.indexOf(":", colonIdx+1);
@@ -120,4 +118,5 @@ implements BlobValueFacet {
         return "BlobValueSemanticsProvider";
     }
 
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
index 0a854b1..0aaec52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
@@ -24,8 +24,9 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
-public class BooleanPrimitiveValueSemanticsProvider extends BooleanValueSemanticsProviderAbstract implements PropertyDefaultFacet {
+public class BooleanPrimitiveValueSemanticsProvider
+extends BooleanValueSemanticsProviderAbstract
+implements PropertyDefaultFacet {
 
     private static final Boolean DEFAULT_VALUE = Boolean.FALSE;
 
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 82765fa..fb440fd 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
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.value.booleans;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -26,9 +27,9 @@ import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProv
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 
-
 public abstract class BooleanValueSemanticsProviderAbstract
-extends ValueSemanticsProviderAndFacetAbstract<Boolean> implements BooleanValueFacet {
+extends ValueSemanticsProviderAndFacetAbstract<Boolean>
+implements BooleanValueFacet {
 
     private static Class<? extends Facet> type() {
         return BooleanValueFacet.class;
@@ -37,7 +38,7 @@ extends ValueSemanticsProviderAndFacetAbstract<Boolean> implements BooleanValueF
     private static final int MAX_LENGTH = 5;
     private static final int TYPICAL_LENGTH = MAX_LENGTH;
 
-    public BooleanValueSemanticsProviderAbstract(FacetHolder holder, Class<Boolean> adaptedClass, Boolean defaultValue) {
+    public BooleanValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Boolean> adaptedClass, final Boolean defaultValue) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
     }
 
@@ -46,7 +47,7 @@ extends ValueSemanticsProviderAndFacetAbstract<Boolean> implements BooleanValueF
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Boolean doParse(final Object context, final String entry) {
+    protected Boolean doParse(final Parser.Context context, final String entry) {
         final String compareTo = entry.trim().toLowerCase();
         if ("true".equals(compareTo)) {
             return Boolean.TRUE;
@@ -62,22 +63,17 @@ extends ValueSemanticsProviderAndFacetAbstract<Boolean> implements BooleanValueF
         return value == null ? "" : isSet(value) ? "True" : "False";
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // Encode, Decode
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Boolean object) {
+    public String toEncodedString(final Boolean object) {
         return isSet(object) ? "T" : "F";
     }
 
     @Override
-    protected Boolean doRestore(final String data) {
+    public Boolean fromEncodedString(final String data) {
         final int dataLength = data.length();
         if (dataLength == 1) {
             switch (data.charAt(0)) {
@@ -110,7 +106,7 @@ extends ValueSemanticsProviderAndFacetAbstract<Boolean> implements BooleanValueF
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public boolean isSet(ManagedObject adapter) {
+    public boolean isSet(final ManagedObject adapter) {
         if (ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)) {
             return false;
         }
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 7f529d0..212ab3e 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
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.commons.LocaleUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -54,13 +55,12 @@ implements ByteValueFacet {
                 : NumberFormat.getNumberInstance(getConfiguration().getCore().getRuntime().getLocale().map(LocaleUtil::findLocale).orElse(Locale.getDefault()));
     }
 
-
     // //////////////////////////////////////////////////////////////////
     // Parser
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Byte doParse(final Object context, final String entry) {
+    protected Byte doParse(final Parser.Context context, final String entry) {
         try {
             return Byte.valueOf(format.parse(entry).byteValue());
         } catch (final ParseException e) {
@@ -78,20 +78,15 @@ implements ByteValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public String doEncode(final Byte object) {
+    public String toEncodedString(final Byte object) {
         return object.toString();
     }
 
     @Override
-    protected Byte doRestore(final String data) {
+    public Byte fromEncodedString(final String data) {
         return Byte.parseByte(data);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // ByteValueFacet
     // //////////////////////////////////////////////////////////////////
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 2328121..e606f6b 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
@@ -18,16 +18,16 @@
  */
 package org.apache.isis.core.metamodel.facets.value.chars;
 
-import java.text.DecimalFormat;
-
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.InvalidEntryException;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
-public abstract class CharValueSemanticsProviderAbstract extends ValueSemanticsProviderAndFacetAbstract<Character> implements CharValueFacet {
+public abstract class CharValueSemanticsProviderAbstract
+extends ValueSemanticsProviderAndFacetAbstract<Character>
+implements CharValueFacet {
 
     private static Class<? extends Facet> type() {
         return CharValueFacet.class;
@@ -46,7 +46,7 @@ public abstract class CharValueSemanticsProviderAbstract extends ValueSemanticsP
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public Character doParse(final Object context, final String entry) {
+    public Character doParse(final Parser.Context context, final String entry) {
         if (entry.length() > 1) {
             throw new InvalidEntryException("Only a single character is required");
         } else {
@@ -59,22 +59,17 @@ public abstract class CharValueSemanticsProviderAbstract extends ValueSemanticsP
         return value == null ? "" : value.toString();
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Character object) {
+    public String toEncodedString(final Character object) {
         return object.toString();
     }
 
     @Override
-    protected Character doRestore(final String data) {
+    public Character fromEncodedString(final String data) {
         return Character.valueOf(data.charAt(0));
     }
 
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 6774103..d7d2a14 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
@@ -29,7 +29,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 
-
 public class ClobValueSemanticsProvider
 extends ValueSemanticsProviderAndFacetAbstract<Clob>
 implements ClobValueFacet {
@@ -59,12 +58,6 @@ implements ClobValueFacet {
         return object != null? ((Clob)object).getName(): "[null]";
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-
     // //////////////////////////////////////////////////////////////////
     // Parser
     // //////////////////////////////////////////////////////////////////
@@ -74,6 +67,11 @@ implements ClobValueFacet {
         return null;
     }
 
+    @Override
+    protected Clob doParse(final Context context, final String entry) {
+        return null;
+    }
+
     // //////////////////////////////////////////////////////////////////
     // DefaultsProvider
     // //////////////////////////////////////////////////////////////////
@@ -88,12 +86,12 @@ implements ClobValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Clob clob) {
+    public String toEncodedString(final Clob clob) {
         return clob.getName() + ":" + clob.getMimeType().getBaseType() + ":" + clob.getChars();
     }
 
     @Override
-    protected Clob doRestore(final String data) {
+    public Clob fromEncodedString(final String data) {
         final int colonIdx = data.indexOf(':');
         final String name  = data.substring(0, colonIdx);
         final int colon2Idx  = data.indexOf(":", colonIdx+1);
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 bdb2770..da0c7b3 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
@@ -78,6 +78,7 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     /**
      * @deprecated possible memory leak issue, because this one is never cleared up
      */
+    @Deprecated
     private static final ThreadLocal<String> OVERRIDE_TITLE_PATTERN = ThreadLocal.withInitial(()->null);
 
 
@@ -131,7 +132,7 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     }
 
 
-    private void updateTitleStringFormatter(String titleStringFormatNameOrPattern) {
+    private void updateTitleStringFormatter(final String titleStringFormatNameOrPattern) {
         titleStringFormatter = NAMED_TITLE_FORMATTERS.get(titleStringFormatNameOrPattern);
         if (titleStringFormatter == null) {
             titleStringFormatter = DateTimeFormat.forPattern(titleStringFormatNameOrPattern);
@@ -146,21 +147,21 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
 
     @Override
     protected LocalDate doParse(
-            final String entry,
-            final Object context) {
+            final Parser.Context context,
+            final String entry) {
 
         updateTitleStringFormatterIfOverridden();
 
-        LocalDate contextDate = (LocalDate) context;
+        //LocalDate contextDate = (LocalDate) context;
 
         final String dateString = entry.trim().toUpperCase();
-        if (dateString.startsWith("+") && contextDate != null) {
-            return JodaLocalDateUtil.relativeDate(contextDate, dateString, true);
-        } else if (dateString.startsWith("-")  && contextDate != null) {
-            return JodaLocalDateUtil.relativeDate(contextDate, dateString, false);
-        } else {
-            return parseDate(dateString, contextDate);
-        }
+//        if (dateString.startsWith("+") && contextDate != null) {
+//            return JodaLocalDateUtil.relativeDate(contextDate, dateString, true);
+//        } else if (dateString.startsWith("-")  && contextDate != null) {
+//            return JodaLocalDateUtil.relativeDate(contextDate, dateString, false);
+//        } else {
+            return parseDate(dateString);
+//        }
     }
 
     private void updateTitleStringFormatterIfOverridden() {
@@ -174,7 +175,7 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
         updateTitleStringFormatter(overridePattern);
     }
 
-    private LocalDate parseDate(final String dateStr, final Object original) {
+    private LocalDate parseDate(final String dateStr) {
         return JodaLocalDateUtil.parseDate(dateStr, PARSE_FORMATTERS);
     }
 
@@ -193,19 +194,12 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
         return JodaLocalDateUtil.titleString(f, date);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        final LocalDate date = (LocalDate) value;
-        return JodaLocalDateUtil.titleString(DateTimeFormat.forPattern(usingMask), date);
-    }
-
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final LocalDate date) {
+    public String toEncodedString(final LocalDate date) {
         return encode(date);
     }
 
@@ -214,7 +208,7 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     }
 
     @Override
-    protected LocalDate doRestore(final String data) {
+    public LocalDate fromEncodedString(final String data) {
         try {
             return parse(data);
         } catch (final IllegalArgumentException e) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java
index aa55ae0..e482fbf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datesql/JavaSqlDateValueSemanticsProvider.java
@@ -178,12 +178,12 @@ extends ValueSemanticsProviderAbstractTemporal<Date> {
     }
 
     @Override //[ISIS-2005] java.sql.Date requires special treatment, so overriding the default
-    protected String doEncode(final Date date) {
+    public String toEncodedString(final Date date) {
         return date.toString();
     }
 
     @Override //[ISIS-2005] java.sql.Date requires special treatment, so overriding the default
-    protected Date doRestore(final String enString) {
+    public Date fromEncodedString(final String enString) {
         return Date.valueOf(enString);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java
index 1d45dea..dc3da1b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java
@@ -173,12 +173,12 @@ extends ValueSemanticsProviderAbstractTemporal<DateTime> {
     }
 
     @Override
-    protected String doEncode(final DateTime dateTime) {
+    public String toEncodedString(final DateTime dateTime) {
         return encodingFormatter().print(dateTime);
     }
 
     @Override
-    protected DateTime doRestore(final String data) {
+    public DateTime fromEncodedString(final String data) {
         try {
             return encodingFormatter().parseDateTime(data);
         } catch (final IllegalArgumentException e) {
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 e826e4d..bc69ad9 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
@@ -37,7 +37,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public class JodaLocalDateTimeValueSemanticsProvider
 extends ValueSemanticsProviderAndFacetAbstract<LocalDateTime>
 implements JodaLocalDateTimeValueFacet {
@@ -81,6 +80,7 @@ implements JodaLocalDateTimeValueFacet {
     /**
      * @deprecated possible memory leak issue, because this one is never cleared up
      */
+    @Deprecated
     private static final ThreadLocal<String> OVERRIDE_TITLE_PATTERN = ThreadLocal.withInitial(()->null);
 
     private static final List<DateTimeFormatter> PARSE_FORMATTERS = _Lists.newArrayList();
@@ -133,7 +133,7 @@ implements JodaLocalDateTimeValueFacet {
     }
 
 
-    private void updateTitleStringFormatter(String titleStringFormatNameOrPattern) {
+    private void updateTitleStringFormatter(final String titleStringFormatNameOrPattern) {
         titleStringFormatter = NAMED_TITLE_FORMATTERS.get(titleStringFormatNameOrPattern);
         if (titleStringFormatter == null) {
             titleStringFormatter = DateTimeFormat.forPattern(titleStringFormatNameOrPattern);
@@ -148,21 +148,21 @@ implements JodaLocalDateTimeValueFacet {
 
     @Override
     protected LocalDateTime doParse(
-            final String entry,
-            final Object context) {
+            final Parser.Context context,
+            final String entry) {
 
         updateTitleStringFormatterIfOverridden();
 
-        LocalDateTime contextDateTime = (LocalDateTime) context;
+        //LocalDateTime contextDateTime = (LocalDateTime) context;
 
         final String dateString = entry.trim().toUpperCase();
-        if (dateString.startsWith("+") && contextDateTime != null) {
-            return JodaLocalDateTimeUtil.relativeDateTime(contextDateTime, dateString, true);
-        } else if (dateString.startsWith("-")  && contextDateTime != null) {
-            return JodaLocalDateTimeUtil.relativeDateTime(contextDateTime, dateString, false);
-        } else {
-            return parseDateTime(dateString, contextDateTime);
-        }
+//        if (dateString.startsWith("+") && contextDateTime != null) {
+//            return JodaLocalDateTimeUtil.relativeDateTime(contextDateTime, dateString, true);
+//        } else if (dateString.startsWith("-")  && contextDateTime != null) {
+//            return JodaLocalDateTimeUtil.relativeDateTime(contextDateTime, dateString, false);
+//        } else {
+            return parseDateTime(dateString);
+//        }
     }
 
     private void updateTitleStringFormatterIfOverridden() {
@@ -176,7 +176,7 @@ implements JodaLocalDateTimeValueFacet {
         updateTitleStringFormatter(overridePattern);
     }
 
-    private LocalDateTime parseDateTime(final String dateStr, final Object original) {
+    private LocalDateTime parseDateTime(final String dateStr) {
         return JodaLocalDateTimeUtil.parseDate(dateStr, PARSE_FORMATTERS);
     }
 
@@ -195,19 +195,12 @@ implements JodaLocalDateTimeValueFacet {
         return JodaLocalDateTimeUtil.titleString(f, dateTime);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        final LocalDateTime dateTime = (LocalDateTime) value;
-        return JodaLocalDateTimeUtil.titleString(DateTimeFormat.forPattern(usingMask), dateTime);
-    }
-
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final LocalDateTime localDateTime) {
+    public String toEncodedString(final LocalDateTime localDateTime) {
         return encode(localDateTime);
     }
 
@@ -216,7 +209,7 @@ implements JodaLocalDateTimeValueFacet {
     }
 
     @Override
-    protected LocalDateTime doRestore(final String data) {
+    public LocalDateTime fromEncodedString(final String data) {
         try {
             return parse(data);
         } catch (final IllegalArgumentException e) {
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 9e6da4f..75f66e2 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
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.commons.LocaleUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -31,7 +32,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public abstract class DoubleValueSemanticsProviderAbstract
 extends ValueSemanticsProviderAndFacetAbstract<Double>
 implements DoubleFloatingPointValueFacet {
@@ -60,7 +60,7 @@ implements DoubleFloatingPointValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Double doParse(final Object context, final String entry) {
+    protected Double doParse(final Parser.Context context, final String entry) {
         try {
             return Double.valueOf(format.parse(entry).doubleValue());
         } catch (final ParseException e) {
@@ -77,22 +77,17 @@ implements DoubleFloatingPointValueFacet {
         return titleString(format, value);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Double object) {
+    public String toEncodedString(final Double object) {
         return object.toString();
     }
 
     @Override
-    protected Double doRestore(final String data) {
+    public Double fromEncodedString(final String data) {
         return Double.valueOf(data);
     }
 
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 4521776..792d8d9 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
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.commons.LocaleUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -31,7 +32,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public class FloatValueSemanticsProviderAbstract
 extends ValueSemanticsProviderAndFacetAbstract<Float>
 implements FloatingPointValueFacet {
@@ -61,7 +61,7 @@ implements FloatingPointValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Float doParse(final Object context, final String entry) {
+    protected Float doParse(final Parser.Context context, final String entry) {
         try {
             return Float.valueOf(format.parse(entry).floatValue());
         } catch (final ParseException e) {
@@ -74,22 +74,17 @@ implements FloatingPointValueFacet {
         return titleString(format, value);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Float object) {
+    public String toEncodedString(final Float object) {
         return object.toString();
     }
 
     @Override
-    protected Float doRestore(final String data) {
+    public Float fromEncodedString(final String data) {
         return new Float(data);
     }
 
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 f9e4017..7e84a34 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
@@ -44,7 +44,7 @@ implements ImageValueFacet {
     }
 
     @Override
-    protected T doParse(final Object original, final String entry) {
+    protected T doParse(final Parser.Context context, final String entry) {
         throw new UnexpectedCallException();
     }
 
@@ -53,11 +53,6 @@ implements ImageValueFacet {
         return "image";
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return "image";
-    }
-
     // -- toString
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
index ea98e28..bb473d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
@@ -53,7 +53,7 @@ extends ImageValueSemanticsProviderAbstract<BufferedImage> {
     }
 
     @Override @Nullable
-    protected String doEncode(final @Nullable BufferedImage image) {
+    public String toEncodedString(final @Nullable BufferedImage image) {
         if(image==null) {
             return null;
         }
@@ -61,7 +61,7 @@ extends ImageValueSemanticsProviderAbstract<BufferedImage> {
     }
 
     @Override @Nullable
-    protected BufferedImage doRestore(final @Nullable String base64ImageData) {
+    public BufferedImage fromEncodedString(final @Nullable String base64ImageData) {
         if(_Strings.isNullOrEmpty(base64ImageData)) {
             return null;
         }
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 92a3543..b665362 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
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.commons.LocaleUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -31,7 +32,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public abstract class IntValueSemanticsProviderAbstract
 extends ValueSemanticsProviderAndFacetAbstract<Integer>
 implements IntegerValueFacet {
@@ -65,7 +65,7 @@ implements IntegerValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Integer doParse(final Object context, final String entry) {
+    protected Integer doParse(final Parser.Context context, final String entry) {
         try {
             return Integer.valueOf(format.parse(entry).intValue());
         } catch (final ParseException e) {
@@ -78,22 +78,18 @@ implements IntegerValueFacet {
         return titleString(format, value);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
 
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Integer object) {
+    public String toEncodedString(final Integer object) {
         return object.toString();
     }
 
     @Override
-    protected Integer doRestore(final String data) {
+    public Integer fromEncodedString(final String data) {
         return Integer.parseInt(data);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java
index f70f2bc..e420384 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java
@@ -59,7 +59,7 @@ extends ValueSemanticsProviderAndFacetAbstract<LocalResourcePath> implements Loc
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected LocalResourcePath doParse(final Object context, final String entry) {
+    protected LocalResourcePath doParse(final Parser.Context context, final String entry) {
         if (entry.trim().equals("")) {
             return null;
         }
@@ -78,24 +78,19 @@ extends ValueSemanticsProviderAndFacetAbstract<LocalResourcePath> implements Loc
                 : "";
     }
 
-    @Override
-    public String titleStringWithMask(final Object object, final String usingMask) {
-        return titleString(object);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final LocalResourcePath localResourcePath) {
+    public String toEncodedString(final LocalResourcePath localResourcePath) {
         return localResourcePath != null
                 ? localResourcePath.getValue()
                 : "NULL";
     }
 
     @Override
-    protected LocalResourcePath doRestore(final String data) {
+    public LocalResourcePath fromEncodedString(final String data) {
         if("NULL".equals(data)) {
             return null;
         }
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 64085b1..0e4d114 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
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.commons.LocaleUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -31,7 +32,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public abstract class LongValueSemanticsProviderAbstract
 extends ValueSemanticsProviderAndFacetAbstract<Long>
 implements LongValueFacet {
@@ -61,7 +61,7 @@ implements LongValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Long doParse(final Object context, final String entry) {
+    protected Long doParse(final Parser.Context context, final String entry) {
         try {
             return Long.valueOf(format.parse(entry).longValue());
         } catch (final ParseException e) {
@@ -74,22 +74,17 @@ implements LongValueFacet {
         return titleString(format, value);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Long object) {
+    public String toEncodedString(final Long object) {
         return object.toString();
     }
 
     @Override
-    protected Long doRestore(final String data) {
+    public Long fromEncodedString(final String data) {
         return Long.parseLong(data);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueSemanticsProvider.java
index 4cf9e03..c6bacde 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/markup/MarkupValueSemanticsProvider.java
@@ -55,8 +55,8 @@ implements MarkupValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Markup doParse(final Object context, final String html) {
-        return doRestore(html);
+    protected Markup doParse(final Parser.Context context, final String html) {
+        return fromEncodedString(html);
     }
 
     @Override
@@ -64,11 +64,6 @@ implements MarkupValueFacet {
         return object != null? ((Markup)object).asHtml(): "[null]";
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // MarkupValueFacet
     // //////////////////////////////////////////////////////////////////
@@ -93,12 +88,12 @@ implements MarkupValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Markup markup) {
+    public String toEncodedString(final Markup markup) {
         return markup.asHtml();
     }
 
     @Override
-    protected Markup doRestore(final String html) {
+    public Markup fromEncodedString(final String html) {
         return new Markup(html);
     }
 
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 9484cd9..c636086 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
@@ -26,7 +26,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public class PasswordValueSemanticsProvider
 extends ValueSemanticsProviderAndFacetAbstract<Password>
 implements PasswordValueFacet {
@@ -54,7 +53,7 @@ implements PasswordValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Password doParse(final Object context, final String text) {
+    protected Password doParse(final Parser.Context context, final String text) {
         return new Password(text);
     }
 
@@ -63,22 +62,17 @@ implements PasswordValueFacet {
         return object == null ? "" : password(object).toString();
     }
 
-    @Override
-    public String titleStringWithMask(final Object object, final String usingMask) {
-        return titleString(object);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Password object) {
+    public String toEncodedString(final Password object) {
         return password(object).getPassword();
     }
 
     @Override
-    protected Password doRestore(final String data) {
+    public Password fromEncodedString(final String data) {
         return new Password(data);
     }
 
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 ab1ac5e..1f78421 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
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.util.Locale;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.core.metamodel.commons.LocaleUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -31,7 +32,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
 public class ShortValueSemanticsProviderAbstract
 extends ValueSemanticsProviderAndFacetAbstract<Short>
 implements ShortValueFacet {
@@ -63,7 +63,7 @@ implements ShortValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected Short doParse(final Object context, final String entry) {
+    protected Short doParse(final Parser.Context context, final String entry) {
         try {
             return Short.valueOf(format.parse(entry).shortValue());
         } catch (final ParseException e) {
@@ -76,22 +76,17 @@ implements ShortValueFacet {
         return titleString(format, value);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(new DecimalFormat(usingMask), value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final Short object) {
+    public String toEncodedString(final Short object) {
         return object.toString();
     }
 
     @Override
-    protected Short doRestore(final String data) {
+    public Short fromEncodedString(final String data) {
         return Short.parseShort(data);
     }
 
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 d22ef5c..59f2822 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
@@ -52,7 +52,7 @@ implements StringValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doParse(final Object context, final String entry) {
+    protected String doParse(final Parser.Context context, final String entry) {
         if (entry.trim().equals("")) {
             return null;
         } else {
@@ -66,17 +66,12 @@ implements StringValueFacet {
         return string;
     }
 
-    @Override
-    public String titleStringWithMask(final Object object, final String usingMask) {
-        return titleString(object);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final String text) {
+    public String toEncodedString(final String text) {
         if (text.equals("NULL") || isEscaped(text)) {
             return escapeText(text);
         } else {
@@ -85,7 +80,7 @@ implements StringValueFacet {
     }
 
     @Override
-    protected String doRestore(final String data) {
+    public String fromEncodedString(final String data) {
         if (isEscaped(data)) {
             return data.substring(1);
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
index cf436b9..9c06bb1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
@@ -34,6 +34,7 @@ import java.util.stream.Stream;
 import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.adapters.EncodingException;
+import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Casts;
@@ -80,15 +81,15 @@ implements TemporalValueFacet<T> {
     protected final BiFunction<TemporalAdjust, T, T> adjuster;
 
     public TemporalValueSemanticsProviderAbstract(
-            Class<? extends Facet> adapterFacetType,
-            TemporalCharacteristic temporalCharacteristic,
-            OffsetCharacteristic offsetCharacteristic,
-            FacetHolder holder,
-            Class<T> valueType,
-            int typicalLength,
-            int maxLength,
-            TemporalQuery<T> query,
-            BiFunction<TemporalAdjust, T, T> adjuster) {
+            final Class<? extends Facet> adapterFacetType,
+            final TemporalCharacteristic temporalCharacteristic,
+            final OffsetCharacteristic offsetCharacteristic,
+            final FacetHolder holder,
+            final Class<T> valueType,
+            final int typicalLength,
+            final int maxLength,
+            final TemporalQuery<T> query,
+            final BiFunction<TemporalAdjust, T, T> adjuster) {
 
         super(adapterFacetType, holder, valueType, typicalLength, maxLength,
                 Immutability.IMMUTABLE, EqualByContent.HONOURED, /*DEFAULT_VALUE*/ null);
@@ -111,15 +112,15 @@ implements TemporalValueFacet<T> {
         visitor.accept("offsetCharacteristic", getOffsetCharacteristic());
     }
 
-    protected void setEncodingFormatter(DateTimeFormatter encodingFormatter) {
+    protected void setEncodingFormatter(final DateTimeFormatter encodingFormatter) {
         this.encodingFormatter = encodingFormatter;
     }
 
-    protected void addNamedFormat(String name, String pattern) {
+    protected void addNamedFormat(final String name, final String pattern) {
         namedFormatters.put(name, DateTimeFormatter.ofPattern(pattern, Locale.getDefault()));
     }
 
-    protected Optional<FormatStyle> lookupFormatStyle(String styleName) {
+    protected Optional<FormatStyle> lookupFormatStyle(final String styleName) {
         if(styleName==null) {
             return Optional.empty();
         }
@@ -128,16 +129,16 @@ implements TemporalValueFacet<T> {
         .findFirst();
     }
 
-    protected Optional<DateTimeFormatter> lookupNamedFormatter(String formatName) {
+    protected Optional<DateTimeFormatter> lookupNamedFormatter(final String formatName) {
         return Optional.ofNullable(namedFormatters.get(formatName));
     }
 
-    protected DateTimeFormatter lookupNamedFormatterElseFail(String formatName) {
+    protected DateTimeFormatter lookupNamedFormatterElseFail(final String formatName) {
         return lookupNamedFormatter(formatName)
                 .orElseThrow(()->_Exceptions.noSuchElement("unknown format name %s", formatName));
     }
 
-    protected Optional<DateTimeFormatter> formatterFromPattern(String pattern) {
+    protected Optional<DateTimeFormatter> formatterFromPattern(final String pattern) {
         try {
             return Optional.of(DateTimeFormatter.ofPattern(pattern, Locale.getDefault()));
         } catch (Exception e) {
@@ -177,12 +178,12 @@ implements TemporalValueFacet<T> {
     // -- ENCODER/DECODER
 
     @Override
-    protected String doEncode(final T temporal) {
+    public String toEncodedString(final T temporal) {
         return encodingFormatter.format(temporal);
     }
 
     @Override
-    protected T doRestore(final String data) {
+    public T fromEncodedString(final String data) {
         try {
             return encodingFormatter.parse(data, query);
         } catch (final IllegalArgumentException e) {
@@ -194,8 +195,8 @@ implements TemporalValueFacet<T> {
 
     @Override
     protected T doParse(
-            final String entry,
-            final Object context) {
+            final Parser.Context context,
+            final String entry) {
 
         T contextTemporal = _Casts.uncheckedCast(context);
 
@@ -210,7 +211,7 @@ implements TemporalValueFacet<T> {
         return parse(temporalString, parsers);
     }
 
-    private T parse(String dateStr, Iterable<Function<String, T>> parsers) {
+    private T parse(final String dateStr, final Iterable<Function<String, T>> parsers) {
         for(val parser: parsers) {
             try {
                 return parser.apply(dateStr);
@@ -235,14 +236,7 @@ implements TemporalValueFacet<T> {
         return titleString(titleFormatter, temporal);
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        val temporal = _Casts.<T>uncheckedCast(value);
-        val formatter = DateTimeFormatter.ofPattern(usingMask, Locale.getDefault());
-        return titleString(formatter, temporal);
-    }
-
-    private String titleString(@NonNull DateTimeFormatter formatter, @Nullable T temporal) {
+    private String titleString(@NonNull final DateTimeFormatter formatter, @Nullable final T temporal) {
         return temporal != null ? formatter.format(temporal) : "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java
index 1b5f3ee..573c297 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java
@@ -21,9 +21,11 @@ package org.apache.isis.core.metamodel.facets.value.treenode;
 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.Parser.Context;
 import org.apache.isis.applib.graph.tree.TreeNode;
 import org.apache.isis.applib.graph.tree.TreeState;
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
+import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.memento._Mementos;
 import org.apache.isis.commons.internal.memento._Mementos.Memento;
 import org.apache.isis.commons.internal.memento._Mementos.SerializingAdapter;
@@ -32,7 +34,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 
 @SuppressWarnings("rawtypes")
-public class TreeNodeValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<TreeNode>
+public class TreeNodeValueSemanticsProvider
+extends ValueSemanticsProviderAndFacetAbstract<TreeNode>
 implements TreeNodeValueFacet {
 
     private static final int TYPICAL_LENGTH = 0;
@@ -62,11 +65,6 @@ implements TreeNodeValueFacet {
         return object != null ? ((TreeNode<?>)object).toString() : "[null]"; //TODO implement
     }
 
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // Parser
     // //////////////////////////////////////////////////////////////////
@@ -76,6 +74,11 @@ implements TreeNodeValueFacet {
         return null;
     }
 
+    @Override
+    protected TreeNode doParse(final Context context, final String entry) {
+        return null;
+    }
+
     // //////////////////////////////////////////////////////////////////
     // DefaultsProvider
     // //////////////////////////////////////////////////////////////////
@@ -90,7 +93,7 @@ implements TreeNodeValueFacet {
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final TreeNode treeNode) {
+    public String toEncodedString(final TreeNode treeNode) {
 
         final Memento memento = newMemento();
         memento.put("primaryValue", treeNode.getValue());
@@ -101,7 +104,7 @@ implements TreeNodeValueFacet {
 
     @SuppressWarnings("unchecked")
     @Override
-    protected TreeNode<?> doRestore(final String input) {
+    public TreeNode<?> fromEncodedString(final String input) {
         final Memento memento = parseMemento(input);
         return TreeNode.of(
                 memento.get("primaryValue", Object.class),
@@ -124,7 +127,7 @@ implements TreeNodeValueFacet {
         return _Mementos.create(codec, serializer);
     }
 
-    private _Mementos.Memento parseMemento(String input){
+    private _Mementos.Memento parseMemento(final String input){
         final UrlEncodingService codec = getServiceRegistry().lookupServiceElseFail(UrlEncodingService.class);
         final SerializingAdapter serializer = getServiceRegistry().lookupServiceElseFail(SerializingAdapter.class);
         return _Mementos.parse(codec, serializer, input);
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 ae780b5..46b2850 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
@@ -27,7 +27,9 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-public class URLValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<java.net.URL> implements URLValueFacet {
+public class URLValueSemanticsProvider
+extends ValueSemanticsProviderAndFacetAbstract<java.net.URL>
+implements URLValueFacet {
 
 
     private static final Class<? extends Facet> type() {
@@ -56,7 +58,7 @@ public class URLValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbs
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected java.net.URL doParse(final Object context, final String entry) {
+    protected java.net.URL doParse(final Parser.Context context, final String entry) {
         if (entry.trim().equals("")) {
             return null;
         }
@@ -74,22 +76,17 @@ public class URLValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbs
         return object != null? object.toString(): "";
     }
 
-    @Override
-    public String titleStringWithMask(final Object object, final String usingMask) {
-        return titleString(object);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final java.net.URL url) {
+    public String toEncodedString(final java.net.URL url) {
         return url != null? url.toString(): "NULL";
     }
 
     @Override
-    protected java.net.URL doRestore(final String data) {
+    public java.net.URL fromEncodedString(final String data) {
         if("NULL".equals(data)) {
             return null;
         }
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 7c1a99d..54ffd0f 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
@@ -27,8 +27,9 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
-
-public class UUIDValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<UUID> implements UUIDValueFacet {
+public class UUIDValueSemanticsProvider
+extends ValueSemanticsProviderAndFacetAbstract<UUID>
+implements UUIDValueFacet {
 
     private static final Class<? extends Facet> type() {
         return UUIDValueFacet.class;
@@ -55,7 +56,7 @@ public class UUIDValueSemanticsProvider extends ValueSemanticsProviderAndFacetAb
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected UUID doParse(final Object context, final String entry) {
+    protected UUID doParse(final Parser.Context context, final String entry) {
         if (entry.trim().equals("")) {
             return null;
         } else {
@@ -68,22 +69,17 @@ public class UUIDValueSemanticsProvider extends ValueSemanticsProviderAndFacetAb
         return object == null ? "" : object.toString();
     }
 
-    @Override
-    public String titleStringWithMask(final Object object, final String usingMask) {
-        return titleString(object);
-    }
-
     // //////////////////////////////////////////////////////////////////
     // EncoderDecoder
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    protected String doEncode(final UUID object) {
+    public String toEncodedString(final UUID object) {
         return object.toString();
     }
 
     @Override
-    protected UUID doRestore(final String data) {
+    public UUID fromEncodedString(final String data) {
         return UUID.fromString(data);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
index 025c557..971b0f4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
@@ -50,7 +50,7 @@ public class JodaLocalDateTimeValueSemanticsProviderTest {
 
         metaModelContext = MetaModelContext_forTesting.builder()
                 .build();
-        
+
         metaModelContext.getConfiguration();
 
         context.checking(new Expectations() {
@@ -61,7 +61,7 @@ public class JodaLocalDateTimeValueSemanticsProviderTest {
         });
 
         provider = new JodaLocalDateTimeValueSemanticsProvider(mockFacetHolder);
-        
+
 
     }
 
@@ -70,8 +70,8 @@ public class JodaLocalDateTimeValueSemanticsProviderTest {
 
         final LocalDateTime t0 = LocalDateTime.now();
 
-        final String encoded = provider.doEncode(t0);
-        final LocalDateTime t1 = provider.doRestore(encoded);
+        final String encoded = provider.toEncodedString(t0);
+        final LocalDateTime t1 = provider.fromEncodedString(encoded);
 
         assertThat(t0, is(equalTo(t1)));
     }
diff --git a/valuetypes/markdown/metamodel/src/main/java/org/apache/isis/valuetypes/markdown/metamodel/facets/MarkdownValueSemanticsProvider.java b/valuetypes/markdown/metamodel/src/main/java/org/apache/isis/valuetypes/markdown/metamodel/facets/MarkdownValueSemanticsProvider.java
index 7f49342..271c4c2 100644
--- a/valuetypes/markdown/metamodel/src/main/java/org/apache/isis/valuetypes/markdown/metamodel/facets/MarkdownValueSemanticsProvider.java
+++ b/valuetypes/markdown/metamodel/src/main/java/org/apache/isis/valuetypes/markdown/metamodel/facets/MarkdownValueSemanticsProvider.java
@@ -52,8 +52,8 @@ implements MarkdownValueFacet {
 
 
     @Override
-    protected Markdown doParse(final Object context, final String html) {
-        return doRestore(html);
+    protected Markdown doParse(final Parser.Context context, final String html) {
+        return fromEncodedString(html);
     }
 
     @Override
@@ -62,17 +62,12 @@ implements MarkdownValueFacet {
     }
 
     @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-    @Override
-    protected String doEncode(final Markdown markdown) {
+    public String toEncodedString(final Markdown markdown) {
         return markdown.getMarkdown();
     }
 
     @Override
-    protected Markdown doRestore(final String markdown) {
+    public Markdown fromEncodedString(final String markdown) {
         return new Markdown(markdown);
     }