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 2020/01/15 12:30:19 UTC
[isis] branch master updated: ISIS-2158: remove Oid.isTransient()
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 9c8235d ISIS-2158: remove Oid.isTransient()
9c8235d is described below
commit 9c8235d4b9f7d67778bf6f8b938f7aab119b1125
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jan 15 13:30:05 2020 +0100
ISIS-2158: remove Oid.isTransient()
---
.../isis/core/metamodel/adapter/oid/Oid.java | 6 ---
.../objectadapter/ObjectAdapterContext.java | 4 +-
...ctAdapterContext_ObjectAdapterByIdProvider.java | 17 +------
.../persistence/PersistenceSession5.java | 20 ++++----
.../viewer/wicket/model/models/ActionModel.java | 10 ++--
.../viewer/services/mementos/ObjectMarshaller.java | 2 +-
.../services/mementos/ObjectMementoLegacy.java | 59 +---------------------
.../services/mementos/ObjectUnmarshaller.java | 49 ++++++++----------
8 files changed, 40 insertions(+), 127 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 bd53147..c2ba21e 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
@@ -45,12 +45,6 @@ public interface Oid extends Serializable {
return false; // default, only overridden by Oid_Value
}
- @Deprecated
- default boolean isTransient() {
- return false;
- }
-
-
/**
* {@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}.
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java
index ebebdf7..39fe8f1 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext.java
@@ -238,9 +238,7 @@ final public class ObjectAdapterContext {
Objects.requireNonNull(persistentOid);
_Assert.assertFalse("expected to not be a parented collection", rootAdapter.isParentedCollection());
- if(persistentOid.isTransient()) {
- throw _Exceptions.unrecoverable("hintRootOid must be persistent");
- }
+
final ObjectSpecId hintRootOidObjectSpecId = persistentOid.getObjectSpecId();
final ObjectSpecId adapterObjectSpecId = rootAdapter.getSpecification().getSpecId();
if(!hintRootOidObjectSpecId.equals(adapterObjectSpecId)) {
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
index ad60571..73d8f98 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
@@ -18,13 +18,7 @@
*/
package org.apache.isis.persistence.jdo.datanucleus5.objectadapter;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Stream;
-
import org.apache.isis.core.commons.internal.assertions._Assert;
-import org.apache.isis.core.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.internal.collections._Maps;
import org.apache.isis.core.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.ObjectNotFoundException;
@@ -32,7 +26,6 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.PojoRecreationException;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.context.session.RuntimeContext;
@@ -192,15 +185,9 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider {
final ObjectSpecification spec =
specificationLoader.lookupBySpecIdElseLoad(rootOid.getObjectSpecId());
final Object pojo;
- if(rootOid.isTransient()) {
- pojo = objectAdapterContext.instantiateAndInjectServices(spec);
- } else {
- final String memento = rootOid.getIdentifier();
- pojo = recreateViewModel(spec, memento);
- }
-
+ final String memento = rootOid.getIdentifier();
+ pojo = recreateViewModel(spec, memento);
_Assert.assertFalse("Pojo most likely should not be an Oid", (pojo instanceof Oid));
-
return pojo;
}
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
index 8f3be6c..a97f99c 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/persistence/PersistenceSession5.java
@@ -740,11 +740,18 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
*/
@Override
public void enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(final Persistable pojo) {
- final ObjectAdapter adapter = adapterFor(pojo);
+ val adapter = adapterFor(pojo);
+
+ val state = ManagedObject._entityState(adapter);
- final RootOid rootOid = (RootOid) adapter.getOid(); // ok since this is for a Persistable
+ if (state.isAttached()) {
+ // updating;
+ // the callback and transaction.enlist are done in the preDirty callback
+ // (can't be done here, as the enlist requires to capture the 'before' values)
+ CallbackFacet.Util.callCallback(adapter, UpdatedCallbackFacet.class);
+ objectAdapterContext.postLifecycleEventIfRequired(adapter, UpdatedLifecycleEventFacet.class);
- if (rootOid.isTransient()) {
+ } else {
// persisting
objectAdapterContext.asPersistent(adapter, this);
@@ -753,13 +760,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
objectAdapterContext.postLifecycleEventIfRequired(adapter, PersistedLifecycleEventFacet.class);
changedObjectsServiceInternal.enlistCreated(adapter);
-
- } else {
- // updating;
- // the callback and transaction.enlist are done in the preDirty callback
- // (can't be done here, as the enlist requires to capture the 'before' values)
- CallbackFacet.Util.callCallback(adapter, UpdatedCallbackFacet.class);
- objectAdapterContext.postLifecycleEventIfRequired(adapter, UpdatedLifecycleEventFacet.class);
}
}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 5c2c99d..fa5e5084 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -69,11 +69,11 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
-import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
import lombok.val;
@@ -274,12 +274,8 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
PageParameters pageParameters) {
val rootOid = oidFor(pageParameters);
- if(rootOid.isTransient()) {
- return null;
- } else {
- val memento = commonContext.mementoFor(rootOid);
- return EntityModel.ofMemento(commonContext, memento);
- }
+ val memento = commonContext.mementoFor(rootOid);
+ return EntityModel.ofMemento(commonContext, memento);
}
private static RootOid oidFor(final PageParameters pageParameters) {
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMarshaller.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMarshaller.java
index 80ffd47..000a0cf 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMarshaller.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMarshaller.java
@@ -138,7 +138,7 @@ final class ObjectMarshaller {
val refSpec = referencedAdapter.getSpecification();
- if (refSpec.isParented() || refOid.isTransient()) {
+ if (refSpec.isParented()) {
if(!oids.contains(refOid)) {
oids.add(refOid);
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoLegacy.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoLegacy.java
index ca8ed36..9871136 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoLegacy.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoLegacy.java
@@ -27,9 +27,7 @@ import java.util.function.Function;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.hint.HintStore;
-import org.apache.isis.core.commons.internal.assertions._Assert;
import org.apache.isis.core.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.internal.memento._Mementos.Memento;
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.RootOid;
@@ -292,47 +290,8 @@ final class ObjectMementoLegacy implements Serializable {
return oam.persistentOidStr;
}
- },
- /**
- * Uses Isis' own {@link Memento}, to capture the state of a transient
- * object.
- */
- TRANSIENT {
- /**
- * {@link ConcurrencyChecking} is ignored for transients.
- */
- @Override
- public ManagedObject recreateObject(
- ObjectMementoLegacy memento,
- ObjectUnmarshaller objectUnmarshaller,
- SpecificationLoader specificationLoader) {
-
- return objectUnmarshaller.recreateObject(memento.transientMemento);
- }
-
- @Override
- public boolean equals(ObjectMementoLegacy oam, ObjectMementoLegacy other) {
- return other.recreateStrategy == TRANSIENT && oam.transientMemento.equals(other.transientMemento);
- }
-
- @Override
- public int hashCode(ObjectMementoLegacy oam) {
- return oam.transientMemento.hashCode();
- }
-
- @Override
- public String toString(final ObjectMementoLegacy oam) {
- return oam.transientMemento.toString();
- }
-
- @Override
- public void resetVersion(
- ObjectMementoLegacy memento,
- ObjectUnmarshaller objectUnmarshaller,
- SpecificationLoader specificationLoader) {
- }
};
-
+
public abstract ManagedObject recreateObject(
ObjectMementoLegacy memento,
ObjectUnmarshaller objectUnmarshaller,
@@ -398,14 +357,6 @@ final class ObjectMementoLegacy implements Serializable {
private String hintId;
/**
- * The current value, if {@link RecreateStrategy#TRANSIENT}, will be <tt>null</tt> otherwise.
- *
- * <p>
- * Also, populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
- */
- private Data transientMemento;
-
- /**
* populated only if {@link #getCardinality() sort} is {@link Cardinality#VECTOR vector}
*/
private ArrayList<ObjectMementoLegacy> list;
@@ -433,8 +384,6 @@ final class ObjectMementoLegacy implements Serializable {
}
// -- //
- _Assert.assertFalse("expected not to be transient", rootOid.isTransient());
-
this.cardinality = Cardinality.SCALAR;
this.persistentOidStr = rootOid.enString();
@@ -477,12 +426,6 @@ final class ObjectMementoLegacy implements Serializable {
}
val rootOid = (RootOid) ManagedObject._identify(adapter);
- if (rootOid.isTransient()) {
- transientMemento = new ObjectMarshaller().toData(adapter);
- recreateStrategy = RecreateStrategy.TRANSIENT;
- return;
- }
-
persistentOidStr = rootOid.enString();
bookmark = rootOid.asBookmark();
if(adapter.getPojo() instanceof HintStore.HintIdProvider) {
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectUnmarshaller.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectUnmarshaller.java
index 5f22e6d..5504c18 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectUnmarshaller.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectUnmarshaller.java
@@ -87,12 +87,17 @@ final class ObjectUnmarshaller {
IsisSession.currentOrElseNull());
} else {
- _Assert.assertTrue("oid must be a RootOid representing an object because spec is not a collection and cannot be a value", oid instanceof RootOid);
+ _Assert.assertTrue("oid must be a RootOid representing an object because spec "
+ + "is not a collection and cannot be a value", oid instanceof RootOid);
RootOid typedOid = (RootOid) oid;
// recreate an adapter for the original OID
adapter = adapterForOid(typedOid);
- updateObject(adapter, data);
+ if (!(data instanceof ObjectData)) {
+ throw new IsisException("Expected ObjectData but got " + data.getClass());
+ }
+
+ updateObject(adapter, (ObjectData)data);
}
if (log.isDebugEnabled()) {
@@ -123,8 +128,9 @@ final class ObjectUnmarshaller {
val referencedAdapter = adapterForOid(rootOid);
if (data instanceof ObjectData) {
- if (rootOid.isTransient()) {
- updateObject(referencedAdapter, data);
+ val state = ManagedObject._entityState(referencedAdapter);
+ if (state.isDetached()) {
+ updateObject(referencedAdapter, (ObjectData)data);
}
}
return referencedAdapter;
@@ -132,16 +138,14 @@ final class ObjectUnmarshaller {
- private void updateObject(final ManagedObject adapter, final Data data) {
+ private void updateObject(final ManagedObject adapter, final ObjectData data) {
val oid = objectManager.identifyObject(adapter);
if (!Objects.equals(oid, data.getOid())) {
throw new IllegalArgumentException(
- "This memento can only be used to update the ObjectAdapter with the Oid " + data.getOid() + " but is " + oid);
- }
- if (!(data instanceof ObjectData)) {
- throw new IsisException("Expected ObjectData but got " + data.getClass());
+ "This memento can only be used to update the ObjectAdapter with the Oid "
+ + data.getOid() + " but is " + oid);
}
updateFieldsAndResolveState(adapter, data);
@@ -167,32 +171,23 @@ final class ObjectUnmarshaller {
private void updateFieldsAndResolveState(final ManagedObject adapter, final Data data) {
val spec = adapter.getSpecification();
-
- boolean dataIsTransient = data.getOid().isTransient();
- if (!dataIsTransient) {
- updateFields(adapter, data);
+ val objectData = (ObjectData) data;
+ if (objectData.hasAnyField()) {
- } else if (dataIsTransient
- && ManagedObject._entityState(adapter).isDetached()) {
- updateFields(adapter, data);
-
- } else if (spec.isParented()) {
- // this branch is kind-a wierd, I think it's to handle aggregated adapters.
- updateFields(adapter, data);
-
- } else {
- final ObjectData od = (ObjectData) data;
- if (od.hasAnyField()) {
+ // TODO this is an experimental predicate, what's actually needed here?
+ if (spec.isValue() || spec.isParentedOrFreeCollection()) {
throw _Exceptions.unrecoverableFormatted(
"Resolve state (for %s) inconsistent with fact that data exists for fields",
- adapter);
+ spec);
}
+
+ updateFields(adapter, objectData);
}
+
}
- private void updateFields(final ManagedObject adapter, final Data state) {
- val objectData = (ObjectData) state;
+ private void updateFields(final ManagedObject adapter, final ObjectData objectData) {
adapter.getSpecification().streamAssociations(Contributed.EXCLUDED)
.filter(field->{