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 2021/05/10 13:02:49 UTC

[isis] branch master updated: ISIS-2648: cleaning up EntityCollectionModel, also some notes

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 5af25b0  ISIS-2648: cleaning up EntityCollectionModel, also some notes
5af25b0 is described below

commit 5af25b07c5ad8b9eaffeaf5f578d4e0c2e091b17
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon May 10 15:02:12 2021 +0200

    ISIS-2648: cleaning up EntityCollectionModel, also some notes
---
 .../wicket/model/models/EntityCollectionModel.java | 57 +++++++++++++---------
 .../model/models/EntityCollectionModelDummy.java   | 19 --------
 .../models/EntityCollectionModelParented.java      | 31 +++++-------
 .../models/EntityCollectionModelStandalone.java    | 20 --------
 .../viewer/wicket/model/models/EntityModel.java    |  8 +--
 .../selector/CollectionSelectorHelper.java         |  6 +--
 .../selector/CollectionSelectorPanel.java          |  3 +-
 .../CollectionContentsAsAjaxTablePanel.java        |  6 +--
 8 files changed, 56 insertions(+), 94 deletions(-)

diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index bf2e326..54a25a3 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -112,24 +112,6 @@ extends
         return Can.empty();
     }
 
-    // -- INTERACTION SUPPORT
-
-    /**
-     * Returns optionally the a {@link ManagedCollection}, based on whether
-     * this is a parented collection.
-     */
-    Optional<ManagedCollection> getManagedCollection();
-
-    default Optional<ManagedObject> getParentObject() {
-        return getManagedCollection()
-                .map(ManagedCollection::getOwner);
-    }
-
-    default Optional<ObjectSpecification> getParentObjectSpecification() {
-        return getParentObject()
-                .map(ManagedObject::getSpecification);
-    }
-
     // -- TOGGLE SUPPORT
 
     Can<ObjectMemento> getToggleMementosList();
@@ -142,12 +124,41 @@ extends
     String getName();
     int getPageSize();
 
-    // -- REFACTORING TODO ...
+    // -- PARENTED STUFF
+
+    default Optional<EntityCollectionModelParented> parented() {
+        return this instanceof EntityCollectionModelParented
+            ? Optional.of((EntityCollectionModelParented)this)
+            : Optional.empty();
+    }
+
+    default Optional<Bookmark> parentedHintingBookmark() {
+        return parented()
+                .map(EntityCollectionModelParented::asHintingBookmark);
+    }
+
+    default Optional<ObjectMemento> parentedObjectAdapterMemento() {
+        return parented()
+                .map(EntityCollectionModelParented::getParentObjectAdapterMemento);
+    }
+
+    /**
+     * Returns optionally the a {@link ManagedCollection}, based on whether
+     * this is a parented collection.
+     */
+    default Optional<ManagedCollection> parentedManagedCollection() {
+        return parented()
+                .map(EntityCollectionModelParented::getManagedCollection);
+    }
 
-    @Deprecated
-    ObjectMemento getParentObjectAdapterMemento();
+    default Optional<ManagedObject> parentedParentObject() {
+        return parentedManagedCollection()
+                .map(ManagedCollection::getOwner);
+    }
 
-    @Deprecated
-    Bookmark asHintingBookmarkIfSupported();
+    default Optional<ObjectSpecification> parentedParentObjectSpecification() {
+        return parentedParentObject()
+                .map(ManagedObject::getSpecification);
+    }
 
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelDummy.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelDummy.java
index 60ab980..36f7bd0 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelDummy.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelDummy.java
@@ -20,14 +20,10 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
-import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.interactions.managed.ManagedCollection;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.runtime.memento.ObjectMemento;
 
 import lombok.NonNull;
 
@@ -53,11 +49,6 @@ extends EntityCollectionModelAbstract {
     }
 
     @Override
-    public Optional<ManagedCollection> getManagedCollection() {
-        return Optional.empty();
-    }
-
-    @Override
     public int getCount() {
         return 0;
     }
@@ -77,14 +68,4 @@ extends EntityCollectionModelAbstract {
         throw _Exceptions.unsupportedOperation();
     }
 
-    @Override
-    public ObjectMemento getParentObjectAdapterMemento() {
-        throw _Exceptions.unsupportedOperation();
-    }
-
-    @Override
-    public Bookmark asHintingBookmarkIfSupported() {
-        return null;
-    }
-
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelParented.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelParented.java
index 2d92e1a..3613db4 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelParented.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelParented.java
@@ -29,7 +29,6 @@ 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;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedCollection;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
@@ -51,6 +50,7 @@ implements
     private static final long serialVersionUID = 1L;
 
     // TODO parent object model, maybe should not be exposed
+    // maybe could be resolved in the process of decoupling the ActionModel from Wicket
     @Getter private final @NonNull EntityModel entityModel;
 
     @Getter(onMethod_ = {@Override}) private int count;
@@ -98,7 +98,7 @@ implements
 
     @Override
     public Can<ObjectAction> getAssociatedActions() {
-        val managedCollection = getManagedCollection().orElse(null);
+        val managedCollection = getManagedCollection();
         if(managedCollection==null) {
             return Can.empty();
         }
@@ -130,12 +130,8 @@ implements
 
     @Override
     protected List<ManagedObject> load() {
-        final ManagedObject adapter = getCommonContext()
-                .reconstructObject(getParentObjectAdapterMemento());
 
-        final OneToManyAssociation collection = getMetaModel();
-
-        final ManagedObject collectionAsAdapter = collection.get(adapter, InteractionInitiatedBy.USER);
+        final ManagedObject collectionAsAdapter = getManagedCollection().getCollectionValue();
 
         val elements = _NullSafe.streamAutodetect(collectionAsAdapter.getPojo())
         .filter(_NullSafe::isPresent) // pojos
@@ -149,12 +145,6 @@ implements
     }
 
     @Override
-    public Optional<ManagedCollection> getManagedCollection() {
-        return Optional.of(ManagedCollection
-                .of(entityModel.getManagedObject(), getMetaModel(), Where.NOT_SPECIFIED));
-    }
-
-    @Override
     public String getName() {
         return getIdentifier().getMemberName();
     }
@@ -164,18 +154,21 @@ implements
         return collectionMetaModelMemento.getCollection(this::getSpecificationLoader);
     }
 
+    public ManagedCollection getManagedCollection() {
+        return ManagedCollection
+                .of(entityModel.getManagedObject(), getMetaModel(), Where.NOT_SPECIFIED);
+    }
+
     public CollectionLayoutData getLayoutData() {
         return entityModel.getCollectionLayoutData();
     }
 
-    @Override
-    public ObjectMemento getParentObjectAdapterMemento() {
-        return entityModel.memento();
+    public Bookmark asHintingBookmark() {
+        return entityModel.asHintingBookmarkIfSupported();
     }
 
-    @Override
-    public Bookmark asHintingBookmarkIfSupported() {
-        return entityModel.asHintingBookmarkIfSupported();
+    public ObjectMemento getParentObjectAdapterMemento() {
+        return entityModel.memento();
     }
 
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelStandalone.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelStandalone.java
index a08ce18..be2bf62 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelStandalone.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModelStandalone.java
@@ -19,13 +19,10 @@
 package org.apache.isis.viewer.wicket.model.models;
 
 import java.util.List;
-import java.util.Optional;
 
-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.core.metamodel.facets.object.plural.PluralFacet;
-import org.apache.isis.core.metamodel.interactions.managed.ManagedCollection;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.runtime.memento.ObjectMemento;
@@ -78,13 +75,6 @@ extends EntityCollectionModelAbstract {
         return Variant.STANDALONE;
     }
 
-    // -- INTERACTION SUPPORT
-
-    @Override
-    public Optional<ManagedCollection> getManagedCollection() {
-        return Optional.empty();
-    }
-
     // --
 
     private Can<ObjectMemento> mementoList;
@@ -115,15 +105,5 @@ extends EntityCollectionModelAbstract {
         return actionModel.getMetaModel();
     }
 
-    @Override
-    public ObjectMemento getParentObjectAdapterMemento() {
-        return null;
-    }
-
-    @Override
-    public Bookmark asHintingBookmarkIfSupported() {
-        return null;
-    }
-
 
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index cf3bf56..24bc6ce 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -309,14 +309,14 @@ implements HasRenderingHints, ObjectAdapterModel, UiHintContainer, ObjectUiModel
         this.collectionLayoutData = collectionLayoutData;
     }
 
-    private transient ManagedObject contextObject;
+    private transient Optional<ManagedObject> contextObject;
 
     @Override @Synchronized
-    public boolean isContextAdapter(ManagedObject other) {
+    public boolean isContextAdapter(final ManagedObject other) {
         if(contextObject==null) {
-            contextObject = getMementoService().reconstructObject(contextAdapterIfAny);
+            contextObject = Optional.ofNullable(getMementoService().reconstructObject(contextAdapterIfAny));
         }
-        return Objects.equals(contextObject, other);
+        return Objects.equals(contextObject.orElse(null), other);
     }
 
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
index c39643d..d18b114 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
@@ -116,7 +116,7 @@ public class CollectionSelectorHelper implements Serializable {
     private String determineInitialFactory() {
 
         // try to load from session, if can
-        final Bookmark bookmark = bookmarkHintIfAny();
+        final Bookmark bookmark = collectionModel.parentedHintingBookmark().orElse(null);
         final String sessionAttribute = componentHintKey.get(bookmark);
         if(sessionAttribute != null) {
             return sessionAttribute;
@@ -153,10 +153,6 @@ public class CollectionSelectorHelper implements Serializable {
 
     }
 
-    private Bookmark bookmarkHintIfAny() {
-        return collectionModel.asHintingBookmarkIfSupported();
-    }
-
     private static List<ComponentFactory> ordered(List<ComponentFactory> componentFactories) {
         return orderAjaxTableToEnd(componentFactories);
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
index bc6b97f..6f7085b 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
@@ -149,7 +149,8 @@ extends PanelAbstract<List<ManagedObject>, EntityCollectionModel> {
                         }
 
                         Bookmark domainObjectBookmarkIfAny() {
-                            return CollectionSelectorPanel.this.getModel().asHintingBookmarkIfSupported();
+                            return CollectionSelectorPanel.this.getModel().parentedHintingBookmark().orElse(null);
+
                         }
 
                         @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index 34e7b31..5d4944e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -108,7 +108,7 @@ implements CollectionCountProvider {
         val collectionModel = getModel();
         addTitleColumn(
                 columns,
-                collectionModel.getParentObjectAdapterMemento(),
+                collectionModel.parentedObjectAdapterMemento().orElse(null),
                 getWicketViewerSettings().getMaxTitleLengthInParentedTables(),
                 getWicketViewerSettings().getMaxTitleLengthInStandaloneTables());
 
@@ -159,7 +159,7 @@ implements CollectionCountProvider {
                     ? Where.PARENTED_TABLES
                     : Where.STANDALONE_TABLES;
 
-        val parentSpecIfAny =  collectionModel.getParentObjectSpecification()
+        val parentSpecIfAny =  collectionModel.parentedParentObjectSpecification()
                 .orElse(null);
 
         val propertyById = _Maps.<String, ObjectAssociation>newLinkedHashMap();
@@ -246,7 +246,7 @@ implements CollectionCountProvider {
 
         val collectionModel = getModel();
 
-        final Optional<ManagedObject> parentObject = collectionModel.getParentObject();
+        final Optional<ManagedObject> parentObject = collectionModel.parentedParentObject();
 
         tableColumnOrderServices.stream()
         .map(tableColumnOrderService->