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 16:36:15 UTC

[isis] branch master updated: ISIS-2871: AsciiDoc value edit fixes

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 efabec3  ISIS-2871: AsciiDoc value edit fixes
efabec3 is described below

commit efabec3fb0ad4ed374c66b5ca2090db15ce52def
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Sep 14 18:36:03 2021 +0200

    ISIS-2871: AsciiDoc value edit fixes
---
 .../org/apache/isis/applib/adapters/Parser.java    |  54 +++++------
 .../facets/object/parseable/ParseableFacet.java    |   2 +-
 .../object/parseable/ParseableFacetAbstract.java   |   4 +-
 .../parser/ParseableFacetUsingParser.java          |  23 +++--
 .../object/title/parser/TitleFacetUsingParser.java |  27 +++---
 .../ValueSemanticsProviderAndFacetAbstract.java    |  30 +++---
 .../core/metamodel/util/snapshot/XmlSnapshot.java  |   2 +-
 .../parseable/ParseableFacetUsingParserTest.java   |  16 ++--
 ...eFacetAnnotationOrConfigurationFactoryTest.java |  39 +++-----
 .../BigDecimalValueSemanticsProviderTest.java      |   6 +-
 .../value/BigIntValueSemanticsProviderTest.java    |   6 +-
 .../value/BlobValueSemanticsProviderTest.java      |   2 +-
 .../value/BooleanValueSemanticsProviderTest.java   |  12 +--
 .../value/ByteValueSemanticsProviderTest.java      |   6 +-
 .../value/CharacterValueSemanticsProviderTest.java |   6 +-
 .../value/ClobValueSemanticsProviderTest.java      |   2 +-
 .../value/DoubleValueSemanticsProviderTest.java    |  10 +-
 .../value/FloatValueSemanticsProviderTest.java     |   8 +-
 .../value/IntValueSemanticsProviderTest.java       |   8 +-
 .../JavaSqlDateValueSemanticsProviderTest.java     |   6 +-
 .../JavaUtilDateValueSemanticsProviderTest.java    |   6 +-
 .../value/LongValueSemanticsProviderTest.java      |   8 +-
 .../value/ShortValueSemanticsProviderTest.java     |  10 +-
 .../value/StringValueSemanticsProviderTest.java    |   4 +-
 .../ValueSemanticsProviderAbstractTestCase.java    |   8 +-
 .../dom/_infra/LibraryPreloadingService.java       |   5 +-
 .../HasAsciiDocDescription_sources.java            |   2 +-
 .../_infra/resources/AsciiDocReaderService.java    |   2 +-
 .../jdo/ComplexNumberJdoValueSemantics.java        |  16 ++--
 .../jpa/ComplexNumberJpaValueSemantics.java        |  16 ++--
 .../isis/testdomain/rest/CorsFilterTest.java       |  58 ++++++------
 .../testdomain/rest/DomainObjectResourceTest.java  |  22 ++---
 .../asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java  |   2 +-
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |   9 +-
 .../metamodel/facets/AsciiDocValueFacet.java       |  29 ------
 .../facets/AsciiDocValueSemanticsProvider.java     | 102 ---------------------
 .../semantics/AsciiDocValueSemanticsProvider.java  |  77 ++++++++++++++++
 .../asciidoc/metamodel/semantics/Converter.java    |  96 +++++++++++++++++++
 .../jdo/dn5/converters/IsisAsciiDocConverter.java  |   2 +-
 .../jpa/converters/IsisAsciiDocConverter.java      |   2 +-
 .../wkt/components/AsciiDocForXmlComponentWkt.java |  22 ++---
 .../binding/NumberConverterForStringComponent.java |  14 +--
 .../TemporalConverterForLocalDateComponent.java    |  16 ++--
 .../viewer/wicket/model/models/ScalarModel.java    |  11 ++-
 44 files changed, 413 insertions(+), 395 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
index d549b1c..21865e6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
@@ -18,6 +18,11 @@
  */
 package org.apache.isis.applib.adapters;
 
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.iactnlayer.InteractionContext;
+
+import lombok.Value;
+
 /**
  * Provides a mechanism for parsing and rendering string representations of
  * objects.
@@ -40,9 +45,9 @@ package org.apache.isis.applib.adapters;
  * than having the framework do this).
  *
  * <p>
- * For third-party value types, 
- * eg see <a href="http://timeandmoney.sourceforge.net/">Time-and-Money</a> 
- * there is no ability to write <tt>title()</tt> methods; 
+ * For third-party value types,
+ * eg see <a href="http://timeandmoney.sourceforge.net/">Time-and-Money</a>
+ * there is no ability to write <tt>title()</tt> methods;
  * so this is the main reason that this
  * interface has to deal with titles and lengths.
  *
@@ -69,35 +74,20 @@ package org.apache.isis.applib.adapters;
  */
 public interface Parser<T> {
 
-    /**
-     * Parses a string to an instance of the object.
-     *
-     * <p>
-     * Note that here the implementing class is acting as a factory for itself.
-     * @param contextPojo
-     *            - the context domain object for which the text is being
-     *            parsed. For example +3 might mean add 3 to the current number.
-     */
-    T parseTextEntry(Object contextPojo, String entry);
-
-    /**
-     * The typical length of objects that can be parsed.
-     */
-    int typicalLength();
-
-    /**
-     * The title of the object.
-     */
-    String displayTitleOf(T object);
+    @Value(staticConstructor = "of")
+    static class Context {
+        Identifier identifier;
+        InteractionContext interactionContext;
+    }
 
     /**
-     * The title of the object using a mask.
+     * The value in its read-only presentation form, eg. html. (irreversible)
      */
-    String displayTitleOf(T object, String usingMask);
+    String presentationValue(Context context, T value);
 
     /**
      * A title for the object that is valid but which may be easier to edit than
-     * the title provided by a <code>TitleFacet</code>.
+     * the title provided by a <code>TitleFacet</code>. (bijective)
      *
      * <p>
      * The idea here is that the viewer can display a parseable title for an
@@ -105,7 +95,17 @@ public interface Parser<T> {
      * 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);
+    String parseableTextRepresentation(Context context, T value);
+
+    /**
+     * Parses a string to an instance of the object. (bijective)
+     */
+    T parseTextRepresentation(Context context, String text);
+
+    /**
+     * The typical length of objects that can be parsed.
+     */
+    int typicalLength();
 
     /**
      * The max length of objects that can be parsed (if any).
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java
index 8c50ca1..d0c9f40 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacet.java
@@ -50,5 +50,5 @@ public interface ParseableFacet extends Facet {
      * field. So, a date might be rendered via a {@link TitleFacet} as
      * <tt>May 2, 2007</tt>, but its parseable form might be <tt>20070502</tt>.
      */
-    String parseableTitle(ManagedObject obj);
+    String parseableTextRepresentation(ManagedObject obj);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
index d1f0e84..7e1d014 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
@@ -88,7 +88,7 @@ implements ParseableFacet {
     }
 
     @Override
-    public String parseableTitle(final ManagedObject existing) {
-        return parseableFacetUsingParser.parseableTitle(existing);
+    public String parseableTextRepresentation(final ManagedObject existing) {
+        return parseableFacetUsingParser.parseableTextRepresentation(existing);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
index ae473f0..21fcad4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.metamodel.facets.object.parseable.parser;
 import java.util.IllegalFormatException;
 import java.util.function.BiConsumer;
 
+import org.springframework.lang.Nullable;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.adapters.ParsingException;
@@ -30,6 +32,7 @@ import org.apache.isis.core.metamodel.consent.InteractionResultSet;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
@@ -79,7 +82,7 @@ implements ParseableFacet {
 
     @Override
     public ManagedObject parseTextEntry(
-            final ManagedObject contextAdapter,
+            final @Nullable ManagedObject contextAdapter,
             final String entry,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
@@ -101,10 +104,8 @@ implements ParseableFacet {
             validate(parseValueContext);
         }
 
-        final Object context = UnwrapUtil.single(contextAdapter);
-
         try {
-            final Object parsed = parser.parseTextEntry(context, entry);
+            final Object parsed = parser.parseTextRepresentation(parserContext(), entry);
             if (parsed == null) {
                 return null;
             }
@@ -138,10 +139,20 @@ implements ParseableFacet {
      */
     @Override
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    public String parseableTitle(final ManagedObject contextAdapter) {
+    public String parseableTextRepresentation(final ManagedObject contextAdapter) {
         final Object pojo = UnwrapUtil.single(contextAdapter);
 
-        return ((Parser)parser).parseableTitleOf(pojo);
+        return ((Parser)parser).parseableTextRepresentation(parserContext(), pojo);
+    }
+
+    private Parser.Context parserContext() {
+        val iaProvider = super.getInteractionProvider();
+        if(iaProvider==null) {
+            return null; // JUnit context
+        }
+        return Parser.Context.of(
+                ((FacetHolderAbstract)getFacetHolder()).getFeatureIdentifier(),
+                iaProvider.currentInteractionContext().orElse(null));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingParser.java
index 552f01a..e9e7f98 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/parser/TitleFacetUsingParser.java
@@ -25,10 +25,12 @@ import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 import lombok.NonNull;
+import lombok.val;
 
 public final class TitleFacetUsingParser
 extends FacetAbstract
@@ -61,21 +63,7 @@ implements TitleFacet {
         if (object == null) {
             return null;
         }
-        return parser.displayTitleOf(_Casts.uncheckedCast(object));
-    }
-
-    /**
-     * not API
-     */
-    public String title(final ManagedObject adapter, final String usingMask) {
-        if (adapter == null) {
-            return null;
-        }
-        final Object object = adapter.getPojo();
-        if (object == null) {
-            return null;
-        }
-        return parser.displayTitleOf(_Casts.uncheckedCast(object), usingMask);
+        return parser.presentationValue(parserContext(), _Casts.uncheckedCast(object));
     }
 
     @Override
@@ -84,5 +72,14 @@ implements TitleFacet {
         visitor.accept("parser", parser.toString());
     }
 
+    private Parser.Context parserContext() {
+        val iaProvider = super.getInteractionProvider();
+        if(iaProvider==null) {
+            return null; // JUnit context
+        }
+        return Parser.Context.of(
+                ((FacetHolderAbstract)getFacetHolder()).getFeatureIdentifier(),
+                iaProvider.currentInteractionContext().orElse(null));
+    }
 
 }
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 4d2578a..1d96ea5 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
@@ -49,7 +49,7 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
         IMMUTABLE,
         NOT_IMMUTABLE;
 
-        public static Immutability of(boolean immutable) {
+        public static Immutability of(final boolean immutable) {
             return immutable? IMMUTABLE: NOT_IMMUTABLE;
         }
     }
@@ -58,7 +58,7 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
         HONOURED,
         NOT_HONOURED;
 
-        public static EqualByContent of(boolean equalByContent) {
+        public static EqualByContent of(final boolean equalByContent) {
             return equalByContent? HONOURED: NOT_HONOURED;
         }
     }
@@ -137,7 +137,7 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
     // ///////////////////////////////////////////////////////////////////////////
 
     @Override
-    public T parseTextEntry(final Object context, final String entry) {
+    public T parseTextRepresentation(final Parser.Context context, final String entry) {
         if (entry == null) {
             throw new IllegalArgumentException();
         }
@@ -151,9 +151,9 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
         return doParse(context, entry);
     }
 
-    public Optional<Exception> tryParseTextEntry(final Object context, final String entry) {
+    public Optional<Exception> tryParseTextEntry(final Parser.Context context, final String entry) {
         try {
-            parseTextEntry(context, entry);
+            parseTextRepresentation(context, entry);
         } catch (Exception e) {
             return Optional.of(e);
         }
@@ -167,12 +167,12 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
      *            - the proposed new object, as a string representation to be
      *            parsed
      */
-    protected T doParse(Object context, String entry) {
+    protected T doParse(final Object context, final String entry) {
         return doParse(entry, context);
     }
 
     // REVIEW: this method used to take Localization as a third param, could now inline
-    protected T doParse(String entry, Object context) {
+    protected T doParse(final String entry, final Object context) {
         return doParse(context, entry);
     }
 
@@ -187,27 +187,19 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
     }
 
     @Override
-    public String displayTitleOf(final Object object) {
+    public String presentationValue(final Parser.Context context, final Object object) {
         if (object == null) {
             return "";
         }
         return titleString(object);
     }
 
-    @Override
-    public String displayTitleOf(final Object object, final String usingMask) {
-        if (object == null) {
-            return "";
-        }
-        return titleStringWithMask(object, usingMask);
-    }
-
     /**
-     * Defaults to {@link Parser#displayTitleOf(Object)}.
+     * Defaults to {@link Parser#presentationValue(org.apache.isis.applib.adapters.Parser.Context, Object)}.
      */
     @Override
-    public String parseableTitleOf(final Object existing) {
-        return displayTitleOf(existing);
+    public String parseableTextRepresentation(final Parser.Context context, final Object existing) {
+        return presentationValue(context, existing);
     }
 
     protected String titleString(final Format formatter, final Object object) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
index d8e506f..c510489 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
@@ -713,7 +713,7 @@ public class XmlSnapshot implements Snapshot {
                     final ParseableFacet parseableFacet = fieldNos.getFacet(ParseableFacet.class);
                     final EncodableFacet encodeableFacet = fieldNos.getFacet(EncodableFacet.class);
                     if (parseableFacet != null) {
-                        valueStr = parseableFacet.parseableTitle(value);
+                        valueStr = parseableFacet.parseableTextRepresentation(value);
                     } else if (encodeableFacet != null) {
                         valueStr = encodeableFacet.toEncodedString(value);
                     } else {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
index 7f1be16..1b19776 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
@@ -58,7 +58,7 @@ public class ParseableFacetUsingParserTest {
     public void setUp() throws Exception {
 
         metaModelContext = MetaModelContext_forTesting.builder()
-                .interactionProvider(mockInteractionProvider)
+                //.interactionProvider(mockInteractionProvider)
                 .build();
 
 
@@ -73,12 +73,15 @@ public class ParseableFacetUsingParserTest {
                 allowing(mockFacetHolder).containsFacet(ValueFacet.class);
                 will(returnValue(Boolean.FALSE));
 
+                allowing(mockFacetHolder).getInteractionProvider();
+                will(returnValue(null));
+
             }
         });
 
         final Parser<String> parser = new Parser<String>() {
             @Override
-            public String parseTextEntry(final Object contextPojo, final String entry) {
+            public String parseTextRepresentation(final Parser.Context context, final String entry) {
                 if (entry.equals("invalid")) {
                     throw new ParsingException();
                 }
@@ -97,17 +100,12 @@ public class ParseableFacetUsingParserTest {
             }
 
             @Override
-            public String displayTitleOf(final String object) {
-                return null;
-            }
-
-            @Override
-            public String displayTitleOf(final String object, final String usingMask) {
+            public String presentationValue(final Parser.Context context, final String object) {
                 return null;
             }
 
             @Override
-            public String parseableTitleOf(final String existing) {
+            public String parseableTextRepresentation(final Parser.Context context, final String existing) {
                 return null;
             }
         };
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
index 7a328b3..c3a9ed1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
@@ -150,24 +150,19 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
         }
 
         @Override
-        public MyValueSemanticsProviderThatIsAParser parseTextEntry(
-                final Object context,
+        public MyValueSemanticsProviderThatIsAParser parseTextRepresentation(
+                final Parser.Context context,
                 final String entry) {
             return null;
         }
 
         @Override
-        public String displayTitleOf(final MyValueSemanticsProviderThatIsAParser object) {
+        public String presentationValue(final Parser.Context context, final MyValueSemanticsProviderThatIsAParser object) {
             return null;
         }
 
         @Override
-        public String displayTitleOf(final MyValueSemanticsProviderThatIsAParser object, final String usingMask) {
-            return null;
-        }
-
-        @Override
-        public String parseableTitleOf(final MyValueSemanticsProviderThatIsAParser existing) {
+        public String parseableTextRepresentation(final Parser.Context context, final MyValueSemanticsProviderThatIsAParser existing) {
             return null;
         }
 
@@ -322,24 +317,19 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
         }
 
         @Override
-        public MyValueWithSemanticsProviderSpecifiedUsingConfiguration parseTextEntry(
-                final Object context,
+        public MyValueWithSemanticsProviderSpecifiedUsingConfiguration parseTextRepresentation(
+                final Parser.Context context,
                 final String entry) {
             return null;
         }
 
         @Override
-        public String displayTitleOf(final MyValueWithSemanticsProviderSpecifiedUsingConfiguration object) {
-            return null;
-        }
-
-        @Override
-        public String displayTitleOf(final MyValueWithSemanticsProviderSpecifiedUsingConfiguration object, final String usingMask) {
+        public String presentationValue(final Parser.Context context, final MyValueWithSemanticsProviderSpecifiedUsingConfiguration object) {
             return null;
         }
 
         @Override
-        public String parseableTitleOf(final MyValueWithSemanticsProviderSpecifiedUsingConfiguration existing) {
+        public String parseableTextRepresentation(final Parser.Context context, final MyValueWithSemanticsProviderSpecifiedUsingConfiguration existing) {
             return null;
         }
 
@@ -379,24 +369,19 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
         }
 
         @Override
-        public NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration parseTextEntry(
-                final Object context,
+        public NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration parseTextRepresentation(
+                final Parser.Context context,
                 final String entry) {
             return null;
         }
 
         @Override
-        public String displayTitleOf(final NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration object) {
-            return null;
-        }
-
-        @Override
-        public String displayTitleOf(final NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration object, final String usingMask) {
+        public String presentationValue(final Parser.Context context, final NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration object) {
             return null;
         }
 
         @Override
-        public String parseableTitleOf(final NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration existing) {
+        public String parseableTextRepresentation(final Parser.Context context, final NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration existing) {
             return null;
         }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
index f1b7235..deac09a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
@@ -50,14 +50,14 @@ public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProvider
 
     @Test
     public void testParseValidString() throws Exception {
-        final Object newValue = value.parseTextEntry(null, "2142342334");
+        final Object newValue = value.parseTextRepresentation(null, "2142342334");
         assertEquals(new BigDecimal(2142342334L), newValue);
     }
 
     @Test
     public void testParseInvalidString() throws Exception {
         try {
-            value.parseTextEntry(null, "214xxx2342334");
+            value.parseTextRepresentation(null, "214xxx2342334");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -65,7 +65,7 @@ public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProvider
 
     @Test
     public void testTitleOf() {
-        assertEquals("34,132.199", value.displayTitleOf(bigDecimal));
+        assertEquals("34,132.199", value.presentationValue(null, bigDecimal));
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
index ac35b4d..544bf3f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
@@ -52,14 +52,14 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testParseValidString() throws Exception {
-        final Object newValue = getValue().parseTextEntry(null, "2142342334");
+        final Object newValue = getValue().parseTextRepresentation(null, "2142342334");
         assertEquals(new BigInteger("2142342334"), newValue);
     }
 
     @Test
     public void testParseInvalidString() throws Exception {
         try {
-            getValue().parseTextEntry(null, "214xxx2342334");
+            getValue().parseTextRepresentation(null, "214xxx2342334");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -67,7 +67,7 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitle() throws Exception {
-        assertEquals("132,199", getValue().displayTitleOf(bigInt));
+        assertEquals("132,199", getValue().presentationValue(null, bigInt));
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BlobValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BlobValueSemanticsProviderTest.java
index 4527089..831f762 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BlobValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BlobValueSemanticsProviderTest.java
@@ -48,7 +48,7 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOf() {
-        assertEquals("myfile1.docx", value.displayTitleOf(blob));
+        assertEquals("myfile1.docx", value.presentationValue(null, blob));
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BooleanValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BooleanValueSemanticsProviderTest.java
index 0b826f9..e074e80 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BooleanValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BooleanValueSemanticsProviderTest.java
@@ -47,32 +47,32 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testParseFalseString() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "faLSe");
+        final Object parsed = value.parseTextRepresentation(null, "faLSe");
         assertEquals(Boolean.valueOf(false), parsed);
     }
 
     @Test
     public void testParseStringWithPrecedingSpace() throws Exception {
-        final Object parsed = value.parseTextEntry(null, " false");
+        final Object parsed = value.parseTextRepresentation(null, " false");
         assertEquals(Boolean.valueOf(false), parsed);
     }
 
     @Test
     public void testParseStringWithTrailingSpace() throws Exception {
-        final Object parsed = value.parseTextEntry(null, " false");
+        final Object parsed = value.parseTextRepresentation(null, " false");
         assertEquals(Boolean.valueOf(false), parsed);
     }
 
     @Test
     public void testParseTrueString() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "TRue");
+        final Object parsed = value.parseTextRepresentation(null, "TRue");
         assertEquals(Boolean.valueOf(true), parsed);
     }
 
     @Test
     public void testParseInvalidString() throws Exception {
         try {
-            value.parseTextEntry(null, "yes");
+            value.parseTextRepresentation(null, "yes");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -80,7 +80,7 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitle() throws Exception {
-        assertEquals("True", value.displayTitleOf(booleanObj));
+        assertEquals("True", value.presentationValue(null, booleanObj));
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
index 7bffb33..cd3b1f9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
@@ -49,14 +49,14 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testParseValidString() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "21");
+        final Object parsed = value.parseTextRepresentation(null, "21");
         assertEquals(Byte.valueOf((byte) 21), parsed);
     }
 
     @Test
     public void testParseInvalidString() throws Exception {
         try {
-            value.parseTextEntry(null, "xs21z4xxx23");
+            value.parseTextRepresentation(null, "xs21z4xxx23");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -64,7 +64,7 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOf() throws Exception {
-        assertEquals("102", value.displayTitleOf(byteObj));
+        assertEquals("102", value.presentationValue(null, byteObj));
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/CharacterValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/CharacterValueSemanticsProviderTest.java
index 63f4312..97ee221 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/CharacterValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/CharacterValueSemanticsProviderTest.java
@@ -49,7 +49,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testParseLongString() throws Exception {
         try {
-            value.parseTextEntry(null, "one");
+            value.parseTextRepresentation(null, "one");
             fail();
         } catch (final InvalidEntryException expected) {
         }
@@ -57,12 +57,12 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOf() {
-        assertEquals("r", value.displayTitleOf(character));
+        assertEquals("r", value.presentationValue(null, character));
     }
 
     @Test
     public void testValidParse() throws Exception {
-        final Object parse = value.parseTextEntry(null, "t");
+        final Object parse = value.parseTextRepresentation(null, "t");
         assertEquals(Character.valueOf('t'), parse);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ClobValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ClobValueSemanticsProviderTest.java
index b0f466a..41c524e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ClobValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ClobValueSemanticsProviderTest.java
@@ -48,7 +48,7 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOf() {
-        assertEquals("myfile1.xml", value.displayTitleOf(clob));
+        assertEquals("myfile1.xml", value.presentationValue(null, clob));
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
index 7b76e97..63a97d4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
@@ -49,13 +49,13 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testValue() {
-        assertEquals("32.5", getValue().displayTitleOf(doubleObj));
+        assertEquals("32.5", getValue().presentationValue(null, doubleObj));
     }
 
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            getValue().parseTextEntry(null, "one");
+            getValue().parseTextRepresentation(null, "one");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -63,18 +63,18 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOf() {
-        assertEquals("35,000,000", getValue().displayTitleOf(Double.valueOf(35000000.0)));
+        assertEquals("35,000,000", getValue().presentationValue(null, Double.valueOf(35000000.0)));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object newValue = getValue().parseTextEntry(null, "120.56");
+        final Object newValue = getValue().parseTextRepresentation(null, "120.56");
         assertEquals(120.56, ((Double) newValue).doubleValue(), 0.0);
     }
 
     @Test
     public void testParse2() throws Exception {
-        final Object newValue = getValue().parseTextEntry(null, "1,20.0");
+        final Object newValue = getValue().parseTextRepresentation(null, "1,20.0");
         assertEquals(120, ((Double) newValue).doubleValue(), 0.0);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
index da65026..ac6ee53 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
@@ -51,7 +51,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            value.parseTextEntry(null, "one");
+            value.parseTextRepresentation(null, "one");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -59,18 +59,18 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOf() {
-        assertEquals("32.5", value.displayTitleOf(float1));
+        assertEquals("32.5", value.presentationValue(null, float1));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "120.50");
+        final Object parsed = value.parseTextRepresentation(null, "120.50");
         assertEquals(120.5f, ((Float) parsed).floatValue(), 0.0);
     }
 
     @Test
     public void testParseBadlyFormatedEntry() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "1,20.0");
+        final Object parsed = value.parseTextRepresentation(null, "1,20.0");
         assertEquals(120.0f, ((Float) parsed).floatValue(), 0.0);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
index a9678ff..c968c67 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
@@ -50,7 +50,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            value.parseTextEntry(null, "one");
+            value.parseTextRepresentation(null, "one");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -58,18 +58,18 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleString() {
-        assertEquals("32", value.displayTitleOf(integer));
+        assertEquals("32", value.presentationValue(null, integer));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object newValue = value.parseTextEntry(null, "120");
+        final Object newValue = value.parseTextRepresentation(null, "120");
         assertEquals(Integer.valueOf(120), newValue);
     }
 
     @Test
     public void testParseOddlyFormedEntry() throws Exception {
-        final Object newValue = value.parseTextEntry(null, "1,20.0");
+        final Object newValue = value.parseTextRepresentation(null, "1,20.0");
         assertEquals(Integer.valueOf(120), newValue);
     }
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
index bebaa7d..df8d8ef 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
@@ -54,7 +54,7 @@ public class JavaSqlDateValueSemanticsProviderTest extends ValueSemanticsProvide
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            adapter.parseTextEntry(null, "date");
+            adapter.parseTextRepresentation(null, "date");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -62,12 +62,12 @@ public class JavaSqlDateValueSemanticsProviderTest extends ValueSemanticsProvide
 
     @Test
     public void testTitleOf() {
-        assertEquals(DateFormat.getDateInstance(SimpleDateFormat.MEDIUM).format(new Date(0)), adapter.displayTitleOf(date));
+        assertEquals(DateFormat.getDateInstance(SimpleDateFormat.MEDIUM).format(new Date(0)), adapter.presentationValue(null, date));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object newValue = adapter.parseTextEntry(null, "1/1/1980");
+        final Object newValue = adapter.parseTextRepresentation(null, "1/1/1980");
 
         final Calendar calendar = Calendar.getInstance();
         calendar.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
index f419c86..f74e64b 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
@@ -58,7 +58,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            getValue().parseTextEntry(null, "invalid entry");
+            getValue().parseTextRepresentation(null, "invalid entry");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -72,7 +72,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testTitleOf() {
         final String EXPECTED = DateFormat.getDateTimeInstance(SimpleDateFormat.MEDIUM, SimpleDateFormat.SHORT).format(new java.util.Date(0));
-        assertEquals(EXPECTED, getValue().displayTitleOf(date));
+        assertEquals(EXPECTED, getValue().presentationValue(null, date));
     }
 
     @Test
@@ -84,7 +84,7 @@ extends ValueSemanticsProviderAbstractTestCase {
         Locale.setDefault(Locale.UK);
         TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));
 
-        val parsedDate = getValue().parseTextEntry(null, "1980-01-01 10:40");
+        val parsedDate = getValue().parseTextRepresentation(null, "1980-01-01 10:40");
 
         // restore environment
         Locale.setDefault(defaultLocale);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
index 488452c..2475ea3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
@@ -50,7 +50,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            value.parseTextEntry(null, "one");
+            value.parseTextRepresentation(null, "one");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -58,18 +58,18 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testOutputAsString() {
-        assertEquals("367,322", value.displayTitleOf(longObj));
+        assertEquals("367,322", value.presentationValue(null, longObj));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "120");
+        final Object parsed = value.parseTextRepresentation(null, "120");
         assertEquals("120", parsed.toString());
     }
 
     @Test
     public void testParseWithBadlyFormattedEntry() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "1,20.0");
+        final Object parsed = value.parseTextRepresentation(null, "1,20.0");
         assertEquals("120", parsed.toString());
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
index 4e7d6bd..318e086 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
@@ -51,7 +51,7 @@ extends ValueSemanticsProviderAbstractTestCase {
     @Test
     public void testInvalidParse() throws Exception {
         try {
-            value.parseTextEntry(null, "one");
+            value.parseTextRepresentation(null, "one");
             fail();
         } catch (final TextEntryParseException expected) {
         }
@@ -59,23 +59,23 @@ extends ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOfForPositiveValue() {
-        assertEquals("32", value.displayTitleOf(short1));
+        assertEquals("32", value.presentationValue(null, short1));
     }
 
     @Test
     public void testTitleOfForLargestNegativeValue() {
-        assertEquals("-128", value.displayTitleOf(Short.valueOf((short) -128)));
+        assertEquals("-128", value.presentationValue(null, Short.valueOf((short) -128)));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object newValue = value.parseTextEntry(null, "120");
+        final Object newValue = value.parseTextRepresentation(null, "120");
         assertEquals(Short.valueOf((short) 120), newValue);
     }
 
     @Test
     public void testParseOfOddEntry() throws Exception {
-        final Object newValue = value.parseTextEntry(null, "1,20.0");
+        final Object newValue = value.parseTextRepresentation(null, "1,20.0");
         assertEquals(Short.valueOf((short) 120), newValue);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/StringValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/StringValueSemanticsProviderTest.java
index 02e1def..f6453c3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/StringValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/StringValueSemanticsProviderTest.java
@@ -45,12 +45,12 @@ public class StringValueSemanticsProviderTest extends ValueSemanticsProviderAbst
 
     @Test
     public void testTitleOf() {
-        assertEquals("text entry", value.displayTitleOf(string));
+        assertEquals("text entry", value.presentationValue(null, string));
     }
 
     @Test
     public void testParse() throws Exception {
-        final Object parsed = value.parseTextEntry(null, "tRUe");
+        final Object parsed = value.parseTextRepresentation(null, "tRUe");
         assertEquals("tRUe", parsed.toString());
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 276890a..37b149f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -107,7 +107,7 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
         this.parseableFacet = ParseableFacetUsingParser.create(value, mockFacetHolder);
     }
 
-    protected <T> ValueSemanticsProviderAndFacetAbstract<T> getValue(Class<T> type) {
+    protected <T> ValueSemanticsProviderAndFacetAbstract<T> getValue(final Class<T> type) {
         return _Casts.uncheckedCast(valueSemanticsProvider);
     }
 
@@ -127,7 +127,7 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
     public void testParseNull() throws Exception {
         Assume.assumeThat(valueSemanticsProvider.getParser(), is(not(nullValue())));
         try {
-            valueSemanticsProvider.parseTextEntry(null, null);
+            valueSemanticsProvider.parseTextRepresentation(null, null);
             fail();
         } catch (final IllegalArgumentException expected) {
         }
@@ -137,7 +137,7 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
     public void testParseEmptyString() throws Exception {
         Assume.assumeThat(valueSemanticsProvider.getParser(), is(not(nullValue())));
 
-        final Object newValue = valueSemanticsProvider.parseTextEntry(null, "");
+        final Object newValue = valueSemanticsProvider.parseTextRepresentation(null, "");
         assertNull(newValue);
     }
 
@@ -158,6 +158,6 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
 
     @Test
     public void testTitleOfForNullObject() {
-        assertEquals("", valueSemanticsProvider.displayTitleOf(null));
+        assertEquals("", valueSemanticsProvider.presentationValue(null, null));
     }
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/LibraryPreloadingService.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/LibraryPreloadingService.java
index db7ffda..53c10c6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/LibraryPreloadingService.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/LibraryPreloadingService.java
@@ -25,7 +25,7 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.commons.internal.concurrent._ConcurrentContext;
 import org.apache.isis.commons.internal.concurrent._ConcurrentTaskList;
-import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
+import org.apache.isis.valuetypes.asciidoc.metamodel.semantics.AsciiDocValueSemanticsProvider;
 
 import lombok.val;
 
@@ -36,8 +36,7 @@ public class LibraryPreloadingService {
     @PostConstruct
     public void preloadLibraries() {
         val tasks = _ConcurrentTaskList.named("LibraryPreloading")
-        .addRunnable("Preload JRuby for AsciiDoc", ()->AsciiDoc.valueOfAdoc("Dummy").asHtml());
-
+        .addRunnable("Preload JRuby for AsciiDoc", AsciiDocValueSemanticsProvider::loadJRuby);
         tasks.submit(_ConcurrentContext.forkJoin());
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java
index 8d09d6a..7282e1e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/asciidocdesc/HasAsciiDocDescription_sources.java
@@ -43,7 +43,7 @@ public class HasAsciiDocDescription_sources {
     public AsciiDoc prop() {
         val packageName = hasAsciiDocDescription.getClass().getPackage().getName();
         val sourceLocation = packageName.replace('.', '/');
-        return AsciiDoc.valueOfAdoc(
+        return AsciiDoc.valueOf(
                 markupVariableResolverService.resolveVariables(
                         String.format("link:${SOURCES_DEMO}/%s[Sources] for this demo", sourceLocation)));
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/resources/AsciiDocReaderService.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/resources/AsciiDocReaderService.java
index 07adfa7..b8f35d0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/resources/AsciiDocReaderService.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/resources/AsciiDocReaderService.java
@@ -74,7 +74,7 @@ public class AsciiDocReaderService {
     }
 
     private AsciiDoc toAsciiDoc(final StringReference adocRef, final Class<?> aClass) {
-        return AsciiDoc.valueOfAdoc(
+        return AsciiDoc.valueOf(
                 adocRef
                 .update(this::replaceVersion)
                 //.update(this::replaceJavaSourceReferences)
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdoValueSemantics.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdoValueSemantics.java
index a7ca37f..94d1294 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdoValueSemantics.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdoValueSemantics.java
@@ -42,7 +42,7 @@ public class ComplexNumberJdoValueSemantics
 // tag::getParser[]
         return new Parser<ComplexNumberJdo>() {
             @Override
-            public ComplexNumberJdo parseTextEntry(Object contextPojo, String entry) {
+            public ComplexNumberJdo parseTextRepresentation(final Parser.Context context, final String entry) {
                 return ComplexNumberJdo.parse(entry).orElse(null);
             }
             @Override
@@ -50,16 +50,12 @@ public class ComplexNumberJdoValueSemantics
                 return 30;
             }
             @Override
-            public String displayTitleOf(ComplexNumberJdo object) {
+            public String presentationValue(final Parser.Context context, final ComplexNumberJdo object) {
                 return object!=null ? object.title() : "NaN";
             }
             @Override
-            public String displayTitleOf(ComplexNumberJdo object, String usingMask) {
-                return displayTitleOf(object);
-            }
-            @Override
-            public String parseableTitleOf(ComplexNumberJdo existing) {
-                return displayTitleOf(existing);
+            public String parseableTextRepresentation(final Parser.Context context, final ComplexNumberJdo existing) {
+                return presentationValue(context, existing);
             }
         };
     }
@@ -73,7 +69,7 @@ public class ComplexNumberJdoValueSemantics
 // tag::getEncoderDecoder[]
         return new EncoderDecoder<ComplexNumberJdo>() {
             @Override
-            public String toEncodedString(ComplexNumberJdo cn) {
+            public String toEncodedString(final ComplexNumberJdo cn) {
                 if(cn==null) {
                     return null;
                 }
@@ -83,7 +79,7 @@ public class ComplexNumberJdoValueSemantics
                         Long.toHexString(re), Long.toHexString(im));
             }
             @Override
-            public ComplexNumberJdo fromEncodedString(String str) {
+            public ComplexNumberJdo fromEncodedString(final String str) {
                 if(_NullSafe.isEmpty(str)) {
                     return null;
                 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpaValueSemantics.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpaValueSemantics.java
index 7647100..c060a0b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpaValueSemantics.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpaValueSemantics.java
@@ -42,7 +42,7 @@ public class ComplexNumberJpaValueSemantics
 // tag::getParser[]
         return new Parser<ComplexNumberJpa>() {
             @Override
-            public ComplexNumberJpa parseTextEntry(Object contextPojo, String entry) {
+            public ComplexNumberJpa parseTextRepresentation(final Parser.Context context, final String entry) {
                 return ComplexNumberJpa.parse(entry).orElse(null);
             }
             @Override
@@ -50,16 +50,12 @@ public class ComplexNumberJpaValueSemantics
                 return 30;
             }
             @Override
-            public String displayTitleOf(ComplexNumberJpa object) {
+            public String presentationValue(final Parser.Context context, final ComplexNumberJpa object) {
                 return object!=null ? object.title() : "NaN";
             }
             @Override
-            public String displayTitleOf(ComplexNumberJpa object, String usingMask) {
-                return displayTitleOf(object);
-            }
-            @Override
-            public String parseableTitleOf(ComplexNumberJpa existing) {
-                return displayTitleOf(existing);
+            public String parseableTextRepresentation(final Parser.Context context, final ComplexNumberJpa existing) {
+                return presentationValue(context, existing);
             }
         };
     }
@@ -73,7 +69,7 @@ public class ComplexNumberJpaValueSemantics
 // tag::getEncoderDecoder[]
         return new EncoderDecoder<ComplexNumberJpa>() {
             @Override
-            public String toEncodedString(ComplexNumberJpa cn) {
+            public String toEncodedString(final ComplexNumberJpa cn) {
                 if(cn==null) {
                     return null;
                 }
@@ -83,7 +79,7 @@ public class ComplexNumberJpaValueSemantics
                         Long.toHexString(re), Long.toHexString(im));
             }
             @Override
-            public ComplexNumberJpa fromEncodedString(String str) {
+            public ComplexNumberJpa fromEncodedString(final String str) {
                 if(_NullSafe.isEmpty(str)) {
                     return null;
                 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/CorsFilterTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/CorsFilterTest.java
index 6abfc2a..1121cc3 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/CorsFilterTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/CorsFilterTest.java
@@ -38,7 +38,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.config.presets.IsisPresets;
-import org.apache.isis.extensions.cors.impl.IsisModuleExtCorsImpl;
+import org.apache.isis.extensions.cors.impl.IsisModuleExtCors;
 import org.apache.isis.extensions.restclient.ResponseDigest;
 import org.apache.isis.extensions.restclient.log.ClientConversationFilter;
 import org.apache.isis.testdomain.conf.Configuration_headless;
@@ -64,34 +64,34 @@ import lombok.val;
     Configuration_headless.class,
     Configuration_usingRoSpec.class,
     IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,
-    IsisModuleExtCorsImpl.class
+    IsisModuleExtCors.class
 })
 @TestMethodOrder(OrderAnnotation.class) // run tests in sequence, to ease debugging
 class CorsFilterTest {
 
-    @LocalServerPort int port; 
+    @LocalServerPort int port;
     @Inject RestEndpointService restService;
 
     private final RoSpecSampler refSampler = new RoSpecSampler();
     private final Can<ClientConversationFilter> conversationFilters = Can.empty();
-    
+
     // -- STRING
 
-    @Test @Order(1) 
+    @Test @Order(1)
     void requestWithValidOriginAndMethod_shouldSucceed() {
         val digest = digestUsingPost("string", String.class, builder->builder
                 .header("Origin", validOrigin()));
         assertHttpResponse200(digest);
     }
 
-    @Test @Order(2) 
+    @Test @Order(2)
     void requestWithInvalidOrigin_shouldFail() {
         val digest = digestUsingPost("string", String.class, builder->builder
                 .header("Origin", invalidOrigin()));
         assertHttpResponse403(digest);
     }
-    
-    @Test @Order(3) 
+
+    @Test @Order(3)
     void requestWithMissingOrigin_shouldSucceed() {
         val digest = digestUsingPost("string", String.class, builder->builder);
         assertHttpResponse200(digest);
@@ -107,41 +107,41 @@ class CorsFilterTest {
     // -- HELPER
 
     <T> ResponseDigest<T> digestUsingPost(
-            String actionName, 
-            Class<T> entityType, 
-            UnaryOperator<javax.ws.rs.client.Invocation.Builder> onRequestBuilder) {
+            final String actionName,
+            final Class<T> entityType,
+            final UnaryOperator<javax.ws.rs.client.Invocation.Builder> onRequestBuilder) {
 
         assertTrue(restService.getPort()>0);
 
         val useRequestDebugLogging = false;
         val client = restService.newClient(useRequestDebugLogging, conversationFilters);
 
-        val request = onRequestBuilder.apply( 
-                restService.newInvocationBuilder(client, 
+        val request = onRequestBuilder.apply(
+                restService.newInvocationBuilder(client,
                         String.format("services/testdomain.RoSpecSampler/actions/%s/invoke", actionName)));
-        
-        val args = client.arguments() 
+
+        val args = client.arguments()
                 .build();
-        
+
         val response = request.post(args);
         val digest = client.digest(response, entityType);
 
         return digest;
 
     }
-    
+
     <T> ResponseDigest<T> digestUsingGet(
-            String actionName, 
-            Class<T> entityType, 
-            UnaryOperator<javax.ws.rs.client.Invocation.Builder> onRequestBuilder) {
+            final String actionName,
+            final Class<T> entityType,
+            final UnaryOperator<javax.ws.rs.client.Invocation.Builder> onRequestBuilder) {
 
         assertTrue(restService.getPort()>0);
 
         val useRequestDebugLogging = false;
         val client = restService.newClient(useRequestDebugLogging, conversationFilters);
 
-        val request = onRequestBuilder.apply( 
-                restService.newInvocationBuilder(client, 
+        val request = onRequestBuilder.apply(
+                restService.newInvocationBuilder(client,
                         String.format("services/testdomain.RoSpecSampler/actions/%s/invoke", actionName)));
 
         val response = request.get();
@@ -149,25 +149,25 @@ class CorsFilterTest {
 
         return digest;
     }
-    
-    
+
+
     private String validOrigin() {
         return "http://www.google.com";
     }
-    
+
     private String invalidOrigin() {
         return "http://localhost";
     }
-   
-    private void assertHttpResponse200(ResponseDigest<String> digest) {
+
+    private void assertHttpResponse200(final ResponseDigest<String> digest) {
         if(!digest.isSuccess()) {
             fail(digest.getFailureCause());
         }
         val returnValue = digest.getEntities().getSingletonOrFail();
         assertEquals(refSampler.string(), returnValue);
     }
-    
-    private void assertHttpResponse403(ResponseDigest<String> digest) {
+
+    private void assertHttpResponse403(final ResponseDigest<String> digest) {
         assertNotNull(digest.getFailureCause(), "request was expected to fail, but succeeded");
         assertTrue(digest.getFailureCause().getMessage().contains("403"));
     }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/DomainObjectResourceTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/DomainObjectResourceTest.java
index 05a7cfd..fac94d1 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/DomainObjectResourceTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/rest/DomainObjectResourceTest.java
@@ -53,12 +53,12 @@ import org.apache.isis.viewer.restfulobjects.viewer.resources.serialization.Seri
 import lombok.val;
 
 @SpringBootTest(
-        classes = { 
+        classes = {
                 Configuration_headless.class,
                 Configuration_usingLayout.class,
                 Configuration_usingActionSemantics.class,
                 DomainObjectResourceTest.TestSetup.class
-        }, 
+        },
         properties = {
                 "isis.core.meta-model.introspector.mode=FULL",
                 "isis.applib.annotation.domain-object.editing=TRUE",
@@ -92,9 +92,9 @@ class DomainObjectResourceTest {
         val objectAdapter = objectManager.adapt(layoutDemo);
         val spec = objectAdapter.getSpecification();
         val domainType = spec.getLogicalTypeName();
-        val instanceId = objectManager.identifyObject(objectAdapter).getIdentifier(); //TODO also needs URL encoding
+        val instanceId = objectManager.bookmarkObject(objectAdapter).getIdentifier(); //TODO also needs URL encoding
 
-        val layoutResourceDescriptor = 
+        val layoutResourceDescriptor =
                 ResourceDescriptor
                 .of(RepresentationType.OBJECT_LAYOUT, Where.ANYWHERE, RepresentationService.Intent.NOT_APPLICABLE);
 
@@ -114,7 +114,7 @@ class DomainObjectResourceTest {
                 .map(String::trim)
                 .collect(Collectors.joining());
 
-        assertTrue(filteredResult.contains(" 3,"), 
+        assertTrue(filteredResult.contains(" 3,"),
                 String.format("multiLine is expected to be populated, got '%s'", filteredResult));
 
     }
@@ -128,9 +128,9 @@ class DomainObjectResourceTest {
         val objectAdapter = objectManager.adapt(blobDemo);
         val spec = objectAdapter.getSpecification();
         val domainType = spec.getLogicalTypeName();
-        val instanceId = objectManager.identifyObject(objectAdapter).getIdentifier(); //TODO also needs URL encoding
+        val instanceId = objectManager.bookmarkObject(objectAdapter).getIdentifier(); //TODO also needs URL encoding
 
-        val layoutResourceDescriptor = 
+        val layoutResourceDescriptor =
                 ResourceDescriptor
                 .of(RepresentationType.OBJECT_LAYOUT, Where.ANYWHERE, RepresentationService.Intent.NOT_APPLICABLE);
 
@@ -143,9 +143,9 @@ class DomainObjectResourceTest {
         assertNotNull(grid);
 
         val logoProperty = grid.getAllPropertiesById().get("logo");
-        
+
         assertNotNull(logoProperty);
-        
+
         val jaxbEntity = SerializationStrategy.JSON_INDENTED.entity(logoProperty);
         //System.out.println(jaxbEntity);
 
@@ -155,9 +155,9 @@ class DomainObjectResourceTest {
                 .map(String::trim)
                 .filter(s->s.contains("GET"))
                 .count();
-        
+
         assertEquals(1L, linkCountHavingGET);
-        
+
     }
 
 
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java
index 60ab5a6..eb20e7d 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java
@@ -46,7 +46,7 @@ public final class AsciiDocJaxbAdapter extends XmlAdapter<String, AsciiDoc> {
             return null;
         }
         final String adoc = _Strings.ofBytes(decoder.decode(v), StandardCharsets.UTF_8);
-        return AsciiDoc.valueOfAdoc(adoc);
+        return AsciiDoc.valueOf(adoc);
     }
 
     @Override
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
index 5c45a7e..92d7158 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
@@ -39,21 +39,18 @@ import lombok.experimental.Accessors;
  */
 @org.apache.isis.applib.annotation.Value(
         logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.AsciiDoc",
-        semanticsProviderName = "org.apache.isis.valuetypes.asciidoc.metamodel.facets.AsciiDocValueSemanticsProvider")
+        semanticsProviderName = "org.apache.isis.valuetypes.asciidoc.metamodel.semantics."
+                + "AsciiDocValueSemanticsProvider")
 @EqualsAndHashCode
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
 public final class AsciiDoc implements HasHtml, Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    public static AsciiDoc valueOfAdoc(final String adoc) {
+    public static AsciiDoc valueOf(final String adoc) {
         return new AsciiDoc(adoc);
     }
 
-    public static AsciiDoc valueOfAdocAndHtml(final String adoc, final String html) {
-        return null;
-    }
-
     @Getter private final String adoc;
 
     @EqualsAndHashCode.Exclude
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/facets/AsciiDocValueFacet.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/facets/AsciiDocValueFacet.java
deleted file mode 100644
index 8578332..0000000
--- a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/facets/AsciiDocValueFacet.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  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.valuetypes.asciidoc.metamodel.facets;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public interface AsciiDocValueFacet extends Facet {
-
-    String asciiDocValue(ManagedObject object);
-    ManagedObject createValue(ManagedObject object, String html);
-
-}
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/facets/AsciiDocValueSemanticsProvider.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/facets/AsciiDocValueSemanticsProvider.java
deleted file mode 100644
index e2ea637..0000000
--- a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/facets/AsciiDocValueSemanticsProvider.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *  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.valuetypes.asciidoc.metamodel.facets;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.Parser;
-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;
-import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
-
-public class AsciiDocValueSemanticsProvider
-extends ValueSemanticsProviderAndFacetAbstract<AsciiDoc>
-implements AsciiDocValueFacet {
-
-    private static final int TYPICAL_LENGTH = 0;
-
-    private static Class<? extends Facet> type() {
-        return AsciiDocValueFacet.class;
-    }
-
-    private static final AsciiDoc DEFAULT_VALUE = null;
-
-    /**
-     * Required because implementation of {@link Parser} and
-     * {@link EncoderDecoder}.
-     */
-    public AsciiDocValueSemanticsProvider() {
-        this(null);
-    }
-
-    public AsciiDocValueSemanticsProvider(final FacetHolder holder) {
-        super(type(), holder, AsciiDoc.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.NOT_HONOURED, DEFAULT_VALUE);
-    }
-
-
-    @Override
-    protected AsciiDoc doParse(final Object context, final String html) {
-        return doRestore(html);
-    }
-
-    @Override
-    public String titleString(final Object object) {
-        return object != null? ((AsciiDoc)object).asHtml(): "[null]";
-    }
-
-    @Override
-    public String titleStringWithMask(final Object value, final String usingMask) {
-        return titleString(value);
-    }
-
-    @Override
-    protected String doEncode(final AsciiDoc asciiDoc) {
-        return asciiDoc.getAdoc();
-    }
-
-    @Override
-    protected AsciiDoc doRestore(final String adoc) {
-        return AsciiDoc.valueOfAdoc(adoc);
-    }
-
-
-    @Override
-    public String toString() {
-        return "AsciiDocValueSemanticsProvider";
-    }
-
-    // -- AsciiDocValueFacet
-
-    @Override
-    public String asciiDocValue(final ManagedObject object) {
-        if (object == null) {
-            return "";
-        }
-        final AsciiDoc asciiDoc = (AsciiDoc) object.getPojo();
-        return asciiDoc.getAdoc();
-    }
-
-    @Override
-    public ManagedObject createValue(final ManagedObject object, final String adoc) {
-        final AsciiDoc asciiDoc = AsciiDoc.valueOfAdoc(adoc);
-        return getObjectManager().adapt(asciiDoc);
-    }
-
-}
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemanticsProvider.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemanticsProvider.java
new file mode 100644
index 0000000..0201a68
--- /dev/null
+++ b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/AsciiDocValueSemanticsProvider.java
@@ -0,0 +1,77 @@
+/*
+ *  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.valuetypes.asciidoc.metamodel.semantics;
+
+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.valuetypes.asciidoc.applib.value.AsciiDoc;
+
+public class AsciiDocValueSemanticsProvider
+implements
+    ValueSemanticsProvider<AsciiDoc>,
+    //EncoderDecoder<AsciiDoc>,
+    Parser<AsciiDoc> {
+
+    @Override
+    public String parseableTextRepresentation(final Parser.Context context, final AsciiDoc adoc) {
+        return adoc!=null ? adoc.getAdoc() : null;
+    }
+
+    @Override
+    public AsciiDoc parseTextRepresentation(final Parser.Context context, final String adoc) {
+        return adoc!=null ? AsciiDoc.valueOf(adoc) : null;
+    }
+
+    @Override
+    public String presentationValue(final Parser.Context context, final AsciiDoc adoc) {
+        return adoc != null? adoc.asHtml(): "[null]";
+    }
+
+    @Override
+    public int typicalLength() {
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return this.getClass().getSimpleName();
+    }
+
+    @Override
+    public Parser<AsciiDoc> getParser() {
+        return this;
+    }
+
+    @Override
+    public EncoderDecoder<AsciiDoc> getEncoderDecoder() {
+        return null;
+    }
+
+    @Override
+    public DefaultsProvider<AsciiDoc> getDefaultsProvider() {
+        return null;
+    }
+
+    public static void loadJRuby() {
+        Converter.getAsciidoctor();
+    }
+
+}
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/Converter.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/Converter.java
new file mode 100644
index 0000000..6e048cb
--- /dev/null
+++ b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/Converter.java
@@ -0,0 +1,96 @@
+/*
+ *  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.valuetypes.asciidoc.metamodel.semantics;
+
+import java.util.Optional;
+
+import org.asciidoctor.Asciidoctor;
+import org.asciidoctor.Attributes;
+import org.asciidoctor.Options;
+import org.asciidoctor.SafeMode;
+import org.springframework.lang.Nullable;
+
+import org.apache.isis.commons.internal.base._Strings;
+
+import lombok.Getter;
+
+final class Converter {
+
+    /**
+     * For syntax highlighting to work, the client/browser needs to load specific
+     * java-script and css.
+     * <p>
+     * 1) In your web-app's {@code scripts/application.js} include the bundled
+     * {@code src/main/resources/prism1.14.js}.
+     * <pre>
+     * function includeJs(jsFilePath) {
+     *     var js = document.createElement("script");
+     *     js.type = "text/javascript";
+     *     js.src = jsFilePath;
+     *     document.body.appendChild(js);
+     * }
+     *
+     * includeJs("/scripts/prism1.14.js");
+     * </pre>
+     * <p>
+     * 2) In your web-app's {@code css/application.css} include the bundled
+     * {@code src/main/resources/prism.css}.
+     * <pre>
+     * {@code @import "prism.css"}.
+     * </pre>
+     *
+     * @param adoc - formatted input to be converted to HTML
+     * @param options - if {@code null} uses built-in default options
+     */
+    public static String adocToHtml(final @Nullable String adoc, final @Nullable Options options) {
+        return _Strings.isEmpty(adoc)
+                ? ""
+                : convert(adoc,
+                    Optional
+                    .ofNullable(options)
+                    .orElseGet(Converter::getDefaultOptions));
+    }
+
+    /**
+     * Shortcut to {@link #adocToHtml(String, Options)} using default options.
+     */
+    public static String adocToHtml(final String adoc) {
+        return adocToHtml(adoc, null);
+    }
+
+    // -- HELPER
+
+    private static String convert(final String content, final Options options) {
+        return getAsciidoctor()
+            .convert(content, options);
+    }
+
+    @Getter(lazy = true)
+    private final static Asciidoctor asciidoctor = Asciidoctor.Factory.create();
+
+    @Getter(lazy = true)
+    private final static Options defaultOptions = Options.builder()
+            .safe(SafeMode.UNSAFE)
+            .toFile(false)
+            .attributes(Attributes.builder()
+                    .sourceHighlighter("prism")
+                    .build())
+            .build();
+
+}
diff --git a/valuetypes/asciidoc/persistence/jdo/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jdo/dn5/converters/IsisAsciiDocConverter.java b/valuetypes/asciidoc/persistence/jdo/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jdo/dn5/converters/IsisAsciiDocConverter.java
index 71be139..ae57e8b 100644
--- a/valuetypes/asciidoc/persistence/jdo/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jdo/dn5/converters/IsisAsciiDocConverter.java
+++ b/valuetypes/asciidoc/persistence/jdo/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jdo/dn5/converters/IsisAsciiDocConverter.java
@@ -39,7 +39,7 @@ public class IsisAsciiDocConverter implements TypeConverter<AsciiDoc, String>{
     @Override
     public AsciiDoc toMemberType(final String datastoreValue) {
         return datastoreValue != null
-                ? AsciiDoc.valueOfAdoc(datastoreValue)
+                ? AsciiDoc.valueOf(datastoreValue)
                 : null;
     }
 
diff --git a/valuetypes/asciidoc/persistence/jpa/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jpa/converters/IsisAsciiDocConverter.java b/valuetypes/asciidoc/persistence/jpa/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jpa/converters/IsisAsciiDocConverter.java
index 92ff2cb..60d2f52 100644
--- a/valuetypes/asciidoc/persistence/jpa/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jpa/converters/IsisAsciiDocConverter.java
+++ b/valuetypes/asciidoc/persistence/jpa/src/main/java/org/apache/isis/valuetypes/asciidoc/persistence/jpa/converters/IsisAsciiDocConverter.java
@@ -39,7 +39,7 @@ public class IsisAsciiDocConverter implements AttributeConverter<AsciiDoc, Strin
     @Override
     public AsciiDoc convertToEntityAttribute(final String datastoreValue) {
         return datastoreValue != null
-                ? AsciiDoc.valueOfAdoc(datastoreValue)
+                ? AsciiDoc.valueOf(datastoreValue)
                 : null;
     }
 
diff --git a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocForXmlComponentWkt.java b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocForXmlComponentWkt.java
index 4a753c1..937d82f 100644
--- a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocForXmlComponentWkt.java
+++ b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocForXmlComponentWkt.java
@@ -20,26 +20,22 @@ package org.apache.isis.valuetypes.asciidoc.ui.wkt.components;
 
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
-
-import lombok.val;
-
 public class AsciiDocForXmlComponentWkt extends AsciiDocComponentWkt {
 
     private static final long serialVersionUID = 1L;
 
-    public AsciiDocForXmlComponentWkt(String id, IModel<?> model) {
+    public AsciiDocForXmlComponentWkt(final String id, final IModel<?> model) {
         super(id, model);
         setEnabled(false);
     }
 
-    /**
-     * for convenience of subtypes.
-     * @param xml
-     */
-    protected final String asHtml(String xml) {
-        val adoc = "[source,xml]\n----\n" + xml + "\n----";
-        return AsciiDoc.valueOfAdoc(adoc).asHtml();
-    }
+//    /**
+//     * for convenience of subtypes.
+//     * @param xml
+//     */
+//    protected final String asHtml(String xml) {
+//        val adoc = "[source,xml]\n----\n" + xml + "\n----";
+//        return AsciiDoc.valueOf(adoc).asHtml();
+//    }
 
 }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
index cdefaa2..565667c 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
@@ -55,21 +55,21 @@ public final class NumberConverterForStringComponent implements BindingConverter
     }
 
     @Override
-    public ManagedObject wrap(String stringifiedNumber) {
+    public ManagedObject wrap(final String stringifiedNumber) {
 
         if(tryParse(stringifiedNumber).isPresent()) {
             // return an intermediate placeholder
             return ManagedObject.empty(getValueSpecification());
         }
 
-        val number = valueFacet.parseTextEntry(null, stringifiedNumber);
+        val number = valueFacet.parseTextRepresentation(null, stringifiedNumber);
         return ManagedObject.of(getValueSpecification(), number);
     }
 
     @Override
-    public String unwrap(ManagedObject object) {
+    public String unwrap(final ManagedObject object) {
         val number = (Number) ManagedObjects.UnwrapUtil.single(object);
-        return valueFacet.parseableTitleOf(number);
+        return valueFacet.parseableTextRepresentation(null, number);
     }
 
 
@@ -86,17 +86,17 @@ public final class NumberConverterForStringComponent implements BindingConverter
             FloatingPointValueFacet.class);
 
     @Override
-    public String toString(String value) {
+    public String toString(final String value) {
         return value; // identity
     }
 
     @Override
-    public String fromString(String stringifiedValue) {
+    public String fromString(final String stringifiedValue) {
         return stringifiedValue; // identity
     }
 
     @Override
-    public Optional<String> tryParse(String stringifiedValue) {
+    public Optional<String> tryParse(final String stringifiedValue) {
         return valueFacet.tryParseTextEntry(null, stringifiedValue)
                 .map(Exception::getMessage); // TODO should be passed through the ExceptionRecognizer
     }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
index 0e3967f..b0ba37b 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
@@ -46,36 +46,36 @@ public class TemporalConverterForLocalDateComponent implements BindingConverter<
     }
 
     @Override
-    public ManagedObject wrap(LocalDate localDate) {
+    public ManagedObject wrap(final LocalDate localDate) {
         return ManagedObject.of(getValueSpecification(), localDate);
     }
 
     @Override
-    public LocalDate unwrap(ManagedObject object) {
+    public LocalDate unwrap(final ManagedObject object) {
         val localDate = (LocalDate) ManagedObjects.UnwrapUtil.single(object);
         return localDate;
     }
 
     @Override
-    public String toString(LocalDate value) {
-        return valueFacet.parseableTitleOf(value);
+    public String toString(final LocalDate value) {
+        return valueFacet.parseableTextRepresentation(null, value);
     }
 
     @Override
-    public LocalDate fromString(String stringifiedValue) {
-        val value = valueFacet.parseTextEntry(null, stringifiedValue);
+    public LocalDate fromString(final String stringifiedValue) {
+        val value = valueFacet.parseTextRepresentation(null, stringifiedValue);
         if(value==null) {
             return null;
         }
         if(value instanceof LocalDate) {
-            return (LocalDate) value;
+            return value;
         }
         // TODO might require additional cases
         throw _Exceptions.unmatchedCase(value.getClass());
     }
 
     @Override
-    public Optional<String> tryParse(String stringifiedValue) {
+    public Optional<String> tryParse(final String stringifiedValue) {
         return valueFacet.tryParseTextEntry(null, stringifiedValue)
                 .map(Exception::getMessage); // TODO should be passed through the ExceptionRecognizer
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 56d96f9..94c8c2d 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -47,6 +47,7 @@ import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.Setter;
+import lombok.val;
 
 /**
  * Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
@@ -183,12 +184,20 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
         if (adapter == null) {
             return null;
         }
+        val spec = adapter.getSpecification();
+        if(spec.isValue()) {
+            val parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
+            if (parseableFacet == null) {
+                throw new RuntimeException("unable to find a parser for " + spec.getFullIdentifier());
+            }
+            return parseableFacet.parseableTextRepresentation(adapter);
+        }
         return adapter.titleString();
     }
 
     public void setObjectAsString(final String enteredText) {
         // parse text to get adapter
-        ParseableFacet parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
+        val parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
         if (parseableFacet == null) {
             throw new RuntimeException("unable to find a parser for " + getTypeOfSpecification().getFullIdentifier());
         }