You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/02/18 10:41:59 UTC

[isis] 01/08: ISIS-1585: associates action with collection based on either name or id

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch release-1.16.1-RC1
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 428bd03ddfe077e7fad34158785beeeeea1a8990
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Feb 18 10:07:03 2018 +0000

    ISIS-1585: associates action with collection based on either name or id
---
 ...onParameterDefaultsAndChoicesPostProcessor.java |  2 +-
 .../core/metamodel/spec/feature/ObjectAction.java  | 29 ++++++++++++++--------
 .../wicket/model/mementos/CollectionMemento.java   | 25 +++++++++++++------
 .../wicket/model/models/EntityCollectionModel.java | 12 ++++++++-
 .../collection/AssociatedWithActionsHelper.java    |  8 ++++--
 5 files changed, 53 insertions(+), 23 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
index 75e177c..56c34e8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
@@ -83,7 +83,7 @@ public class ActionCollectionParameterDefaultsAndChoicesPostProcessor implements
                     new ObjectActionParameter.Predicates.CollectionParameter(specification);
 
             final ImmutableList<ObjectAction> actions = FluentIterable.from(objectActions)
-                    .filter(ObjectAction.Predicates.associatedWith(collectionId))
+                    .filter(ObjectAction.Predicates.associatedWith(otma))
                     .toList();
 
             for (final ObjectAction action : actions) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index bbdbeb4..acdc126 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -418,16 +418,17 @@ public interface ObjectAction extends ObjectMember {
             return org.apache.isis.applib.filter.Filters.asPredicate(Filters.memberOrderOf(association));
         }
 
-        public static Predicate<ObjectAction> associatedWith(final String collectionName) {
-            return new AssociatedWith(collectionName);
+        public static Predicate<ObjectAction> associatedWith(final ObjectAssociation objectAssociation) {
+            return new AssociatedWith(objectAssociation);
         }
 
         public static Predicate<ObjectAction> associatedWithAndWithCollectionParameterFor(
-                final String collectionName,
-                final ObjectSpecification collectionTypeOfSpec) {
+                final OneToManyAssociation collection) {
+
+            final ObjectSpecification collectionTypeOfSpec = collection.getSpecification();
 
             return com.google.common.base.Predicates.and(
-                    new AssociatedWith(collectionName),
+                    new AssociatedWith(collection),
                     new HasParameterMatching(
                         new ObjectActionParameter.Predicates.CollectionParameter(collectionTypeOfSpec)
                     )
@@ -435,9 +436,12 @@ public interface ObjectAction extends ObjectMember {
         }
 
         public static class AssociatedWith implements Predicate<ObjectAction> {
-            private final String memberNameAssociatedWith;
-            public AssociatedWith(final String memberNameAssociatedWith) {
-                this.memberNameAssociatedWith = memberNameAssociatedWith;
+            private final String memberId;
+            private final String memberName;
+
+            public AssociatedWith(final ObjectAssociation objectAssociation) {
+                this.memberId = objectAssociation.getId();
+                this.memberName = objectAssociation.getName();
             }
 
             @Override
@@ -446,10 +450,13 @@ public interface ObjectAction extends ObjectMember {
                 if(memberOrderFacet == null) {
                     return false;
                 }
-                final String name = memberNameAssociatedWith;
                 final String memberOrderName = memberOrderFacet.untranslatedName();
-                return name != null && memberOrderName != null &&
-                       Objects.equal(name.toLowerCase(), memberOrderName.toLowerCase());
+                if (memberOrderName == null) {
+                    return false;
+                }
+                final String memberOrderNameLowerCase = memberOrderName.toLowerCase();
+                return memberName != null && Objects.equal(memberName.toLowerCase(), memberOrderNameLowerCase) ||
+                       memberId   != null && Objects.equal(memberId.toLowerCase(), memberOrderNameLowerCase);
             }
         }
 
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java
index 8b17d53..49da0d8 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java
@@ -44,15 +44,11 @@ public class CollectionMemento implements Serializable {
 
     private final ObjectSpecId owningType;
     private final String id;
+    private final String collectionId;
+    private final String collectionName;
 
     private transient OneToManyAssociation collection;
 
-    public CollectionMemento(
-            final ObjectSpecId owningType,
-            final String id, final SpecificationLoader specificationLoader) {
-        this(owningType, id, collectionFor(owningType, id, specificationLoader));
-    }
-
     public CollectionMemento(final OneToManyAssociation collection, final IsisSessionFactory isisSessionFactory) {
         this(owningSpecFor(collection, isisSessionFactory).getSpecId(), collection.getIdentifier().toNameIdentityString(), collection);
     }
@@ -61,6 +57,8 @@ public class CollectionMemento implements Serializable {
         this.owningType = owningType;
         this.id = id;
         this.collection = collection;
+        this.collectionId = collection.getId();
+        this.collectionName = collection.getName();
     }
 
     public ObjectSpecId getOwningType() {
@@ -78,8 +76,19 @@ public class CollectionMemento implements Serializable {
         return id;
     }
 
-    public String getName(final SpecificationLoader specificationLoader) {
-        return getCollection(specificationLoader).getName();
+    /**
+     * {@link OneToManyAssociation#getId() id} of the {@link OneToManyAssociation collection} passed into the constructor.
+     *
+     * <p>
+     *     Is (I think) the same value as {@link #getId()}, though derived more directly.
+     * </p>
+     */
+    public String getCollectionId() {
+        return collectionId;
+    }
+
+    public String getCollectionName() {
+        return collectionName;
     }
 
     public OneToManyAssociation getCollection(final SpecificationLoader specificationLoader) {
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index e40d778..d9f9fb5 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -130,6 +130,11 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
             }
 
             @Override
+            public String getId(final EntityCollectionModel entityCollectionModel) {
+                return null;
+            }
+
+            @Override
             public String getName(final EntityCollectionModel model) {
                 PluralFacet facet = model.getTypeOfSpecification().getFacet(PluralFacet.class);
                 return facet.value();
@@ -187,9 +192,13 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
                 throw new UnsupportedOperationException();
             }
 
+            @Override public String getId(final EntityCollectionModel model) {
+                return model.getCollectionMemento().getCollectionId();
+            }
+
             @Override
             public String getName(EntityCollectionModel model) {
-                return model.getCollectionMemento().getName(model.getSpecificationLoader());
+                return model.getCollectionMemento().getCollectionName();
             }
 
             @Override
@@ -208,6 +217,7 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
 
         abstract void setObject(EntityCollectionModel entityCollectionModel, List<ObjectAdapter> list);
 
+        public abstract String getId(EntityCollectionModel entityCollectionModel);
         public abstract String getName(EntityCollectionModel entityCollectionModel);
 
         public abstract int getCount(EntityCollectionModel entityCollectionModel);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
index 65bf609..7eac1a2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
@@ -33,6 +33,7 @@ import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
@@ -53,6 +54,9 @@ public class AssociatedWithActionsHelper implements Serializable {
         if(collectionModel.isStandalone()) {
             return Collections.emptyList();
         }
+        final OneToManyAssociation collection = collectionModel.getCollectionMemento()
+                .getCollection(isisSessionFactory.getSpecificationLoader());
+
         final ObjectSpecification objectSpec = getObjectSpecification(isisSessionFactory);
 
         final List<ActionType> actionTypes = inferActionTypes(isisSessionFactory);
@@ -60,8 +64,8 @@ public class AssociatedWithActionsHelper implements Serializable {
 
         return FluentIterable.from(objectActions)
                 .filter(ObjectAction.Predicates.associatedWithAndWithCollectionParameterFor(
-                            collectionModel.getName(),
-                            collectionModel.getTypeOfSpecification()))
+                            collection
+                ))
                 .toList();
     }
 

-- 
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.