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 2019/12/06 11:09:14 UTC

[isis] branch master updated: ISIS-2177: remove Oid.copy() (Oid is immutable)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 21f2c1d  ISIS-2177: remove Oid.copy() (Oid is immutable)
21f2c1d is described below

commit 21f2c1d534fe04f53d7c690931c643dca6e8f9cd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 6 12:09:04 2019 +0100

    ISIS-2177: remove Oid.copy() (Oid is immutable)
    
    also improving some method naming and java-doc
---
 .../org/apache/isis/metamodel/adapter/oid/Oid.java | 14 ++++-----
 .../isis/metamodel/adapter/oid/Oid_Marshaller.java |  6 ++--
 .../isis/metamodel/adapter/oid/Oid_Parented.java   | 34 ++++------------------
 .../isis/metamodel/adapter/oid/Oid_Root.java       |  6 ----
 .../isis/metamodel/adapter/oid/Oid_Value.java      |  5 ----
 .../isis/metamodel/adapter/oid/ParentedOid.java    | 12 +++++++-
 .../oid/CollectionOidTest_valueSemantics.java      | 10 +++----
 .../oid/OidMarshallerTest_roundtripping.java       |  2 +-
 .../transaction/PojoAdapterBuilder.java            |  2 +-
 .../java/org/apache/isis/runtime/memento/Data.java |  2 +-
 .../org/apache/isis/runtime/memento/Memento.java   |  4 +--
 .../isis/runtime/memento/StandaloneData.java       |  2 +-
 12 files changed, 36 insertions(+), 63 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid.java
index 539be4b..9dfd5ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid.java
@@ -121,18 +121,14 @@ public interface Oid extends Serializable {
 
         // -- PARENTED COLLECTIONS
 
-        public static ParentedOid parentedOfOneToMany(RootOid parentRootOid, OneToManyAssociation otma) {
-            return Oid_Parented.ofName(parentRootOid, otma.getId());
+        public static ParentedOid parentedOfOneToMany(RootOid parentRootOid, OneToManyAssociation oneToMany) {
+            return Oid_Parented.ofOneToManyId(parentRootOid, oneToMany.getId());
         }
 
-        public static ParentedOid parentedOfName(RootOid parentRootOid, String name) {
-            return Oid_Parented.ofName(parentRootOid, name);
+        public static ParentedOid parentedOfOneToManyId(RootOid parentRootOid, String oneToManyId) {
+            return Oid_Parented.ofOneToManyId(parentRootOid, oneToManyId);
         }
-
-
+        
     }
 
-    Oid copy();
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java
index f3d99c0..d8a935b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java
@@ -178,9 +178,9 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
 
         }
         final String collectionPart = getGroup(matcher, 8);
-        final String collectionName = collectionPart != null ? collectionPart.substring(1) : null;
+        final String oneToManyId = collectionPart != null ? collectionPart.substring(1) : null;
 
-        if(collectionName == null) {
+        if(oneToManyId == null) {
             if(aggregateOidParts.isEmpty()) {
                 ensureCorrectType(oidStr, requestedType, RootOid.class);
                 return _Casts.uncheckedCast(
@@ -195,7 +195,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( Oid_Parented.ofName(parentOid, collectionName) );
+            return _Casts.uncheckedCast( Oid_Parented.ofOneToManyId(parentOid, oneToManyId) );
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Parented.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Parented.java
index 64f6d85..46a8966 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Parented.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Parented.java
@@ -22,6 +22,8 @@ package org.apache.isis.metamodel.adapter.oid;
 import java.io.IOException;
 import java.util.Objects;
 
+import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
+
 import static org.apache.isis.commons.internal.base._With.requires;
 
 final class Oid_Parented implements ParentedOid {
@@ -33,15 +35,14 @@ final class Oid_Parented implements ParentedOid {
 
     private final RootOid parentRootOid;
 
-    // package private to support testing
-    static Oid_Parented ofName(RootOid parentRootOid, String name) {
-        return new Oid_Parented(parentRootOid, name);
+    static Oid_Parented ofOneToManyId(RootOid parentRootOid, String oneToManyId) {
+        return new Oid_Parented(parentRootOid, oneToManyId);
     }
 
-    private Oid_Parented(RootOid parentRootOid, String name) {
+    private Oid_Parented(RootOid parentRootOid, String oneToManyId) {
         requires(parentRootOid, "parentRootOid");
         this.parentRootOid = parentRootOid;
-        this.name = name;
+        this.name = oneToManyId;
         this.hashCode = calculateHash();
     }
 
@@ -65,16 +66,10 @@ final class Oid_Parented implements ParentedOid {
         return getParentOid().isPersistent();
     }
 
-
-    // /////////////////////////////////////////////////////////
-    // enstring
-    // /////////////////////////////////////////////////////////
-
     public static Oid_Parented deString(String oidStr) {
         return Oid.unmarshaller().unmarshal(oidStr, Oid_Parented.class);
     }
 
-
     @Override
     public String enString() {
         return Oid.marshaller().marshal(this);
@@ -86,10 +81,6 @@ final class Oid_Parented implements ParentedOid {
         this.hashCode = calculateHash();
     }
 
-    // /////////////////////////////////////////////////////////
-    // Properties
-    // /////////////////////////////////////////////////////////
-
     @Override
     public String getName() {
         return name;
@@ -105,8 +96,6 @@ final class Oid_Parented implements ParentedOid {
         return enString();
     }
 
-
-
     // /////////////////////////////////////////////////////////
     // Value semantics
     // /////////////////////////////////////////////////////////
@@ -139,11 +128,6 @@ final class Oid_Parented implements ParentedOid {
         return Objects.hash(getParentOid(), name);
     }
 
-
-    // /////////////////////////////////////////////////////////
-    // asPersistent
-    // /////////////////////////////////////////////////////////
-
     /**
      * When the RootOid is persisted, all its &quot;children&quot;
      * need updating similarly.
@@ -152,11 +136,5 @@ final class Oid_Parented implements ParentedOid {
         return new Oid_Parented(newParentRootOid, name);
     }
 
-    @Override
-    public Oid copy() {
-        return ofName((RootOid) parentRootOid.copy(), name);
-    }
-
-
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Root.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Root.java
index 1365091..d4794ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Root.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Root.java
@@ -157,12 +157,6 @@ final class Oid_Root implements RootOid {
         return enString();
     }
 
-    @Override
-    public Oid copy() {
-        // these are all immutable ... of(objectSpecId, identifier, state);
-        return this; 
-    }
-
     // -- HELPER
 
     private int calculateHash() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Value.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Value.java
index 53948fa..1d0821b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Value.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Value.java
@@ -84,9 +84,4 @@ final class Oid_Value implements RootOid {
         return null;
     }
 
-    @Override
-    public Oid copy() {
-        return this; // immutable singleton, just reuse
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/ParentedOid.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/ParentedOid.java
index 3ee771a..b84c7d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/ParentedOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/ParentedOid.java
@@ -19,15 +19,25 @@
 
 package org.apache.isis.metamodel.adapter.oid;
 
+import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.commons.internal.url.UrlDecoderUtil;
+import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 
 /**
- * Used as the {@link Oid} for collections.
+ * Used as the {@link Oid} for {@link OneToManyAssociation} (collections).
  */
 public interface ParentedOid extends Oid {
 
+    /**
+     * object identifier of the domain object that is holding the {@link OneToManyAssociation}
+     * this instance is representing
+     */
     RootOid getParentOid();
 
+    /**
+     * id of the {@link OneToManyAssociation} this instance is representing, that is 
+     * the member name, that is annotated with {@link Collection}
+     */
     String getName();
 
     // -- DECODE FROM STRING
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
index 1d29ff1..d573a05 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
@@ -32,16 +32,16 @@ public class CollectionOidTest_valueSemantics extends ValueTypeContractTestAbstr
     @Override
     protected List<ParentedOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                Oid.Factory.parentedOfName(parent, "456"),
-                Oid.Factory.parentedOfName(parent, "456"),
-                Oid.Factory.parentedOfName(parent, "456"));
+                Oid.Factory.parentedOfOneToManyId(parent, "456"),
+                Oid.Factory.parentedOfOneToManyId(parent, "456"),
+                Oid.Factory.parentedOfOneToManyId(parent, "456"));
     }
 
     @Override
     protected List<ParentedOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                Oid.Factory.parentedOfName(otherParent, "456"),
-                Oid.Factory.parentedOfName(parent, "457"));
+                Oid.Factory.parentedOfOneToManyId(otherParent, "456"),
+                Oid.Factory.parentedOfOneToManyId(parent, "457"));
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
index dd71b36..f216608 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
@@ -41,7 +41,7 @@ public class OidMarshallerTest_roundtripping {
     @Test
     public void collectionOid() {
         RootOid parentOid = Factory.persistentOf(ObjectSpecId.of("CUS"), "123");
-        ParentedOid oid = Factory.parentedOfName(parentOid, "items");
+        ParentedOid oid = Factory.parentedOfOneToManyId(parentOid, "items");
 
         final String enString = oid.enString();
         final ParentedOid deString = ParentedOid.deString(enString);
diff --git a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 1a627f9..428db3f 100644
--- a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -79,7 +79,7 @@ public class PojoAdapterBuilder {
         }, COLLECTION {
             @Override
             Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                return Oid.Factory.parentedOfName(rootOid, collectionId);
+                return Oid.Factory.parentedOfOneToManyId(rootOid, collectionId);
             }
         }, VALUE {
             @Override
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Data.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Data.java
index 2ded560..f039157 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Data.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Data.java
@@ -40,6 +40,6 @@ class Data implements Serializable {
      * @apiNote could be <tt>null</tt> if represents a value (standalone adapter).
      */
     @Getter @Nullable private final Oid oid;
-    @Getter private final String className;
+    @Getter private final String specId;
 
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
index c98862f..8f7fc53 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
@@ -71,14 +71,14 @@ class Memento implements Serializable {
         if (data == null) {
             return null;
         }
-        val spec = specLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(data.getClassName()));
+        val spec = specLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(data.getSpecId()));
         val oid = data.getOid();
         return mementoStore.adapterOfMemento(spec, oid, data);
     }
 
     @Override
     public String toString() {
-        return "[" + (data == null ? null : data.getClassName() + "/" + data.getOid() + data) + "]";
+        return "[" + (data == null ? null : data.getSpecId() + "/" + data.getOid() + data) + "]";
     }
     
     // -- HELPER
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/StandaloneData.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/StandaloneData.java
index c37bcf6..be39cd9 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/StandaloneData.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/StandaloneData.java
@@ -62,7 +62,7 @@ final class StandaloneData extends Data {
             return objectAdapterProvider.adapterFor(objectAsSerializable);
         } else {
             val spec = 
-                    specificationLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(getClassName()));
+                    specificationLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(getSpecId()));
             val encodeableFacet = spec.getFacet(EncodableFacet.class);
             return encodeableFacet.fromEncodedString(objectAsEncodedString);
         }