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 <ahu...@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->{