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 12:12:32 UTC
[isis] branch master updated: ISIS-2177: let have any Oid provide
the specId (not just RootOid)
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 148171d ISIS-2177: let have any Oid provide the specId (not just RootOid)
148171d is described below
commit 148171d8a7dd196a534d59c92c7e40ac143386c4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 6 13:12:19 2019 +0100
ISIS-2177: let have any Oid provide the specId (not just RootOid)
---
.../org/apache/isis/metamodel/adapter/oid/Oid.java | 6 ++++
.../isis/metamodel/adapter/oid/Oid_Parented.java | 22 +++++++++------
.../apache/isis/metamodel/adapter/oid/RootOid.java | 2 --
.../isis/runtime/memento/CollectionData.java | 4 +--
.../java/org/apache/isis/runtime/memento/Data.java | 6 +++-
.../org/apache/isis/runtime/memento/Memento.java | 32 +++++++++++-----------
.../apache/isis/runtime/memento/ObjectData.java | 8 +++---
.../isis/runtime/memento/StandaloneData.java | 9 +++---
8 files changed, 51 insertions(+), 38 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 9dfd5ee..bf51220 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
@@ -58,6 +58,12 @@ public interface Oid extends Serializable {
default boolean isValue() {
return false; // default, only overridden by Oid_Value
}
+
+ /**
+ * {@link ObjectSpecId} of the domain object this instance is representing, or when parented,
+ * the ObjectSpecId of the parent domain object. When representing a value returns {@code null}.
+ */
+ ObjectSpecId getObjectSpecId();
// -- MARSHALLING
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 46a8966..b4c3640 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,7 +22,7 @@ package org.apache.isis.metamodel.adapter.oid;
import java.io.IOException;
import java.util.Objects;
-import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.metamodel.spec.ObjectSpecId;
import static org.apache.isis.commons.internal.base._With.requires;
@@ -30,7 +30,7 @@ final class Oid_Parented implements ParentedOid {
private static final long serialVersionUID = 1L;
- private final String name;
+ private final String oneToManyId;
private final int hashCode;
private final RootOid parentRootOid;
@@ -42,7 +42,7 @@ final class Oid_Parented implements ParentedOid {
private Oid_Parented(RootOid parentRootOid, String oneToManyId) {
requires(parentRootOid, "parentRootOid");
this.parentRootOid = parentRootOid;
- this.name = oneToManyId;
+ this.oneToManyId = oneToManyId;
this.hashCode = calculateHash();
}
@@ -50,6 +50,11 @@ final class Oid_Parented implements ParentedOid {
public RootOid getParentOid() {
return parentRootOid;
}
+
+ @Override
+ public ObjectSpecId getObjectSpecId() {
+ return getParentOid().getObjectSpecId();
+ }
@Override
public boolean isTransient() {
@@ -77,13 +82,13 @@ final class Oid_Parented implements ParentedOid {
private Oid_Parented(Oid_Parented oid) throws IOException {
this.parentRootOid = oid.getParentOid();
- this.name = oid.name;
+ this.oneToManyId = oid.oneToManyId;
this.hashCode = calculateHash();
}
@Override
public String getName() {
- return name;
+ return oneToManyId;
}
@@ -115,7 +120,8 @@ final class Oid_Parented implements ParentedOid {
}
public boolean equals(final Oid_Parented other) {
- return Objects.equals(other.getParentOid(), getParentOid()) && Objects.equals(other.name, name);
+ return Objects.equals(other.getParentOid(), getParentOid())
+ && Objects.equals(other.oneToManyId, oneToManyId);
}
@@ -125,7 +131,7 @@ final class Oid_Parented implements ParentedOid {
}
private int calculateHash() {
- return Objects.hash(getParentOid(), name);
+ return Objects.hash(getParentOid(), oneToManyId);
}
/**
@@ -133,7 +139,7 @@ final class Oid_Parented implements ParentedOid {
* need updating similarly.
*/
public Oid_Parented asPersistent(RootOid newParentRootOid) {
- return new Oid_Parented(newParentRootOid, name);
+ return new Oid_Parented(newParentRootOid, oneToManyId);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/RootOid.java
index a5dc556..6d92531 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/RootOid.java
@@ -26,8 +26,6 @@ import org.apache.isis.schema.common.v1.OidDto;
public interface RootOid extends Oid {
- ObjectSpecId getObjectSpecId();
-
String getIdentifier();
Bookmark asBookmark();
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/CollectionData.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/CollectionData.java
index 289f4b7..fbec284 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/CollectionData.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/CollectionData.java
@@ -30,8 +30,8 @@ final class CollectionData extends Data {
private final static long serialVersionUID = 1L;
private final Data[] elements;
- public CollectionData(final Oid oid, final String className, final Data[] elements) {
- super(oid, className);
+ public CollectionData(final Oid oid, final Data[] elements) {
+ super(oid);
this.elements = elements;
}
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 f039157..fc236a9 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
@@ -24,6 +24,7 @@ import java.io.Serializable;
import javax.annotation.Nullable;
import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.spec.ObjectSpecId;
import lombok.AccessLevel;
import lombok.Getter;
@@ -40,6 +41,9 @@ 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 specId;
+ public ObjectSpecId getObjectSpecId() {
+ return oid.getObjectSpecId();
+ }
+
}
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 8f7fc53..fb459e4 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
@@ -25,20 +25,22 @@ import java.util.List;
import org.apache.isis.commons.exceptions.UnknownTypeException;
import org.apache.isis.commons.internal.collections._Arrays;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.metamodel.facets.properties.update.modify.PropertySetterFacet;
import org.apache.isis.metamodel.spec.ManagedObject;
-import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.spec.feature.Contributed;
import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import lombok.Getter;
+import lombok.ToString;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -50,7 +52,7 @@ import lombok.extern.log4j.Log4j2;
* easily. Also for a persistent objects only the reference's {@link Oid}s are
* held, avoiding the need for serializing the whole object graph.
*/
-@Log4j2
+@Log4j2 @ToString
class Memento implements Serializable {
private final static long serialVersionUID = 1L;
@@ -71,15 +73,10 @@ class Memento implements Serializable {
if (data == null) {
return null;
}
- val spec = specLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(data.getSpecId()));
+ val spec = specLoader.lookupBySpecIdElseLoad(data.getObjectSpecId());
val oid = data.getOid();
return mementoStore.adapterOfMemento(spec, oid, data);
}
-
- @Override
- public String toString() {
- return "[" + (data == null ? null : data.getSpecId() + "/" + data.getOid() + data) + "]";
- }
// -- HELPER
@@ -99,16 +96,15 @@ class Memento implements Serializable {
.collect(_Arrays.toArray(Data.class, CollectionFacet.Utils.size(adapter)));
val elementOid = ManagedObject._identify(adapter);
- val elementSpec = adapter.getSpecification();
- return new CollectionData(elementOid, elementSpec.getFullIdentifier(), collData);
+ return new CollectionData(elementOid, collData);
}
private ObjectData createObjectData(ManagedObject adapter) {
val oid = ManagedObject._identify(adapter);
oids.add(oid);
val spec = adapter.getSpecification();
- val data = new ObjectData(oid, spec.getFullIdentifier());
+ val data = new ObjectData(oid);
spec.streamAssociations(Contributed.EXCLUDED)
.filter(association->{
@@ -156,8 +152,12 @@ class Memento implements Serializable {
val refOid = ManagedObject._identify(referencedAdapter);
- if (refOid == null || refOid.isValue()) {
- return createStandaloneData(referencedAdapter);
+ if (refOid == null) {
+ throw _Exceptions.unexpectedCodeReach();
+ }
+
+ if (refOid.isValue()) {
+ return createStandaloneData(refOid, referencedAdapter);
}
val refSpec = referencedAdapter.getSpecification();
@@ -170,11 +170,11 @@ class Memento implements Serializable {
}
}
- return new Data(refOid, refSpec.getFullIdentifier());
+ return new Data(refOid);
}
- private Data createStandaloneData(ManagedObject adapter) {
- return new StandaloneData(adapter);
+ private Data createStandaloneData(RootOid rootOid, ManagedObject adapter) {
+ return new StandaloneData(rootOid, adapter);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectData.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectData.java
index e880f51..2a522b4 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectData.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectData.java
@@ -29,14 +29,14 @@ import lombok.NoArgsConstructor;
final class ObjectData extends Data {
- private static final long serialVersionUID = 3772154051989942219L;
+ private static final long serialVersionUID = 2L;
private final Map<String, Object> fields = new HashMap<String, Object>();
- public ObjectData(final Oid oid, final String className) {
- super(oid, className);
+ public ObjectData(final Oid oid) {
+ super(oid);
}
-
+
public void addField(final String fieldName, final Object entry) {
if (fields.containsKey(fieldName)) {
throw new IllegalArgumentException("Field already entered " + fieldName);
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 be39cd9..3312bb2 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
@@ -22,9 +22,9 @@ package org.apache.isis.runtime.memento;
import java.io.Serializable;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.metamodel.spec.ManagedObject;
-import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import lombok.val;
@@ -36,8 +36,8 @@ final class StandaloneData extends Data {
private String objectAsEncodedString;
private Serializable objectAsSerializable;
- public StandaloneData(ManagedObject adapter) {
- super(null, adapter.getSpecification().getFullIdentifier());
+ public StandaloneData(RootOid rootOid, ManagedObject adapter) {
+ super(rootOid);
final Object object = adapter.getPojo();
if (object instanceof Serializable) {
@@ -61,8 +61,7 @@ final class StandaloneData extends Data {
if (objectAsSerializable != null) {
return objectAdapterProvider.adapterFor(objectAsSerializable);
} else {
- val spec =
- specificationLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(getSpecId()));
+ val spec = specificationLoader.lookupBySpecIdElseLoad(getObjectSpecId());
val encodeableFacet = spec.getFacet(EncodableFacet.class);
return encodeableFacet.fromEncodedString(objectAsEncodedString);
}