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

[isis] 04/06: ISIS-1976: Make OidMarshaller an interface, then split into 2 interfaces

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

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

commit af4f02e69ae4d9bbdae55a680aacb1864ed3bcb4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 11:12:04 2018 +0200

    ISIS-1976: Make OidMarshaller an interface, then split into 2 interfaces
    
    ... Oid.Marshaller and Oid.Unmarshaller
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/oid/Oid.java       | 40 ++++++++++++++++++
 .../{OidMarshaller.java => Oid_Marshaller.java}    | 49 +++++++++++-----------
 .../core/metamodel/adapter/oid/ParentedOid.java    |  8 ++--
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  9 ++--
 .../core/metamodel/adapter/version/Version.java    |  4 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java |  1 -
 .../adapter/oid/OidMarshallerTest_marshall.java    |  4 +-
 .../oid/OidMarshallerTest_roundtripping.java       |  9 ++--
 .../adapter/oid/OidMarshallerTest_unmarshal.java   |  4 +-
 .../apache/isis/core/runtime/memento/Memento.java  |  5 +--
 .../restfulobjects/rendering/util/OidUtils.java    |  5 +--
 .../server/resources/JsonParserHelper.java         |  7 ++--
 .../restfulobjects/server/util/OidUtils.java       |  6 +--
 .../model/mementos/ObjectAdapterMemento.java       |  6 +--
 .../viewer/wicket/model/models/ActionModel.java    |  6 +--
 .../wicket/model/models/BookmarkTreeNode.java      | 16 +++----
 .../viewer/wicket/model/models/EntityModel.java    |  6 +--
 .../widgets/breadcrumbs/BreadcrumbModel.java       |  8 ++--
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |  6 +--
 19 files changed, 103 insertions(+), 96 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index b543c74..8473a0f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -111,7 +111,43 @@ public interface Oid extends Encodable {
             }
         }
     }
+    
+    // -- MARSHALLING
+    
+    public static interface Marshaller {
+
+        String marshal(Version version);
+
+        String marshalNoVersion(ParentedOid parentedOid);
+
+        String marshal(ParentedOid parentedOid);
+
+        String marshalNoVersion(RootOid rootOid);
+
+        String marshal(RootOid rootOid);
+
+        String joinAsOid(String domainType, String instanceId);
+        
+    }
+    
+    public static Marshaller marshaller() {
+        return Oid_Marshaller.INSTANCE;
+    }
+    
+    // -- UN-MARSHALLING
+
+    public static interface Unmarshaller {
+        
+        <T extends Oid> T unmarshal(String oidStr, Class<T> requestedType);
 
+        String splitInstanceId(String oidStr);
+        
+    }
+    
+    public static Unmarshaller unmarshaller() {
+        return Oid_Marshaller.INSTANCE;
+    }
+    
     // -- FACTORIES
     
     /** for convenience*/
@@ -165,4 +201,8 @@ public interface Oid extends Encodable {
     }
 
 
+
+    
+
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
index c5d1630..dff0ef3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -25,8 +25,8 @@ import java.util.regex.Pattern;
 
 import com.google.common.base.Splitter;
 
-import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.ensure.Ensure;
@@ -82,11 +82,11 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
  * <p>
  * Note that # and ; were not chosen as separators to minimize noise when URL encoding OIDs.
  */
-public final class OidMarshaller {
+final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
 
-    public final static OidMarshaller INSTANCE = new OidMarshaller();
+    public final static Oid_Marshaller INSTANCE = new Oid_Marshaller();
 
-    private OidMarshaller(){}
+    private Oid_Marshaller(){}
 
     // -- public constants
     public static final String VIEWMODEL_INDICATOR =
@@ -99,10 +99,10 @@ public final class OidMarshaller {
 
     private static final String SEPARATOR = ":";
     private static final String SEPARATOR_NESTING = "~";
-    private static final String SEPARATOR_COLLECTION = "$";
+    private static final String SEPARATOR_PARENTED = "$";
     private static final String SEPARATOR_VERSION = "^";
 
-    private static final String WORD = "[^" + SEPARATOR + SEPARATOR_NESTING + SEPARATOR_COLLECTION + "\\" + SEPARATOR_VERSION + "#" + "]+";
+    private static final String WORD = "[^" + SEPARATOR + SEPARATOR_NESTING + SEPARATOR_PARENTED + "\\" + SEPARATOR_VERSION + "#" + "]+";
     private static final String DIGITS = "\\d+";
 
     private static final String WORD_GROUP = "(" + WORD + ")";
@@ -119,7 +119,7 @@ public final class OidMarshaller {
                             "(" + SEPARATOR_NESTING + WORD + SEPARATOR + WORD + ")*" + // nesting of aggregates
                             ")" +
                             ")" +
-                            "(" + "[" + SEPARATOR_COLLECTION + "]" + WORD + ")?"  + // optional collection name
+                            "(" + "[" + SEPARATOR_PARENTED + "]" + WORD + ")?"  + // optional collection name
                             "(" +
                             "[\\" + SEPARATOR_VERSION + "]" +
                             DIGITS_GROUP +                    // optional version digit
@@ -130,12 +130,13 @@ public final class OidMarshaller {
 
 
     // -- join, split
-    @Programmatic
+    
+    @Override //implementing Oid.Marshaller
     public String joinAsOid(String domainType, String instanceId) {
         return domainType + SEPARATOR + instanceId;
     }
 
-    @Programmatic
+    @Override //implementing Oid.Unarshaller
     public String splitInstanceId(String oidStr) {
         final int indexOfSeperator = oidStr.indexOf(SEPARATOR);
         return indexOfSeperator > 0? oidStr.substring(indexOfSeperator+1): null;
@@ -145,8 +146,7 @@ public final class OidMarshaller {
 
     // -- unmarshal
 
-    @Programmatic
-    @SuppressWarnings("unchecked")
+    @Override
     public <T extends Oid> T unmarshal(String oidStr, Class<T> requestedType) {
 
         final Matcher matcher = OIDSTR_PATTERN.matcher(oidStr);
@@ -194,7 +194,8 @@ public final class OidMarshaller {
         if(collectionName == null) {
             if(aggregateOidParts.isEmpty()) {
                 ensureCorrectType(oidStr, requestedType, RootOid.class);
-                return (T) RootOid.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state, version);
+                return _Casts.uncheckedCast(
+                        RootOid.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state, version));
             } else {
                 throw new RuntimeException("Aggregated Oids are no longer supported");
             }
@@ -205,7 +206,7 @@ public final class OidMarshaller {
 
             RootOid parentOid = this.unmarshal(parentOidStr, RootOid.class);
             ensureCorrectType(oidStr, requestedType, ParentedOid.class);
-            return (T) ParentedOid.ofName(parentOid, collectionName);
+            return _Casts.uncheckedCast( ParentedOid.ofName(parentOid, collectionName) );
         }
     }
 
@@ -242,16 +243,14 @@ public final class OidMarshaller {
     }
 
 
-
-
     // -- marshal
-    @Programmatic
+    @Override
     public final String marshal(RootOid rootOid) {
         Ensure.ensure("can not marshal values", !rootOid.isValue());
         return marshalNoVersion(rootOid) + marshal(rootOid.getVersion());
     }
-
-    @Programmatic
+    
+    @Override
     public final String marshalNoVersion(RootOid rootOid) {
         Ensure.ensure("can not marshal values", !rootOid.isValue());
         final String transientIndicator = rootOid.isTransient()? TRANSIENT_INDICATOR : "";
@@ -259,17 +258,17 @@ public final class OidMarshaller {
         return transientIndicator + viewModelIndicator + rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
     }
 
-    @Programmatic
-    public final String marshal(ParentedOid collectionOid) {
-        return marshalNoVersion(collectionOid) + marshal(collectionOid.getVersion());
+    @Override
+    public final String marshal(ParentedOid parentedOid) {
+        return marshalNoVersion(parentedOid) + marshal(parentedOid.getVersion());
     }
 
-    @Programmatic
-    public String marshalNoVersion(ParentedOid collectionOid) {
-        return collectionOid.getParentOid().enStringNoVersion() + SEPARATOR_COLLECTION + collectionOid.getName();
+    @Override
+    public String marshalNoVersion(ParentedOid parentedOid) {
+        return parentedOid.getParentOid().enStringNoVersion() + SEPARATOR_PARENTED + parentedOid.getName();
     }
 
-    @Programmatic
+    @Override
     public final String marshal(Version version) {
         if(version == null) {
             return "";
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
index bf33c97..c071022 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
@@ -36,8 +36,6 @@ public final class ParentedOid implements Serializable, Oid {
 
     private static final long serialVersionUID = 1L;
 
-    private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private final String name;
     private final int hashCode;
 
@@ -90,18 +88,18 @@ public final class ParentedOid implements Serializable, Oid {
     // /////////////////////////////////////////////////////////
 
     public static ParentedOid deString(String oidStr) {
-        return OID_MARSHALLER.unmarshal(oidStr, ParentedOid.class);
+        return Oid.unmarshaller().unmarshal(oidStr, ParentedOid.class);
     }
 
 
     @Override
     public String enString() {
-        return OID_MARSHALLER.marshal(this);
+        return Oid.marshaller().marshal(this);
     }
 
     @Override
     public String enStringNoVersion() {
-        return OID_MARSHALLER.marshalNoVersion(this);
+        return Oid.marshaller().marshalNoVersion(this);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index bf12927..67e9280 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -39,7 +39,6 @@ public class RootOid implements Oid, Serializable {
 
     // -- fields
     private final static long serialVersionUID = 1L;
-    private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
 
     private final ObjectSpecId objectSpecId;
     private final String identifier;
@@ -78,7 +77,7 @@ public class RootOid implements Oid, Serializable {
     // -- Encodeable
     public RootOid(final DataInputExtended input) throws IOException {
         final String oidStr = input.readUTF();
-        final RootOid oid = OID_MARSHALLER.unmarshal(oidStr, RootOid.class);
+        final RootOid oid = Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
         this.objectSpecId = oid.objectSpecId;
         this.identifier = oid.identifier;
         this.state = oid.state;
@@ -103,17 +102,17 @@ public class RootOid implements Oid, Serializable {
     }
 
     public static RootOid deString(final String oidStr) {
-        return OID_MARSHALLER.unmarshal(oidStr, RootOid.class);
+        return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
     }
 
     @Override
     public String enString() {
-        return OID_MARSHALLER.marshal(this);
+        return Oid.marshaller().marshal(this);
     }
 
     @Override
     public String enStringNoVersion() {
-        return OID_MARSHALLER.marshalNoVersion(this);
+        return Oid.marshaller().marshalNoVersion(this);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/Version.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/Version.java
index 43702b1..5ffb94f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/Version.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/Version.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.commons.lang.DateExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 
 /**
  * An instance of this class is held by each {@link ObjectAdapter} and is used
@@ -53,7 +53,7 @@ public final class Version implements Serializable, Encodable {
 
     private static final long serialVersionUID = 1L;
 
-    private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
+    private final static Oid.Marshaller OID_MARSHALLER = Oid.marshaller();
 
     // -- FACTORIES
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
index cb7511d..edcf474 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
@@ -28,7 +28,6 @@ import org.apache.isis.commons.internal.memento._Mementos.SerializingAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.PostConstructMethodCache;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
index 014174b..f58f6d3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
@@ -29,11 +29,11 @@ import static org.junit.Assert.assertThat;
 
 public class OidMarshallerTest_marshall {
 
-    private OidMarshaller oidMarshaller;
+    private Oid_Marshaller oidMarshaller;
     
     @Before
     public void setUp() throws Exception {
-        oidMarshaller = OidMarshaller.INSTANCE;
+        oidMarshaller = Oid_Marshaller.INSTANCE;
     }
     
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
index d526fa6..0aef2d8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
@@ -19,19 +19,16 @@
 
 package org.apache.isis.core.metamodel.adapter.oid;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 import org.junit.Test;
 
 import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
 public class OidMarshallerTest_roundtripping {
 
-    @SuppressWarnings("unused")
-	private OidMarshaller oidMarshaller = OidMarshaller.INSTANCE;
-    
     @Test
     public void rootOid_withNoVersion() {
         RootOid oid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
index 701b27a..af2f885 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
@@ -57,11 +57,11 @@ import static org.junit.Assert.assertThat;
 */
 public class OidMarshallerTest_unmarshal {
 
-    private OidMarshaller oidMarshaller;
+   private Oid_Marshaller oidMarshaller;
     
     @Before
     public void setUp() throws Exception {
-        oidMarshaller = OidMarshaller.INSTANCE;
+        oidMarshaller = Oid_Marshaller.INSTANCE;
     }
     
     @Test
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
index 1ff78b6..f052bb2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
@@ -31,7 +31,6 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
@@ -58,8 +57,6 @@ public class Memento implements Serializable {
     private final static Logger LOG = LoggerFactory.getLogger(Memento.class);
     private final static long serialVersionUID = 1L;
 
-    private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private final List<Oid> transientObjects = _Lists.newArrayList();
 
 
@@ -172,7 +169,7 @@ public class Memento implements Serializable {
         if(oid == null) { return null; }
         if(oid.isValue()) { return oid; } // immutable, so just reuse
         final String oidStr = oid.enString();
-        return _Casts.uncheckedCast(OID_MARSHALLER.unmarshal(oidStr, oid.getClass()));
+        return _Casts.uncheckedCast(Oid.unmarshaller().unmarshal(oidStr, oid.getClass()));
     }
 
     private Data createStandaloneData(final ObjectAdapter adapter) {
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
index c3cac12..0a785ca 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
@@ -20,13 +20,10 @@ package org.apache.isis.viewer.restfulobjects.rendering.util;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 
 public final class OidUtils {
 
-    private static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private OidUtils() {
     }
 
@@ -42,7 +39,7 @@ public final class OidUtils {
     public static String getInstanceId(final ObjectAdapter objectAdapter) {
         String oidStr = getOidStr(objectAdapter);
         // REVIEW: it's a bit hokey to join these together just to split them out again.
-        return oidStr != null ? OID_MARSHALLER.splitInstanceId(oidStr): null;
+        return oidStr != null ? Oid.unmarshaller().splitInstanceId(oidStr): null;
     }
 
 
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
index aebdd39..2991b93 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
@@ -18,8 +18,9 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
@@ -36,8 +37,6 @@ import org.apache.isis.viewer.restfulobjects.server.util.OidUtils;
  */
 public class JsonParserHelper {
 
-    private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private final static Pattern OBJECT_OID = Pattern.compile(".*objects\\/([^/]+)\\/(.+)");
 
     private final RendererContext rendererContext;
@@ -147,7 +146,7 @@ public class JsonParserHelper {
         }
         String domainType = matcher.group(1);
         String instanceId = matcher.group(2);
-        return OID_MARSHALLER.joinAsOid(domainType, instanceId);
+        return Oid.marshaller().joinAsOid(domainType, instanceId);
     }
 
     private static String resourceFor(final ObjectSpecification objectSpec) {
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
index 4bda8d1..6793401 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
@@ -23,9 +23,7 @@ import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -36,8 +34,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
 
 public final class OidUtils {
 
-    private static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private OidUtils() {
     }
 
@@ -48,7 +44,7 @@ public final class OidUtils {
             final RendererContext rendererContext,
             final String domainType, final String instanceIdEncoded) {
         final String instanceIdUnencoded = UrlDecoderUtils.urlDecode(instanceIdEncoded);
-        String oidStrUnencoded = OID_MARSHALLER.joinAsOid(domainType, instanceIdUnencoded);
+        String oidStrUnencoded = Oid.marshaller().joinAsOid(domainType, instanceIdUnencoded);
         return getObjectAdapter(rendererContext, oidStrUnencoded);
     }
 
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index 5a26c9c..e2fbb01 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -25,8 +25,6 @@ import java.util.Collection;
 import java.util.List;
 import java.util.function.Function;
 
-import org.apache.isis.commons.internal.collections._Lists;
-
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.hint.HintStore;
 import org.apache.isis.commons.internal.collections._Lists;
@@ -35,7 +33,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -51,7 +48,6 @@ public class ObjectAdapterMemento implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    public static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
     /**
      * Factory method
      */
@@ -230,7 +226,7 @@ public class ObjectAdapterMemento implements Serializable {
                     final ObjectAdapterMemento oam,
                     ConcurrencyChecking concurrencyChecking,
                     final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader) {
-                RootOid oid = OID_MARSHALLER.unmarshal(oam.persistentOidStr, RootOid.class);
+                RootOid oid = Oid.unmarshaller().unmarshal(oam.persistentOidStr, RootOid.class);
                 try {
                     final ObjectAdapter adapter = persistenceSession.adapterFor(oid, concurrencyChecking);
                     return adapter;
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index ea9cc20..c202609 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -51,7 +51,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -77,8 +77,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
     private static final long serialVersionUID = 1L;
 
-    private static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private static final String NULL_ARG = "$nullArg$";
     private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
 
@@ -288,7 +286,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
     private static RootOid oidFor(final PageParameters pageParameters) {
         final String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
-        return OID_MARSHALLER.unmarshal(oidStr, RootOid.class);
+        return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
     }
 
 
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index e84b44d..72ea8ff 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -21,17 +21,15 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import java.io.Serializable;
 import java.util.List;
-import java.util.stream.Stream;
-
 import java.util.Objects;
-import org.apache.isis.commons.internal.collections._Lists;
+import java.util.stream.Stream;
 
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -42,8 +40,6 @@ public class BookmarkTreeNode implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private final List<BookmarkTreeNode> children = _Lists.newArrayList();
     private final int depth;
 
@@ -64,8 +60,8 @@ public class BookmarkTreeNode implements Serializable {
             final int depth) {
         pageParameters = bookmarkableModel.getPageParametersWithoutUiHints();
         RootOid oid = oidFrom(pageParameters);
-        this.oidNoVerStr = OID_MARSHALLER.marshalNoVersion(oid);
-        this.oidNoVer = OID_MARSHALLER.unmarshal(oidNoVerStr, RootOid.class);
+        this.oidNoVerStr = Oid.marshaller().marshalNoVersion(oid);
+        this.oidNoVer = Oid.unmarshaller().unmarshal(oidNoVerStr, RootOid.class);
 
         // replace oid with the noVer equivalent.
         PageParameterNames.OBJECT_OID.removeFrom(pageParameters);
@@ -261,7 +257,7 @@ public class BookmarkTreeNode implements Serializable {
             return null;
         }
         try {
-            return OID_MARSHALLER.unmarshal(oidStr, RootOid.class);
+            return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
         } catch(Exception ex) {
             return null;
         }
@@ -269,7 +265,7 @@ public class BookmarkTreeNode implements Serializable {
 
     public static String oidStrFrom(BookmarkableModel<?> candidateBookmarkableModel) {
         final RootOid oid = oidFrom(candidateBookmarkableModel.getPageParametersWithoutUiHints());
-        return oid != null? OID_MARSHALLER.marshalNoVersion(oid): null;
+        return oid != null? Oid.marshaller().marshalNoVersion(oid): null;
     }
 
 }
\ No newline at end of file
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 318f41d..6b944af 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -60,8 +60,6 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements Obj
 
     private static final long serialVersionUID = 1L;
 
-    private static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     // //////////////////////////////////////////////////////////
     // factory methods for PageParameters
     // //////////////////////////////////////////////////////////
@@ -218,7 +216,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements Obj
     }
 
     private static RootOid rootOidFrom(final PageParameters pageParameters) {
-        return OID_MARSHALLER.unmarshal(oidStr(pageParameters), RootOid.class);
+        return Oid.unmarshaller().unmarshal(oidStr(pageParameters), RootOid.class);
     }
 
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java
index c19bd96..7f326fc 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java
@@ -21,14 +21,14 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.isis.commons.internal.collections._Lists;
 import com.google.common.collect.Maps;
 
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
@@ -40,8 +40,6 @@ public class BreadcrumbModel implements Serializable {
 
     private static final int MAX_SIZE = 5;
 
-    private static final OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
-
     private final Map<String, Bookmark> bookmarkByOidStr = Maps.newHashMap();
     private final Map<Bookmark, String> oidStrByBookmark = Maps.newHashMap();
     private final List<Bookmark> list = _Lists.newArrayList();
@@ -96,7 +94,7 @@ public class BreadcrumbModel implements Serializable {
             return null;
         }
         try {
-            final RootOid unmarshal = OID_MARSHALLER.unmarshal(oidStr, RootOid.class);
+            final RootOid unmarshal = Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
             return unmarshal.enStringNoVersion();
         } catch(Exception ex) {
             return null;
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index a9b07fc..907a530 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -21,7 +21,6 @@ import java.util.List;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
-import org.apache.isis.commons.internal.collections._Lists;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
@@ -33,9 +32,10 @@ import org.wicketstuff.select2.Response;
 import org.wicketstuff.select2.Select2Choice;
 import org.wicketstuff.select2.Settings;
 
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.authentication.MessageBroker;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -87,7 +87,7 @@ public class BreadcrumbPanel extends PanelAbstract<IModel<Void>> {
                     final PageParameters pageParameters = choice.getPageParametersWithoutUiHints();
                     final String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
                     final RootOid result = RootOid.deString(oidStr);
-                    return OidMarshaller.INSTANCE.marshal(result);
+                    return Oid.marshaller().marshal(result);
                 } catch (Exception ex) {
                     breadcrumbModel.remove(choice);
                     return null;