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/23 17:11:44 UTC
[isis] 04/06: ISIS-1874: adds guard against NPE,
and ensures choices facet not installed on incompatible parameters
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch maint-1.16.2
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 6adc5edc98a489521d40f24a8ecf8bd014900398
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Feb 23 16:52:32 2018 +0000
ISIS-1874: adds guard against NPE, and ensures choices facet not installed on incompatible parameters
---
...onParameterDefaultsAndChoicesPostProcessor.java | 56 ++++++++++++++--------
.../ui/components/collection/CollectionPanel.java | 7 +--
2 files changed, 41 insertions(+), 22 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 56c34e8..97b6c0f 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
@@ -82,6 +82,9 @@ public class ActionCollectionParameterDefaultsAndChoicesPostProcessor implements
final ObjectActionParameter.Predicates.CollectionParameter whetherCollectionParamOfType =
new ObjectActionParameter.Predicates.CollectionParameter(specification);
+ final ObjectActionParameter.Predicates.ScalarParameter whetherScalarParamOfType =
+ new ObjectActionParameter.Predicates.ScalarParameter(specification);
+
final ImmutableList<ObjectAction> actions = FluentIterable.from(objectActions)
.filter(ObjectAction.Predicates.associatedWith(otma))
.toList();
@@ -90,12 +93,16 @@ public class ActionCollectionParameterDefaultsAndChoicesPostProcessor implements
final List<ObjectActionParameter> parameters = action.getParameters();
+ final ImmutableList<ObjectActionParameter> compatibleCollectionParams = FluentIterable.from(parameters)
+ .filter(whetherCollectionParamOfType).toList();
+
+ final ImmutableList<ObjectActionParameter> compatibleScalarParams = FluentIterable.from(parameters)
+ .filter(whetherScalarParamOfType).toList();
+
// for collection parameters, install an defaults facet (if there isn't one already)
// this will cause the UI to render the collection with toggleboxes
// with a thread-local used to provide the selected objects
- final ImmutableList<ObjectActionParameter> collectionParams = FluentIterable.from(parameters)
- .filter(whetherCollectionParamOfType).toList();
- for (final ObjectActionParameter collectionParam : collectionParams) {
+ for (final ObjectActionParameter collectionParam : compatibleCollectionParams) {
final ActionParameterDefaultsFacet defaultsFacet = collectionParam
.getFacet(ActionParameterDefaultsFacet.class);
if (existsAndNotDerived(defaultsFacet)) {
@@ -105,28 +112,39 @@ public class ActionCollectionParameterDefaultsAndChoicesPostProcessor implements
}
}
- // for both scalar and collection parameters, install a choices facet (if there isn't one already)
+ // for compatible collection parameters, install a choices facet (if there isn't one already)
+ // using the associated collection for its values
+ for (final ObjectActionParameter collectionParam : compatibleCollectionParams) {
+ addChoicesFacetIfNoneAlready(otma, collectionParam);
+ }
+
+ // similarly for compatible scalar parameters, install a choices facet (if there isn't one already)
// using the associated collection for its values.
- for (final ObjectActionParameter scalarOrCollectionParam : parameters) {
-
- final ActionParameterChoicesFacet choicesFacet = scalarOrCollectionParam
- .getFacet(ActionParameterChoicesFacet.class);
- final ActionParameterAutoCompleteFacet autoCompleteFacet = scalarOrCollectionParam
- .getFacet(ActionParameterAutoCompleteFacet.class);
- if (existsAndNotDerived(choicesFacet) || existsAndNotDerived(autoCompleteFacet)) {
- // don't overwrite existing choices or autoComplete facet
- } else {
- FacetUtil.addFacet(
- new ActionParameterChoicesFacetFromParentedCollection(
- scalarOrCollectionParam, otma,
- getDeploymentCategory(), specificationLoader,
- authenticationSessionProvider, adapterManager ));
- }
+ for (final ObjectActionParameter scalarParam : compatibleScalarParams) {
+ addChoicesFacetIfNoneAlready(otma, scalarParam);
}
}
}
}
+ private void addChoicesFacetIfNoneAlready(
+ final OneToManyAssociation otma,
+ final ObjectActionParameter scalarOrCollectionParam) {
+ final ActionParameterChoicesFacet choicesFacet = scalarOrCollectionParam
+ .getFacet(ActionParameterChoicesFacet.class);
+ final ActionParameterAutoCompleteFacet autoCompleteFacet = scalarOrCollectionParam
+ .getFacet(ActionParameterAutoCompleteFacet.class);
+ if (existsAndNotDerived(choicesFacet) || existsAndNotDerived(autoCompleteFacet)) {
+ // don't overwrite existing choices or autoComplete facet
+ } else {
+ FacetUtil.addFacet(
+ new ActionParameterChoicesFacetFromParentedCollection(
+ scalarOrCollectionParam, otma,
+ getDeploymentCategory(), specificationLoader,
+ authenticationSessionProvider, adapterManager ));
+ }
+ }
+
private static boolean existsAndNotDerived(final Facet facet) {
return facet != null && !facet.isNoop() && !facet.isNoop();
}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index cdbf1e5..e5724e4 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -193,9 +193,10 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem
collectionModel.clearToggleMementosList();
final ObjectAdapterToggleboxColumn toggleboxColumn = bulkActionsProvider.getToggleboxColumn();
- toggleboxColumn.clearToggles();
-
- target.add(collectionPanel);
+ if(toggleboxColumn != null) {
+ toggleboxColumn.clearToggles();
+ target.add(collectionPanel);
+ }
}
}
--
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.