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 16:36:38 UTC
[isis] 13/31: 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-RC2
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.