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/10/24 08:51:35 UTC
[isis] 04/06: ISIS-2158: housekeeping: mementos
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 50d8ea5fc21afd4e1c93acdb5d51aad19a922771
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 24 08:46:26 2019 +0200
ISIS-2158: housekeeping: mementos
---
.../apache/isis/metamodel/spec/ManagedObject.java | 12 +-
.../org/apache/isis/runtime/memento/Memento.java | 137 ++++------
.../memento/ObjectAdapterMementoDefault.java | 292 +++++++++++----------
.../isis/runtime/memento/StandaloneData.java | 18 +-
4 files changed, 225 insertions(+), 234 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index a929ae2..313fb44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
+import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
@@ -299,19 +300,26 @@ public interface ManagedObject {
return true;
}
+ // -- OID UTILITIES
+
static final class Oids {
static final OidFactory oidFactory = OidFactory.buildDefault();
+
+ static final <T extends Oid> T copy(T oid) {
+ if(oid == null) { return null; }
+ return _Casts.uncheckedCast(oid.copy());
+ }
}
static Oid _oid(ManagedObject adapter) {
if(adapter instanceof ObjectAdapter) {
- return promote(adapter).getOid();
+ return Oids.copy(promote(adapter).getOid());
}
return Oids.oidFactory.oidFor(adapter);
}
-
+
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 7ec7ece..331975b 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
@@ -21,10 +21,8 @@ package org.apache.isis.runtime.memento;
import java.io.Serializable;
import java.util.List;
-import java.util.stream.Stream;
import org.apache.isis.commons.exceptions.UnknownTypeException;
-import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.collections._Arrays;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
@@ -36,12 +34,12 @@ import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAc
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.ObjectSpecification;
import org.apache.isis.metamodel.spec.feature.Contributed;
import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
+import lombok.Getter;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -58,53 +56,60 @@ public class Memento implements Serializable {
private final static long serialVersionUID = 1L;
- private final List<Oid> transientObjects = _Lists.newArrayList();
+ private final List<Oid> oids = _Lists.newArrayList();
+ @Getter private Data data;
- private Data data;
-
-
- ////////////////////////////////////////////////
- // constructor, Encodeable
- ////////////////////////////////////////////////
-
- public Memento(final ManagedObject adapter) {
- data = (adapter == null) ? null : createData( ManagedObject.promote(adapter) );
+ public Memento(ManagedObject adapter) {
+ data = (adapter == null) ? null : createData(adapter);
log.debug("created memento for {}", this);
}
+
+ public ObjectAdapter recreateObject(
+ SpecificationLoader specLoader,
+ PersistenceSession persistenceSession) {
+
+ if (data == null) {
+ return null;
+ }
+ val spec = specLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(data.getClassName()));
+ val oid = data.getOid();
+ return persistenceSession.adapterOfMemento(spec, oid, data);
+ }
+ @Override
+ public String toString() {
+ return "[" + (data == null ? null : data.getClassName() + "/" + data.getOid() + data) + "]";
+ }
+
+ // -- HELPER
- ////////////////////////////////////////////////
- // createData
- ////////////////////////////////////////////////
-
- private Data createData(final ObjectAdapter adapter) {
- if (adapter.getSpecification().isParentedOrFreeCollection() && !adapter.getSpecification().isEncodeable()) {
+ private Data createData(ManagedObject adapter) {
+ if (adapter.getSpecification().isParentedOrFreeCollection() &&
+ !adapter.getSpecification().isEncodeable()) {
return createCollectionData(adapter);
} else {
return createObjectData(adapter);
}
}
- private Data createCollectionData(final ObjectAdapter adapter) {
+ private Data createCollectionData(ManagedObject adapter) {
final Data[] collData = CollectionFacet.Utils.streamAdapters(adapter)
- .map(this::createReferenceData)
+ .map(this::createReferencedData)
.collect(_Arrays.toArray(Data.class, CollectionFacet.Utils.size(adapter)));
- final String elementTypeSpecName = adapter.getSpecification().getFullIdentifier();
- return new CollectionData(clone(adapter.getOid()), elementTypeSpecName, collData);
+ final String elementTypeId = adapter.getSpecification().getFullIdentifier();
+ return new CollectionData(ManagedObject._oid(adapter), elementTypeId, collData);
}
- private ObjectData createObjectData(final ObjectAdapter adapter) {
- final Oid adapterOid = clone(adapter.getOid());
- transientObjects.add(adapterOid);
- final ObjectSpecification cls = adapter.getSpecification();
- final ObjectData data = new ObjectData(adapterOid, cls.getFullIdentifier());
-
- final Stream<ObjectAssociation> associations = cls.streamAssociations(Contributed.EXCLUDED);
+ private ObjectData createObjectData(ManagedObject adapter) {
+ val oid = ManagedObject._oid(adapter);
+ oids.add(oid);
+ val spec = adapter.getSpecification();
+ val data = new ObjectData(oid, spec.getFullIdentifier());
- associations
+ spec.streamAssociations(Contributed.EXCLUDED)
.filter(association->{
if (association.isNotPersisted()) {
if (association.isOneToManyAssociation()) {
@@ -125,88 +130,52 @@ public class Memento implements Serializable {
return data;
}
- private void createAssociationData(final ObjectAdapter adapter, final ObjectData data, final ObjectAssociation objectAssoc) {
+ private void createAssociationData(ManagedObject adapter, ObjectData data, ObjectAssociation objectAssoc) {
Object assocData;
if (objectAssoc.isOneToManyAssociation()) {
val collAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
- assocData = createCollectionData(ManagedObject.promote(collAdapter));
+ assocData = createCollectionData(collAdapter);
} else if (objectAssoc.getSpecification().isEncodeable()) {
- final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class);
+ val encodableFacet = objectAssoc.getSpecification().getFacet(EncodableFacet.class);
val value = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
- assocData = facet.toEncodedString(value);
+ assocData = encodableFacet.toEncodedString(value);
} else if (objectAssoc.isOneToOneAssociation()) {
val referencedAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
- assocData = createReferenceData(ManagedObject.promote(referencedAdapter));
+ assocData = createReferencedData(referencedAdapter);
} else {
throw new UnknownTypeException(objectAssoc);
}
data.addField(objectAssoc.getId(), assocData);
}
- private Data createReferenceData(final ObjectAdapter referencedAdapter) {
+ private Data createReferencedData(ManagedObject referencedAdapter) {
if (referencedAdapter == null) {
return null;
}
- final Oid refOid = clone(referencedAdapter.getOid());
+ val refOid = ManagedObject._oid(referencedAdapter);
if (refOid == null || refOid.isValue()) {
return createStandaloneData(referencedAdapter);
}
-
- if ( (referencedAdapter.getSpecification().isParented() || refOid.isTransient()) &&
- !transientObjects.contains(refOid)) {
- transientObjects.add(refOid);
- return createObjectData(referencedAdapter);
+ val refSpec = referencedAdapter.getSpecification();
+
+ if (refSpec.isParented() || refOid.isTransient()) {
+
+ if(!oids.contains(refOid)) {
+ oids.add(refOid);
+ return createObjectData(referencedAdapter);
+ }
}
- final String specification = referencedAdapter.getSpecification().getFullIdentifier();
- return new Data(refOid, specification);
- }
-
- private static <T extends Oid> T clone(final T oid) {
- if(oid == null) { return null; }
- return _Casts.uncheckedCast(oid.copy());
+ return new Data(refOid, refSpec.getFullIdentifier());
}
- private Data createStandaloneData(final ObjectAdapter adapter) {
+ private Data createStandaloneData(ManagedObject adapter) {
return new StandaloneData(adapter);
}
- ////////////////////////////////////////////////
- // properties
- ////////////////////////////////////////////////
- public Oid getOid() {
- return data.getOid();
- }
-
- protected Data getData() {
- return data;
- }
-
- ////////////////////////////////////////////////
- // recreateObject
- ////////////////////////////////////////////////
-
- public ObjectAdapter recreateObject(SpecificationLoader specLoader, PersistenceSession persistenceSession) {
- if (data == null) {
- return null;
- }
- val spec = specLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(data.getClassName()));
- val oid = getOid();
- return persistenceSession.adapterOfMemento(spec, oid, data);
- }
-
-
- // ///////////////////////////////////////////////////////////////
- // toString, debug
- // ///////////////////////////////////////////////////////////////
-
- @Override
- public String toString() {
- return "[" + (data == null ? null : data.getClassName() + "/" + data.getOid() + data) + "]";
- }
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
index 585bb6c..f7731a3 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
@@ -35,7 +35,6 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.adapter.oid.ObjectNotFoundException;
import org.apache.isis.metamodel.adapter.oid.Oid;
-import org.apache.isis.metamodel.adapter.oid.Oid.Factory;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.metamodel.spec.ManagedObject;
@@ -44,6 +43,10 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
+import static org.apache.isis.commons.internal.base._With.requires;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import lombok.val;
public class ObjectAdapterMementoDefault implements Serializable {
@@ -53,12 +56,12 @@ public class ObjectAdapterMementoDefault implements Serializable {
/**
* Factory method
*/
- public static ObjectAdapterMementoDefault createOrNull(final ManagedObject adapter) {
+ public static ObjectAdapterMementoDefault createOrNull(ManagedObject adapter) {
if (adapter == null) {
return null;
}
- final Object object = adapter.getPojo();
- if(object == null) {
+ val pojo = adapter.getPojo();
+ if(pojo == null) {
return null;
}
return new ObjectAdapterMementoDefault(adapter);
@@ -67,26 +70,32 @@ public class ObjectAdapterMementoDefault implements Serializable {
/**
* Factory method
*/
- public static ObjectAdapterMementoDefault createPersistent(RootOid rootOid, SpecificationLoader specificationLoader) {
+ public static ObjectAdapterMementoDefault createPersistent(
+ RootOid rootOid,
+ SpecificationLoader specificationLoader) {
+
return new ObjectAdapterMementoDefault(rootOid, specificationLoader);
}
public static ObjectAdapterMementoDefault createForList(
- final ArrayList<ObjectAdapterMementoDefault> list,
- final ObjectSpecId objectSpecId) {
+ ArrayList<ObjectAdapterMementoDefault> list,
+ ObjectSpecId objectSpecId) {
+
return new ObjectAdapterMementoDefault(list, objectSpecId);
}
public static ObjectAdapterMementoDefault createForList(
- final Collection<ObjectAdapterMementoDefault> list,
- final ObjectSpecId objectSpecId) {
+ Collection<ObjectAdapterMementoDefault> list,
+ ObjectSpecId objectSpecId) {
+
return list != null ? createForList(_Lists.newArrayList(list), objectSpecId) : null;
}
public static ObjectAdapterMementoDefault createForIterable(
- final Iterable<?> iterable,
- final ObjectSpecId specId,
- final PersistenceSession persistenceSession) {
+ Iterable<?> iterable,
+ ObjectSpecId specId,
+ PersistenceSession persistenceSession) {
+
final List<ObjectAdapterMementoDefault> listOfMementos =
_NullSafe.stream(iterable)
.map(Functions.fromPojo(persistenceSession))
@@ -95,8 +104,9 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
public static ObjectAdapterMementoDefault createForEncodeable(
- final ObjectSpecId specId,
- final String encodableValue) {
+ ObjectSpecId specId,
+ String encodableValue) {
+
return new ObjectAdapterMementoDefault(specId, encodableValue);
}
@@ -108,32 +118,33 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public ObjectAdapter asAdapter(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
- return oam.recreateStrategy.getAdapter(oam, persistenceSession, specificationLoader);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
+ return memento.recreateStrategy.getAdapter(memento, persistenceSession, specificationLoader);
}
@Override
- public int hashCode(final ObjectAdapterMementoDefault oam) {
- return oam.recreateStrategy.hashCode(oam);
+ public int hashCode(ObjectAdapterMementoDefault memento) {
+ return memento.recreateStrategy.hashCode(memento);
}
@Override
- public boolean equals(final ObjectAdapterMementoDefault oam, final Object other) {
+ public boolean equals(ObjectAdapterMementoDefault memento, Object other) {
if (!(other instanceof ObjectAdapterMementoDefault)) {
return false;
}
- final ObjectAdapterMementoDefault otherOam = (ObjectAdapterMementoDefault) other;
- if(otherOam.cardinality != SCALAR) {
+ final ObjectAdapterMementoDefault otherMemento = (ObjectAdapterMementoDefault) other;
+ if(otherMemento.cardinality != SCALAR) {
return false;
}
- return oam.recreateStrategy.equals(oam, (ObjectAdapterMementoDefault) other);
+ return memento.recreateStrategy.equals(memento, otherMemento);
}
@Override
- public String asString(final ObjectAdapterMementoDefault oam) {
- return oam.recreateStrategy.toString(oam);
+ public String asString(final ObjectAdapterMementoDefault memento) {
+ return memento.recreateStrategy.toString(memento);
}
},
/**
@@ -143,39 +154,40 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public ObjectAdapter asAdapter(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
final List<Object> listOfPojos =
- _Lists.map(oam.list, Functions.toPojo(persistenceSession, specificationLoader));
+ _Lists.map(memento.list, Functions.toPojo(persistenceSession, specificationLoader));
return persistenceSession.adapterFor(listOfPojos);
}
@Override
- public int hashCode(final ObjectAdapterMementoDefault oam) {
- return oam.list.hashCode();
+ public int hashCode(ObjectAdapterMementoDefault memento) {
+ return memento.list.hashCode();
}
@Override
- public boolean equals(final ObjectAdapterMementoDefault oam, final Object other) {
+ public boolean equals(ObjectAdapterMementoDefault memento, Object other) {
if (!(other instanceof ObjectAdapterMementoDefault)) {
return false;
}
- final ObjectAdapterMementoDefault otherOam = (ObjectAdapterMementoDefault) other;
- if(otherOam.cardinality != VECTOR) {
+ final ObjectAdapterMementoDefault otherMemento = (ObjectAdapterMementoDefault) other;
+ if(otherMemento.cardinality != VECTOR) {
return false;
}
- return oam.list.equals(otherOam.list);
+ return memento.list.equals(otherMemento.list);
}
@Override
- public String asString(final ObjectAdapterMementoDefault oam) {
- return oam.list.toString();
+ public String asString(ObjectAdapterMementoDefault memento) {
+ return memento.list.toString();
}
};
- void ensure(final Cardinality sort) {
+ void ensure(Cardinality sort) {
if(this == sort) {
return;
}
@@ -183,15 +195,15 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
public abstract ObjectAdapter asAdapter(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader);
- public abstract int hashCode(final ObjectAdapterMementoDefault oam);
+ public abstract int hashCode(ObjectAdapterMementoDefault memento);
- public abstract boolean equals(final ObjectAdapterMementoDefault oam, final Object other);
+ public abstract boolean equals(ObjectAdapterMementoDefault memento, Object other);
- public abstract String asString(final ObjectAdapterMementoDefault oam);
+ public abstract String asString(ObjectAdapterMementoDefault memento);
}
enum RecreateStrategy {
@@ -203,34 +215,40 @@ public class ObjectAdapterMementoDefault implements Serializable {
ENCODEABLE {
@Override
ObjectAdapter recreateAdapter(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
- ObjectSpecId objectSpecId = oam.objectSpecId;
- ObjectSpecification objectSpec = specificationLoader.lookupBySpecIdElseLoad(objectSpecId);
- final EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
- return encodableFacet.fromEncodedString(oam.encodableValue);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
+ ObjectSpecId specId = memento.objectSpecId;
+ ObjectSpecification objectSpec = specificationLoader.lookupBySpecIdElseLoad(specId);
+ EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
+ return encodableFacet.fromEncodedString(memento.encodableValue);
}
@Override
- public boolean equals(ObjectAdapterMementoDefault oam, ObjectAdapterMementoDefault other) {
- return other.recreateStrategy == ENCODEABLE && oam.encodableValue.equals(other.encodableValue);
+ public boolean equals(
+ ObjectAdapterMementoDefault memento,
+ ObjectAdapterMementoDefault otherMemento) {
+
+ return otherMemento.recreateStrategy == ENCODEABLE &&
+ memento.encodableValue.equals(otherMemento.encodableValue);
}
@Override
- public int hashCode(ObjectAdapterMementoDefault oam) {
- return oam.encodableValue.hashCode();
+ public int hashCode(ObjectAdapterMementoDefault memento) {
+ return memento.encodableValue.hashCode();
}
@Override
- public String toString(final ObjectAdapterMementoDefault oam) {
- return oam.encodableValue;
+ public String toString(ObjectAdapterMementoDefault memento) {
+ return memento.encodableValue;
}
@Override
public void resetVersion(
- ObjectAdapterMementoDefault ObjectAdapterMemento_LastKnownGood,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader) {
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
}
},
/**
@@ -240,10 +258,11 @@ public class ObjectAdapterMementoDefault implements Serializable {
LOOKUP {
@Override
ObjectAdapter recreateAdapter(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
- RootOid oid = Oid.unmarshaller().unmarshal(oam.persistentOidStr, RootOid.class);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
+ RootOid oid = Oid.unmarshaller().unmarshal(memento.persistentOidStr, RootOid.class);
try {
final ObjectAdapter adapter = persistenceSession.adapterFor(oid);
return adapter;
@@ -254,20 +273,21 @@ public class ObjectAdapterMementoDefault implements Serializable {
// we copy this updated oid string into our memento so that, if we retry,
// we will succeed second time around
- oam.persistentOidStr = oid.enString();
+ memento.persistentOidStr = oid.enString();
}
}
@Override
public void resetVersion(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
- // REVIEW: this may be redundant because recreateAdapter also guarantees the version will be reset.
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
+ //XXX REVIEW: this may be redundant because recreateAdapter also guarantees the version will be reset.
final ObjectAdapter adapter = recreateAdapter(
- oam, persistenceSession, specificationLoader);
+ memento, persistenceSession, specificationLoader);
Oid oid = adapter.getOid();
- oam.persistentOidStr = oid.enString();
+ memento.persistentOidStr = oid.enString();
}
@Override
@@ -296,10 +316,11 @@ public class ObjectAdapterMementoDefault implements Serializable {
*/
@Override
ObjectAdapter recreateAdapter(
- final ObjectAdapterMementoDefault oam,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
- return oam.transientMemento.recreateObject(specificationLoader, persistenceSession);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
+ return memento.transientMemento.recreateObject(specificationLoader, persistenceSession);
}
@Override
@@ -319,31 +340,37 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public void resetVersion(
- final ObjectAdapterMementoDefault ObjectAdapterMemento_LastKnownGood,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader) {
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
}
};
public ObjectAdapter getAdapter(
- final ObjectAdapterMementoDefault nom,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
- return recreateAdapter(nom, persistenceSession, specificationLoader);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
+ return recreateAdapter(memento, persistenceSession, specificationLoader);
}
abstract ObjectAdapter recreateAdapter(
- final ObjectAdapterMementoDefault nom,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader);
- public abstract boolean equals(ObjectAdapterMementoDefault oam, ObjectAdapterMementoDefault other);
- public abstract int hashCode(ObjectAdapterMementoDefault ObjectAdapterMemento_LastKnownGood);
+ public abstract boolean equals(
+ ObjectAdapterMementoDefault memento,
+ ObjectAdapterMementoDefault otherMemento);
+
+ public abstract int hashCode(ObjectAdapterMementoDefault memento);
- public abstract String toString(ObjectAdapterMementoDefault adapterMemento);
+ public abstract String toString(ObjectAdapterMementoDefault memento);
public abstract void resetVersion(
- ObjectAdapterMementoDefault ObjectAdapterMemento_LastKnownGood,
- final PersistenceSession persistenceSession, final SpecificationLoader specificationLoader);
+ ObjectAdapterMementoDefault memento,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader);
}
@@ -405,8 +432,8 @@ public class ObjectAdapterMementoDefault implements Serializable {
private ArrayList<ObjectAdapterMementoDefault> list;
public ObjectAdapterMementoDefault(
- final ArrayList<ObjectAdapterMementoDefault> list,
- final ObjectSpecId objectSpecId) {
+ ArrayList<ObjectAdapterMementoDefault> list,
+ ObjectSpecId objectSpecId) {
this.cardinality = Cardinality.VECTOR;
this.list = list;
@@ -437,17 +464,17 @@ public class ObjectAdapterMementoDefault implements Serializable {
this.recreateStrategy = RecreateStrategy.LOOKUP;
}
- private ObjectAdapterMementoDefault(final ManagedObject adapter) {
- if (adapter == null) {
- throw new IllegalArgumentException("adapter cannot be null");
- }
+ private ObjectAdapterMementoDefault(ManagedObject adapter) {
+
+ requires(adapter, "adapter");
+
this.cardinality = Cardinality.SCALAR;
- final ObjectSpecification specification = adapter.getSpecification();
- objectSpecId = specification.getSpecId();
+ val spec = adapter.getSpecification();
+ objectSpecId = spec.getSpecId();
init(adapter);
}
- private ObjectAdapterMementoDefault(final ObjectSpecId specId, final String encodableValue) {
+ private ObjectAdapterMementoDefault(ObjectSpecId specId, String encodableValue) {
this.cardinality = Cardinality.SCALAR;
this.objectSpecId = specId;
this.encodableValue = encodableValue;
@@ -455,12 +482,12 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
- private void init(final ManagedObject adapter) {
+ private void init(ManagedObject adapter) {
- final ObjectSpecification specification = adapter.getSpecification();
+ val spec = adapter.getSpecification();
- final EncodableFacet encodableFacet = specification.getFacet(EncodableFacet.class);
- final boolean isEncodable = encodableFacet != null;
+ val encodableFacet = spec.getFacet(EncodableFacet.class);
+ val isEncodable = encodableFacet != null;
if (isEncodable) {
encodableValue = encodableFacet.toEncodedString(adapter);
recreateStrategy = RecreateStrategy.ENCODEABLE;
@@ -494,8 +521,9 @@ public class ObjectAdapterMementoDefault implements Serializable {
public void resetVersion(
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
+
ensureScalar();
recreateStrategy.resetVersion(this, persistenceSession, specificationLoader);
}
@@ -507,7 +535,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
public Bookmark asHintingBookmark() {
- Bookmark bookmark = asBookmark();
+ val bookmark = asBookmark();
return hintId != null && bookmark != null
? new HintStore.BookmarkWithHintId(bookmark, hintId)
: bookmark;
@@ -524,8 +552,8 @@ public class ObjectAdapterMementoDefault implements Serializable {
* can call {@link #setAdapter(ObjectAdapter)} to keep this memento in sync.
*/
public ObjectAdapter getObjectAdapter(
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
val spec = specificationLoader.loadSpecification(objectSpecId);
@@ -542,7 +570,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
*
* @param adapter
*/
- public void setAdapter(final ObjectAdapter adapter) {
+ public void setAdapter(ManagedObject adapter) {
ensureScalar();
init(adapter);
}
@@ -556,21 +584,21 @@ public class ObjectAdapterMementoDefault implements Serializable {
* {@link ConcurrencyChecking concurrency checking} of the OID.
*/
public boolean containedIn(
- List<ObjectAdapterMementoDefault> list,
- final PersistenceSession persistenceSession,
- final SpecificationLoader specificationLoader) {
+ List<ObjectAdapterMementoDefault> mementos,
+ PersistenceSession persistenceSession,
+ SpecificationLoader specificationLoader) {
ensureScalar();
- // REVIEW: heavy handed, ought to be possible to just compare the OIDs
+ //XXX REVIEW: heavy handed, ought to be possible to just compare the OIDs
// ignoring the concurrency checking
- final ObjectAdapter currAdapter = getObjectAdapter(persistenceSession,
- specificationLoader);
- for (ObjectAdapterMementoDefault each : list) {
- if(each == null) {
+ val currAdapter = getObjectAdapter(persistenceSession, specificationLoader);
+
+ for (val memento : mementos) {
+ if(memento == null) {
continue;
}
- final ObjectAdapter otherAdapter = each.getObjectAdapter(persistenceSession, specificationLoader);
+ val otherAdapter = memento.getObjectAdapter(persistenceSession, specificationLoader);
if(currAdapter == otherAdapter) {
return true;
}
@@ -599,24 +627,15 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
- //////////////////////////////////////////////////
- // Functions
- //////////////////////////////////////////////////
-
+ // -- FUNCTIONS
+ @NoArgsConstructor(access = AccessLevel.PRIVATE)
public final static class Functions {
- private Functions() {
- }
-
public static Function<Object, ObjectAdapterMementoDefault> fromPojo(final ObjectAdapterProvider adapterProvider) {
return pojo->ObjectAdapterMementoDefault.createOrNull( adapterProvider.adapterFor(pojo) );
}
- public static Function<ObjectAdapter, ObjectAdapterMementoDefault> fromAdapter() {
- return ObjectAdapterMementoDefault::createOrNull;
- }
-
public static Function<ObjectAdapterMementoDefault, ObjectAdapter> fromMemento(
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
@@ -631,20 +650,15 @@ public class ObjectAdapterMementoDefault implements Serializable {
};
}
- public static Function<ObjectAdapter, ObjectAdapterMementoDefault> toMemento() {
- return ObjectAdapterMementoDefault::createOrNull;
- }
-
-
public static Function<ObjectAdapterMementoDefault, Object> toPojo(
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
- return input->{
- if(input == null) {
+
+ return memento->{
+ if(memento == null) {
return null;
}
- final ObjectAdapter objectAdapter = input
- .getObjectAdapter(persistenceSession, specificationLoader);
+ val objectAdapter = memento.getObjectAdapter(persistenceSession, specificationLoader);
if(objectAdapter == null) {
return null;
}
@@ -652,10 +666,6 @@ public class ObjectAdapterMementoDefault implements Serializable {
};
}
- public static Function<ObjectAdapterMementoDefault, RootOid> toOid() {
- return ObjectAdapterMemento_LastKnownGood->Factory.ofBookmark(ObjectAdapterMemento_LastKnownGood.asBookmark());
- }
-
}
private void ensureScalar() {
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 740a280..2a7b636 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
@@ -29,6 +29,7 @@ import org.apache.isis.commons.internal.encoding.DataOutputExtended;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
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;
@@ -39,7 +40,10 @@ public class StandaloneData extends Data {
private static final long serialVersionUID = 1L;
private static enum As {
- ENCODED_STRING(0), SERIALIZABLE(1);
+
+ ENCODED_STRING(0),
+ SERIALIZABLE(1);
+
static Map<Integer, As> cache = new HashMap<Integer, As>();
static {
for (final As as : values()) {
@@ -48,19 +52,19 @@ public class StandaloneData extends Data {
}
private final int idx;
- private As(final int idx) {
+ private As(int idx) {
this.idx = idx;
}
- static As get(final int idx) {
+ static As get(int idx) {
return cache.get(idx);
}
- public static As readFrom(final DataInputExtended input) throws IOException {
+ public static As readFrom(DataInputExtended input) throws IOException {
return get(input.readByte());
}
- public void writeTo(final DataOutputExtended output) throws IOException {
+ public void writeTo(DataOutputExtended output) throws IOException {
output.writeByte(idx);
}
}
@@ -68,7 +72,7 @@ public class StandaloneData extends Data {
private String objectAsEncodedString;
private Serializable objectAsSerializable;
- public StandaloneData(final ObjectAdapter adapter) {
+ public StandaloneData(ManagedObject adapter) {
super(null, adapter.getSpecification().getFullIdentifier());
final Object object = adapter.getPojo();
@@ -78,7 +82,7 @@ public class StandaloneData extends Data {
return;
}
- final EncodableFacet encodeableFacet = adapter.getSpecification().getFacet(EncodableFacet.class);
+ val encodeableFacet = adapter.getSpecification().getFacet(EncodableFacet.class);
if (encodeableFacet != null) {
this.objectAsEncodedString = encodeableFacet.toEncodedString(adapter);
initialized();