This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch 3199_mm.refactor in repository https://gitbox.apache.org/repos/asf/isis.git
commit e82f676b9f01880fb4bb690c96dbd702271df27d Author: Andi Huber <ahu...@apache.org> AuthorDate: Mon Sep 5 11:09:43 2022 +0200 ISIS-3199: Wicket Viewer: ManagedObjects do provide mementos now --- .../_testing/ObjectMementoService_forTesting.java | 8 ------- .../isis/core/metamodel/object/Bookmarkable.java | 5 +++++ .../metamodel/objectmanager/ObjectManager.java | 3 +++ .../memento/ObjectMementoService.java | 3 --- .../core/runtime/context/IsisAppCommonContext.java | 25 +--------------------- .../memento/ObjectMementoServiceDefault.java | 7 ------ .../wicket/model/models/ManagedObjectModel.java | 10 ++------- .../model/models/ScalarModelWithMultiChoice.java | 19 ++++++++++------ .../model/models/ScalarModelWithSingleChoice.java | 3 +-- .../viewer/wicket/model/models/ValueModel.java | 2 +- .../providers/ChoiceProviderForReferences.java | 10 ++++----- .../select2/providers/ChoiceProviderForValues.java | 3 ++- 12 files changed, 32 insertions(+), 66 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java index b50e6e91d7..a57c4f73cb 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ObjectMementoService_forTesting.java @@ -19,22 +19,14 @@ package org.apache.isis.core.metamodel._testing; import org.apache.isis.applib.id.LogicalType; -import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.core.metamodel.object.ManagedObject; import org.apache.isis.core.metamodel.object.PackedManagedObject; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService; -import lombok.NonNull; - public class ObjectMementoService_forTesting implements ObjectMementoService { - @Override - public ObjectMemento mementoForBookmark(@NonNull final Bookmark bookmark) { - return null; - } - @Override public ObjectMemento mementoForSingle(final ManagedObject adapter) { return null; diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java index 1e38acdbc6..352a3ff369 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/Bookmarkable.java @@ -23,6 +23,7 @@ import java.util.Optional; import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.commons.internal.base._Casts; +import org.apache.isis.commons.internal.exceptions._Exceptions; import org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy; import org.apache.isis.core.metamodel.objectmanager.ObjectManager; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; @@ -54,6 +55,10 @@ public interface Bookmarkable { * is supported and a {@link Bookmark} is available. */ Optional<ObjectMemento> getMemento(); + default ObjectMemento getMementoElseFail() { + return getMemento() + .orElseThrow(()->_Exceptions.illegalState("failed to create memento for %s", this)); + } // -- SPECIAL SUB INTERFACES diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java index 72465094b6..a6322cf434 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java @@ -69,6 +69,9 @@ public interface ObjectManager extends HasMetaModelContext { _Exceptions.unrecoverable("failed to create memento for %s", object.getSpecification())); } + default ManagedObject demementify(final ObjectMemento memento) { + return loadObjectElseFail(memento.getBookmark()); + } ManagedObject demementify(final ObjectSpecification spec, final ObjectMemento memento); // -- SHORTCUTS diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java index f7479d97d6..dcecb2dbd0 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMementoService.java @@ -19,7 +19,6 @@ package org.apache.isis.core.metamodel.objectmanager.memento; import org.apache.isis.applib.id.LogicalType; -import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.core.metamodel.object.ManagedObject; import org.apache.isis.core.metamodel.object.PackedManagedObject; @@ -30,8 +29,6 @@ import lombok.NonNull; */ public interface ObjectMementoService { - ObjectMemento mementoForBookmark(@NonNull Bookmark bookmark); - ObjectMemento mementoForSingle(ManagedObject adapter); ObjectMemento mementoForMulti(PackedManagedObject adapter); diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java index b5c1a04a9c..a16ac8c110 100644 --- a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java +++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisAppCommonContext.java @@ -23,7 +23,6 @@ import java.util.function.Supplier; import org.springframework.lang.Nullable; -import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.applib.services.iactnlayer.InteractionLayerTracker; import org.apache.isis.applib.services.inject.ServiceInjector; import org.apache.isis.applib.services.menu.MenuBarsService; @@ -36,12 +35,9 @@ import org.apache.isis.core.metamodel.context.MetaModelContext; import org.apache.isis.core.metamodel.object.ManagedObject; import org.apache.isis.core.metamodel.objectmanager.ObjectManager; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; -import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoService; import org.apache.isis.core.metamodel.specloader.SpecificationLoader; -import lombok.AccessLevel; import lombok.Getter; -import lombok.NonNull; import lombok.val; /** @@ -72,9 +68,6 @@ public class IsisAppCommonContext implements HasMetaModelContext { @Getter(lazy = true) private final InteractionLayerTracker interactionLayerTracker = lookupServiceElseFail(InteractionLayerTracker.class); - @Getter(lazy = true, value = AccessLevel.PRIVATE) - private final ObjectMementoService mementoService = lookupServiceElseFail(ObjectMementoService.class); - public Optional<MessageBroker> getMessageBroker() { return getMetaModelContext().getServiceRegistry().lookupService(MessageBroker.class); } @@ -104,20 +97,8 @@ public class IsisAppCommonContext implements HasMetaModelContext { return getMetaModelContext().getServiceInjector().injectServicesInto(pojo); } - public ObjectMemento mementoForSingle(final ManagedObject adapter) { - return getMementoService().mementoForSingle(adapter); - } - - public ObjectMemento mementoForAnyCardinality(@NonNull final ManagedObject adapter) { - return getMementoService().mementoForAnyCardinality(adapter); - } - - public ObjectMemento mementoForBookmark(final Bookmark bookmark) { - return getMementoService().mementoForBookmark(bookmark); - } - public ManagedObject reconstructObject(final ObjectMemento memento) { - return getMementoService().reconstructObject(memento); + return getObjectManager().demementify(memento); } // -- FOR THOSE THAT IMPLEMENT BY DELEGATION @@ -138,10 +119,6 @@ public class IsisAppCommonContext implements HasMetaModelContext { return getCommonContext().getSpecificationLoader(); } - default ObjectMementoService getMementoService() { - return getCommonContext().getMementoService(); - } - default ServiceInjector getServiceInjector() { return getCommonContext().getServiceInjector(); } diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java index 2ec22509f2..acb2f6c490 100644 --- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/memento/ObjectMementoServiceDefault.java @@ -31,7 +31,6 @@ import org.springframework.stereotype.Service; import org.apache.isis.applib.annotation.PriorityPrecedence; import org.apache.isis.applib.id.LogicalType; -import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.commons.collections.Can; import org.apache.isis.commons.internal.base._NullSafe; import org.apache.isis.commons.internal.exceptions._Exceptions; @@ -49,7 +48,6 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader; import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; import lombok.Getter; -import lombok.NonNull; import lombok.val; /** @@ -67,11 +65,6 @@ public class ObjectMementoServiceDefault implements ObjectMementoService { @Inject private MetaModelContext mmc; @Inject private ObjectManager objectManager; - @Override - public ObjectMemento mementoForBookmark(@NonNull final Bookmark bookmark) { - return _ObjectMementoForScalar.createPersistent(bookmark, specificationLoader); - } - @Override public ObjectMemento mementoForSingle(@Nullable final ManagedObject adapter) { MmAssertionUtil.assertPojoIsScalar(adapter); diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java index 72a9f87ff1..0a34c4a5ea 100644 --- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java +++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java @@ -26,7 +26,6 @@ import org.springframework.lang.Nullable; import org.apache.isis.applib.annotation.BookmarkPolicy; import org.apache.isis.applib.id.LogicalType; import org.apache.isis.applib.services.bookmark.Bookmark; -import org.apache.isis.commons.internal.base._Casts; import org.apache.isis.core.metamodel.object.ManagedObject; import org.apache.isis.core.metamodel.object.ManagedObjects; import org.apache.isis.core.metamodel.object.PackedManagedObject; @@ -85,7 +84,7 @@ extends ModelAbstract<ManagedObject> { if(adapter instanceof PackedManagedObject) { setObjectCollection((PackedManagedObject)adapter); } else { - memento = super.getMementoService().mementoForSingle(adapter); + memento = adapter.getMemento().orElseThrow(); } } @@ -98,12 +97,7 @@ extends ModelAbstract<ManagedObject> { } super.setObject(adapter); - - val pojos = adapter.getPojo(); - memento = super.getMementoService() - .mementoForPojos(getLogicalElementType() - .orElseGet(()->adapter.getElementSpecification().get().getLogicalType()), - _Casts.uncheckedCast(pojos)); + memento = adapter.getMemento().orElseThrow(); } public final Bookmark asBookmarkIfSupported() { diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java index 2edeaa79ef..250c7dfd70 100644 --- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java +++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiChoice.java @@ -24,6 +24,8 @@ import java.util.stream.Collectors; import org.apache.wicket.model.ChainingModel; import org.apache.wicket.model.Model; +import org.apache.isis.commons.internal.base._NullSafe; +import org.apache.isis.core.metamodel.object.Bookmarkable; import org.apache.isis.core.metamodel.object.ManagedObjects; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; @@ -68,16 +70,19 @@ implements public ArrayList<ObjectMemento> getObject() { val packedValue = pendingValue().getValue().getValue(); - val unpackedValue = ManagedObjects.unpack(scalarModel().getScalarTypeSpec(), packedValue); + val unpackedValues = ManagedObjects.unpack(scalarModel().getScalarTypeSpec(), packedValue); - log.debug("getObject() as unpackedValue {}", unpackedValue); + log.debug("getObject() as unpackedValue {}", unpackedValues); - val unpackedMemento = unpackedValue.stream() - .map(getCommonContext()::mementoForSingle) - .collect(Collectors.toCollection(()->new ArrayList<>(unpackedValue.size()))); + val mementos = unpackedValues.stream() + .filter(Bookmarkable.class::isInstance) + .map(Bookmarkable::getMemento) //TODO why can we not flat map this? + .map(opt->opt.orElse(null)) + .filter(_NullSafe::isPresent) + .collect(Collectors.toCollection(()->new ArrayList<ObjectMemento>())); - log.debug("getObject() as unpackedMemento {}", unpackedMemento); - return unpackedMemento; + log.debug("getObject() as unpackedMemento {}", mementos); + return mementos; } @Override diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java index eb8dcbdfcc..5ff1e1b4c9 100644 --- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java +++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithSingleChoice.java @@ -60,8 +60,7 @@ implements @Override public ObjectMemento getObject() { - return getCommonContext().mementoForSingle( - pendingValue().getValue().getValue()); + return pendingValue().getValue().getValue().getMemento().orElseThrow(); } @Override diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java index f704a6e08f..387c87cf01 100644 --- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java +++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java @@ -56,7 +56,7 @@ extends ModelAbstract<ManagedObject> { final @Nullable ManagedObject valueAdapter) { super(commonContext); this.objectMemberMemento = ObjectMemberMemento.forMember(objectMember); - adapterMemento = super.getMementoService().mementoForSingle(valueAdapter); + adapterMemento = valueAdapter.getMemento().orElseThrow(); } @Override diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java index 7f19182bed..b76c3d2cca 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java @@ -69,24 +69,24 @@ extends ChoiceProviderAbstractForScalarModel { } val scalarTypeSpec = scalarModel().getScalarTypeSpec(); val autoCompleteAdapters = Facets.autoCompleteExecute(scalarTypeSpec, term); - return autoCompleteAdapters.map(getCommonContext()::mementoForSingle); + return autoCompleteAdapters + .map(ManagedObject::getMementoElseFail); } // -- HELPER private Can<ObjectMemento> queryAll() { return scalarModel().getChoices() // must not return detached entities - .map(getCommonContext()::mementoForAnyCardinality); + .map(ManagedObject::getMementoElseFail); } private Can<ObjectMemento> queryWithAutoComplete(final String term) { - val commonContext = getCommonContext(); val scalarModel = scalarModel(); val pendingArgs = scalarModel.isParameter() ? ((ParameterUiModel)scalarModel).getParameterNegotiationModel().getParamValues() : Can.<ManagedObject>empty(); val pendingArgMementos = pendingArgs - .map(commonContext::mementoForAnyCardinality); + .map(ManagedObject::getMementoElseFail); if(scalarModel.isParameter()) { // recover any pendingArgs @@ -100,7 +100,7 @@ extends ChoiceProviderAbstractForScalarModel { return scalarModel .getAutoComplete(term) - .map(commonContext::mementoForSingle); + .map(ManagedObject::getMementoElseFail); } private Can<ManagedObject> reconstructPendingArgs( diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java index d1f239f33c..8d26511796 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java @@ -19,6 +19,7 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers; import org.apache.isis.commons.collections.Can; +import org.apache.isis.core.metamodel.object.ManagedObject; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.viewer.wicket.model.models.ScalarModel; @@ -42,7 +43,7 @@ extends ChoiceProviderAbstractForScalarModel { private Can<ObjectMemento> queryAll() { return scalarModel().getChoices() - .map(getCommonContext()::mementoForSingle); + .map(ManagedObject::getMementoElseFail); } }