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/04 18:15:37 UTC
[isis] branch master updated: ISIS-2177: starting to decouple
ObjectAdapterMemento from Persistence
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 e44bd04 ISIS-2177: starting to decouple ObjectAdapterMemento from Persistence
e44bd04 is described below
commit e44bd04736eabf5657409552f8a08858a1aa4dec
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Dec 4 19:15:27 2019 +0100
ISIS-2177: starting to decouple ObjectAdapterMemento from Persistence
---
.../jdo/objectadapter/ObjectAdapterContext.java | 26 +++----
.../ObjectAdapterContext_DependencyInjection.java | 20 +++---
.../isis/jdo/persistence/PersistenceSession5.java | 8 ---
.../org/apache/isis/runtime/memento/Memento.java | 5 +-
.../apache/isis/runtime/memento/MementoStore.java | 17 +++++
.../isis/runtime/memento/MementoStoreLegacy.java} | 62 ++++++++++-------
.../java/org/apache/isis/runtime/memento/Null.java | 2 +-
.../isis/runtime/memento/ObjectAdapterMemento.java | 12 ++--
.../memento/ObjectAdapterMementoCollection.java | 33 +++------
.../memento/ObjectAdapterMementoDefault.java | 61 +++++++++--------
.../memento/ObjectAdapterMementoSupport.java | 2 +-
.../ObjectAdapterMementoSupport_usingDefault.java | 55 +++++++++------
.../system/persistence/PersistenceSession.java | 5 --
.../wicket/ConverterForObjectAdapterMemento.java | 2 +-
.../wicket/model/models/EntityCollectionModel.java | 6 +-
.../viewer/wicket/model/models/EntityModel.java | 18 ++---
.../viewer/wicket/model/models/ScalarModel.java | 3 +-
.../model/models/ScalarModelWithPending.java | 2 +-
.../viewer/wicket/model/models/ValueModel.java | 2 +-
.../collection/AssociatedWithActionsHelper.java | 2 +-
.../CollectionContentsAsAjaxTablePanel.java | 79 +++++++++++-----------
.../entity/icontitle/EntityIconAndTitlePanel.java | 4 +-
.../scalars/ScalarPanelSelect2Abstract.java | 3 +-
.../scalars/reference/ReferencePanel.java | 7 +-
.../widgets/breadcrumbs/BreadcrumbPanel.java | 4 +-
.../linkandlabel/ActionLinkFactoryAbstract.java | 2 +-
.../ObjectAdapterMementoProviderAbstract.java | 4 +-
.../webapp/context/IsisWebAppCommonContext.java | 4 ++
.../bootstrapping/builtin-domain-services.list | 1 -
.../bootstrapping/builtin-singleton.list | 2 +-
30 files changed, 229 insertions(+), 224 deletions(-)
diff --git a/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java b/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java
index 1be6dcb..213eecc 100644
--- a/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java
+++ b/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext.java
@@ -31,12 +31,13 @@ import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.ParentedOid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.facets.object.callbacks.LifecycleEventFacet;
+import org.apache.isis.metamodel.objectmanager.ObjectManager;
+import org.apache.isis.metamodel.objectmanager.create.ObjectCreator;
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.OneToManyAssociation;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.memento.Data;
import org.apache.isis.runtime.system.context.session.RuntimeContextBase;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
import org.apache.isis.security.authentication.AuthenticationSession;
@@ -67,12 +68,12 @@ final public class ObjectAdapterContext {
private final IsisPersistenceSessionJdo persistenceSession;
@Getter private final SpecificationLoader specificationLoader;
private final ObjectAdapterContext_ObjectAdapterProvider objectAdapterProviderMixin;
- private final ObjectAdapterContext_MementoSupport mementoSupportMixin;
private final ObjectAdapterContext_NewIdentifier newIdentifierMixin;
private final ObjectAdapterContext_DependencyInjection dependencyInjectionMixin;
private final ServiceInjector serviceInjector;
final ObjectAdapterContext_ObjectCreation objectCreationMixin;
private final ObjectAdapterContext_LifecycleEventSupport lifecycleEventMixin;
+ private final ObjectManager objectManager;
private ObjectAdapterContext(
MetaModelContext mmc,
@@ -82,12 +83,13 @@ final public class ObjectAdapterContext {
val runtimeContext = new RuntimeContextBase(mmc) {};
this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, runtimeContext);
- this.mementoSupportMixin = new ObjectAdapterContext_MementoSupport(this, persistenceSession);
this.newIdentifierMixin = new ObjectAdapterContext_NewIdentifier(persistenceSession, runtimeContext.getSpecificationLoader());
this.dependencyInjectionMixin = new ObjectAdapterContext_DependencyInjection(runtimeContext);
this.objectCreationMixin = new ObjectAdapterContext_ObjectCreation(this, runtimeContext);
this.lifecycleEventMixin = new ObjectAdapterContext_LifecycleEventSupport(runtimeContext);
+ this.objectManager = mmc.getObjectManager();
+
this.persistenceSession = persistenceSession;
this.specificationLoader = mmc.getSpecificationLoader();
this.serviceInjector = mmc.getServiceInjector();
@@ -125,7 +127,12 @@ final public class ObjectAdapterContext {
// package private
Object instantiateAndInjectServices(ObjectSpecification objectSpec) {
- return dependencyInjectionMixin.instantiateAndInjectServices(objectSpec);
+
+ val objectCreateRequest = ObjectCreator.Request.of(objectSpec);
+ return objectManager.createObject(objectCreateRequest);
+
+ // legacy of
+ //return dependencyInjectionMixin.instantiateAndInjectServices(objectSpec);
}
// -- FACTORIES
@@ -161,7 +168,6 @@ final public class ObjectAdapterContext {
private final ObjectAdapterFactories objectAdapterFactories;
-
// package private
ObjectAdapterFactories getFactories() {
return objectAdapterFactories;
@@ -214,16 +220,6 @@ final public class ObjectAdapterContext {
return objectAdapterProviderMixin;
}
- // -- MEMENTO SUPPORT
-
- public static interface MementoRecreateObjectSupport {
- ObjectAdapter recreateObject(ObjectSpecification spec, Oid oid, Data data);
- }
-
- public MementoRecreateObjectSupport mementoSupport() {
- return mementoSupportMixin;
- }
-
// -- LIFECYCLE EVENT SUPPORT
public void postLifecycleEventIfRequired(
diff --git a/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_DependencyInjection.java b/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_DependencyInjection.java
index 87b0198..991f49c 100644
--- a/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_DependencyInjection.java
+++ b/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_DependencyInjection.java
@@ -26,6 +26,7 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
import org.apache.isis.runtime.system.context.session.RuntimeContext;
import lombok.RequiredArgsConstructor;
+import lombok.val;
/**
* package private mixin for ObjectAdapterContext
@@ -34,29 +35,28 @@ import lombok.RequiredArgsConstructor;
* </p>
* @since 2.0
*/
-//@Log4j2
+@Deprecated // use ObjectManager.createObject instead
@RequiredArgsConstructor
class ObjectAdapterContext_DependencyInjection {
private final RuntimeContext runtimeContext;
- Object instantiateAndInjectServices(final ObjectSpecification objectSpec) {
+ Object instantiateAndInjectServices(ObjectSpecification spec) {
- final Class<?> correspondingClass = objectSpec.getCorrespondingClass();
- if (correspondingClass.isArray()) {
- return Array.newInstance(correspondingClass.getComponentType(), 0);
+ val type = spec.getCorrespondingClass();
+ if (type.isArray()) {
+ return Array.newInstance(type.getComponentType(), 0);
}
- final Class<?> cls = correspondingClass;
- if (Modifier.isAbstract(cls.getModifiers())) {
- throw new IsisException("Cannot create an instance of an abstract class: " + cls);
+ if (Modifier.isAbstract(type.getModifiers())) {
+ throw new IsisException("Cannot create an instance of an abstract class: " + type);
}
final Object newInstance;
try {
- newInstance = cls.newInstance();
+ newInstance = type.newInstance();
} catch (final IllegalAccessException | InstantiationException e) {
- throw new IsisException("Failed to create instance of type " + objectSpec.getFullIdentifier(), e);
+ throw new IsisException("Failed to create instance of type " + spec.getFullIdentifier(), e);
}
runtimeContext.getServiceInjector().injectServicesInto(newInstance);
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java
index 1e1fe38..6ff2792 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java
@@ -81,7 +81,6 @@ import org.apache.isis.metamodel.spec.EntityState;
import org.apache.isis.metamodel.spec.FreeStandingList;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtime.memento.Data;
import org.apache.isis.runtime.persistence.FixturesInstalledStateHolder;
import org.apache.isis.runtime.persistence.NotPersistableException;
import org.apache.isis.runtime.persistence.UnsupportedFindException;
@@ -873,13 +872,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
return false;
}
- // -- MEMENTO SUPPORT
-
- @Override
- public ObjectAdapter adapterOfMemento(ObjectSpecification spec, Oid oid, Data data) {
- return objectAdapterContext.mementoSupport().recreateObject(spec, oid, data);
- }
-
@Override
public ObjectAdapter adapterFor(Object pojo) {
return objectAdapterContext.getObjectAdapterProvider().adapterFor(pojo);
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 def63ac..677161a 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
@@ -37,7 +37,6 @@ 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 org.apache.isis.runtime.system.persistence.PersistenceSession;
import lombok.Getter;
import lombok.val;
@@ -67,14 +66,14 @@ public class Memento implements Serializable {
public ObjectAdapter recreateObject(
SpecificationLoader specLoader,
- PersistenceSession persistenceSession) {
+ MementoStore mementoStore) {
if (data == null) {
return null;
}
val spec = specLoader.lookupBySpecIdElseLoad(ObjectSpecId.of(data.getClassName()));
val oid = data.getOid();
- return persistenceSession.adapterOfMemento(spec, oid, data);
+ return mementoStore.adapterOfMemento(spec, oid, data);
}
@Override
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java
new file mode 100644
index 0000000..c21e0c7
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStore.java
@@ -0,0 +1,17 @@
+package org.apache.isis.runtime.memento;
+
+import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
+
+/**
+ *
+ * @deprecated introduced as refactoring step, to decouple memento code from PersistenceSession
+ *
+ */
+public interface MementoStore {
+
+ // -- TODO remove ObjectAdapter references from API
+ ObjectAdapter adapterOfMemento(ObjectSpecification spec, Oid oid, Data data);
+
+}
diff --git a/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_MementoSupport.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java
similarity index 85%
rename from core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_MementoSupport.java
rename to core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java
index 8870b5d..9bf7084 100644
--- a/core/persistence/jdo/common/src/main/java/org/apache/isis/jdo/objectadapter/ObjectAdapterContext_MementoSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/MementoStoreLegacy.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.jdo.objectadapter;
+package org.apache.isis.runtime.memento;
import java.util.LinkedHashSet;
import java.util.Set;
@@ -27,29 +27,31 @@ import java.util.stream.Stream;
import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.jdo.objectadapter.ObjectAdapterContext.MementoRecreateObjectSupport;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.adapter.oid.ParentedOid;
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.objectmanager.ObjectManager;
+import org.apache.isis.metamodel.objectmanager.create.ObjectCreator;
import org.apache.isis.metamodel.spec.ManagedObject;
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.spec.feature.OneToManyAssociation;
import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.runtime.memento.CollectionData;
-import org.apache.isis.runtime.memento.Data;
-import org.apache.isis.runtime.memento.ObjectData;
-import org.apache.isis.runtime.memento.StandaloneData;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.runtime.persistence.adapter.PojoAdapter;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.runtime.system.session.IsisSession;
import static org.apache.isis.commons.internal.functions._Predicates.not;
+import lombok.RequiredArgsConstructor;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -60,36 +62,39 @@ import lombok.extern.log4j.Log4j2;
* </p>
* @since 2.0
*/
-@Log4j2
-class ObjectAdapterContext_MementoSupport implements MementoRecreateObjectSupport {
+@Log4j2 @RequiredArgsConstructor
+class MementoStoreLegacy implements MementoStore {
-
- private final ObjectAdapterContext objectAdapterContext;
+ private final ObjectManager objectManager;
private final PersistenceSession persistenceSession;
-
- ObjectAdapterContext_MementoSupport(ObjectAdapterContext objectAdapterContext,
- PersistenceSession persistenceSession) {
- this.objectAdapterContext = objectAdapterContext;
- this.persistenceSession = persistenceSession;
- }
+ private final SpecificationLoader specificationLoader;
@Override
- public ObjectAdapter recreateObject(ObjectSpecification spec, Oid oid, Data data) {
+ public ObjectAdapter adapterOfMemento(ObjectSpecification spec, Oid oid, Data data) {
+
ObjectAdapter adapter;
if (spec.isParentedOrFreeCollection()) {
final Supplier<Object> emptyCollectionPojoFactory =
- ()->objectAdapterContext.instantiateAndInjectServices(spec);
-
- final Object collectionPojo = populateCollection(emptyCollectionPojoFactory, spec, (CollectionData) data);
- adapter = objectAdapterContext.recreatePojo(oid, collectionPojo);
+ ()->instantiateAndInjectServices(spec);
+ final Object collectionPojo = populateCollection(
+ emptyCollectionPojoFactory,
+ spec,
+ (CollectionData) data);
+
+
+ final ParentedOid collectionOid = (ParentedOid) oid;
+ adapter = PojoAdapter.of(
+ collectionPojo, collectionOid,
+ IsisSession.currentOrElseNull(),
+ persistenceSession);
} 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);
RootOid typedOid = (RootOid) oid;
- // recreate an adapter for the original OID (with correct version)
+ // recreate an adapter for the original OID
adapter = persistenceSession.adapterFor(typedOid);
updateObject(adapter, data);
@@ -100,12 +105,23 @@ class ObjectAdapterContext_MementoSupport implements MementoRecreateObjectSuppor
}
return adapter;
}
+
+ // -- HELPER
+
+ private Object instantiateAndInjectServices(ObjectSpecification spec) {
+
+ val objectCreateRequest = ObjectCreator.Request.of(spec);
+ return objectManager.createObject(objectCreateRequest);
+
+ // legacy of
+ //return dependencyInjectionMixin.instantiateAndInjectServices(objectSpec);
+ }
private ManagedObject recreateReference(Data data) {
// handle values
if (data instanceof StandaloneData) {
val standaloneData = (StandaloneData) data;
- return standaloneData.getAdapter(persistenceSession, objectAdapterContext.getSpecificationLoader());
+ return standaloneData.getAdapter(persistenceSession, specificationLoader);
}
// reference to entity
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Null.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Null.java
index dfc8c08..be23a54 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Null.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Null.java
@@ -25,7 +25,7 @@ import org.apache.isis.commons.internal.encoding.DataInputExtended;
import org.apache.isis.commons.internal.encoding.DataOutputExtended;
import org.apache.isis.commons.internal.encoding.Encodable;
-public class Null implements Encodable, Serializable {
+class Null implements Encodable, Serializable {
private static final long serialVersionUID = 1L;
public Null() {
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
index 3786f32..9612aa3 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
@@ -23,14 +23,12 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
-import java.util.UUID;
import java.util.stream.Collectors;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.collections.Cardinality;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.ioc.BeanSort;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecId;
@@ -44,10 +42,6 @@ import lombok.val;
*/
public interface ObjectAdapterMemento extends Serializable {
- UUID getStoreKey();
- BeanSort getBeanSort();
- RootOid getRootOid();
-
String asString();
/**
@@ -67,8 +61,8 @@ public interface ObjectAdapterMemento extends Serializable {
Bookmark asHintingBookmarkIfSupported();
ObjectSpecId getObjectSpecId();
-
- ManagedObject getObjectAdapter(SpecificationLoader specificationLoader);
+
+ ManagedObject reconstructObject(MementoStore mementoStore, SpecificationLoader specificationLoader);
// -- FACTORIES
@@ -129,5 +123,7 @@ public interface ObjectAdapterMemento extends Serializable {
return memento;
}
+
+
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
index 34fcfc8..d8c4732 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
@@ -19,14 +19,11 @@
package org.apache.isis.runtime.memento;
import java.util.ArrayList;
-import java.util.UUID;
import java.util.stream.Collectors;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.BeanSort;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -50,15 +47,16 @@ final class ObjectAdapterMementoCollection implements ObjectAdapterMemento {
@Getter(onMethod = @__({@Override})) private final ObjectSpecId objectSpecId;
@Override
- public ManagedObject getObjectAdapter(SpecificationLoader specificationLoader) {
-
+ public ManagedObject reconstructObject(MementoStore mementoStore, SpecificationLoader specificationLoader) {
+
//TODO[2112] we don't need the persistence layer to do that!
val listOfPojos = getContainer().stream()
- .map(memento->memento.getObjectAdapter(specificationLoader))
- .filter(_NullSafe::isPresent)
- .map(ManagedObject::getPojo)
- .filter(_NullSafe::isPresent)
- .collect(Collectors.toCollection(ArrayList::new));
+ .map(memento->((ObjectAdapterMementoDefault)memento).getObjectAdapter(mementoStore, specificationLoader))
+ .filter(_NullSafe::isPresent)
+ .map(ManagedObject::getPojo)
+ .filter(_NullSafe::isPresent)
+ .collect(Collectors.toCollection(ArrayList::new));
+
return IsisContext.getPersistenceSession().get().adapterFor(listOfPojos);
}
@@ -81,21 +79,6 @@ final class ObjectAdapterMementoCollection implements ObjectAdapterMemento {
return getContainer();
}
- @Override
- public BeanSort getBeanSort() {
- return BeanSort.COLLECTION;
- }
-
- @Override
- public UUID getStoreKey() {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public RootOid getRootOid() {
- // TODO Auto-generated method stub
- return null;
- }
}
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 0cb7d86..4a8fc60 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
@@ -41,6 +41,7 @@ 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.specloader.SpecificationLoader;
+import org.apache.isis.runtime.system.context.IsisContext;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
import static org.apache.isis.commons.internal.base._With.requires;
@@ -49,6 +50,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.val;
+
public class ObjectAdapterMementoDefault implements Serializable {
private static final long serialVersionUID = 1L;
@@ -119,10 +121,10 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public ManagedObject asAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
- return memento.recreateStrategy.getAdapter(memento, persistenceSession, specificationLoader);
+ return memento.recreateStrategy.getAdapter(memento, mementoStore, specificationLoader);
}
@Override
@@ -155,12 +157,14 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public ManagedObject asAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
final List<Object> listOfPojos =
- _Lists.map(memento.list, Functions.toPojo(persistenceSession, specificationLoader));
+ _Lists.map(memento.list, Functions.toPojo(mementoStore, specificationLoader));
+ PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
+
return persistenceSession.adapterFor(listOfPojos);
}
@@ -196,7 +200,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
public abstract ManagedObject asAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader);
public abstract int hashCode(ObjectAdapterMementoDefault memento);
@@ -216,7 +220,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
ManagedObject recreateAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
ObjectSpecId specId = memento.objectSpecId;
@@ -247,7 +251,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public void resetVersion(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
}
},
@@ -259,7 +263,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
ManagedObject recreateAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
RootOid rootOid = Oid.unmarshaller().unmarshal(memento.persistentOidStr, RootOid.class);
@@ -281,12 +285,13 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public void resetVersion(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
//XXX REVIEW: this may be redundant because recreateAdapter also guarantees the version will be reset.
final ManagedObject adapter = recreateAdapter(
- memento, persistenceSession, specificationLoader);
+ memento, mementoStore, specificationLoader);
+
Oid oid = ManagedObject._identify(adapter);
memento.persistentOidStr = oid.enString();
}
@@ -318,10 +323,10 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
ManagedObject recreateAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
- return memento.transientMemento.recreateObject(specificationLoader, persistenceSession);
+ return memento.transientMemento.recreateObject(specificationLoader, mementoStore);
}
@Override
@@ -342,22 +347,22 @@ public class ObjectAdapterMementoDefault implements Serializable {
@Override
public void resetVersion(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
}
};
public ManagedObject getAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
- return recreateAdapter(memento, persistenceSession, specificationLoader);
+ return recreateAdapter(memento, mementoStore, specificationLoader);
}
abstract ManagedObject recreateAdapter(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader);
public abstract boolean equals(
@@ -370,7 +375,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
public abstract void resetVersion(
ObjectAdapterMementoDefault memento,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader);
}
@@ -525,11 +530,11 @@ public class ObjectAdapterMementoDefault implements Serializable {
public void resetVersion(
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
ensureScalar();
- recreateStrategy.resetVersion(this, persistenceSession, specificationLoader);
+ recreateStrategy.resetVersion(this, mementoStore, specificationLoader);
}
@@ -556,7 +561,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
* can call {@link #setAdapter(ManagedObject)} to keep this memento in sync.
*/
public ManagedObject getObjectAdapter(
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
val spec = specificationLoader.loadSpecification(objectSpecId);
@@ -570,7 +575,7 @@ public class ObjectAdapterMementoDefault implements Serializable {
return spec.getMetaModelContext().lookupServiceAdapterById(objectSpecId.asString());
}
- return cardinality.asAdapter(this, persistenceSession, specificationLoader);
+ return cardinality.asAdapter(this, mementoStore, specificationLoader);
}
/**
@@ -593,20 +598,20 @@ public class ObjectAdapterMementoDefault implements Serializable {
*/
public boolean containedIn(
List<ObjectAdapterMementoDefault> mementos,
- PersistenceSession persistenceSession,
+ MementoStore mementoStore,
SpecificationLoader specificationLoader) {
ensureScalar();
//XXX REVIEW: heavy handed, ought to be possible to just compare the OIDs
// ignoring the concurrency checking
- val currAdapter = getObjectAdapter(persistenceSession, specificationLoader);
+ val currAdapter = getObjectAdapter(mementoStore, specificationLoader);
for (val memento : mementos) {
if(memento == null) {
continue;
}
- val otherAdapter = memento.getObjectAdapter(persistenceSession, specificationLoader);
+ val otherAdapter = memento.getObjectAdapter(mementoStore, specificationLoader);
if(currAdapter == otherAdapter) {
return true;
}
@@ -645,12 +650,12 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
public static Function<ObjectAdapterMementoDefault, ManagedObject> fromMemento(
- final PersistenceSession persistenceSession,
+ final MementoStore mementoStore,
final SpecificationLoader specificationLoader) {
return memento->{
try {
- return memento.getObjectAdapter(persistenceSession, specificationLoader);
+ return memento.getObjectAdapter(mementoStore, specificationLoader);
} catch (ObjectNotFoundException e) {
// this can happen if for example the object is not visible (due to the security tenanted facet)
return null;
@@ -659,14 +664,14 @@ public class ObjectAdapterMementoDefault implements Serializable {
}
public static Function<ObjectAdapterMementoDefault, Object> toPojo(
- final PersistenceSession persistenceSession,
+ final MementoStore mementoStore,
final SpecificationLoader specificationLoader) {
return memento->{
if(memento == null) {
return null;
}
- val objectAdapter = memento.getObjectAdapter(persistenceSession, specificationLoader);
+ val objectAdapter = memento.getObjectAdapter(mementoStore, specificationLoader);
if(objectAdapter == null) {
return null;
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport.java
index 238f20d..9c409ae 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport.java
@@ -34,6 +34,6 @@ public interface ObjectAdapterMementoSupport {
ObjectAdapterMemento mementoForPojo(Object pojo);
- ManagedObject reconstructObjectAdapter(ObjectAdapterMemento memento);
+ ManagedObject reconstructObject(ObjectAdapterMemento memento);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
index 5b3a7bf..5252021 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
@@ -26,13 +26,15 @@ import javax.inject.Singleton;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.ioc.BeanSort;
import org.apache.isis.metamodel.adapter.oid.RootOid;
+import org.apache.isis.metamodel.objectmanager.ObjectManager;
+import org.apache.isis.metamodel.objectmanager.load.ObjectLoader;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -48,6 +50,8 @@ public class ObjectAdapterMementoSupport_usingDefault
implements ObjectAdapterMementoSupport {
@Inject @Getter private SpecificationLoader specificationLoader;
+ @Inject private ObjectManager objectManager;
+ private MementoStore mementoStore;
@Override
public ObjectAdapterMemento mementoForRootOid(RootOid rootOid) {
@@ -72,8 +76,27 @@ implements ObjectAdapterMementoSupport {
}
@Override
- public ManagedObject reconstructObjectAdapter(ObjectAdapterMemento memento) {
- return memento.getObjectAdapter(specificationLoader);
+ public ManagedObject reconstructObject(ObjectAdapterMemento memento) {
+ if(memento==null) {
+ return null;
+ }
+ if(mementoStore==null) {
+ val ps = IsisContext.getPersistenceSession().get();
+ mementoStore = new MementoStoreLegacy(objectManager, ps, specificationLoader);
+ }
+
+
+ return memento.reconstructObject(mementoStore, specificationLoader);
+
+// val specId = memento.getObjectSpecId();
+// val spec = specificationLoader.loadSpecification(specId);
+//
+// if(memento.getIdentifier()==null) {
+// System.out.println("#### has no id: " + memento);
+// }
+//
+// val objectLoadRequest = ObjectLoader.Request.of(spec, memento.getIdentifier());
+// return objectManager.loadObject(objectLoadRequest);
}
@RequiredArgsConstructor(staticName = "of")
@@ -84,21 +107,6 @@ implements ObjectAdapterMementoSupport {
private final ObjectAdapterMementoDefault delegate;
@Override
- public UUID getStoreKey() {
- return null;
- }
-
- @Override
- public BeanSort getBeanSort() {
- return null;
- }
-
- @Override
- public RootOid getRootOid() {
- return null;
- }
-
- @Override
public String asString() {
return delegate.asString();
}
@@ -119,12 +127,15 @@ implements ObjectAdapterMementoSupport {
}
@Override
- public ManagedObject getObjectAdapter(SpecificationLoader specificationLoader) {
- return delegate.getObjectAdapter(persistenceSession(), specificationLoader);
+ public ManagedObject reconstructObject(
+ MementoStore mementoStore, SpecificationLoader specificationLoader) {
+
+ return delegate.getObjectAdapter(mementoStore, specificationLoader);
}
- private PersistenceSession persistenceSession() {
- return IsisContext.getPersistenceSession().orElse(null);
+ @Override
+ public String toString() {
+ return delegate.toString();
}
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
index 25c1714..5057f90 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/PersistenceSession.java
@@ -29,11 +29,8 @@ import org.apache.isis.commons.internal.components.SessionScopedComponent;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.spec.EntityState;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtime.memento.Data;
import org.apache.isis.runtime.persistence.objectstore.transaction.PersistenceCommand;
import org.apache.isis.runtime.persistence.objectstore.transaction.TransactionalResource;
@@ -105,8 +102,6 @@ SessionScopedComponent {
// -------------------------------------------------------------------------------------------------
// -- TODO remove ObjectAdapter references from API
-
- ObjectAdapter adapterOfMemento(ObjectSpecification spec, Oid oid, Data data);
<T> List<ObjectAdapter> allMatchingQuery(final Query<T> query);
<T> ObjectAdapter firstMatchingQuery(final Query<T> query);
diff --git a/core/viewers/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java b/core/viewers/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
index 3424853..558c470 100644
--- a/core/viewers/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
+++ b/core/viewers/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
@@ -67,7 +67,7 @@ public class ConverterForObjectAdapterMemento implements IConverter<ObjectAdapte
if (memento == null) {
return null;
}
- val adapter = memento.getObjectAdapter(commonContext.getSpecificationLoader());
+ val adapter = commonContext.reconstructObject(memento);
val spec = adapter.getSpecification();
if(spec!=null && spec.isValue()) {
return memento.toString();
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 225e96a..142a641 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -190,7 +190,7 @@ implements LinksProvider, UiHintContainer {
private Stream<ManagedObject> loadElementsOneByOne(final EntityCollectionModel model) {
return stream(model.mementoList)
- .map(memento->memento.getObjectAdapter(model.getSpecificationLoader()))
+ .map(model.getCommonContext()::reconstructObject)
.filter(_NullSafe::isPresent);
}
@@ -236,8 +236,8 @@ implements LinksProvider, UiHintContainer {
@Override
List<ManagedObject> load(EntityCollectionModel colModel) {
- final ManagedObject adapter = colModel.getParentObjectAdapterMemento()
- .getObjectAdapter(colModel.getSpecificationLoader());
+ val adapter = colModel.getCommonContext()
+ .reconstructObject(colModel.getParentObjectAdapterMemento());
final OneToManyAssociation collection = colModel.collectionMemento
.getCollection(colModel.getSpecificationLoader());
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index baff894..73f163b 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -334,7 +334,7 @@ implements ObjectAdapterModel, UiHintContainer {
if (adapterMemento == null) {
return null;
}
- val adapter = adapterMemento.getObjectAdapter(super.getSpecificationLoader());
+ val adapter = super.getCommonContext().reconstructObject(adapterMemento);
return adapter;
}
@@ -344,12 +344,10 @@ implements ObjectAdapterModel, UiHintContainer {
adapterMemento = ObjectAdapterMemento.ofAdapter(adapter, super.getMementoSupport());
}
- public void setObjectMemento(final ObjectAdapterMemento memento) {
- super.setObject(
- memento != null
- ? memento.getObjectAdapter(super.getSpecificationLoader())
- : null);
- adapterMemento = memento;
+ public void setObjectMemento(final ObjectAdapterMemento adapterMemento) {
+ val adapter = super.getCommonContext().reconstructObject(adapterMemento);
+ super.setObject(adapter);
+ this.adapterMemento = adapterMemento;
}
@@ -508,10 +506,8 @@ implements ObjectAdapterModel, UiHintContainer {
}
private ManagedObject getPendingAdapter() {
- final ObjectAdapterMemento memento = getObject();
- return memento != null
- ? memento.getObjectAdapter(entityModel.getSpecificationLoader())
- : null;
+ val memento = getObject();
+ return entityModel.getCommonContext().reconstructObject(memento);
}
public ManagedObject getPendingElseCurrentAdapter() {
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index afd0ca7..8af101e 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -735,8 +735,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
private void getAndStore(final EntityModel parentEntityModel) {
final ObjectAdapterMemento parentAdapterMemento = parentEntityModel.getObjectAdapterMemento();
final OneToOneAssociation property = propertyMemento.getProperty(getSpecificationLoader());
- final ManagedObject parentAdapter = parentAdapterMemento.getObjectAdapter(getSpecificationLoader());
-
+ final ManagedObject parentAdapter = super.getCommonContext().reconstructObject(parentAdapterMemento);
setObjectFromPropertyIfVisible(ScalarModel.this, property, parentAdapter);
}
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
index 6239bbc..342d269 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
@@ -78,7 +78,7 @@ public interface ScalarModelWithPending extends Serializable {
if (ownerPending != null) {
log.debug("setting to pending: {}", ownerPending.toString());
ownerScalarModel.setObject(
- ownerPending.getObjectAdapter(ownerScalarModel.getSpecificationLoader()));
+ ownerScalarModel.getCommonContext().reconstructObject(ownerPending));
}
}
}
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index 4b2bb78..ffa585b 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -40,7 +40,7 @@ public class ValueModel extends ModelAbstract<ManagedObject> {
@Override
protected ManagedObject load() {
- return adapterMemento.getObjectAdapter(super.getSpecificationLoader());
+ return super.getCommonContext().reconstructObject(adapterMemento);
}
// //////////////////////////////////////
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
index 48662ef..8a5bdcb 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
@@ -68,7 +68,7 @@ public class AssociatedWithActionsHelper implements Serializable {
private ObjectSpecification getObjectSpecification() {
val parentMemento = collectionModel.getParentObjectAdapterMemento();
- val parentAdapter = parentMemento.getObjectAdapter(collectionModel.getSpecificationLoader());
+ val parentAdapter = collectionModel.getCommonContext().reconstructObject(parentMemento);
return parentAdapter.getSpecification();
}
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index 4d33ed0..0255fa0 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -189,54 +189,55 @@ implements CollectionCountProvider {
final ObjectSpecification parentSpecIfAny =
getModel().isParented()
- ? getModel().getParentObjectAdapterMemento().getObjectAdapter(getCommonContext().getSpecificationLoader()).getSpecification()
+ ? getCommonContext().reconstructObject(getModel().getParentObjectAdapterMemento())
+ .getSpecification()
: null;
- final Predicate<ObjectAssociation> predicate = ObjectAssociation.Predicates.PROPERTIES
- .and((final ObjectAssociation association)->{
- final Stream<Facet> facets = association.streamFacets()
- .filter((final Facet facet)->
- facet instanceof WhereValueFacet && facet instanceof HiddenFacet);
- return !facets
- .map(facet->(WhereValueFacet) facet)
- .anyMatch(wawF->wawF.where().includes(whereContext));
+ final Predicate<ObjectAssociation> predicate = ObjectAssociation.Predicates.PROPERTIES
+ .and((final ObjectAssociation association)->{
+ final Stream<Facet> facets = association.streamFacets()
+ .filter((final Facet facet)->
+ facet instanceof WhereValueFacet && facet instanceof HiddenFacet);
+ return !facets
+ .map(facet->(WhereValueFacet) facet)
+ .anyMatch(wawF->wawF.where().includes(whereContext));
- })
- .and(associationDoesNotReferenceParent(parentSpecIfAny));
+ })
+ .and(associationDoesNotReferenceParent(parentSpecIfAny));
- final Stream<? extends ObjectAssociation> propertyList =
- typeOfSpec.streamAssociations(Contributed.INCLUDED)
- .filter(predicate);
+ final Stream<? extends ObjectAssociation> propertyList =
+ typeOfSpec.streamAssociations(Contributed.INCLUDED)
+ .filter(predicate);
- final Map<String, ObjectAssociation> propertyById = _Maps.newLinkedHashMap();
- propertyList.forEach(property->
- propertyById.put(property.getId(), property));
+ final Map<String, ObjectAssociation> propertyById = _Maps.newLinkedHashMap();
+ propertyList.forEach(property->
+ propertyById.put(property.getId(), property));
- List<String> propertyIds = _Lists.newArrayList(propertyById.keySet());
+ List<String> propertyIds = _Lists.newArrayList(propertyById.keySet());
- if(propertyIdComparator!=null) {
- propertyIds.sort(propertyIdComparator);
- }
+ if(propertyIdComparator!=null) {
+ propertyIds.sort(propertyIdComparator);
+ }
- // optional SPI to reorder
- final Can<TableColumnOrderService> tableColumnOrderServices =
- getServiceRegistry().select(TableColumnOrderService.class);
+ // optional SPI to reorder
+ final Can<TableColumnOrderService> tableColumnOrderServices =
+ getServiceRegistry().select(TableColumnOrderService.class);
- for (final TableColumnOrderService tableColumnOrderService : tableColumnOrderServices) {
- final List<String> propertyReorderedIds = reordered(tableColumnOrderService, propertyIds);
- if(propertyReorderedIds != null) {
- propertyIds = propertyReorderedIds;
- break;
- }
- }
+ for (final TableColumnOrderService tableColumnOrderService : tableColumnOrderServices) {
+ final List<String> propertyReorderedIds = reordered(tableColumnOrderService, propertyIds);
+ if(propertyReorderedIds != null) {
+ propertyIds = propertyReorderedIds;
+ break;
+ }
+ }
- for (final String propertyId : propertyIds) {
- final ObjectAssociation property = propertyById.get(propertyId);
- if(property != null) {
- final ColumnAbstract<ManagedObject> nopc = createObjectAdapterPropertyColumn(property);
- columns.add(nopc);
- }
- }
+ for (final String propertyId : propertyIds) {
+ final ObjectAssociation property = propertyById.get(propertyId);
+ if(property != null) {
+ final ColumnAbstract<ManagedObject> nopc = createObjectAdapterPropertyColumn(property);
+ columns.add(nopc);
+ }
+ }
}
private List<String> reordered(
@@ -247,7 +248,7 @@ implements CollectionCountProvider {
final ObjectAdapterMemento parentObjectAdapterMemento = getModel().getParentObjectAdapterMemento();
if(parentObjectAdapterMemento != null) {
- val parentObjectAdapter = parentObjectAdapterMemento.getObjectAdapter(getCommonContext().getSpecificationLoader());
+ val parentObjectAdapter = getCommonContext().reconstructObject(parentObjectAdapterMemento);
final Object parent = parentObjectAdapter.getPojo();
final String collectionId = getModel().getCollectionMemento().getId();
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index a188d18..c7cea13 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -222,9 +222,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
public ManagedObject getContextAdapterIfAny() {
ObjectAdapterModel model = getModel();
ObjectAdapterMemento contextAdapterMementoIfAny = model.getContextAdapterIfAny();
- return contextAdapterMementoIfAny != null
- ? contextAdapterMementoIfAny.getObjectAdapter(getCommonContext().getSpecificationLoader())
- : null;
+ return getCommonContext().reconstructObject(contextAdapterMementoIfAny);
}
static String abbreviated(final String str, final int maxLength) {
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index 327d934..79b81ae 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -247,8 +247,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
proposedValue = (ObjectAdapterMemento) proposedValueObj;
}
- val proposedAdapter = proposedValue.getObjectAdapter(scalarModel.getSpecificationLoader());
-
+ val proposedAdapter = scalarModel.getCommonContext().reconstructObject(proposedValue);
final String reasonIfAny = scalarModel.validate(proposedAdapter);
if (reasonIfAny != null) {
final ValidationError error = new ValidationError();
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index c137a04..5159429 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -171,7 +171,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
if(memento == null) {
return null;
}
- val adapter = memento.getObjectAdapter(getSpecificationLoader());
+ val adapter = ReferencePanel.super.getCommonContext().reconstructObject(memento);
return adapter != null ? adapter.titleString(null) : null;
}
@@ -410,10 +410,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
select2.getModel().setObject(convertedInput);
}
- val adapter = convertedInput!=null
- ? convertedInput.getObjectAdapter(super.getSpecificationLoader())
- :null;
-
+ val adapter = super.getCommonContext().reconstructObject(convertedInput);
getModel().setObject(adapter);
}
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index 46cc86e..6e2a89c 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -73,7 +73,9 @@ public class BreadcrumbPanel extends PanelAbstract<IModel<Void>> {
}
private String titleFor(final EntityModel model) {
- return model.getObjectAdapterMemento().getObjectAdapter(getCommonContext().getSpecificationLoader()).titleString(null);
+ return getCommonContext()
+ .reconstructObject(model.getObjectAdapterMemento())
+ .titleString(null);
}
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index 440e7a5..2e57f20 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -108,7 +108,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
final List<Object> selectedPojos = selectedMementos.stream()
.filter(_NullSafe::isPresent)
- .map(memento -> memento.getObjectAdapter(commonContext.getSpecificationLoader()))
+ .map(commonContext::reconstructObject)
.filter(_NullSafe::isPresent)
.map(ManagedObject::getPojo)
.filter(_NullSafe::isPresent)
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
index ef989e1..ff9a1d4 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
@@ -64,7 +64,7 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
return NULL_DISPLAY_TEXT;
}
- val objectAdapter = choice.getObjectAdapter(commonContext.getSpecificationLoader());
+ val objectAdapter = commonContext.reconstructObject(choice);
final IConverter<Object> converter = findConverter(objectAdapter);
return converter != null
? converter.convertToString(objectAdapter.getPojo(), getLocale())
@@ -123,7 +123,7 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
matches.addAll(choicesMementos);
} else {
for (ObjectAdapterMemento candidate : choicesMementos) {
- val objectAdapter = candidate.getObjectAdapter(commonContext.getSpecificationLoader());
+ val objectAdapter = commonContext.reconstructObject(candidate);
String title = objectAdapter.titleString(objectAdapter);
if (title.toLowerCase().contains(term.toLowerCase())) {
matches.add(candidate);
diff --git a/core/webapp/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java b/core/webapp/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java
index 77ff67f..5a16b78 100644
--- a/core/webapp/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java
+++ b/core/webapp/src/main/java/org/apache/isis/webapp/context/IsisWebAppCommonContext.java
@@ -100,6 +100,10 @@ public class IsisWebAppCommonContext implements MetaModelContext.Delegating {
return ObjectAdapterMemento.ofRootOid(rootOid, getMementoSupport());
}
+ public ManagedObject reconstructObject(ObjectAdapterMemento memento) {
+ return getMementoSupport().reconstructObject(memento);
+ }
+
// -- COMMON CONTEXT PROVIDER INTERFACE
public static interface Provider {
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
index 99a194d..8e91651 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
@@ -17,7 +17,6 @@ org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi
org.apache.isis.runtime.services.command.CommandDtoServiceInternalDefault
org.apache.isis.runtime.services.confmenu.ConfigurationViewServiceDefault
org.apache.isis.runtime.services.email.EmailServiceDefault
-org.apache.isis.extensions.hsqldbmgr.services.HsqlDbManagerMenu
org.apache.isis.runtime.services.i18n.po.TranslationServicePoMenu
org.apache.isis.runtime.services.ixn.InteractionDtoServiceInternalDefault
org.apache.isis.runtime.services.publish.PublishingServiceInternalDefault
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
index 430045f..2c9e98b 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
@@ -59,7 +59,7 @@ org.apache.isis.runtime.services.email.EmailServiceDefault
org.apache.isis.runtime.services.eventbus.EventBusServiceSpring
org.apache.isis.runtime.services.factory.FactoryServiceInternalDefault
org.apache.isis.runtime.services.homepage.HomePageResolverServiceDefault
-org.apache.isis.extensions.hsqldbmgr.services.HsqlDbManagerMenu
+#org.apache.isis.extensions.hsqldbmgr.services.HsqlDbManagerMenu
org.apache.isis.runtime.services.i18n.po.TranslationServicePo
org.apache.isis.runtime.services.i18n.po.TranslationServicePoMenu
org.apache.isis.runtime.services.ixn.InteractionDtoServiceInternalDefault