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/11/12 09:01:03 UTC

[isis] branch master updated: ISIS-2877: fixes mixed-in prop. or coll. not being recognized correctly within DataTableModel.Memento

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 54d5613  ISIS-2877: fixes mixed-in prop. or coll. not being recognized correctly within DataTableModel.Memento
54d5613 is described below

commit 54d56131289acce76a1d641086c956da469c624e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Nov 12 10:00:53 2021 +0100

    ISIS-2877: fixes mixed-in prop. or coll. not being recognized correctly
    within DataTableModel.Memento
---
 .../java/org/apache/isis/applib/Identifier.java     |  9 ++++++++-
 .../interactions/managed/ManagedMember.java         | 21 +++++++++++++--------
 .../managed/nonscalar/DataTableModel.java           |  7 ++++++-
 ...ishingVm_publishingEnabledAnnotatedEntities.java |  2 +-
 4 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
index 2498759..5a90ff8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/Identifier.java
@@ -63,7 +63,14 @@ implements
      * (Future work, might introduce a new Type: eg. PARAMETER)
      */
     public static enum Type {
-        CLASS, PROPERTY_OR_COLLECTION, ACTION;
+        CLASS,
+        PROPERTY_OR_COLLECTION,
+        /**
+         * Mixed in <i>Properties</i> and mixed in <i>Collections</i> are both categorized
+         * as {@link #ACTION}
+         * @apiNote future work might deal with this ambiguity
+         */
+        ACTION;
         public boolean isAction() { return this == ACTION; }
         public boolean isPropertyOrCollection() { return this == PROPERTY_OR_COLLECTION; }
         public boolean isClass() { return this == CLASS; }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
index 62b532a..ec2364b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
@@ -50,21 +50,21 @@ implements ManagedFeature {
     @RequiredArgsConstructor
     public static enum MemberType {
         PROPERTY(OneToOneAssociation.class, (spec, propertyId)->
-        spec.getAssociation(propertyId)
-        .map(property->property.isOneToOneAssociation()?property:null)),
+            spec.getAssociation(propertyId)
+            .map(property->property.isOneToOneAssociation()?property:null)),
 
         COLLECTION(OneToManyAssociation.class, (spec, collectionId)->
-        spec.getAssociation(collectionId)
-        .map(collection->collection.isOneToManyAssociation()?collection:null)),
+            spec.getAssociation(collectionId)
+            .map(collection->collection.isOneToManyAssociation()?collection:null)),
 
         ACTION(ObjectAction.class, (spec, actionId)->
-        spec.getAction(actionId));
+            spec.getAction(actionId));
 
         @Getter private final Class<? extends ObjectMember> memberType;
         private final BiFunction<
-                ObjectSpecification, String,
-                Optional<? extends ObjectMember>
-            > memberProvider;
+                ObjectSpecification,
+                String,
+                Optional<? extends ObjectMember>> memberProvider;
 
         public <T extends ObjectMember> Optional<T> lookup(
                 final @NonNull ManagedObject owner,
@@ -74,6 +74,11 @@ implements ManagedFeature {
             return _Casts.uncheckedCast(member);
         }
 
+        public boolean isPropertyOrCollection() {
+            return this == PROPERTY
+                    || this == COLLECTION;
+        }
+
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
index 2af0504..8b04518 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
@@ -44,6 +44,7 @@ import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction.MementoForArgs;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedCollection;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedMember;
+import org.apache.isis.core.metamodel.interactions.managed.ManagedMember.MemberType;
 import org.apache.isis.core.metamodel.interactions.managed.MultiselectChoices;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
@@ -240,13 +241,16 @@ implements MultiselectChoices {
                 final @Nullable DataTableModel table,
                 final @Nullable MementoForArgs argsMemento) {
             val managedMember = table.managedMember;
+
             return new Memento(
                     managedMember.getIdentifier(),
+                    managedMember.getMemberType(),
                     table.where,
                     argsMemento);
         }
 
         private final Identifier featureId;
+        private final MemberType memberType;
         private final Where where;
         private final MementoForArgs argsMemento;
 
@@ -254,7 +258,8 @@ implements MultiselectChoices {
 
             val memberId = featureId.getMemberLogicalName();
 
-            if(featureId.getType().isPropertyOrCollection()) {
+            if(memberType.isPropertyOrCollection()) {
+            //if(featureId.getType().isPropertyOrCollection()) {
                 // bypass domain events
                 val collInteraction = CollectionInteraction.start(owner, memberId, where);
                 val managedColl = collInteraction.getManagedCollection().orElseThrow();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java
index 61c0877..273c6df 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities.java
@@ -34,7 +34,7 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObje
 public class DomainObjectEntityChangePublishingVm_publishingEnabledAnnotatedEntities {
 
     @SuppressWarnings("unused")
-    private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
+    private final DomainObjectEntityChangePublishingVm mixee;
 
     public List<? extends DomainObjectEntityChangePublishingEnabledEntity> coll() {
         return publishingEnabledEntities.all();