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:05 UTC

[isis] branch v2 updated (e03d7ca -> 2f96219)

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

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


    from e03d7ca  ISIS-1976: bump maven compiler plugin version 3.7.0-> 3.8.0
     new 6a51e7c  ISIS-1976: polishing 'Version' and 'ObjectSpecId'
     new dfdecf0  ISIS-1976: refactors RootOid constructors into factory class
     new 2b8a81c  ISIS-1976: refactors ParentedCollectionOid constructors into factory class
     new af4f02e  ISIS-1976: Make OidMarshaller an interface, then split into 2 interfaces
     new e49e8b8  ISIS-1976: let package o.a.i.c.metamodel.adapter.oid only expose interfaces
     new 2f96219  ISIS-1976: move Oid.State -> Oid_State and make it package private

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../isis/commons/internal/base/_NullSafe.java      |   4 +-
 .../apache/isis/commons/internal/base/_With.java   |  23 +-
 .../isis/core/metamodel/adapter/ObjectAdapter.java |   8 +-
 .../isis/core/metamodel/adapter/oid/Oid.java       | 129 ++++++----
 .../{OidMarshaller.java => Oid_Marshaller.java}    |  62 +++--
 ...arentedCollectionOid.java => Oid_Parented.java} |  76 +++---
 .../isis/core/metamodel/adapter/oid/Oid_Root.java  | 201 ++++++++++++++++
 .../isis/core/metamodel/adapter/oid/Oid_State.java |  93 ++++++++
 .../isis/core/metamodel/adapter/oid/Oid_Value.java | 109 +++++++++
 .../core/metamodel/adapter/oid/ParentedOid.java}   |  29 ++-
 .../isis/core/metamodel/adapter/oid/RootOid.java   | 265 +--------------------
 .../core/metamodel/adapter/version/Version.java    | 124 +++++-----
 ...ObjectFacetDeclarativeInitializingAbstract.java |   4 +-
 .../metamodel/MetaModelServiceDefault.java         |   2 +-
 .../isis/core/metamodel/spec/ObjectSpecId.java     |  30 ++-
 .../ObjectSpecificationOnStandaloneList.java       |   2 +-
 .../oid/CollectionOidTest_valueSemantics.java      |  21 +-
 .../adapter/oid/OidMarshallerTest_marshall.java    |  19 +-
 .../oid/OidMarshallerTest_roundtripping.java       |  28 +--
 .../adapter/oid/OidMarshallerTest_unmarshal.java   |  14 +-
 .../core/metamodel/adapter/oid/OidVersionTest.java |  33 +--
 ...dDefaultTest_valueSemantics_whenPersistent.java |  13 +-
 ...idDefaultTest_valueSemantics_whenTransient.java |  13 +-
 .../metamodel/adapter/oid/RootOidTest_create.java  |   9 +-
 .../adapter/oid/VersionTest_valueSemantics.java    |  10 +-
 .../adapter/version/VersionTest_differs.java       |   9 +-
 ...eptionRecognizerDocDefault_recognizes_Test.java |   4 +-
 .../spec/ObjectSpecIdTest_constructor.java         |  10 +-
 .../spec/ObjectSpecIdTest_valueSemantics.java      |   4 +-
 .../core/runtime/system/persistence/Utils.java     |   9 +-
 .../adapterfactory/pojo/PojoAdapterTest.java       |   6 +-
 .../transaction/PojoAdapterBuilder.java            |  12 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |   4 +-
 .../core/runtime/system/persistence/Utils.java     |   6 +-
 .../adapterfactory/pojo/PojoAdapterTest.java       |   6 +-
 .../transaction/PojoAdapterBuilder.java            |  12 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |   4 +-
 .../apache/isis/core/runtime/memento/Memento.java  |   5 +-
 .../runtime/persistence/adapter/PojoAdapter.java   |   6 +-
 .../PersistenceSessionServiceInternalDefault.java  |   3 +-
 .../adaptermanager/ObjectAdapterContext.java       |  10 +-
 .../ObjectAdapterContext_Factories.java            |   6 +-
 .../ObjectAdapterContext_NewIdentifier.java        |   2 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   3 +-
 .../adaptermanager/ObjectAdapterLegacy.java        |   3 +-
 .../persistence/adaptermanager/OidProviders.java   |  12 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |   2 +-
 .../restfulobjects/rendering/util/OidUtils.java    |   5 +-
 .../JsonValueEncoderTest_appendValueAndFormat.java |   2 +-
 .../JsonValueEncoderTest_asObject.java             |   2 +-
 .../server/resources/JsonParserHelper.java         |   7 +-
 .../restfulobjects/server/util/OidUtils.java       |   7 +-
 .../model/mementos/ObjectAdapterMemento.java       |   9 +-
 .../viewer/wicket/model/models/ActionModel.java    |   6 +-
 .../wicket/model/models/BookmarkTreeNode.java      |  16 +-
 .../viewer/wicket/model/models/EntityModel.java    |   6 +-
 .../widgets/breadcrumbs/BreadcrumbModel.java       |  11 +-
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |   6 +-
 58 files changed, 880 insertions(+), 656 deletions(-)
 rename core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/{OidMarshaller.java => Oid_Marshaller.java} (85%)
 rename core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/{ParentedCollectionOid.java => Oid_Parented.java} (63%)
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_State.java
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassRegistry.java => metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java} (58%)


[isis] 01/06: ISIS-1976: polishing 'Version' and 'ObjectSpecId'

Posted by ah...@apache.org.
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 6a51e7cc60bf114fdecab99a2b2111819d4b78dd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 08:47:08 2018 +0200

    ISIS-1976: polishing 'Version' and 'ObjectSpecId'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/commons/internal/base/_NullSafe.java      |   4 +-
 .../apache/isis/commons/internal/base/_With.java   |  23 ++++-
 .../core/metamodel/adapter/oid/OidMarshaller.java  |   4 +-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  13 ++-
 .../core/metamodel/adapter/version/Version.java    | 114 ++++++++++++---------
 .../metamodel/MetaModelServiceDefault.java         |   2 +-
 .../isis/core/metamodel/spec/ObjectSpecId.java     |  30 +++---
 .../ObjectSpecificationOnStandaloneList.java       |   2 +-
 .../adapter/oid/VersionTest_valueSemantics.java    |  10 +-
 .../adapter/version/VersionTest_differs.java       |   9 +-
 .../spec/ObjectSpecIdTest_constructor.java         |  10 +-
 .../spec/ObjectSpecIdTest_valueSemantics.java      |   4 +-
 .../core/runtime/system/persistence/Utils.java     |   9 +-
 .../core/runtime/system/persistence/Utils.java     |   6 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |   2 +-
 .../JsonValueEncoderTest_appendValueAndFormat.java |   2 +-
 .../JsonValueEncoderTest_asObject.java             |   2 +-
 17 files changed, 144 insertions(+), 102 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
index 8d77315..5b63a99 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
@@ -197,7 +197,7 @@ public final class _NullSafe {
     public static boolean isEmpty(long[] array){ return array==null || array.length == 0;}
     public static boolean isEmpty(short[] array){ return array==null || array.length == 0;}
     public static <T> boolean isEmpty(T[] array){ return array==null || array.length == 0;}
-
+    
     // -- SIZE/LENGTH CHECKS
 
     public static int size(String x){ return x!=null ? x.length() : 0; }
@@ -230,4 +230,6 @@ public final class _NullSafe {
         return map.getOrDefault(key, defaultValue);
     }
 
+
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
index 726e15b..11774ac 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
@@ -214,7 +214,27 @@ public final class _With<T> {
      */
     public static <T> T requires(@Nullable T obj, String paramName) {
         if (obj == null) {
-            throw new NullPointerException(String.format("Parameter '%s' is required to be non-null.", paramName));
+            throw new NullPointerException(String.format("Parameter '%s' is required to be present (not null).", paramName));
+        }
+        return obj;
+    }
+    
+    // -- PARAMETER NON-EMPTY CHECK(S)
+
+    /**
+     * Allows for convenient named parameter non-empty-check.
+     * @param obj target for the non-empty-check
+     * @param paramName to use for the exception message, when the non-empty-check fails 
+     * @return {@code obj}
+     * @throws NullPointerException if {@code obj} is {@code null}
+     * @throws IllegalArgumentException if {@code obj} is 'empty'
+     */
+    public static String requiresNotEmpty(@Nullable String obj, String paramName) {
+        if (obj == null) {
+            throw new NullPointerException(String.format("Parameter '%s' is required to be present (not null).", paramName));
+        }
+        if (obj.length()==0) {
+            throw new IllegalArgumentException(String.format("Parameter '%s' is required to be present and not empty.", paramName));
         }
         return obj;
     }
@@ -287,4 +307,5 @@ public final class _With<T> {
 
 
 
+
 }
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/OidMarshaller.java
index 3ddba76..e2c710e 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/OidMarshaller.java
@@ -189,12 +189,12 @@ public final class OidMarshaller {
         final String versionSequence = getGroup(matcher, 10);
         final String versionUser = getGroup(matcher, 11);
         final String versionUtcTimestamp = getGroup(matcher, 12);
-        final Version version = Version.create(versionSequence, versionUser, versionUtcTimestamp);
+        final Version version = Version.Factory.parse(versionSequence, versionUser, versionUtcTimestamp);
 
         if(collectionName == null) {
             if(aggregateOidParts.isEmpty()) {
                 ensureCorrectType(oidStr, requestedType, RootOid.class);
-                return (T) new RootOid(ObjectSpecId.of(rootObjectType), rootIdentifier, state, version);
+                return (T) RootOid.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state, version);
             } else {
                 throw new RuntimeException("Aggregated Oids are no longer supported");
             }
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 d989e9e..1284176 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
@@ -76,8 +76,8 @@ public class RootOid implements Oid, Serializable {
     }
 
     public static RootOid create(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
-        return new RootOid(objectSpecId, identifier, State.PERSISTENT, Version.create(versionSequence,
-                versionUser, versionUtcTimestamp));
+        return new RootOid(objectSpecId, identifier, State.PERSISTENT, 
+                Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
     }
 
     public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state) {
@@ -106,10 +106,15 @@ public class RootOid implements Oid, Serializable {
      * If specify version sequence, can optionally specify user and/or utc timestamp that the oid was changed.  This is used for informational purposes only.
      */
     public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
-        this(objectSpecId, identifier, state, Version.create(versionSequence, versionUser, versionUtcTimestamp));
+        this(objectSpecId, identifier, state, Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
     }
 
-    public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
+    
+    public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
+        return new RootOid(objectSpecId, identifier, state, version);
+    }
+    
+    private RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
 
         requires(objectSpecId, "objectSpecId");
         requires(identifier, "identifier");
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 af02062..9c2d34c 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
@@ -19,10 +19,14 @@
 
 package org.apache.isis.core.metamodel.adapter.version;
 
+import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Date;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.encoding.Encodable;
@@ -42,55 +46,38 @@ import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
  * indicate that the two Version objects are different.
  *
  * <p>
- * The user's name and a timestamp should alos be kept so that when an message
+ * The user's name and a timestamp should also be kept so that when an message
  * is passed to the user it can be of the form "user has change object at time"
  */
-public class Version implements Serializable, Encodable {
+public final class Version implements Serializable, Encodable {
 
     private static final long serialVersionUID = 1L;
 
     private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
 
-    // -- factory methods
-
-    public static Version create(final Long sequence) {
-        return create(sequence, null, (Long)null);
-    }
-
-    public static Version create(String sequence, String user, String utcTimestamp) {
-        if(sequence == null) {
-            return null;
-        }
-        return create(Long.parseLong(sequence), user, utcTimestamp != null?Long.parseLong(utcTimestamp):null);
-    }
+    // -- FACTORIES
 
-    public static Version create(final Long sequence, final String user, final Date time) {
-        return create(sequence, user, time !=null? time.getTime(): null);
+    public static Version of(long sequence, @Nullable String user) {
+        return of(sequence, user, Factory.EMPTY_TIMESTAMP);
     }
-
-    public static Version create(Long sequence, String user, Long utcTimestamp) {
-        if(sequence == null) {
-            return null;
-        }
+    
+    public static Version of(long sequence, @Nullable String user, long utcTimestamp) {
         return new Version(sequence, user, utcTimestamp);
     }
 
 
-
     // -- constructor, fields
-    private final Long sequence;
+    private final long sequence;
     private final String user;
-    private final Long utcTimestamp;
+    private final long utcTimestamp;
 
-    private Version(Long sequence, String user, Long utcTimestamp) {
+    private Version(long sequence, @Nullable String user, long utcTimestamp) {
         this.sequence = sequence;
         this.user = user;
         this.utcTimestamp = utcTimestamp;
     }
 
-
-
-    // -- encodable
+    // -- Encodable
 
     public Version(final DataInputExtended input) throws IOException {
         this(input.readLong(), input.readUTF(), input.readLong());
@@ -104,8 +91,6 @@ public class Version implements Serializable, Encodable {
         output.writeLong(utcTimestamp);
     }
 
-
-
     // -- getters
     /**
      * The internal, strictly monotonically increasing, version number.
@@ -123,7 +108,7 @@ public class Version implements Serializable, Encodable {
      * <p>
      * May be null.
      */
-    public String getUser() {
+    public @Nullable String getUser() {
         return user;
     }
 
@@ -131,11 +116,11 @@ public class Version implements Serializable, Encodable {
      * The time of the last change, as UTC milliseconds.
      *
      * <p>
-     * May be null.
+     * May be zero.
      *
      * @see #getTime()
      */
-    public Long getUtcTimestamp() {
+    public long getUtcTimestamp() {
         return utcTimestamp;
     }
 
@@ -147,28 +132,21 @@ public class Version implements Serializable, Encodable {
      *
      * @see #getUtcTimestamp()
      */
-    public Date getTime() {
-        return utcTimestamp != null? new Date(this.utcTimestamp): null;
+    public @Nullable Date getTime() {
+        return utcTimestamp!=Factory.EMPTY_TIMESTAMP ? new Date(this.utcTimestamp) : null;
     }
 
-
-
     // -- enString
 
     public String enString() {
         return OID_MARSHALLER.marshal(this);
     }
 
-
-
     // -- equals, hashCode
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((sequence == null) ? 0 : sequence.hashCode());
-        return result;
+        return Long.hashCode(sequence);
     }
 
     @Override
@@ -180,12 +158,7 @@ public class Version implements Serializable, Encodable {
         if (getClass() != obj.getClass())
             return false;
         Version other = (Version) obj;
-        if (sequence == null) {
-            if (other.sequence != null)
-                return false;
-        } else if (!sequence.equals(other.sequence))
-            return false;
-        return true;
+        return sequence == other.sequence;
     }
 
     /**
@@ -200,8 +173,6 @@ public class Version implements Serializable, Encodable {
         return !equals(version);
     }
 
-
-
     // -- sequence
 
     @Override
@@ -216,6 +187,47 @@ public class Version implements Serializable, Encodable {
         return Long.toString(sequence, 16);
     }
 
+    // -- SPECIAL CASES
+    
+    /** for convenience*/
+    public static final class Factory {
+        
+        private final static Version EMPTY_VERSION = null;
+        private final static long EMPTY_TIMESTAMP = 0L;
+    
+        public static @Nullable Version ifPresent(@Nullable Long sequence, String user, @Nullable Long utcTimestamp) {
+            return mapIfPresentElse(sequence, __->
+                of(sequence.longValue(), user, timestampOfNullable(utcTimestamp)), EMPTY_VERSION);
+        }
+        
+        public static @Nullable Version ifPresent(@Nullable Long sequence, String user, long utcTimestamp) {
+            return mapIfPresentElse(sequence, __->
+                of(sequence.longValue(), user, utcTimestamp), EMPTY_VERSION);
+        }
+        
+        public static @Nullable Version ifPresent(@Nullable Long sequence, String user) {
+            return mapIfPresentElse(sequence, __->
+                of(sequence.longValue(), user, EMPTY_TIMESTAMP), EMPTY_VERSION);
+        }
+        
+        public static @Nullable Version parse(@Nullable String sequence, String user, @Nullable String utcTimestamp) {
+            return mapIfPresentElse(sequence, __->
+                of(Long.parseLong(sequence), user, parseTimeStamp(utcTimestamp)), EMPTY_VERSION); 
+        }
+        
+        // -- HELPER
+        
+        private static long parseTimeStamp(@Nullable String utcTimestamp) {
+            return utcTimestamp != null ? Long.parseLong(utcTimestamp) : EMPTY_TIMESTAMP;
+        }
+        
+        private static long timestampOfNullable(@Nullable Long utcTimestamp) {
+            return utcTimestamp != null ? utcTimestamp.longValue() : EMPTY_TIMESTAMP;
+        }
+        
+    }
+
+
 
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index f5239f7..7025a0b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -70,7 +70,7 @@ public class MetaModelServiceDefault implements MetaModelService {
         if(objectType == null) {
             return null;
         }
-        final ObjectSpecId objectSpecId = new ObjectSpecId(objectType);
+        final ObjectSpecId objectSpecId = ObjectSpecId.of(objectType);
         final ObjectSpecification objectSpecification = specificationLookup.lookupBySpecId(objectSpecId);
         return objectSpecification != null? objectSpecification.getCorrespondingClass(): null;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecId.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecId.java
index 215b379..9a7f3a8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecId.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecId.java
@@ -18,7 +18,10 @@
  */
 package org.apache.isis.core.metamodel.spec;
 
+import static org.apache.isis.commons.internal.base._With.requiresNotEmpty;
+
 import java.io.Serializable;
+import java.util.Objects;
 
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 
@@ -36,11 +39,11 @@ public final class ObjectSpecId implements Serializable {
     private final String specId;
 
     public static ObjectSpecId of(String specId) {
+        requiresNotEmpty(specId, "specId");
         return new ObjectSpecId(specId);
     }
 
-    public ObjectSpecId(String specId) {
-        assert !(specId == null || "".equals(specId));
+    private ObjectSpecId(String specId) {
         this.specId = specId;
     }
 
@@ -50,27 +53,22 @@ public final class ObjectSpecId implements Serializable {
 
     @Override
     public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((specId == null) ? 0 : specId.hashCode());
-        return result;
+        return specId.hashCode();
     }
 
     @Override
     public boolean equals(Object obj) {
-        if (this == obj)
+        if (this == obj) {
             return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
+        }
+        if (obj == null) {
             return false;
-        ObjectSpecId other = (ObjectSpecId) obj;
-        if (specId == null) {
-            if (other.specId != null)
-                return false;
-        } else if (!specId.equals(other.specId))
+        }
+        if (getClass() != obj.getClass()) {
             return false;
-        return true;
+        }
+        final ObjectSpecId other = (ObjectSpecId) obj;
+        return Objects.equals(specId, other.specId);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
index 1815814..262813f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
@@ -52,7 +52,7 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
             final ServicesInjector servicesInjector,
             final FacetProcessor facetProcessor) {
         super(FreeStandingList.class, NAME, servicesInjector, facetProcessor);
-        this.specId = new ObjectSpecId(getCorrespondingClass().getName());
+        this.specId = ObjectSpecId.of(getCorrespondingClass().getName());
     }
 
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/VersionTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/VersionTest_valueSemantics.java
index 7eb0d42..0e3ecd1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/VersionTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/VersionTest_valueSemantics.java
@@ -30,17 +30,17 @@ public class VersionTest_valueSemantics extends ValueTypeContractTestAbstract<Ve
     @Override
     protected List<Version> getObjectsWithSameValue() {
         return Arrays.asList(
-                    Version.create(123L, null, (Long)null), 
-                    Version.create(123L, "jimmy", (Long)null), 
-                    Version.create(123L, null, new Date().getTime())
+                    Version.of(123L, null), 
+                    Version.of(123L, "jimmy"), 
+                    Version.of(123L, null, new Date().getTime())
                 ); 
     }
 
     @Override
     protected List<Version> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                    Version.create(124L, null, (Long)null), 
-                    Version.create(125L, null, (Long)null) 
+                    Version.of(124L, null), 
+                    Version.of(125L, null) 
                 );
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/version/VersionTest_differs.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/version/VersionTest_differs.java
index d32b205..5daff40 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/version/VersionTest_differs.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/version/VersionTest_differs.java
@@ -29,19 +29,20 @@ public class VersionTest_differs {
 
     private Version version1, version2;
 
+    private final static String EMPTY_USERNAME = null;
 
     @Test
     public void whenEqual() throws Exception {
-        version1 = Version.create(123L);
-        version2 = Version.create(123L);
+        version1 = Version.of(123L, EMPTY_USERNAME);
+        version2 = Version.of(123L, EMPTY_USERNAME);
         assertThat(version1.different(version2), is(false));
     }
 
     
     @Test
     public void whenNotEqual() throws Exception {
-        version1 = Version.create(123L);
-        version2 = Version.create(124L);
+        version1 = Version.of(123L, EMPTY_USERNAME);
+        version2 = Version.of(124L, EMPTY_USERNAME);
         assertThat(version1.different(version2), is(true));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_constructor.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_constructor.java
index 1c92da6..3cc3e22 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_constructor.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_constructor.java
@@ -25,18 +25,18 @@ public class ObjectSpecIdTest_constructor {
     @Test
     public void happyCase() throws Exception {
         @SuppressWarnings("unused")
-        final ObjectSpecId objectSpecId = new ObjectSpecId("CUS");
+        final ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
     }
 
-    @Test(expected=AssertionError.class)
+    @Test(expected=IllegalArgumentException.class)
     public void cannotBeEmpty() throws Exception {
-        new ObjectSpecId("");
+        ObjectSpecId.of("");
     }
 
 
-    @Test(expected=AssertionError.class)
+    @Test(expected=NullPointerException.class)
     public void cannotBeNull() throws Exception {
-        new ObjectSpecId(null);
+        ObjectSpecId.of(null);
     }
 
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
index 58fd543..e324b16 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
@@ -27,12 +27,12 @@ public class ObjectSpecIdTest_valueSemantics extends ValueTypeContractTestAbstra
 
     @Override
     protected List<ObjectSpecId> getObjectsWithSameValue() {
-        return Arrays.asList(new ObjectSpecId("CUS"), new ObjectSpecId("CUS"), new ObjectSpecId("CUS"));
+        return Arrays.asList(ObjectSpecId.of("CUS"), ObjectSpecId.of("CUS"), ObjectSpecId.of("CUS"));
     }
 
     @Override
     protected List<ObjectSpecId> getObjectsWithDifferentValue() {
-        return Arrays.asList(new ObjectSpecId("bUS"), new ObjectSpecId("CUt"));
+        return Arrays.asList(ObjectSpecId.of("bUS"), ObjectSpecId.of("CUt"));
     }
 
 }
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java
index f4dc7f3..e67d993 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java
@@ -19,7 +19,6 @@
 package org.apache.isis.core.runtime.system.persistence;
 
 import java.sql.Timestamp;
-import java.util.Date;
 
 import javax.jdo.listener.InstanceLifecycleEvent;
 
@@ -45,13 +44,17 @@ public class Utils {
         Object jdoVersion = pojo.dnGetVersion();
         if(jdoVersion instanceof Long) {
             final Long longVersion = (Long) jdoVersion;
-            return Version.create(longVersion, authenticationSession.getUserName(), (Date) null);
+            return Version.Factory.ifPresent(longVersion, authenticationSession.getUserName());
         }
         if(jdoVersion instanceof java.sql.Timestamp) {
             final Timestamp timestampVersion = (Timestamp) jdoVersion;
-            return Version.create(timestampVersion.getTime(), authenticationSession.getUserName(), (Date) null);
+            return Version.of(timestampVersion.getTime(), authenticationSession.getUserName());
         }
         return null;
+        
     }
+    
+    
+    
 
 }
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java
index f4dc7f3..cfa78ac 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/Utils.java
@@ -19,7 +19,6 @@
 package org.apache.isis.core.runtime.system.persistence;
 
 import java.sql.Timestamp;
-import java.util.Date;
 
 import javax.jdo.listener.InstanceLifecycleEvent;
 
@@ -45,13 +44,14 @@ public class Utils {
         Object jdoVersion = pojo.dnGetVersion();
         if(jdoVersion instanceof Long) {
             final Long longVersion = (Long) jdoVersion;
-            return Version.create(longVersion, authenticationSession.getUserName(), (Date) null);
+            return Version.Factory.ifPresent(longVersion, authenticationSession.getUserName());
         }
         if(jdoVersion instanceof java.sql.Timestamp) {
             final Timestamp timestampVersion = (Timestamp) jdoVersion;
-            return Version.create(timestampVersion.getTime(), authenticationSession.getUserName(), (Date) null);
+            return Version.of(timestampVersion.getTime(), authenticationSession.getUserName());
         }
         return null;
+        
     }
 
 }
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
index 3b62562..42db859 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
@@ -73,7 +73,7 @@ public final class JsonValueEncoder {
 
         public List<ObjectSpecId> getSpecIds() {
             return _NullSafe.stream(classes)
-            .map((Class<?> cls) ->new ObjectSpecId(cls.getName()))
+            .map((Class<?> cls) ->ObjectSpecId.of(cls.getName()))
             .collect(Collectors.toList());
         }
 
diff --git a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_appendValueAndFormat.java b/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_appendValueAndFormat.java
index af1e5ae..c9da18f 100644
--- a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_appendValueAndFormat.java
+++ b/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_appendValueAndFormat.java
@@ -401,7 +401,7 @@ public class JsonValueEncoderTest_appendValueAndFormat {
         context.checking(new Expectations() {
             {
                 oneOf(mockObjectSpec).getSpecId();
-                will(returnValue(new ObjectSpecId(cls.getName())));
+                will(returnValue(ObjectSpecId.of(cls.getName())));
             }
         });
     }
diff --git a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asObject.java b/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asObject.java
index 14fb6c3..6b3aa98 100644
--- a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asObject.java
+++ b/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asObject.java
@@ -229,7 +229,7 @@ public class JsonValueEncoderTest_asObject {
         context.checking(new Expectations() {
             {
                 allowing(mockObjectSpec).getSpecId();
-                will(returnValue(new ObjectSpecId(result.getName())));
+                will(returnValue(ObjectSpecId.of(result.getName())));
             }
         });
     }


[isis] 02/06: ISIS-1976: refactors RootOid constructors into factory class

Posted by ah...@apache.org.
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 dfdecf0aa1ff7591558da025495bacbc681bbf22
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 09:35:04 2018 +0200

    ISIS-1976: refactors RootOid constructors into factory class
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/oid/Oid.java       | 42 +++++++++++++++
 .../isis/core/metamodel/adapter/oid/RootOid.java   | 60 +---------------------
 .../core/metamodel/adapter/version/Version.java    |  8 ++-
 ...ObjectFacetDeclarativeInitializingAbstract.java |  3 +-
 .../oid/CollectionOidTest_valueSemantics.java      |  4 +-
 .../adapter/oid/OidMarshallerTest_marshall.java    | 15 +++---
 .../oid/OidMarshallerTest_roundtripping.java       |  9 ++--
 .../core/metamodel/adapter/oid/OidVersionTest.java | 33 ++++++------
 ...dDefaultTest_valueSemantics_whenPersistent.java | 12 ++---
 ...idDefaultTest_valueSemantics_whenTransient.java | 12 ++---
 .../metamodel/adapter/oid/RootOidTest_create.java  |  9 ++--
 ...eptionRecognizerDocDefault_recognizes_Test.java |  4 +-
 .../adapterfactory/pojo/PojoAdapterTest.java       |  6 +--
 .../transaction/PojoAdapterBuilder.java            |  5 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  4 +-
 .../adapterfactory/pojo/PojoAdapterTest.java       |  6 +--
 .../transaction/PojoAdapterBuilder.java            |  5 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  4 +-
 .../PersistenceSessionServiceInternalDefault.java  |  3 +-
 .../ObjectAdapterContext_NewIdentifier.java        |  2 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  3 +-
 .../adaptermanager/ObjectAdapterLegacy.java        |  3 +-
 .../persistence/adaptermanager/OidProviders.java   | 10 ++--
 .../restfulobjects/server/util/OidUtils.java       |  3 +-
 .../model/mementos/ObjectAdapterMemento.java       |  3 +-
 .../widgets/breadcrumbs/BreadcrumbModel.java       |  3 +-
 26 files changed, 138 insertions(+), 133 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 e087e12..634cbbd 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
@@ -24,6 +24,7 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 
 
 /**
@@ -110,7 +111,48 @@ public interface Oid extends Encodable {
         }
     }
 
+    // -- FACTORIES
+    
+    /** for convenience*/
+    public static final class Factory {
+        
+        public static RootOid ofBookmark(final Bookmark bookmark) {
+            return RootOid.of(ObjectSpecId.of(bookmark.getObjectType()), 
+                    bookmark.getIdentifier(), State.from(bookmark), Version.empty());
+        }
+
+        public static RootOid viewmodelOf(ObjectSpecId objectSpecId, String mementoStr) {
+            return RootOid.of(objectSpecId, mementoStr, State.VIEWMODEL, Version.empty());
+        }
+        
+        public static RootOid transientOf(final ObjectSpecId objectSpecId, final String identifier) {
+            return RootOid.of(objectSpecId, identifier, State.TRANSIENT, Version.empty());
+        }
+
+        public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier) {
+            return Factory.persistentOf(objectSpecId, identifier, null);
+        }
+
+        public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence) {
+            return Factory.persistentOf(objectSpecId, identifier, versionSequence, null, null);
+        }
 
+        public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser) {
+            return Factory.persistentOf(objectSpecId, identifier, versionSequence, versionUser, null);
+        }
+
+        public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final Long versionUtcTimestamp) {
+            return Factory.persistentOf(objectSpecId, identifier, versionSequence, null, versionUtcTimestamp);
+        }
+
+        public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
+            return RootOid.of(objectSpecId, identifier, State.PERSISTENT, 
+                    Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
+        }
+
+
+        
+    }
 
 
 }
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 1284176..bf12927 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
@@ -50,65 +50,9 @@ public class RootOid implements Oid, Serializable {
     private Version version;
 
 
-    // -- Constructor, factory methods
-    public static RootOid createTransient(final ObjectSpecId objectSpecId, final String identifier) {
-        return new RootOid(objectSpecId, identifier, State.TRANSIENT);
+    public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state) {
+        return of(objectSpecId, identifier, state, Version.empty());
     }
-
-    public static RootOid create(final Bookmark bookmark) {
-        return new RootOid(ObjectSpecId.of(bookmark.getObjectType()), bookmark.getIdentifier(), State.from(bookmark));
-    }
-
-    public static RootOid create(final ObjectSpecId objectSpecId, final String identifier) {
-        return create(objectSpecId, identifier, null);
-    }
-
-    public static RootOid create(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence) {
-        return create(objectSpecId, identifier, versionSequence, null, null);
-    }
-
-    public static RootOid create(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser) {
-        return create(objectSpecId, identifier, versionSequence, versionUser, null);
-    }
-
-    public static RootOid create(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final Long versionUtcTimestamp) {
-        return create(objectSpecId, identifier, versionSequence, null, versionUtcTimestamp);
-    }
-
-    public static RootOid create(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
-        return new RootOid(objectSpecId, identifier, State.PERSISTENT, 
-                Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
-    }
-
-    public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state) {
-        this(objectSpecId, identifier, state, (Version)null);
-    }
-
-    public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Long versionSequence) {
-        this(objectSpecId, identifier, state, versionSequence, null, null);
-    }
-
-    /**
-     * If specify version sequence, can optionally specify the user that changed the object.  This is used for informational purposes only.
-     */
-    public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Long versionSequence, final String versionUser) {
-        this(objectSpecId, identifier, state, versionSequence, versionUser, null);
-    }
-
-    /**
-     * If specify version sequence, can optionally specify utc timestamp that the oid was changed.  This is used for informational purposes only.
-     */
-    public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Long versionSequence, final Long versionUtcTimestamp) {
-        this(objectSpecId, identifier, state, versionSequence, null, versionUtcTimestamp);
-    }
-
-    /**
-     * If specify version sequence, can optionally specify user and/or utc timestamp that the oid was changed.  This is used for informational purposes only.
-     */
-    public RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
-        this(objectSpecId, identifier, state, Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
-    }
-
     
     public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
         return new RootOid(objectSpecId, identifier, state, version);
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 9c2d34c..43702b1 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
@@ -57,6 +57,10 @@ public final class Version implements Serializable, Encodable {
 
     // -- FACTORIES
 
+    public static Version empty() {
+        return Factory.EMPTY_VERSION;
+    }
+    
     public static Version of(long sequence, @Nullable String user) {
         return of(sequence, user, Factory.EMPTY_TIMESTAMP);
     }
@@ -64,7 +68,7 @@ public final class Version implements Serializable, Encodable {
     public static Version of(long sequence, @Nullable String user, long utcTimestamp) {
         return new Version(sequence, user, utcTimestamp);
     }
-
+    
 
     // -- constructor, fields
     private final long sequence;
@@ -230,4 +234,6 @@ public final class Version implements Serializable, Encodable {
 
 
 
+
+
 }
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 117e4e6..cb7511d 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
@@ -69,7 +69,8 @@ extends RecreatableObjectFacetAbstract {
         final ObjectAdapter viewModelAdapter = adapterProvider.adapterForViewModel(
                 viewModelPojo, 
                 (ObjectSpecId objectSpecId)->
-                    new RootOid(objectSpecId, mementoStr, Oid.State.VIEWMODEL)  );
+                    Oid.Factory.viewmodelOf(objectSpecId, mementoStr) );
+                    
 
         final ObjectSpecification spec = viewModelAdapter.getSpecification();
         final Stream<OneToOneAssociation> properties = spec.streamProperties(Contributed.EXCLUDED);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
index 46657df..a2d2c1f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
@@ -27,8 +27,8 @@ import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
 
 public class CollectionOidTest_valueSemantics extends ValueTypeContractTestAbstract<ParentedCollectionOid> {
 
-    private final RootOid parent = new RootOid(ObjectSpecId.of("CUS"), "123", State.PERSISTENT);
-    private final RootOid otherParent = new RootOid(ObjectSpecId.of("CUS"), "124", State.PERSISTENT);
+    private final RootOid parent = RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT);
+    private final RootOid otherParent = RootOid.of(ObjectSpecId.of("CUS"), "124", State.PERSISTENT);
 
     @Override
     protected List<ParentedCollectionOid> getObjectsWithSameValue() {
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 24eae7c..014174b 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
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.adapter.oid;
 import org.junit.Before;
 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.equalTo;
@@ -37,45 +38,45 @@ public class OidMarshallerTest_marshall {
     
     @Test
     public void rootOid() {
-        final String marshal = oidMarshaller.marshal(RootOid.create(ObjectSpecId.of("CUS"),  "123"));
+        final String marshal = oidMarshaller.marshal(Factory.persistentOf(ObjectSpecId.of("CUS"),  "123"));
         assertThat(marshal, equalTo("CUS:123"));
     }
 
     @Test
     public void rootOid_transient() {
-        final String marshal = oidMarshaller.marshal(RootOid.createTransient(ObjectSpecId.of("CUS"),  "123"));
+        final String marshal = oidMarshaller.marshal(Factory.transientOf(ObjectSpecId.of("CUS"),  "123"));
         assertThat(marshal, equalTo("!CUS:123"));
     }
     
     @Test
     public void rootOid_versionSequence() {
-        final String marshal = oidMarshaller.marshal(RootOid.create(ObjectSpecId.of("CUS"),  "123", 90807L));
+        final String marshal = oidMarshaller.marshal(Factory.persistentOf(ObjectSpecId.of("CUS"),  "123", 90807L));
         assertThat(marshal, equalTo("CUS:123^90807::"));
     }
 
     @Test
     public void rootOid_versionSequenceAndUser() {
-        final String marshal = oidMarshaller.marshal(RootOid.create(ObjectSpecId.of("CUS"),  "123", 90807L, "joebloggs"));
+        final String marshal = oidMarshaller.marshal(Factory.persistentOf(ObjectSpecId.of("CUS"),  "123", 90807L, "joebloggs"));
         assertThat(marshal, equalTo("CUS:123^90807:joebloggs:"));
     }
 
     @Test
     public void rootOid_versionSequenceAndUserThatHasAnAtSymbol() {
         final ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
-        final RootOid oid = RootOid.create(objectSpecId,  "123", 90807L, "joebloggs@foo.bar");
+        final RootOid oid = Factory.persistentOf(objectSpecId,  "123", 90807L, "joebloggs@foo.bar");
         final String marshal = oidMarshaller.marshal(oid);
         assertThat(marshal, equalTo("CUS:123^90807:joebloggs@foo.bar:"));
     }
 
     @Test
     public void rootOid_versionSequenceAndUtc() {
-        final String marshal = oidMarshaller.marshal(RootOid.create(ObjectSpecId.of("CUS"),  "123", 90807L, 3453452141L));
+        final String marshal = oidMarshaller.marshal(Factory.persistentOf(ObjectSpecId.of("CUS"),  "123", 90807L, 3453452141L));
         assertThat(marshal, equalTo("CUS:123^90807::3453452141"));
     }
 
     @Test
     public void rootOid_versionSequenceAndUserAndUtc() {
-        final String marshal = oidMarshaller.marshal(RootOid.create(ObjectSpecId.of("CUS"),  "123", 90807L, "joebloggs", 3453452141L));
+        final String marshal = oidMarshaller.marshal(Factory.persistentOf(ObjectSpecId.of("CUS"),  "123", 90807L, "joebloggs", 3453452141L));
         assertThat(marshal, equalTo("CUS:123^90807:joebloggs:3453452141"));
     }
 
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 c98bd98..7724a68 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
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.adapter.oid;
 
 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;
@@ -33,7 +34,7 @@ public class OidMarshallerTest_roundtripping {
     
     @Test
     public void rootOid_withNoVersion() {
-        RootOid oid = RootOid.create(ObjectSpecId.of("CUS"), "123");
+        RootOid oid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
         
         final String enString = oid.enString();
         final RootOid deString = RootOid.deString(enString);
@@ -42,7 +43,7 @@ public class OidMarshallerTest_roundtripping {
 
     @Test
     public void rootOid_withVersion() {
-        RootOid oid = RootOid.create(ObjectSpecId.of("CUS"), "123", 90807L);
+        RootOid oid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123", 90807L);
         
         final String enString = oid.enString();
         final RootOid deString = RootOid.deString(enString);
@@ -54,7 +55,7 @@ public class OidMarshallerTest_roundtripping {
 
     @Test
     public void collectionOid_withNoVersion() {
-        RootOid parentOid = RootOid.create(ObjectSpecId.of("CUS"), "123");
+        RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
         ParentedCollectionOid oid = new ParentedCollectionOid(parentOid, "items");
         
         final String enString = oid.enString();
@@ -64,7 +65,7 @@ public class OidMarshallerTest_roundtripping {
 
     @Test
     public void collectionOid_withVersion() {
-        RootOid parentOid = RootOid.create(ObjectSpecId.of("CUS"), "123", 90807L);
+        RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123", 90807L);
         ParentedCollectionOid oid = new ParentedCollectionOid(parentOid, "items");
         
         final String enString = oid.enString();
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
index b501494..d09b806 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.adapter.oid;
 
 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.equalTo;
@@ -36,64 +37,64 @@ public class OidVersionTest  {
     
     @Test
     public void whenEquivalentAndSameVersion() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123", 90807L);
-        oid2 = RootOid.create(cusObjectSpecId, "123", 90807L);
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123", 90807L);
+        oid2 = Factory.persistentOf(cusObjectSpecId, "123", 90807L);
         
         assertThat(oid1, is(equalTo(oid2)));
     }
     
     @Test
     public void whenEquivalentAndDifferentVersions() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123", 90807L);
-        oid2 = RootOid.create(cusObjectSpecId, "123", 90808L);
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123", 90807L);
+        oid2 = Factory.persistentOf(cusObjectSpecId, "123", 90808L);
         
         assertThat(oid1, is(equalTo(oid2)));
     }
 
     @Test
     public void whenEquivalentAndNoVersionInfoForLeftHand() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123");
-        oid2 = RootOid.create(cusObjectSpecId, "123", 90808L);
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123");
+        oid2 = Factory.persistentOf(cusObjectSpecId, "123", 90808L);
         
         assertThat(oid1, is(equalTo(oid2)));
     }
 
     @Test
     public void whenEquivalentAndNoVersionInfoForRightHand() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123", 90807L);
-        oid2 = RootOid.create(cusObjectSpecId, "123");
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123", 90807L);
+        oid2 = Factory.persistentOf(cusObjectSpecId, "123");
         
         assertThat(oid1, is(equalTo(oid2)));
     }
 
     @Test
     public void whenEquivalentAndNoVersionInfoForEither() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123");
-        oid2 = RootOid.create(cusObjectSpecId, "123");
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123");
+        oid2 = Factory.persistentOf(cusObjectSpecId, "123");
         
         assertThat(oid1, is(equalTo(oid2)));
     }
 
     @Test
     public void whenNotEquivalentById() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123");
-        oid2 = RootOid.create(cusObjectSpecId, "124");
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123");
+        oid2 = Factory.persistentOf(cusObjectSpecId, "124");
         
         assertThat(oid1, is(not(equalTo(oid2))));
     }
 
     @Test
     public void whenNotEquivalentByObjectSpecId() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123");
-        oid2 = RootOid.create(ordObjectSpecId, "123");
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123");
+        oid2 = Factory.persistentOf(ordObjectSpecId, "123");
         
         assertThat(oid1, is(not(equalTo(oid2))));
     }
 
     @Test
     public void whenNotEquivalentByState() throws Exception {
-        oid1 = RootOid.create(cusObjectSpecId, "123");
-        oid2 = RootOid.createTransient(cusObjectSpecId, "123");
+        oid1 = Factory.persistentOf(cusObjectSpecId, "123");
+        oid2 = Factory.transientOf(cusObjectSpecId, "123");
         
         assertThat(oid1, is(not(equalTo(oid2))));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
index 7ae1f95..d39b1be 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
@@ -30,17 +30,17 @@ public class RootOidDefaultTest_valueSemantics_whenPersistent extends ValueTypeC
     @Override
     protected List<RootOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                new RootOid(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
-                new RootOid(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
-                new RootOid(ObjectSpecId.of("CUS"), "123", State.PERSISTENT));
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT));
     }
 
     @Override
     protected List<RootOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                new RootOid(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
-                new RootOid(ObjectSpecId.of("CUS"), "124", State.PERSISTENT),
-                new RootOid(ObjectSpecId.of("CUX"), "123", State.PERSISTENT));
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
+                RootOid.of(ObjectSpecId.of("CUS"), "124", State.PERSISTENT),
+                RootOid.of(ObjectSpecId.of("CUX"), "123", State.PERSISTENT));
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
index 4b893dc..d7fffdf 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
@@ -30,18 +30,18 @@ public class RootOidDefaultTest_valueSemantics_whenTransient extends ValueTypeCo
     @Override
     protected List<RootOid> getObjectsWithSameValue() {
         return Arrays.asList(
-            new RootOid(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
-            new RootOid(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
-            new RootOid(ObjectSpecId.of("CUS"), "123", State.TRANSIENT)
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT)
             );
     }
 
     @Override
     protected List<RootOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-            new RootOid(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
-            new RootOid(ObjectSpecId.of("CUS"), "124", State.TRANSIENT),
-            new RootOid(ObjectSpecId.of("CUX"), "123", State.TRANSIENT));
+                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
+                RootOid.of(ObjectSpecId.of("CUS"), "124", State.TRANSIENT),
+                RootOid.of(ObjectSpecId.of("CUX"), "123", State.TRANSIENT));
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
index c1f2537..d5032c4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.adapter.oid;
 
 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;
@@ -32,7 +33,7 @@ public class RootOidTest_create {
     @Test
     public void create() throws Exception {
         ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
-        RootOid oid = RootOid.create(objectSpecId, "123");
+        RootOid oid = Factory.persistentOf(objectSpecId, "123");
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
         assertThat(oid.getVersion(), is(nullValue()));
@@ -43,7 +44,7 @@ public class RootOidTest_create {
     @Test
     public void createTransient() throws Exception {
         ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
-        RootOid oid = RootOid.createTransient(objectSpecId, "123");
+        RootOid oid = Factory.transientOf(objectSpecId, "123");
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
         assertThat(oid.getVersion(), is(nullValue()));
@@ -55,7 +56,7 @@ public class RootOidTest_create {
     @Test
     public void createWithVersion() throws Exception {
         ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
-        RootOid oid = RootOid.create(objectSpecId, "123", 456L);
+        RootOid oid = Factory.persistentOf(objectSpecId, "123", 456L);
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
         assertThat(oid.getVersion().getSequence(), is(456L));
@@ -66,7 +67,7 @@ public class RootOidTest_create {
     @Test
     public void createTransientNoVersion() throws Exception {
         ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
-        RootOid oid = RootOid.createTransient(objectSpecId, "123");
+        RootOid oid = Factory.transientOf(objectSpecId, "123");
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
         assertThat(oid.getVersion(), is(nullValue()));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault_recognizes_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault_recognizes_Test.java
index ebbb81a..949b208 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault_recognizes_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault_recognizes_Test.java
@@ -23,7 +23,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -54,7 +54,7 @@ public class ExceptionRecognizerDocDefault_recognizes_Test {
     
     @Test
     public void whenConcurrencyException_is_recognized() throws Exception {
-        ex = new ConcurrencyException("foo", RootOid.create(ObjectSpecId.of("CUS"), "123"));
+        ex = new ConcurrencyException("foo", Factory.persistentOf(ObjectSpecId.of("CUS"), "123"));
         assertThat(excepRecognizer.recognize(ex), is(not(nullValue())));
     }
 
diff --git a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
index 2c2a5b7..2df642c 100644
--- a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
+++ b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
@@ -26,7 +26,7 @@ import java.util.Date;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -65,7 +65,7 @@ public class PojoAdapterTest {
     public void setUp() throws Exception {
         domainObject = new RuntimeTestPojo();
         
-        adapter = new PojoAdapter(domainObject, RootOid.create(ObjectSpecId.of("CUS"), "1"), mockAuthenticationSession,
+        adapter = new PojoAdapter(domainObject, Factory.persistentOf(ObjectSpecId.of("CUS"), "1"), mockAuthenticationSession,
                 mockSpecificationLoader, mockPersistenceSession);
         adapter.setVersion(mockVersion);
         
@@ -92,7 +92,7 @@ public class PojoAdapterTest {
 
     @Test
     public void getOid_initially() {
-        assertEquals(RootOid.create(ObjectSpecId.of("CUS"), "1"), adapter.getOid());
+        assertEquals(Factory.persistentOf(ObjectSpecId.of("CUS"), "1"), adapter.getOid());
     }
 
     @Test
diff --git a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 14dedef..463a886 100644
--- a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -23,6 +23,7 @@ import java.util.Iterator;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 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.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
@@ -67,13 +68,13 @@ public class PojoAdapterBuilder {
         TRANSIENT {
             @Override
             RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return RootOid.createTransient(objectSpecId, identifier);
+                return Factory.transientOf(objectSpecId, identifier);
             }
         },
         PERSISTENT {
             @Override
             RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return RootOid.create(objectSpecId, identifier);
+                return Factory.persistentOf(objectSpecId, identifier);
             }
         },
         VALUE {
diff --git a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index f343937..7b20492 100644
--- a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -41,7 +41,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -166,7 +166,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
                 will(returnValue(mockAuthenticationSessionProvider));
 
                 allowing(mockEmployeeAdapter).getOid();
-                will(returnValue(RootOid.create(ObjectSpecId.of("EMP"), "1")));
+                will(returnValue(Factory.persistentOf(ObjectSpecId.of("EMP"), "1")));
 
                 allowing(mockEmployeeSpec).getCorrespondingClass();
                 will(returnValue(Employee.class));
diff --git a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
index faafc59..d035492 100644
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/adapterfactory/pojo/PojoAdapterTest.java
@@ -26,7 +26,7 @@ import java.util.Date;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -65,7 +65,7 @@ public class PojoAdapterTest {
     public void setUp() throws Exception {
         domainObject = new RuntimeTestPojo();
         
-        adapter = new PojoAdapter(domainObject, RootOid.create(ObjectSpecId.of("CUS"), "1"), mockAuthenticationSession,
+        adapter = new PojoAdapter(domainObject, Factory.persistentOf(ObjectSpecId.of("CUS"), "1"), mockAuthenticationSession,
                 mockSpecificationLoader, mockPersistenceSession);
         adapter.setVersion(mockVersion);
         
@@ -92,7 +92,7 @@ public class PojoAdapterTest {
 
     @Test
     public void getOid_initially() {
-        assertEquals(RootOid.create(ObjectSpecId.of("CUS"), "1"), adapter.getOid());
+        assertEquals(Factory.persistentOf(ObjectSpecId.of("CUS"), "1"), adapter.getOid());
     }
 
     @Test
diff --git a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 125ebb6..cda1a8f 100644
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -23,6 +23,7 @@ import java.util.Iterator;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 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.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
@@ -67,13 +68,13 @@ public class PojoAdapterBuilder {
         TRANSIENT {
             @Override
             RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return RootOid.createTransient(objectSpecId, identifier);
+                return Factory.transientOf(objectSpecId, identifier);
             }
         },
         PERSISTENT {
             @Override
             RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return RootOid.create(objectSpecId, identifier);
+                return Factory.persistentOf(objectSpecId, identifier);
             }
         },
         VALUE {
diff --git a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index dc64ff8..e453008 100644
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -45,7 +45,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -166,7 +166,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
                 will(returnValue(mockAuthenticationSessionProvider));
 
                 allowing(mockEmployeeAdapter).getOid();
-                will(returnValue(RootOid.create(ObjectSpecId.of("EMP"), "1")));
+                will(returnValue(Factory.persistentOf(ObjectSpecId.of("EMP"), "1")));
 
                 allowing(mockEmployeeSpec).getCorrespondingClass();
                 will(returnValue(Employee.class));
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
index 9117a6b..5c0800c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
@@ -41,6 +41,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 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.RootOid;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -87,7 +88,7 @@ public class PersistenceSessionServiceInternalDefault implements PersistenceSess
             final Bookmark bookmark,
             final BookmarkService.FieldResetPolicy fieldResetPolicy) {
         
-        final RootOid rootOid = RootOid.create(bookmark);
+        final RootOid rootOid = Factory.ofBookmark(bookmark);
         final PersistenceSession ps = getPersistenceSession();
         final boolean denyRefresh = fieldResetPolicy == BookmarkService.FieldResetPolicy.DONT_REFRESH; 
                         
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
index e7e930e..da71211 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
@@ -73,7 +73,7 @@ class ObjectAdapterContext_NewIdentifier {
         final String identifier = persistenceSession.identifierFor(pojo);
         
         final ObjectSpecId objectSpecId = spec.getSpecId();
-        return new RootOid(objectSpecId, identifier, Oid.State.PERSISTENT);
+        return RootOid.of(objectSpecId, identifier, Oid.State.PERSISTENT);
     }
     
 }
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index a92c5cf..565a79c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -32,6 +32,7 @@ import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.core.commons.ensure.Assert;
 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.Factory;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -113,7 +114,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
         final ObjectSpecification objectSpecification = 
                 specificationLoader.loadSpecification(viewModelPojo.getClass());
         final ObjectSpecId objectSpecId = objectSpecification.getSpecId();
-        final RootOid newRootOid = RootOid.create(objectSpecId, UUID.randomUUID().toString());
+        final RootOid newRootOid = Factory.persistentOf(objectSpecId, UUID.randomUUID().toString());
         final ObjectAdapter createdAdapter = objectAdapterContext.createRootOrAggregatedAdapter(newRootOid, viewModelPojo);
         return createdAdapter;
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java
index cfc866c..eef15a2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterLegacy.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -80,7 +81,7 @@ public class ObjectAdapterLegacy {
         }
 
         private static ObjectAdapter adapterFor(final Bookmark bookmark) {
-            final RootOid rootOid = RootOid.create(bookmark);
+            final RootOid rootOid = Factory.ofBookmark(bookmark);
             return adapterFor(rootOid);
         }
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
index 491e836..8a77f0f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
@@ -60,7 +60,7 @@ public class OidProviders {
         @Override
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
             final String identifier = PersistenceSession.SERVICE_IDENTIFIER;
-            return new RootOid(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
+            return RootOid.of(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
         }
 
     }
@@ -82,10 +82,10 @@ public class OidProviders {
             final boolean isRecognized = persistenceSession.isRecognized(pojo);
             if(isRecognized) {
                 final String identifier = persistenceSession.identifierFor(pojo);
-                return new RootOid(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
+                return RootOid.of(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
             } else {
                 final String identifier = UUID.randomUUID().toString();
-                return new RootOid(spec.getSpecId(), identifier, Oid.State.TRANSIENT);    
+                return RootOid.of(spec.getSpecId(), identifier, Oid.State.TRANSIENT);    
             }
         }
         
@@ -116,7 +116,7 @@ public class OidProviders {
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
             final ViewModelFacet recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
             final String identifier = recreatableObjectFacet.memento(pojo);
-            return new RootOid(spec.getSpecId(), identifier, Oid.State.VIEWMODEL);
+            return RootOid.of(spec.getSpecId(), identifier, Oid.State.VIEWMODEL);
         }
 
     }
@@ -131,7 +131,7 @@ public class OidProviders {
         @Override
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
             final String identifier = UUID.randomUUID().toString();
-            return new RootOid(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
+            return RootOid.of(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
         }
 
     }
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 4700dff..4bda8d1 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
@@ -25,6 +25,7 @@ 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;
@@ -113,7 +114,7 @@ public final class OidUtils {
         // ("*") from the specId, meaning that the marshalling logic above in RootOidDefault.deString() creates an
         // oid in the wrong state.  The code below checks for this and recreates the oid with the current state of 'view model'
         if(!rootOid.isViewModel()) {
-            return new RootOid(rootOid.getObjectSpecId(), rootOid.getIdentifier(), Oid.State.VIEWMODEL);
+            return RootOid.of(rootOid.getObjectSpecId(), rootOid.getIdentifier(), Oid.State.VIEWMODEL);
         }
         return rootOid;
     }
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 a7a1bdf..5a26c9c 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
@@ -34,6 +34,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 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;
@@ -620,7 +621,7 @@ public class ObjectAdapterMemento implements Serializable {
         }
 
         public static Function<ObjectAdapterMemento, RootOid> toOid() {
-            return objectAdapterMemento->RootOid.create(objectAdapterMemento.asBookmark());
+            return objectAdapterMemento->Factory.ofBookmark(objectAdapterMemento.asBookmark());
         }
 
     }
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 a5ca7c0..c19bd96 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
@@ -27,6 +27,7 @@ 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.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;
@@ -161,7 +162,7 @@ public class BreadcrumbModel implements Serializable {
     }
 
     protected EntityModel toEntityModel(final Bookmark bookmark) {
-        RootOid rootOid = RootOid.create(bookmark);
+        RootOid rootOid = Factory.ofBookmark(bookmark);
         ObjectAdapterMemento oam = ObjectAdapterMemento.createPersistent(rootOid);
         return new EntityModel(oam);
     }


[isis] 06/06: ISIS-1976: move Oid.State -> Oid_State and make it package private

Posted by ah...@apache.org.
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 2f962190637e23544ca49cd8a66f8caa256a1b8f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 12:50:43 2018 +0200

    ISIS-1976: move Oid.State -> Oid_State and make it package private
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/oid/Oid.java       | 80 +------------------
 .../core/metamodel/adapter/oid/Oid_Marshaller.java |  9 +--
 .../isis/core/metamodel/adapter/oid/Oid_Root.java  |  8 +-
 .../isis/core/metamodel/adapter/oid/Oid_State.java | 93 ++++++++++++++++++++++
 4 files changed, 105 insertions(+), 85 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 06706b8..d7441e9 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
@@ -21,13 +21,10 @@ package org.apache.isis.core.metamodel.adapter.oid;
 
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.schema.common.v1.BookmarkObjectState;
-import org.apache.isis.schema.common.v1.OidDto;
 
 
 /**
@@ -67,75 +64,6 @@ public interface Oid extends Encodable {
     default boolean isValue() {
         return false; // default, only overridden by Oid_Value
     }
-
-    public static enum State {
-        PERSISTENT,
-        TRANSIENT,
-        VIEWMODEL;
-
-        public boolean isTransient() {
-            return this == TRANSIENT;
-        }
-        public boolean isViewModel() {
-            return this == VIEWMODEL;
-        }
-        public boolean isPersistent() {
-            return this == PERSISTENT;
-        }
-
-        public static State from(final Bookmark bookmark) {
-            final Bookmark.ObjectState objectState = bookmark.getObjectState();
-            return from(objectState);
-        }
-
-        public static State from(final Bookmark.ObjectState objectState) {
-            switch (objectState) {
-            case VIEW_MODEL:
-                return VIEWMODEL;
-            case TRANSIENT:
-                return TRANSIENT;
-            case PERSISTENT:
-                return PERSISTENT;
-            default:
-                throw _Exceptions.unmatchedCase(objectState);
-            }
-        }
-        public Bookmark.ObjectState asBookmarkObjectState() {
-            switch (this) {
-            case VIEWMODEL:
-                return Bookmark.ObjectState.VIEW_MODEL;
-            case TRANSIENT:
-                return Bookmark.ObjectState.TRANSIENT;
-            case PERSISTENT:
-                return Bookmark.ObjectState.PERSISTENT;
-            default:
-                throw _Exceptions.unmatchedCase(this);
-            }
-        }
-        
-        public Bookmark bookmarkOf(RootOid rootOid) {
-            final String objectType = asBookmarkObjectState().getCode() + rootOid.getObjectSpecId().asString();
-            final String identifier = rootOid.getIdentifier();
-            return new Bookmark(objectType, identifier);
-        }
-
-        public OidDto toOidDto(RootOid rootOid) {
-
-            final OidDto oidDto = new OidDto();
-
-            oidDto.setType(rootOid.getObjectSpecId().asString());
-            oidDto.setId(rootOid.getIdentifier());
-
-            final Bookmark.ObjectState objectState = asBookmarkObjectState();
-            final BookmarkObjectState bookmarkState = objectState.toBookmarkState();
-            // persistent is assumed if not specified...
-            oidDto.setObjectState(
-                    bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
-
-            return oidDto;
-        }
-        
-    }
     
     // -- MARSHALLING
     
@@ -184,15 +112,15 @@ public interface Oid extends Encodable {
         
         public static RootOid ofBookmark(final Bookmark bookmark) {
             return Oid_Root.of(ObjectSpecId.of(bookmark.getObjectType()), 
-                    bookmark.getIdentifier(), State.from(bookmark), Version.empty());
+                    bookmark.getIdentifier(), Oid_State.from(bookmark), Version.empty());
         }
 
         public static RootOid viewmodelOf(ObjectSpecId objectSpecId, String mementoStr) {
-            return Oid_Root.of(objectSpecId, mementoStr, State.VIEWMODEL, Version.empty());
+            return Oid_Root.of(objectSpecId, mementoStr, Oid_State.VIEWMODEL, Version.empty());
         }
         
         public static RootOid transientOf(final ObjectSpecId objectSpecId, final String identifier) {
-            return Oid_Root.of(objectSpecId, identifier, State.TRANSIENT, Version.empty());
+            return Oid_Root.of(objectSpecId, identifier, Oid_State.TRANSIENT, Version.empty());
         }
 
         public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier) {
@@ -212,7 +140,7 @@ public interface Oid extends Encodable {
         }
 
         public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
-            return Oid_Root.of(objectSpecId, identifier, State.PERSISTENT, 
+            return Oid_Root.of(objectSpecId, identifier, Oid_State.PERSISTENT, 
                     Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
index ebc1323..bed9fa9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -30,7 +30,6 @@ 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;
-import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 
@@ -155,13 +154,13 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
         }
 
         final String isTransientOrViewModelStr = getGroup(matcher, 3);
-        final State state;
+        final Oid_State state;
         if("!".equals(isTransientOrViewModelStr)) {
-            state = State.TRANSIENT;
+            state = Oid_State.TRANSIENT;
         } else if("*".equals(isTransientOrViewModelStr)) {
-            state = State.VIEWMODEL;
+            state = Oid_State.VIEWMODEL;
         } else {
-            state = State.PERSISTENT;
+            state = Oid_State.PERSISTENT;
         }
 
         final String rootObjectType = getGroup(matcher, 4);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
index d6e547b..03c67ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
@@ -39,22 +39,22 @@ final class Oid_Root implements RootOid {
 
     private final ObjectSpecId objectSpecId;
     private final String identifier;
-    private final Oid.State state;
+    private final Oid_State state;
     private final int hashCode;
 
     // not part of equality check
     private Version version;
 
 
-    public static Oid_Root of(final ObjectSpecId objectSpecId, final String identifier, final State state) {
+    public static Oid_Root of(final ObjectSpecId objectSpecId, final String identifier, final Oid_State state) {
         return of(objectSpecId, identifier, state, Version.empty());
     }
     
-    public static Oid_Root of(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
+    public static Oid_Root of(final ObjectSpecId objectSpecId, final String identifier, final Oid_State state, final Version version) {
         return new Oid_Root(objectSpecId, identifier, state, version);
     }
     
-    private Oid_Root(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
+    private Oid_Root(final ObjectSpecId objectSpecId, final String identifier, final Oid_State state, final Version version) {
 
         requires(objectSpecId, "objectSpecId");
         requires(identifier, "identifier");
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_State.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_State.java
new file mode 100644
index 0000000..a91e05c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_State.java
@@ -0,0 +1,93 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.core.metamodel.adapter.oid;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.schema.common.v1.BookmarkObjectState;
+import org.apache.isis.schema.common.v1.OidDto;
+
+enum Oid_State {
+    PERSISTENT,
+    TRANSIENT,
+    VIEWMODEL;
+
+    public boolean isTransient() {
+        return this == TRANSIENT;
+    }
+    public boolean isViewModel() {
+        return this == VIEWMODEL;
+    }
+    public boolean isPersistent() {
+        return this == PERSISTENT;
+    }
+
+    public static Oid_State from(final Bookmark bookmark) {
+        final Bookmark.ObjectState objectState = bookmark.getObjectState();
+        return from(objectState);
+    }
+
+    public static Oid_State from(final Bookmark.ObjectState objectState) {
+        switch (objectState) {
+        case VIEW_MODEL:
+            return VIEWMODEL;
+        case TRANSIENT:
+            return TRANSIENT;
+        case PERSISTENT:
+            return PERSISTENT;
+        default:
+            throw _Exceptions.unmatchedCase(objectState);
+        }
+    }
+    public Bookmark.ObjectState asBookmarkObjectState() {
+        switch (this) {
+        case VIEWMODEL:
+            return Bookmark.ObjectState.VIEW_MODEL;
+        case TRANSIENT:
+            return Bookmark.ObjectState.TRANSIENT;
+        case PERSISTENT:
+            return Bookmark.ObjectState.PERSISTENT;
+        default:
+            throw _Exceptions.unmatchedCase(this);
+        }
+    }
+    
+    public Bookmark bookmarkOf(RootOid rootOid) {
+        final String objectType = asBookmarkObjectState().getCode() + rootOid.getObjectSpecId().asString();
+        final String identifier = rootOid.getIdentifier();
+        return new Bookmark(objectType, identifier);
+    }
+
+    public OidDto toOidDto(RootOid rootOid) {
+
+        final OidDto oidDto = new OidDto();
+
+        oidDto.setType(rootOid.getObjectSpecId().asString());
+        oidDto.setId(rootOid.getIdentifier());
+
+        final Bookmark.ObjectState objectState = asBookmarkObjectState();
+        final BookmarkObjectState bookmarkState = objectState.toBookmarkState();
+        // persistent is assumed if not specified...
+        oidDto.setObjectState(
+                bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
+
+        return oidDto;
+    }
+    
+}
\ No newline at end of file


[isis] 05/06: ISIS-1976: let package o.a.i.c.metamodel.adapter.oid only expose interfaces

Posted by ah...@apache.org.
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 e49e8b8b8c00f8777981e75d3f3c4321e0344bb6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 12:46:17 2018 +0200

    ISIS-1976: let package o.a.i.c.metamodel.adapter.oid only expose
    interfaces
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/oid/Oid.java       |  45 ++++-
 .../core/metamodel/adapter/oid/Oid_Marshaller.java |   4 +-
 .../oid/{ParentedOid.java => Oid_Parented.java}    |  32 ++--
 .../adapter/oid/{RootOid.java => Oid_Root.java}    |  86 +++------
 .../isis/core/metamodel/adapter/oid/Oid_Value.java | 109 +++++++++++
 .../core/metamodel/adapter/oid/ParentedOid.java    | 170 ++---------------
 .../isis/core/metamodel/adapter/oid/RootOid.java   | 207 +--------------------
 .../oid/CollectionOidTest_valueSemantics.java      |  15 +-
 .../oid/OidMarshallerTest_roundtripping.java       |   6 +-
 ...dDefaultTest_valueSemantics_whenPersistent.java |  13 +-
 ...idDefaultTest_valueSemantics_whenTransient.java |  13 +-
 .../transaction/PojoAdapterBuilder.java            |   2 +-
 .../transaction/PojoAdapterBuilder.java            |   2 +-
 .../ObjectAdapterContext_NewIdentifier.java        |   2 +-
 .../persistence/adaptermanager/OidProviders.java   |  12 +-
 .../restfulobjects/server/util/OidUtils.java       |   2 +-
 16 files changed, 233 insertions(+), 487 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 8473a0f..06706b8 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
@@ -26,6 +26,8 @@ import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.schema.common.v1.BookmarkObjectState;
+import org.apache.isis.schema.common.v1.OidDto;
 
 
 /**
@@ -63,7 +65,7 @@ public interface Oid extends Encodable {
     boolean isPersistent();
     
     default boolean isValue() {
-        return false;
+        return false; // default, only overridden by Oid_Value
     }
 
     public static enum State {
@@ -110,6 +112,29 @@ public interface Oid extends Encodable {
                 throw _Exceptions.unmatchedCase(this);
             }
         }
+        
+        public Bookmark bookmarkOf(RootOid rootOid) {
+            final String objectType = asBookmarkObjectState().getCode() + rootOid.getObjectSpecId().asString();
+            final String identifier = rootOid.getIdentifier();
+            return new Bookmark(objectType, identifier);
+        }
+
+        public OidDto toOidDto(RootOid rootOid) {
+
+            final OidDto oidDto = new OidDto();
+
+            oidDto.setType(rootOid.getObjectSpecId().asString());
+            oidDto.setId(rootOid.getIdentifier());
+
+            final Bookmark.ObjectState objectState = asBookmarkObjectState();
+            final BookmarkObjectState bookmarkState = objectState.toBookmarkState();
+            // persistent is assumed if not specified...
+            oidDto.setObjectState(
+                    bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
+
+            return oidDto;
+        }
+        
     }
     
     // -- MARSHALLING
@@ -153,17 +178,21 @@ public interface Oid extends Encodable {
     /** for convenience*/
     public static final class Factory {
         
+        public static RootOid value() {
+            return Oid_Value.INSTANCE;
+        }
+        
         public static RootOid ofBookmark(final Bookmark bookmark) {
-            return RootOid.of(ObjectSpecId.of(bookmark.getObjectType()), 
+            return Oid_Root.of(ObjectSpecId.of(bookmark.getObjectType()), 
                     bookmark.getIdentifier(), State.from(bookmark), Version.empty());
         }
 
         public static RootOid viewmodelOf(ObjectSpecId objectSpecId, String mementoStr) {
-            return RootOid.of(objectSpecId, mementoStr, State.VIEWMODEL, Version.empty());
+            return Oid_Root.of(objectSpecId, mementoStr, State.VIEWMODEL, Version.empty());
         }
         
         public static RootOid transientOf(final ObjectSpecId objectSpecId, final String identifier) {
-            return RootOid.of(objectSpecId, identifier, State.TRANSIENT, Version.empty());
+            return Oid_Root.of(objectSpecId, identifier, State.TRANSIENT, Version.empty());
         }
 
         public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier) {
@@ -183,18 +212,18 @@ public interface Oid extends Encodable {
         }
 
         public static RootOid persistentOf(final ObjectSpecId objectSpecId, final String identifier, final Long versionSequence, final String versionUser, final Long versionUtcTimestamp) {
-            return RootOid.of(objectSpecId, identifier, State.PERSISTENT, 
+            return Oid_Root.of(objectSpecId, identifier, State.PERSISTENT, 
                     Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
         }
 
         // -- PARENTED COLLECTIONS
         
         public static ParentedOid collectionOfOneToMany(RootOid parentRootOid, OneToManyAssociation otma) {
-            return ParentedOid.ofName(parentRootOid, otma.getId());
+            return Oid_Parented.ofName(parentRootOid, otma.getId());
         }
 
-        public static ParentedOid collectionOfName(RootOid parentRootOid, String name) {
-            return ParentedOid.ofName(parentRootOid, name);
+        public static ParentedOid parentedOfName(RootOid parentRootOid, String name) {
+            return Oid_Parented.ofName(parentRootOid, name);
         }
 
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
index dff0ef3..ebc1323 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -195,7 +195,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
             if(aggregateOidParts.isEmpty()) {
                 ensureCorrectType(oidStr, requestedType, RootOid.class);
                 return _Casts.uncheckedCast(
-                        RootOid.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state, version));
+                        Oid_Root.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state, version));
             } else {
                 throw new RuntimeException("Aggregated Oids are no longer supported");
             }
@@ -206,7 +206,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
 
             RootOid parentOid = this.unmarshal(parentOidStr, RootOid.class);
             ensureCorrectType(oidStr, requestedType, ParentedOid.class);
-            return _Casts.uncheckedCast( ParentedOid.ofName(parentOid, collectionName) );
+            return _Casts.uncheckedCast( Oid_Parented.ofName(parentOid, collectionName) );
         }
     }
 
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/Oid_Parented.java
similarity index 83%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
index c071022..bc6f835 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/Oid_Parented.java
@@ -22,17 +22,13 @@ package org.apache.isis.core.metamodel.adapter.oid;
 import static org.apache.isis.commons.internal.base._With.requires;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 
-/**
- * Used as the {@link Oid} for collections.
- */
-public final class ParentedOid implements Serializable, Oid {
+final class Oid_Parented implements ParentedOid {
 
     private static final long serialVersionUID = 1L;
 
@@ -42,17 +38,18 @@ public final class ParentedOid implements Serializable, Oid {
     private final RootOid parentRootOid;
 
     // package private to support testing
-    static ParentedOid ofName(RootOid parentRootOid, String name) {
-        return new ParentedOid(parentRootOid, name);
+    static Oid_Parented ofName(RootOid parentRootOid, String name) {
+        return new Oid_Parented(parentRootOid, name);
     }
     
-    private ParentedOid(RootOid parentRootOid, String name) {
+    private Oid_Parented(RootOid parentRootOid, String name) {
         requires(parentRootOid, "parentRootOid");
         this.parentRootOid = parentRootOid;
         this.name = name;
         this.hashCode = calculateHash();
     }
 
+    @Override
     public RootOid getParentOid() {
         return parentRootOid;
     }
@@ -87,8 +84,8 @@ public final class ParentedOid implements Serializable, Oid {
     // enstring
     // /////////////////////////////////////////////////////////
 
-    public static ParentedOid deString(String oidStr) {
-        return Oid.unmarshaller().unmarshal(oidStr, ParentedOid.class);
+    public static Oid_Parented deString(String oidStr) {
+        return Oid.unmarshaller().unmarshal(oidStr, Oid_Parented.class);
     }
 
 
@@ -108,11 +105,11 @@ public final class ParentedOid implements Serializable, Oid {
     // /////////////////////////////////////////////////////////
 
 
-    public ParentedOid(DataInputExtended inputStream) throws IOException {
-        this(ParentedOid.deString(inputStream.readUTF()));
+    public Oid_Parented(DataInputExtended inputStream) throws IOException {
+        this(Oid_Parented.deString(inputStream.readUTF()));
     }
 
-    private ParentedOid(ParentedOid oid) throws IOException {
+    private Oid_Parented(Oid_Parented oid) throws IOException {
         this.parentRootOid = oid.getParentOid();
         this.name = oid.name;
         this.hashCode = calculateHash();
@@ -128,6 +125,7 @@ public final class ParentedOid implements Serializable, Oid {
     // Properties
     // /////////////////////////////////////////////////////////
 
+    @Override
     public String getName() {
         return name;
     }
@@ -159,10 +157,10 @@ public final class ParentedOid implements Serializable, Oid {
         if (getClass() != other.getClass()) {
             return false;
         }
-        return equals((ParentedOid) other);
+        return equals((Oid_Parented) other);
     }
 
-    public boolean equals(final ParentedOid other) {
+    public boolean equals(final Oid_Parented other) {
         return Objects.equals(other.getParentOid(), getParentOid()) && Objects.equals(other.name, name);
     }
 
@@ -185,8 +183,8 @@ public final class ParentedOid implements Serializable, Oid {
      * When the RootOid is persisted, all its &quot;children&quot;
      * need updating similarly.
      */
-    public ParentedOid asPersistent(RootOid newParentRootOid) {
-        return new ParentedOid(newParentRootOid, name);
+    public Oid_Parented asPersistent(RootOid newParentRootOid) {
+        return new Oid_Parented(newParentRootOid, name);
     }
 
 
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/Oid_Root.java
similarity index 63%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
index 67e9280..d6e547b 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/Oid_Root.java
@@ -22,42 +22,39 @@ package org.apache.isis.core.metamodel.adapter.oid;
 import static org.apache.isis.commons.internal.base._With.requires;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.url.UrlDecoderUtil;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.schema.common.v1.BookmarkObjectState;
 import org.apache.isis.schema.common.v1.OidDto;
 
-public class RootOid implements Oid, Serializable {
+final class Oid_Root implements RootOid {
 
     // -- fields
     private final static long serialVersionUID = 1L;
 
     private final ObjectSpecId objectSpecId;
     private final String identifier;
-    private final State state;
+    private final Oid.State state;
     private final int hashCode;
 
     // not part of equality check
     private Version version;
 
 
-    public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state) {
+    public static Oid_Root of(final ObjectSpecId objectSpecId, final String identifier, final State state) {
         return of(objectSpecId, identifier, state, Version.empty());
     }
     
-    public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
-        return new RootOid(objectSpecId, identifier, state, version);
+    public static Oid_Root of(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
+        return new Oid_Root(objectSpecId, identifier, state, version);
     }
     
-    private RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
+    private Oid_Root(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
 
         requires(objectSpecId, "objectSpecId");
         requires(identifier, "identifier");
@@ -75,9 +72,9 @@ public class RootOid implements Oid, Serializable {
     }
 
     // -- Encodeable
-    public RootOid(final DataInputExtended input) throws IOException {
+    public Oid_Root(final DataInputExtended input) throws IOException {
         final String oidStr = input.readUTF();
-        final RootOid oid = Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
+        final Oid_Root oid = Oid.unmarshaller().unmarshal(oidStr, Oid_Root.class);
         this.objectSpecId = oid.objectSpecId;
         this.identifier = oid.identifier;
         this.state = oid.state;
@@ -96,13 +93,13 @@ public class RootOid implements Oid, Serializable {
     }
 
     // -- deString'able, enString
-    public static RootOid deStringEncoded(final String urlEncodedOidStr) {
+    public static Oid_Root deStringEncoded(final String urlEncodedOidStr) {
         final String oidStr = UrlDecoderUtil.urlDecode(urlEncodedOidStr);
         return deString(oidStr);
     }
 
-    public static RootOid deString(final String oidStr) {
-        return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
+    public static Oid_Root deString(final String oidStr) {
+        return Oid.unmarshaller().unmarshal(oidStr, Oid_Root.class);
     }
 
     @Override
@@ -117,10 +114,12 @@ public class RootOid implements Oid, Serializable {
 
 
     // -- Properties
+    @Override
     public ObjectSpecId getObjectSpecId() {
         return objectSpecId;
     }
 
+    @Override
     public String getIdentifier() {
         return identifier;
     }
@@ -152,32 +151,16 @@ public class RootOid implements Oid, Serializable {
         this.version = version;
     }
 
-
-    // -- asBookmark, asOidDto
+    @Override
     public Bookmark asBookmark() {
-        final String objectType = state.asBookmarkObjectState().getCode() + getObjectSpecId().asString();
-        final String identifier = getIdentifier();
-        return new Bookmark(objectType, identifier);
+        return state.bookmarkOf(this);
     }
-
+    
+    @Override
     public OidDto asOidDto() {
-
-        final OidDto oidDto = new OidDto();
-
-        oidDto.setType(getObjectSpecId().asString());
-        oidDto.setId(getIdentifier());
-
-        final Bookmark.ObjectState objectState = state.asBookmarkObjectState();
-        final BookmarkObjectState bookmarkState = objectState.toBookmarkState();
-        // persistent is assumed if not specified...
-        oidDto.setObjectState(
-                bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
-
-        return oidDto;
+        return state.toOidDto(this);
     }
-
-
-
+    
     // -- equals, hashCode
 
     private int calculateHash() {
@@ -195,10 +178,10 @@ public class RootOid implements Oid, Serializable {
         if (getClass() != other.getClass()) {
             return false;
         }
-        return equals((RootOid) other);
+        return equals((Oid_Root) other);
     }
 
-    public boolean equals(final RootOid other) {
+    public boolean equals(final Oid_Root other) {
         return Objects.equals(objectSpecId, other.getObjectSpecId()) && 
                 Objects.equals(identifier, other.getIdentifier()) && 
                 Objects.equals(state, other.state);
@@ -209,37 +192,10 @@ public class RootOid implements Oid, Serializable {
         return hashCode;
     }
 
-
-
     // -- toString
     @Override
     public String toString() {
         return enString();
     }
 
-    // -- ROOT-ID SUPPORT FOR VALUE
-    
-    private RootOid() { identifier=null; objectSpecId=null; state=null; hashCode=0;};
-    
-    private static final RootOid VALUE_OID = new RootOid() {
-        private static final long serialVersionUID = 2L;
-        @Override public boolean isValue() { return true; }
-//        @Override public boolean isTransient() { return false; }
-//        @Override public boolean isPersistent() { return false; }
-//        @Override public boolean isViewModel() { return false; }
-        
-        @Override public boolean isTransient() { throw _Exceptions.unexpectedCodeReach(); }
-        @Override public boolean isPersistent() { throw _Exceptions.unexpectedCodeReach(); }
-        @Override public boolean isViewModel() { throw _Exceptions.unexpectedCodeReach(); }
-        @Override public String toString() { return "VALUE_OID"; }
-        
-    };
-    
-    public static RootOid value() {
-        return VALUE_OID;
-    }
-    
-    // --
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
new file mode 100644
index 0000000..09df592
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
@@ -0,0 +1,109 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.adapter.oid;
+
+import java.io.IOException;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.commons.encoding.DataOutputExtended;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.schema.common.v1.OidDto;
+
+final class Oid_Value implements RootOid {
+    
+    private final static long serialVersionUID = 1L;
+    
+    static final Oid_Value INSTANCE = new Oid_Value();
+
+    @Override
+    public String enString() {
+        return null;
+    }
+
+    @Override
+    public String enStringNoVersion() {
+        return null;
+    }
+
+    @Override
+    public Version getVersion() {
+        return null;
+    }
+
+    @Override
+    public void setVersion(Version version) {
+    }
+
+    @Override
+    public boolean isValue() { 
+        return true; 
+    }
+    
+    @Override
+    public boolean isTransient() {
+        return false;
+    }
+
+    @Override
+    public boolean isViewModel() {
+        return false;
+    }
+
+    @Override
+    public boolean isPersistent() {
+        return false;
+    }
+
+    @Override
+    public void encode(DataOutputExtended outputStream) throws IOException {
+    }
+
+    @Override
+    public ObjectSpecId getObjectSpecId() {
+        return null;
+    }
+
+    @Override
+    public String getIdentifier() {
+        return null;
+    }
+    
+    @Override
+    public String toString() {
+        return "VALUE_OID";
+    }
+    
+    @Override
+    public int hashCode() {
+        return 0;
+    }
+
+    @Override
+    public Bookmark asBookmark() {
+        return null;
+    }
+
+    @Override
+    public OidDto asOidDto() {
+        return null;
+    }
+
+}
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 c071022..76e2f91 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
@@ -19,176 +19,28 @@
 
 package org.apache.isis.core.metamodel.adapter.oid;
 
-import static org.apache.isis.commons.internal.base._With.requires;
-
-import java.io.IOException;
 import java.io.Serializable;
-import java.util.Objects;
 
-import org.apache.isis.core.commons.encoding.DataInputExtended;
-import org.apache.isis.core.commons.encoding.DataOutputExtended;
-import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.commons.url.UrlDecoderUtil;
 
 /**
  * Used as the {@link Oid} for collections.
  */
-public final class ParentedOid implements Serializable, Oid {
-
-    private static final long serialVersionUID = 1L;
+public interface ParentedOid extends Serializable, Oid {
 
-    private final String name;
-    private final int hashCode;
+    RootOid getParentOid();
 
-    private final RootOid parentRootOid;
+    String getName();
 
-    // package private to support testing
-    static ParentedOid ofName(RootOid parentRootOid, String name) {
-        return new ParentedOid(parentRootOid, name);
-    }
+    // -- DECODE FROM STRING
     
-    private ParentedOid(RootOid parentRootOid, String name) {
-        requires(parentRootOid, "parentRootOid");
-        this.parentRootOid = parentRootOid;
-        this.name = name;
-        this.hashCode = calculateHash();
-    }
-
-    public RootOid getParentOid() {
-        return parentRootOid;
-    }
-
-    @Override
-    public Version getVersion() {
-        return parentRootOid.getVersion();
-    }
-
-    @Override
-    public void setVersion(Version version) {
-        parentRootOid.setVersion(version);
-    }
-
-    @Override
-    public boolean isTransient() {
-        return getParentOid().isTransient();
-    }
-
-    @Override
-    public boolean isViewModel() {
-        return getParentOid().isViewModel();
-    }
-
-    @Override
-    public boolean isPersistent() {
-        return getParentOid().isPersistent();
+    public static ParentedOid deStringEncoded(final String urlEncodedOidStr) {
+        final String oidStr = UrlDecoderUtil.urlDecode(urlEncodedOidStr);
+        return deString(oidStr);
     }
-
-
-    // /////////////////////////////////////////////////////////
-    // enstring
-    // /////////////////////////////////////////////////////////
-
-    public static ParentedOid deString(String oidStr) {
-        return Oid.unmarshaller().unmarshal(oidStr, ParentedOid.class);
-    }
-
-
-    @Override
-    public String enString() {
-        return Oid.marshaller().marshal(this);
-    }
-
-    @Override
-    public String enStringNoVersion() {
-        return Oid.marshaller().marshalNoVersion(this);
-    }
-
-
-    // /////////////////////////////////////////////////////////
-    // encodeable
-    // /////////////////////////////////////////////////////////
-
-
-    public ParentedOid(DataInputExtended inputStream) throws IOException {
-        this(ParentedOid.deString(inputStream.readUTF()));
-    }
-
-    private ParentedOid(ParentedOid oid) throws IOException {
-        this.parentRootOid = oid.getParentOid();
-        this.name = oid.name;
-        this.hashCode = calculateHash();
-    }
-
-
-    @Override
-    public void encode(DataOutputExtended outputStream) throws IOException {
-        outputStream.writeUTF(enString());
-    }
-
-    // /////////////////////////////////////////////////////////
-    // Properties
-    // /////////////////////////////////////////////////////////
-
-    public String getName() {
-        return name;
-    }
-
-
-    // /////////////////////////////////////////////////////////
-    // toString
-    // /////////////////////////////////////////////////////////
-
-    @Override
-    public String toString() {
-        return enString();
-    }
-
-
-
-    // /////////////////////////////////////////////////////////
-    // Value semantics
-    // /////////////////////////////////////////////////////////
-
-    @Override
-    public boolean equals(final Object other) {
-        if (other == this) {
-            return true;
-        }
-        if (other == null) {
-            return false;
-        }
-        if (getClass() != other.getClass()) {
-            return false;
-        }
-        return equals((ParentedOid) other);
-    }
-
-    public boolean equals(final ParentedOid other) {
-        return Objects.equals(other.getParentOid(), getParentOid()) && Objects.equals(other.name, name);
-    }
-
-
-    @Override
-    public int hashCode() {
-        return hashCode;
-    }
-
-    private int calculateHash() {
-        return Objects.hash(getParentOid(), name);
-    }
-
-
-    // /////////////////////////////////////////////////////////
-    // asPersistent
-    // /////////////////////////////////////////////////////////
-
-    /**
-     * When the RootOid is persisted, all its &quot;children&quot;
-     * need updating similarly.
-     */
-    public ParentedOid asPersistent(RootOid newParentRootOid) {
-        return new ParentedOid(newParentRootOid, name);
+    
+    public static ParentedOid deString(String enString) {
+        return Oid.unmarshaller().unmarshal(enString, ParentedOid.class);
     }
 
-
-
 }
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 67e9280..4c483cb 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
@@ -19,83 +19,25 @@
 
 package org.apache.isis.core.metamodel.adapter.oid;
 
-import static org.apache.isis.commons.internal.base._With.requires;
-
-import java.io.IOException;
 import java.io.Serializable;
-import java.util.Objects;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.commons.encoding.DataInputExtended;
-import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.url.UrlDecoderUtil;
-import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.schema.common.v1.BookmarkObjectState;
 import org.apache.isis.schema.common.v1.OidDto;
 
-public class RootOid implements Oid, Serializable {
-
-    // -- fields
-    private final static long serialVersionUID = 1L;
+public interface RootOid extends Oid, Serializable {
 
-    private final ObjectSpecId objectSpecId;
-    private final String identifier;
-    private final State state;
-    private final int hashCode;
+    ObjectSpecId getObjectSpecId();
 
-    // not part of equality check
-    private Version version;
+    String getIdentifier();
 
+    Bookmark asBookmark();
 
-    public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state) {
-        return of(objectSpecId, identifier, state, Version.empty());
-    }
+    OidDto asOidDto();
     
-    public static RootOid of(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
-        return new RootOid(objectSpecId, identifier, state, version);
-    }
+    // -- DECODE FROM STRING
     
-    private RootOid(final ObjectSpecId objectSpecId, final String identifier, final State state, final Version version) {
-
-        requires(objectSpecId, "objectSpecId");
-        requires(identifier, "identifier");
-        requires(state, "state");
-
-        // too slow...
-        // Ensure.ensureThatArg(identifier, is(not(IsisMatchers.contains("#"))), "identifier '" + identifier + "' contains a '#' symbol");
-        // Ensure.ensureThatArg(identifier, is(not(IsisMatchers.contains("@"))), "identifier '" + identifier + "' contains an '@' symbol");
-
-        this.objectSpecId = objectSpecId;
-        this.identifier = identifier;
-        this.state = state;
-        this.version = version;
-        this.hashCode = calculateHash();
-    }
-
-    // -- Encodeable
-    public RootOid(final DataInputExtended input) throws IOException {
-        final String oidStr = input.readUTF();
-        final RootOid oid = Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
-        this.objectSpecId = oid.objectSpecId;
-        this.identifier = oid.identifier;
-        this.state = oid.state;
-        
-        requires(objectSpecId, "objectSpecId");
-        requires(identifier, "identifier");
-        requires(state, "state");
-        
-        this.version = oid.version;
-        this.hashCode = calculateHash();
-    }
-
-    @Override
-    public void encode(final DataOutputExtended output) throws IOException {
-        output.writeUTF(enString());
-    }
-
-    // -- deString'able, enString
     public static RootOid deStringEncoded(final String urlEncodedOidStr) {
         final String oidStr = UrlDecoderUtil.urlDecode(urlEncodedOidStr);
         return deString(oidStr);
@@ -105,141 +47,4 @@ public class RootOid implements Oid, Serializable {
         return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
     }
 
-    @Override
-    public String enString() {
-        return Oid.marshaller().marshal(this);
-    }
-
-    @Override
-    public String enStringNoVersion() {
-        return Oid.marshaller().marshalNoVersion(this);
-    }
-
-
-    // -- Properties
-    public ObjectSpecId getObjectSpecId() {
-        return objectSpecId;
-    }
-
-    public String getIdentifier() {
-        return identifier;
-    }
-
-    @Override
-    public boolean isTransient() {
-        return state.isTransient();
-    }
-
-    @Override
-    public boolean isViewModel() {
-        return state.isViewModel();
-    }
-
-    @Override
-    public boolean isPersistent() {
-        return state.isPersistent();
-    }
-
-    // -- Version
-
-    @Override
-    public Version getVersion() {
-        return version;
-    }
-
-    @Override
-    public void setVersion(final Version version) {
-        this.version = version;
-    }
-
-
-    // -- asBookmark, asOidDto
-    public Bookmark asBookmark() {
-        final String objectType = state.asBookmarkObjectState().getCode() + getObjectSpecId().asString();
-        final String identifier = getIdentifier();
-        return new Bookmark(objectType, identifier);
-    }
-
-    public OidDto asOidDto() {
-
-        final OidDto oidDto = new OidDto();
-
-        oidDto.setType(getObjectSpecId().asString());
-        oidDto.setId(getIdentifier());
-
-        final Bookmark.ObjectState objectState = state.asBookmarkObjectState();
-        final BookmarkObjectState bookmarkState = objectState.toBookmarkState();
-        // persistent is assumed if not specified...
-        oidDto.setObjectState(
-                bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
-
-        return oidDto;
-    }
-
-
-
-    // -- equals, hashCode
-
-    private int calculateHash() {
-        return Objects.hash(objectSpecId, identifier, state);
-    }
-
-    @Override
-    public boolean equals(final Object other) {
-        if (other == null) {
-            return false;
-        }
-        if (other == this) {
-            return true;
-        }
-        if (getClass() != other.getClass()) {
-            return false;
-        }
-        return equals((RootOid) other);
-    }
-
-    public boolean equals(final RootOid other) {
-        return Objects.equals(objectSpecId, other.getObjectSpecId()) && 
-                Objects.equals(identifier, other.getIdentifier()) && 
-                Objects.equals(state, other.state);
-    }
-
-    @Override
-    public int hashCode() {
-        return hashCode;
-    }
-
-
-
-    // -- toString
-    @Override
-    public String toString() {
-        return enString();
-    }
-
-    // -- ROOT-ID SUPPORT FOR VALUE
-    
-    private RootOid() { identifier=null; objectSpecId=null; state=null; hashCode=0;};
-    
-    private static final RootOid VALUE_OID = new RootOid() {
-        private static final long serialVersionUID = 2L;
-        @Override public boolean isValue() { return true; }
-//        @Override public boolean isTransient() { return false; }
-//        @Override public boolean isPersistent() { return false; }
-//        @Override public boolean isViewModel() { return false; }
-        
-        @Override public boolean isTransient() { throw _Exceptions.unexpectedCodeReach(); }
-        @Override public boolean isPersistent() { throw _Exceptions.unexpectedCodeReach(); }
-        @Override public boolean isViewModel() { throw _Exceptions.unexpectedCodeReach(); }
-        @Override public String toString() { return "VALUE_OID"; }
-        
-    };
-    
-    public static RootOid value() {
-        return VALUE_OID;
-    }
-    
-    // --
-
-
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
index b0fa18e..6baa11a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
@@ -21,28 +21,27 @@ package org.apache.isis.core.metamodel.adapter.oid;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
 
 public class CollectionOidTest_valueSemantics extends ValueTypeContractTestAbstract<ParentedOid> {
 
-    private final RootOid parent = RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT);
-    private final RootOid otherParent = RootOid.of(ObjectSpecId.of("CUS"), "124", State.PERSISTENT);
+    private final RootOid parent = Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
+    private final RootOid otherParent = Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "124");
 
     @Override
     protected List<ParentedOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                ParentedOid.ofName(parent, "456"),
-                ParentedOid.ofName(parent, "456"),
-                ParentedOid.ofName(parent, "456"));
+                Oid.Factory.parentedOfName(parent, "456"),
+                Oid.Factory.parentedOfName(parent, "456"),
+                Oid.Factory.parentedOfName(parent, "456"));
     }
 
     @Override
     protected List<ParentedOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                ParentedOid.ofName(otherParent, "456"),
-                ParentedOid.ofName(parent, "457"));
+                Oid.Factory.parentedOfName(otherParent, "456"),
+                Oid.Factory.parentedOfName(parent, "457"));
     }
 
 }
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 0aef2d8..1ce00c0 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
@@ -53,7 +53,7 @@ public class OidMarshallerTest_roundtripping {
     @Test
     public void collectionOid_withNoVersion() {
         RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
-        ParentedOid oid = ParentedOid.ofName(parentOid, "items");
+        ParentedOid oid = Factory.parentedOfName(parentOid, "items");
         
         final String enString = oid.enString();
         final ParentedOid deString = ParentedOid.deString(enString);
@@ -63,10 +63,10 @@ public class OidMarshallerTest_roundtripping {
     @Test
     public void collectionOid_withVersion() {
         RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123", 90807L);
-        ParentedOid oid = ParentedOid.ofName(parentOid, "items");
+        ParentedOid oid = Factory.parentedOfName(parentOid, "items");
         
         final String enString = oid.enString();
-        final ParentedOid deString = ParentedOid.deString(enString);
+        final ParentedOid deString = Oid.unmarshaller().unmarshal(enString, ParentedOid.class);
         assertThat(deString, is(oid));
         assertThat(deString.getParentOid().getVersion(), is(parentOid.getVersion())); // assert separately because not part of equality check
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
index d39b1be..7fd4921 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.adapter.oid;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
 
@@ -30,17 +29,17 @@ public class RootOidDefaultTest_valueSemantics_whenPersistent extends ValueTypeC
     @Override
     protected List<RootOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT));
+                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"));
     }
 
     @Override
     protected List<RootOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
-                RootOid.of(ObjectSpecId.of("CUS"), "124", State.PERSISTENT),
-                RootOid.of(ObjectSpecId.of("CUX"), "123", State.PERSISTENT));
+                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "124"),
+                Oid.Factory.persistentOf(ObjectSpecId.of("CUX"), "123"));
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
index d7fffdf..9c84324 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.adapter.oid;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
 
@@ -30,18 +29,18 @@ public class RootOidDefaultTest_valueSemantics_whenTransient extends ValueTypeCo
     @Override
     protected List<RootOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT),
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.TRANSIENT)
+                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123")
             );
     }
 
     @Override
     protected List<RootOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT),
-                RootOid.of(ObjectSpecId.of("CUS"), "124", State.TRANSIENT),
-                RootOid.of(ObjectSpecId.of("CUX"), "123", State.TRANSIENT));
+                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "124"),
+                Oid.Factory.transientOf(ObjectSpecId.of("CUX"), "123"));
     }
 
 }
diff --git a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index f627329..2974c01 100644
--- a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -94,7 +94,7 @@ public class PojoAdapterBuilder {
         }, COLLECTION {
             @Override
             Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                return Oid.Factory.collectionOfName(rootOid, collectionId);
+                return Oid.Factory.parentedOfName(rootOid, collectionId);
             }
         }, VALUE {
             @Override
diff --git a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index abdd3da..e5f3681 100644
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -94,7 +94,7 @@ public class PojoAdapterBuilder {
         }, COLLECTION {
             @Override
             Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                return Oid.Factory.collectionOfName(rootOid, collectionId);
+                return Oid.Factory.parentedOfName(rootOid, collectionId);
             }
         }, VALUE {
             @Override
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
index da71211..ef0038e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
@@ -73,7 +73,7 @@ class ObjectAdapterContext_NewIdentifier {
         final String identifier = persistenceSession.identifierFor(pojo);
         
         final ObjectSpecId objectSpecId = spec.getSpecId();
-        return RootOid.of(objectSpecId, identifier, Oid.State.PERSISTENT);
+        return Oid.Factory.persistentOf(objectSpecId, identifier);
     }
     
 }
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
index 8a77f0f..1af8f5b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
@@ -60,7 +60,7 @@ public class OidProviders {
         @Override
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
             final String identifier = PersistenceSession.SERVICE_IDENTIFIER;
-            return RootOid.of(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
+            return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
         }
 
     }
@@ -82,10 +82,10 @@ public class OidProviders {
             final boolean isRecognized = persistenceSession.isRecognized(pojo);
             if(isRecognized) {
                 final String identifier = persistenceSession.identifierFor(pojo);
-                return RootOid.of(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
+                return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
             } else {
                 final String identifier = UUID.randomUUID().toString();
-                return RootOid.of(spec.getSpecId(), identifier, Oid.State.TRANSIENT);    
+                return Oid.Factory.transientOf(spec.getSpecId(), identifier);    
             }
         }
         
@@ -100,7 +100,7 @@ public class OidProviders {
 
         @Override
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
-            return RootOid.value();
+            return Oid.Factory.value();
         }
 
     }
@@ -116,7 +116,7 @@ public class OidProviders {
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
             final ViewModelFacet recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
             final String identifier = recreatableObjectFacet.memento(pojo);
-            return RootOid.of(spec.getSpecId(), identifier, Oid.State.VIEWMODEL);
+            return Oid.Factory.viewmodelOf(spec.getSpecId(), identifier);
         }
 
     }
@@ -131,7 +131,7 @@ public class OidProviders {
         @Override
         public RootOid oidFor(Object pojo, ObjectSpecification spec) {
             final String identifier = UUID.randomUUID().toString();
-            return RootOid.of(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
+            return Oid.Factory.transientOf(spec.getSpecId(), identifier);
         }
 
     }
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 6793401..4a8ae7a 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
@@ -110,7 +110,7 @@ public final class OidUtils {
         // ("*") from the specId, meaning that the marshalling logic above in RootOidDefault.deString() creates an
         // oid in the wrong state.  The code below checks for this and recreates the oid with the current state of 'view model'
         if(!rootOid.isViewModel()) {
-            return RootOid.of(rootOid.getObjectSpecId(), rootOid.getIdentifier(), Oid.State.VIEWMODEL);
+            return Oid.Factory.viewmodelOf(rootOid.getObjectSpecId(), rootOid.getIdentifier());
         }
         return rootOid;
     }


[isis] 03/06: ISIS-1976: refactors ParentedCollectionOid constructors into factory class

Posted by ah...@apache.org.
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 2b8a81caae43152fbb71ea0eb9ec66734479207d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 10:26:03 2018 +0200

    ISIS-1976: refactors ParentedCollectionOid constructors into factory
    class
    
    also renames ParentedCollectionOid -> ParentedOid
    (since there is nothing collection specific with this oid)
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java |  8 +--
 .../isis/core/metamodel/adapter/oid/Oid.java       | 16 +++++-
 .../core/metamodel/adapter/oid/OidMarshaller.java  | 10 ++--
 ...ParentedCollectionOid.java => ParentedOid.java} | 64 ++++++++++------------
 .../oid/CollectionOidTest_valueSemantics.java      | 16 +++---
 .../oid/OidMarshallerTest_roundtripping.java       | 10 ++--
 .../adapter/oid/OidMarshallerTest_unmarshal.java   | 10 ++--
 .../transaction/PojoAdapterBuilder.java            |  7 +--
 .../transaction/PojoAdapterBuilder.java            |  7 +--
 .../runtime/persistence/adapter/PojoAdapter.java   |  6 +-
 .../adaptermanager/ObjectAdapterContext.java       | 10 ++--
 .../ObjectAdapterContext_Factories.java            |  6 +-
 12 files changed, 87 insertions(+), 83 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 806ca13..20feb29 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -33,7 +33,7 @@ import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.commons.lang.MethodExtensions;
 import org.apache.isis.core.commons.lang.MethodUtil;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
@@ -167,7 +167,7 @@ public interface ObjectAdapter extends Instance {
 
     /**
      * Returns either itself (if this is a root) or the parented collections, the
-     * adapter corresponding to their {@link ParentedCollectionOid#getRootOid() root oid}.
+     * adapter corresponding to their {@link ParentedOid#getParentOid() root oid}.
      */
     ObjectAdapter getAggregateRoot();
 
@@ -177,10 +177,10 @@ public interface ObjectAdapter extends Instance {
 
     /**
      * Whether this instance belongs to another object (meaning its
-     * {@link #getOid()} will be a {@link ParentedCollectionOid}).
+     * {@link #getOid()} will be a {@link ParentedOid}).
      */
     default boolean isParentedCollection() {
-        return getOid() instanceof ParentedCollectionOid;
+        return getOid() instanceof ParentedOid;
     }
 
     /**
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 634cbbd..b543c74 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
@@ -25,11 +25,12 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 
 /**
  * An immutable identifier for either a root object (subtype {@link RootOid}) or
- * a parented collection (subtype {@link ParentedCollectionOid}).
+ * a parented collection (subtype {@link ParentedOid}).
  *
  * <p>
  * Note that value objects (strings, ints, {@link Value}s etc) do not have an {@link Oid}.
@@ -52,8 +53,8 @@ public interface Oid extends Encodable {
      * or a view model object, or for a persistent object.
      *
      * <p>
-     * In the case of an {@link ParentedCollectionOid}, is determined by the state
-     * of its {@link ParentedCollectionOid#getRootOid() root}'s {@link RootOid#isTransient() state}.
+     * In the case of an {@link ParentedOid}, is determined by the state
+     * of its {@link ParentedOid#getParentOid() root}'s {@link RootOid#isTransient() state}.
      */
     boolean isTransient();
 
@@ -150,6 +151,15 @@ public interface Oid extends Encodable {
                     Version.Factory.ifPresent(versionSequence, versionUser, versionUtcTimestamp));
         }
 
+        // -- PARENTED COLLECTIONS
+        
+        public static ParentedOid collectionOfOneToMany(RootOid parentRootOid, OneToManyAssociation otma) {
+            return ParentedOid.ofName(parentRootOid, otma.getId());
+        }
+
+        public static ParentedOid collectionOfName(RootOid parentRootOid, String name) {
+            return ParentedOid.ofName(parentRootOid, name);
+        }
 
         
     }
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/OidMarshaller.java
index e2c710e..c5d1630 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/OidMarshaller.java
@@ -204,8 +204,8 @@ public final class OidMarshaller {
             final String parentOidStr = oidStrWithoutCollectionName + marshal(version);
 
             RootOid parentOid = this.unmarshal(parentOidStr, RootOid.class);
-            ensureCorrectType(oidStr, requestedType, ParentedCollectionOid.class);
-            return (T)new ParentedCollectionOid(parentOid, collectionName);
+            ensureCorrectType(oidStr, requestedType, ParentedOid.class);
+            return (T) ParentedOid.ofName(parentOid, collectionName);
         }
     }
 
@@ -260,13 +260,13 @@ public final class OidMarshaller {
     }
 
     @Programmatic
-    public final String marshal(ParentedCollectionOid collectionOid) {
+    public final String marshal(ParentedOid collectionOid) {
         return marshalNoVersion(collectionOid) + marshal(collectionOid.getVersion());
     }
 
     @Programmatic
-    public String marshalNoVersion(ParentedCollectionOid collectionOid) {
-        return collectionOid.getRootOid().enStringNoVersion() + SEPARATOR_COLLECTION + collectionOid.getName();
+    public String marshalNoVersion(ParentedOid collectionOid) {
+        return collectionOid.getParentOid().enStringNoVersion() + SEPARATOR_COLLECTION + collectionOid.getName();
     }
 
     @Programmatic
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
similarity index 68%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
index 9f463f6..bf33c97 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
@@ -19,20 +19,20 @@
 
 package org.apache.isis.core.metamodel.adapter.oid;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
-import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 /**
  * Used as the {@link Oid} for collections.
  */
-public final class ParentedCollectionOid implements Serializable, Oid {
+public final class ParentedOid implements Serializable, Oid {
 
     private static final long serialVersionUID = 1L;
 
@@ -41,51 +41,47 @@ public final class ParentedCollectionOid implements Serializable, Oid {
     private final String name;
     private final int hashCode;
 
-    private final RootOid parentOid;
-
-    // /////////////////////////////////////////////////////////
-    // Constructor
-    // /////////////////////////////////////////////////////////
+    private final RootOid parentRootOid;
 
-    public ParentedCollectionOid(RootOid rootOid, OneToManyAssociation otma) {
-        this(rootOid, otma.getId());
+    // package private to support testing
+    static ParentedOid ofName(RootOid parentRootOid, String name) {
+        return new ParentedOid(parentRootOid, name);
     }
-
-    public ParentedCollectionOid(RootOid rootOid, String name) {
-        Assert.assertNotNull("rootOid required", rootOid);
-        this.parentOid = rootOid;
+    
+    private ParentedOid(RootOid parentRootOid, String name) {
+        requires(parentRootOid, "parentRootOid");
+        this.parentRootOid = parentRootOid;
         this.name = name;
         this.hashCode = calculateHash();
     }
 
-
-    public RootOid getRootOid() {
-        return parentOid;
+    public RootOid getParentOid() {
+        return parentRootOid;
     }
 
     @Override
     public Version getVersion() {
-        return parentOid.getVersion();
+        return parentRootOid.getVersion();
     }
 
     @Override
     public void setVersion(Version version) {
-        parentOid.setVersion(version);
+        parentRootOid.setVersion(version);
     }
 
     @Override
     public boolean isTransient() {
-        return getRootOid().isTransient();
+        return getParentOid().isTransient();
     }
 
     @Override
     public boolean isViewModel() {
-        return getRootOid().isViewModel();
+        return getParentOid().isViewModel();
     }
 
     @Override
     public boolean isPersistent() {
-        return getRootOid().isPersistent();
+        return getParentOid().isPersistent();
     }
 
 
@@ -93,8 +89,8 @@ public final class ParentedCollectionOid implements Serializable, Oid {
     // enstring
     // /////////////////////////////////////////////////////////
 
-    public static ParentedCollectionOid deString(String oidStr) {
-        return OID_MARSHALLER.unmarshal(oidStr, ParentedCollectionOid.class);
+    public static ParentedOid deString(String oidStr) {
+        return OID_MARSHALLER.unmarshal(oidStr, ParentedOid.class);
     }
 
 
@@ -114,12 +110,12 @@ public final class ParentedCollectionOid implements Serializable, Oid {
     // /////////////////////////////////////////////////////////
 
 
-    public ParentedCollectionOid(DataInputExtended inputStream) throws IOException {
-        this(ParentedCollectionOid.deString(inputStream.readUTF()));
+    public ParentedOid(DataInputExtended inputStream) throws IOException {
+        this(ParentedOid.deString(inputStream.readUTF()));
     }
 
-    private ParentedCollectionOid(ParentedCollectionOid oid) throws IOException {
-        this.parentOid = oid.getRootOid();
+    private ParentedOid(ParentedOid oid) throws IOException {
+        this.parentRootOid = oid.getParentOid();
         this.name = oid.name;
         this.hashCode = calculateHash();
     }
@@ -165,11 +161,11 @@ public final class ParentedCollectionOid implements Serializable, Oid {
         if (getClass() != other.getClass()) {
             return false;
         }
-        return equals((ParentedCollectionOid) other);
+        return equals((ParentedOid) other);
     }
 
-    public boolean equals(final ParentedCollectionOid other) {
-        return Objects.equals(other.getRootOid(), getRootOid()) && Objects.equals(other.name, name);
+    public boolean equals(final ParentedOid other) {
+        return Objects.equals(other.getParentOid(), getParentOid()) && Objects.equals(other.name, name);
     }
 
 
@@ -179,7 +175,7 @@ public final class ParentedCollectionOid implements Serializable, Oid {
     }
 
     private int calculateHash() {
-        return Objects.hash(getRootOid(), name);
+        return Objects.hash(getParentOid(), name);
     }
 
 
@@ -191,8 +187,8 @@ public final class ParentedCollectionOid implements Serializable, Oid {
      * When the RootOid is persisted, all its &quot;children&quot;
      * need updating similarly.
      */
-    public ParentedCollectionOid asPersistent(RootOid newParentRootOid) {
-        return new ParentedCollectionOid(newParentRootOid, name);
+    public ParentedOid asPersistent(RootOid newParentRootOid) {
+        return new ParentedOid(newParentRootOid, name);
     }
 
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
index a2d2c1f..b0fa18e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
@@ -25,24 +25,24 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
 
-public class CollectionOidTest_valueSemantics extends ValueTypeContractTestAbstract<ParentedCollectionOid> {
+public class CollectionOidTest_valueSemantics extends ValueTypeContractTestAbstract<ParentedOid> {
 
     private final RootOid parent = RootOid.of(ObjectSpecId.of("CUS"), "123", State.PERSISTENT);
     private final RootOid otherParent = RootOid.of(ObjectSpecId.of("CUS"), "124", State.PERSISTENT);
 
     @Override
-    protected List<ParentedCollectionOid> getObjectsWithSameValue() {
+    protected List<ParentedOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                new ParentedCollectionOid(parent, "456"),
-                new ParentedCollectionOid(parent, "456"),
-                new ParentedCollectionOid(parent, "456"));
+                ParentedOid.ofName(parent, "456"),
+                ParentedOid.ofName(parent, "456"),
+                ParentedOid.ofName(parent, "456"));
     }
 
     @Override
-    protected List<ParentedCollectionOid> getObjectsWithDifferentValue() {
+    protected List<ParentedOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                new ParentedCollectionOid(otherParent, "456"),
-                new ParentedCollectionOid(parent, "457"));
+                ParentedOid.ofName(otherParent, "456"),
+                ParentedOid.ofName(parent, "457"));
     }
 
 }
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 7724a68..d526fa6 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
@@ -56,22 +56,22 @@ public class OidMarshallerTest_roundtripping {
     @Test
     public void collectionOid_withNoVersion() {
         RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
-        ParentedCollectionOid oid = new ParentedCollectionOid(parentOid, "items");
+        ParentedOid oid = ParentedOid.ofName(parentOid, "items");
         
         final String enString = oid.enString();
-        final ParentedCollectionOid deString = ParentedCollectionOid.deString(enString);
+        final ParentedOid deString = ParentedOid.deString(enString);
         assertThat(deString, is(oid));
     }
 
     @Test
     public void collectionOid_withVersion() {
         RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123", 90807L);
-        ParentedCollectionOid oid = new ParentedCollectionOid(parentOid, "items");
+        ParentedOid oid = ParentedOid.ofName(parentOid, "items");
         
         final String enString = oid.enString();
-        final ParentedCollectionOid deString = ParentedCollectionOid.deString(enString);
+        final ParentedOid deString = ParentedOid.deString(enString);
         assertThat(deString, is(oid));
-        assertThat(deString.getRootOid().getVersion(), is(parentOid.getVersion())); // assert separately because not part of equality check
+        assertThat(deString.getParentOid().getVersion(), is(parentOid.getVersion())); // assert separately because not part of equality check
     }
 
 }
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 0e7902d..701b27a 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
@@ -157,9 +157,9 @@ public class OidMarshallerTest_unmarshal {
     public void collectionOfPersistentRoot() {
         final String oidStr = "CUS:123$items";
         
-        final ParentedCollectionOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedCollectionOid.class);
+        final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
         assertThat(collectionOid.isTransient(), is(false));
-        assertThat(collectionOid.getRootOid(), is(oidMarshaller.unmarshal("CUS:123", RootOid.class)));
+        assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("CUS:123", RootOid.class)));
         assertThat(collectionOid.getName(), is("items"));
         
         final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
@@ -170,9 +170,9 @@ public class OidMarshallerTest_unmarshal {
     public void collectionOfTransientRoot() {
         final String oidStr = "!CUS:123$items";
         
-        final ParentedCollectionOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedCollectionOid.class);
+        final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
         assertThat(collectionOid.isTransient(), is(true));
-        assertThat(collectionOid.getRootOid(), is(oidMarshaller.unmarshal("!CUS:123", RootOid.class)));
+        assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("!CUS:123", RootOid.class)));
         assertThat(collectionOid.getName(), is("items"));
         
         final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
@@ -183,7 +183,7 @@ public class OidMarshallerTest_unmarshal {
 
     @Test(expected=IllegalArgumentException.class)
     public void collection_forRoot_oidStr() {
-        oidMarshaller.unmarshal("CUS:123", ParentedCollectionOid.class);
+        oidMarshaller.unmarshal("CUS:123", ParentedOid.class);
     }
 
     @Test(expected=IllegalArgumentException.class)
diff --git a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 463a886..f627329 100644
--- a/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -21,10 +21,11 @@ package org.apache.isis.core.runtime.persistence.objectstore.transaction;
 
 import java.util.Iterator;
 
+import com.google.common.base.Splitter;
+
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 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.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -33,8 +34,6 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession4;
 
-import com.google.common.base.Splitter;
-
 public class PojoAdapterBuilder {
 
     private PersistenceSession4 persistenceSession;
@@ -95,7 +94,7 @@ public class PojoAdapterBuilder {
         }, COLLECTION {
             @Override
             Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                return new ParentedCollectionOid(rootOid, collectionId);
+                return Oid.Factory.collectionOfName(rootOid, collectionId);
             }
         }, VALUE {
             @Override
diff --git a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index cda1a8f..abdd3da 100644
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -21,10 +21,11 @@ package org.apache.isis.core.runtime.persistence.objectstore.transaction;
 
 import java.util.Iterator;
 
+import com.google.common.base.Splitter;
+
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 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.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -33,8 +34,6 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession5;
 
-import com.google.common.base.Splitter;
-
 public class PojoAdapterBuilder {
 
     private PersistenceSession5 persistenceSession;
@@ -95,7 +94,7 @@ public class PojoAdapterBuilder {
         }, COLLECTION {
             @Override
             Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                return new ParentedCollectionOid(rootOid, collectionId);
+                return Oid.Factory.collectionOfName(rootOid, collectionId);
             }
         }, VALUE {
             @Override
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 6aec3cb..3c3cf9c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -30,7 +30,7 @@ import org.apache.isis.core.commons.util.ToString;
 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.ParentedCollectionOid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
@@ -150,8 +150,8 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         if(!isParentedCollection()) {
             return this;
         }
-        ParentedCollectionOid collectionOid = (ParentedCollectionOid) oid;
-        final Oid rootOid = collectionOid.getRootOid();
+        ParentedOid collectionOid = (ParentedOid) oid;
+        final Oid rootOid = collectionOid.getParentOid();
         ObjectAdapter rootadapter = persistenceSession.adapterFor(rootOid);
         return rootadapter;
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index d493d29..c331a96 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
 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.ParentedCollectionOid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 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.callbacks.LifecycleEventFacet;
@@ -157,18 +157,18 @@ final public class ObjectAdapterContext {
          * root {@link ObjectAdapter adapter} for the supplied domain object.
          *
          * @see #createStandaloneAdapter(Object)
-         * @see #createCollectionAdapter(Object, ParentedCollectionOid)
+         * @see #createCollectionAdapter(Object, ParentedOid)
          */
         ObjectAdapter createRootAdapter(Object pojo, RootOid rootOid);
 
-        ObjectAdapter createCollectionAdapter(Object pojo, ParentedCollectionOid collectionOid);
+        ObjectAdapter createCollectionAdapter(Object pojo, ParentedOid collectionOid);
 
         /**
          * Creates an {@link ObjectAdapter adapter} to represent a collection
          * of the parent.
          *
          * <p>
-         * The returned adapter will have a {@link ParentedCollectionOid}; its version
+         * The returned adapter will have a {@link ParentedOid}; its version
          * and its persistence are the same as its owning parent.
          *
          * <p>
@@ -222,7 +222,7 @@ final public class ObjectAdapterContext {
             final RootOid rootOid = (RootOid) oid;
             createdAdapter = getFactories().createRootAdapter(pojo, rootOid);
         } else /*if (oid instanceof CollectionOid)*/ {
-            final ParentedCollectionOid collectionOid = (ParentedCollectionOid) oid;
+            final ParentedOid collectionOid = (ParentedOid) oid;
             createdAdapter = getFactories().createCollectionAdapter(pojo, collectionOid);
         }
         return createdAdapter;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
index 9954598..b951e0c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
@@ -22,7 +22,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
 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.ParentedCollectionOid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.ElementSpecificationProviderFromTypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
@@ -61,7 +61,7 @@ class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
     @Override
     public ObjectAdapter createCollectionAdapter(
             final Object pojo,
-            ParentedCollectionOid collectionOid) {
+            ParentedOid collectionOid) {
         assert collectionOid != null;
         return createAdapter(pojo, collectionOid);
     }
@@ -75,7 +75,7 @@ class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
         Assert.assertNotNull(pojo);
 
         // persistence of collection follows the parent
-        final ParentedCollectionOid collectionOid = new ParentedCollectionOid(parentOid, otma);
+        final ParentedOid collectionOid = Oid.Factory.collectionOfOneToMany(parentOid, otma);
         final ObjectAdapter collectionAdapter = createCollectionAdapter(pojo, collectionOid);
 
         // we copy over the type onto the adapter itself


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

Posted by ah...@apache.org.
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;