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 2013/09/04 03:04:45 UTC
[1/2] git commit: ISIS-503: refactoring ObjectSpecificationDefault
for actions and associations
Updated Branches:
refs/heads/master db82c67eb -> 242739ad6
ISIS-503: refactoring ObjectSpecificationDefault for actions and associations
- simplifying the overloading
- deprecated ObjectActionFilters, converted to ObjectAction.Filters
- deprecated ObjectAssociationFilters, converted to ObjectAssociation.Filters
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/02340bfa
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/02340bfa
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/02340bfa
Branch: refs/heads/master
Commit: 02340bfa08d7e65363a039142c8b85cea4256ae7
Parents: db82c67
Author: Dan Haywood <da...@apache.org>
Authored: Tue Sep 3 21:06:58 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Sep 3 21:06:58 2013 +0100
----------------------------------------------------------------------
.../viewer/dnd/view/action/OptionFactory.java | 4 +-
.../scimpi/dispatcher/util/MethodsUtils.java | 2 +-
.../scimpi/dispatcher/view/action/Methods.java | 7 +-
.../scimpi/dispatcher/view/debug/Debug.java | 9 +-
.../scimpi/dispatcher/view/debug/Members.java | 4 +-
.../view/simple/AbstractConditionalBlock.java | 3 +-
.../cssmenu/AppActionsCssMenuFactory.java | 4 +-
.../CollectionContentsAsAjaxTablePanel.java | 2 +-
.../entity/header/EntityHeaderPanel.java | 2 +-
.../entitylink/EntityLinkSelect2Panel.java | 15 --
.../json/LayoutMetadataReaderFromJson.java | 12 +-
.../isis/core/metamodel/spec/ActionType.java | 2 +-
.../metamodel/spec/feature/ObjectAction.java | 67 ++++++++
.../spec/feature/ObjectActionContainer.java | 20 +--
.../spec/feature/ObjectActionFilters.java | 70 ++------
.../metamodel/spec/feature/ObjectActions.java | 4 -
.../spec/feature/ObjectAssociation.java | 134 +++++++++++++++
.../spec/feature/ObjectAssociationFilters.java | 122 +++----------
.../specloader/ObjectReflectorDefault.java | 9 +-
.../specloader/specimpl/ContributeeMember.java | 47 +++++-
.../specimpl/ObjectSpecificationAbstract.java | 169 ++++++++-----------
.../dflt/ObjectSpecificationDefault.java | 45 +++--
.../ObjectSpecificationForFreeStandingList.java | 8 -
.../apache/isis/core/metamodel/util/Dump.java | 29 +---
.../testspec/ObjectSpecificationStub.java | 19 +--
25 files changed, 421 insertions(+), 388 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/OptionFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/OptionFactory.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/OptionFactory.java
index b69fdec..19b45b8 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/OptionFactory.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/OptionFactory.java
@@ -38,7 +38,7 @@ public class OptionFactory {
public static void addCreateOptions(final ObjectSpecification specification, final UserActionSet options) {
// TODO do the same as addObjectMenuOptions and collect together all the
// actions for all the types
- final List<ObjectAction> actions = specification.getServiceActionsReturning(Arrays.asList(ActionType.USER, ActionType.EXPLORATION, ActionType.PROTOTYPE, ActionType.DEBUG));
+ final List<ObjectAction> actions = specification.getServiceActionsReturning(ActionType.ALL);
menuOptions(actions, null, options);
}
@@ -48,7 +48,7 @@ public class OptionFactory {
}
final ObjectSpecification noSpec = adapter.getSpecification();
- menuOptions(noSpec.getObjectActions(Arrays.asList(ActionType.USER, ActionType.EXPLORATION, ActionType.PROTOTYPE, ActionType.DEBUG), Contributed.INCLUDED), adapter, options);
+ menuOptions(noSpec.getObjectActions(Contributed.INCLUDED), adapter, options);
// TODO: this looks like a bit of a hack; can we improve it by looking
// at the facets?
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/util/MethodsUtils.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/util/MethodsUtils.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/util/MethodsUtils.java
index 0cacf59..a6ae574 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/util/MethodsUtils.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/util/MethodsUtils.java
@@ -72,7 +72,7 @@ public class MethodsUtils {
throw new ScimpiException("Object not specified when looking for " + methodName);
}
- final List<ObjectAction> actions = object.getSpecification().getObjectActions(Arrays.asList(ActionType.USER, ActionType.EXPLORATION, ActionType.PROTOTYPE, ActionType.DEBUG), Contributed.INCLUDED);
+ final List<ObjectAction> actions = object.getSpecification().getObjectActions(Contributed.INCLUDED);
final ObjectAction action = findAction(actions, methodName);
/*
* if (action == null) { actions =
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
index f51ed1c..21cff4e 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.action;
import java.util.List;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filters;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -76,16 +77,16 @@ public class Methods extends AbstractElementProcessor {
final InclusionList inclusionList,
final String view,
final String cancelTo) {
- List<ObjectAction> actions = adapter.getSpecification().getObjectActions(ActionType.USER, Contributed.INCLUDED);
+ List<ObjectAction> actions = adapter.getSpecification().getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
writeMethods(request, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
// TODO determine if system is set up to display exploration methods
if (true) {
- actions = adapter.getSpecification().getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED);
+ actions = adapter.getSpecification().getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED, Filters.<ObjectAction>any());
writeMethods(request, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
}
// TODO determine if system is set up to display debug methods
if (true) {
- actions = adapter.getSpecification().getObjectActions(ActionType.DEBUG, Contributed.INCLUDED);
+ actions = adapter.getSpecification().getObjectActions(ActionType.DEBUG, Contributed.INCLUDED, Filters.<ObjectAction>any());
writeMethods(request, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
index 790cf25..c1a01b4 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
@@ -25,6 +25,7 @@ import java.util.Comparator;
import java.util.List;
import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.filter.Filters;
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.commons.debug.DebugHtmlString;
import org.apache.isis.core.commons.debug.DebugString;
@@ -354,11 +355,11 @@ public class Debug extends AbstractElementProcessor {
final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED);
specificationMembers(view, "Fields", fields);
- final List<ObjectAction> userActions = spec.getObjectActions(ActionType.USER, Contributed.INCLUDED);
+ final List<ObjectAction> userActions = spec.getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
specificationMembers(view, "User Actions", userActions);
- specificationMembers(view, "Exploration Actions", spec.getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED));
- specificationMembers(view, "Prototype Actions", spec.getObjectActions(ActionType.PROTOTYPE, Contributed.INCLUDED));
- specificationMembers(view, "Debug Actions", spec.getObjectActions(ActionType.DEBUG, Contributed.INCLUDED));
+ specificationMembers(view, "Exploration Actions", spec.getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED, Filters.<ObjectAction>any()));
+ specificationMembers(view, "Prototype Actions", spec.getObjectActions(ActionType.PROTOTYPE, Contributed.INCLUDED, Filters.<ObjectAction>any()));
+ specificationMembers(view, "Debug Actions", spec.getObjectActions(ActionType.DEBUG, Contributed.INCLUDED, Filters.<ObjectAction>any()));
view.endSection();
view.startSection("Fields");
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Members.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Members.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Members.java
index baeb58c..54ff196 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Members.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Members.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.debug;
import java.util.List;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filters;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -80,7 +81,8 @@ public class Members extends AbstractElementProcessor {
}
}
request.appendHtml(" --------------\n");
- final List<ObjectAction> actions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED);
+ final List<ObjectAction> actions = specification.getObjectActions(
+ ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
;
for (final ObjectAction action : actions) {
request.appendHtml(" " + action.getId() + " (");
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java
index 2b4f22c..42ff3f6 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filters;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
@@ -408,7 +409,7 @@ class TestMethodExists extends Test {
@Override
boolean test(final Request request, final String attributeName, final String targetId) {
final ObjectAdapter object = MethodsUtils.findObject(request.getContext(), targetId);
- final List<? extends ObjectAction> objectActions = object.getSpecification().getObjectActions(ActionType.USER, Contributed.INCLUDED);
+ final List<? extends ObjectAction> objectActions = object.getSpecification().getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
boolean methodExists = false;
for (final ObjectAction objectAssociation : objectActions) {
if (objectAssociation.getId().equals(attributeName)) {
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
index 3626b86..e4cd4df 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
@@ -29,6 +29,7 @@ import com.google.common.collect.Maps;
import org.apache.wicket.Component;
import org.apache.wicket.model.IModel;
+import org.apache.isis.applib.filter.Filters;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
import org.apache.isis.core.metamodel.facets.named.NamedFacet;
@@ -143,7 +144,8 @@ public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {
*/
private static void collateServiceActions(final ObjectAdapter serviceAdapter, ActionType actionType, List<LogicalServiceAction> serviceActions) {
final ObjectSpecification serviceSpec = serviceAdapter.getSpecification();
- for (final ObjectAction objectAction : serviceSpec.getObjectActions(actionType, Contributed.INCLUDED)) {
+ for (final ObjectAction objectAction : serviceSpec.getObjectActions(
+ actionType, Contributed.INCLUDED, Filters.<ObjectAction>any())) {
// skip if annotated to not be included in repository menu
if (objectAction.getFacet(NotInServiceMenuFacet.class) != null) {
continue;
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index fa16d42..d808f00 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -160,7 +160,7 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
objectActions.addAll(debugActions);
}
- List<ObjectAction> flattenedActions = ObjectActions.flattenedActions(objectActions);
+ List<ObjectAction> flattenedActions = objectActions;
return Lists.newArrayList(Iterables.filter(flattenedActions, BULK));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index f5da812..5cb0729 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -136,7 +136,7 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> implements Act
@SuppressWarnings("unchecked")
final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED,
Filters.and(memberOrderNameNotCollection(adapterSpec), dynamicallyVisibleFor(adapter)));
- topLevelActions.addAll(ObjectActions.flattenedActions(userActions));
+ topLevelActions.addAll(userActions);
}
private Filter<ObjectAction> memberOrderNameNotCollection(final ObjectSpecification adapterSpec) {
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
index 7969a43..c5dd2cf 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
@@ -319,21 +319,6 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
}
- @SuppressWarnings("unused")
- private static List<ObjectAction> findServiceActionsFor(final ObjectSpecification scalarTypeSpec) {
- final List<ObjectAction> actionList = Lists.newArrayList();
- addServiceActionsFor(scalarTypeSpec, ActionType.USER, actionList);
- if (IsisContext.getDeploymentType() == DeploymentType.EXPLORATION) {
- addServiceActionsFor(scalarTypeSpec, ActionType.EXPLORATION, actionList);
- }
- return actionList;
- }
-
- private static void addServiceActionsFor(final ObjectSpecification noSpec, final ActionType actionType, final List<ObjectAction> actionList) {
- final List<ObjectAction> serviceActionsFor = noSpec.getServiceActionsReturning(actionType);
- actionList.addAll(serviceActionsFor);
- }
-
@Override
public void onClick(final ActionModel actionModel) {
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
index f6c5fab..642fa8a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
@@ -308,20 +308,24 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
@SuppressWarnings("unchecked")
private static List<ObjectAssociation> propertiesOf(final ObjectSpecification objSpec) {
- return objSpec.getAssociations(Contributed.EXCLUDED, Filters.and(ObjectAssociationFilters.PROPERTIES, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
+ return objSpec.getAssociations(Contributed.EXCLUDED,
+ Filters.and(ObjectAssociation.Filters.PROPERTIES,
+ ObjectAssociation.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
}
@SuppressWarnings("unchecked")
private static List<ObjectAssociation> collectionsOf(final ObjectSpecification objSpec) {
- return objSpec.getAssociations(Contributed.EXCLUDED, Filters.and(ObjectAssociationFilters.COLLECTIONS, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
+ return objSpec.getAssociations(Contributed.EXCLUDED,
+ Filters.and(ObjectAssociation.Filters.COLLECTIONS,
+ ObjectAssociation.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
}
private static List<ObjectAction> actionsOf(final ObjectSpecification objSpec, final Set<String> excludedActionIds) {
- return objSpec.getObjectActions(ActionType.ALL_EXCEPT_SET, Contributed.INCLUDED, staticallyVisibleExcluding(excludedActionIds));
+ return objSpec.getObjectActions(ActionType.ALL, Contributed.INCLUDED, staticallyVisibleExcluding(excludedActionIds));
}
@SuppressWarnings("unchecked")
private static Filter<ObjectAction> staticallyVisibleExcluding(final Set<String> excludedActionIds) {
return Filters.and(
- ObjectActionFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE,
+ ObjectAction.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE,
new Filter<ObjectAction>(){
@Override
public boolean accept(ObjectAction t) {
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
index ea5eed9..d8a4016 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
@@ -51,5 +51,5 @@ public enum ActionType {
return this == USER;
}
- public static final List<ActionType> ALL_EXCEPT_SET = Arrays.asList(values());
+ public static final List<ActionType> ALL = Arrays.asList(values());
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
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 b8899e3..f3e2a6b 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
@@ -22,15 +22,20 @@ package org.apache.isis.core.metamodel.spec.feature;
import java.util.List;
import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetFilters;
import org.apache.isis.core.metamodel.interactions.AccessContext;
import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
+import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.progmodel.facets.actions.bulk.BulkFacet;
public interface ObjectAction extends ObjectMember {
@@ -166,4 +171,66 @@ public interface ObjectAction extends ObjectMember {
ObjectAdapter[][] getChoices(ObjectAdapter target);
+ // //////////////////////////////////////////////////////
+ // Filters
+ // //////////////////////////////////////////////////////
+
+ public static class Filters {
+
+ private Filters(){}
+
+ public static final Filter<ObjectAction> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = new Filter<ObjectAction>() {
+ @Override
+ public boolean accept(final ObjectAction action) {
+ return !action.isAlwaysHidden();
+ }
+ };
+
+ public static Filter<ObjectAction> dynamicallyVisible(final AuthenticationSession session, final ObjectAdapter target, final Where where) {
+ return new Filter<ObjectAction>() {
+ @Override
+ public boolean accept(final ObjectAction objectAction) {
+ final Consent visible = objectAction.isVisible(session, target, where);
+ return visible.isAllowed();
+ }
+ };
+ }
+
+ public static Filter<ObjectAction> withId(final String actionId) {
+ return new Filter<ObjectAction>(){
+ @Override
+ public boolean accept(ObjectAction objectAction) {
+ return objectAction.getId().equals(actionId);
+ }
+ };
+ }
+
+ public static Filter<ObjectAction> withNoValidationRules() {
+ return new Filter<ObjectAction>(){
+ @Override
+ public boolean accept(final ObjectAction objectAction) {
+ final List<Facet> validatingFacets = objectAction.getFacets(FacetFilters.isA(ValidatingInteractionAdvisor.class));
+ return validatingFacets.isEmpty();
+ }};
+ }
+
+ public static Filter<ObjectAction> ofType(final ActionType type) {
+ return new Filter<ObjectAction>(){
+ @Override
+ public boolean accept(ObjectAction oa) {
+ return oa.getType() == type;
+ }
+ };
+ }
+
+ public static Filter<ObjectAction> bulk() {
+ return new Filter<ObjectAction>(){
+
+ @Override
+ public boolean accept(ObjectAction oa) {
+ return oa.containsDoOpFacet(BulkFacet.class);
+ }};
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
index 378a816..1c6b00e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
@@ -62,25 +62,11 @@ public interface ObjectActionContainer {
* Returns an array of actions of the specified type, including or excluding
* contributed actions as required.
*/
- List<ObjectAction> getObjectActions(ActionType type, Contributed contributed);
+ List<ObjectAction> getObjectActions(ActionType type, Contributed contributee, Filter<ObjectAction> filter);
- List<ObjectAction> getObjectActions(ActionType type, Contributed contributed, Filter<ObjectAction> filter);
+ List<ObjectAction> getObjectActions(List<ActionType> types, Contributed contributee, Filter<ObjectAction> filter);
- /**
- * Returns an array of actions of the specified types, including or
- * excluding contributed actions as required.
- */
- List<ObjectAction> getObjectActions(List<ActionType> types, Contributed contributed);
-
- List<ObjectAction> getObjectActions(List<ActionType> requestedTypes, Contributed contributed, Filter<ObjectAction> filter);
-
- /**
- * Returns a list of all object actions, including or excluding contributed
- * actions as required.
- */
- List<ObjectAction> getObjectActions(Contributed contributed);
-
- List<ObjectAction> getServiceActionsReturning(ActionType type);
+ List<ObjectAction> getObjectActions(Contributed contributee);
List<ObjectAction> getServiceActionsReturning(List<ActionType> type);
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
index 1114bd6..37036c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
@@ -18,83 +18,41 @@
*/
package org.apache.isis.core.metamodel.spec.feature;
-import java.util.List;
-
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetFilters;
-import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.progmodel.facets.actions.bulk.BulkFacet;
public class ObjectActionFilters {
+
+ private ObjectActionFilters(){}
- public static final Filter<ObjectAction> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = new Filter<ObjectAction>() {
- @Override
- public boolean accept(final ObjectAction action) {
- return !action.isAlwaysHidden();
- }
- };
+ @Deprecated
+ public static final Filter<ObjectAction> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = ObjectAction.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE;
+ @Deprecated
public static Filter<ObjectAction> dynamicallyVisible(final AuthenticationSession session, final ObjectAdapter target, final Where where) {
- return new Filter<ObjectAction>() {
- @Override
- public boolean accept(final ObjectAction objectAction) {
- final Consent visible = objectAction.isVisible(session, target, where);
- return visible.isAllowed();
- }
- };
+ return ObjectAction.Filters.dynamicallyVisible(session, target, where);
}
+ @Deprecated
public static Filter<ObjectAction> withId(final String actionId) {
- return new Filter<ObjectAction>(){
- @Override
- public boolean accept(ObjectAction objectAction) {
- return objectAction.getId().equals(actionId);
- }
- };
+ return ObjectAction.Filters.withId(actionId);
}
+ @Deprecated
public static Filter<ObjectAction> withNoValidationRules() {
- return new Filter<ObjectAction>(){
- @Override
- public boolean accept(final ObjectAction objectAction) {
- final List<Facet> validatingFacets = objectAction.getFacets(FacetFilters.isA(ValidatingInteractionAdvisor.class));
- return validatingFacets.isEmpty();
- }};
+ return ObjectAction.Filters.withNoValidationRules();
}
-// public static Filter<ObjectAction> contributedAnd1ParamAndVoid() {
-// return new Filter<ObjectAction>(){
-// @Override
-// public boolean accept(final ObjectAction objectAction) {
-// boolean contributed = objectAction.isContributed();
-// boolean has1Param = objectAction.getParameterCount() == 1;
-// boolean hasReturn = objectAction.hasReturn();
-// return contributed && has1Param && !hasReturn;
-// }
-// };
-// }
-
+ @Deprecated
public static Filter<ObjectAction> filterOfType(final ActionType type) {
- return new Filter<ObjectAction>(){
- @Override
- public boolean accept(ObjectAction oa) {
- return oa.getType() == type;
- }
- };
+ return ObjectAction.Filters.ofType(type);
}
+ @Deprecated
public static Filter<ObjectAction> bulk() {
- return new Filter<ObjectAction>(){
-
- @Override
- public boolean accept(ObjectAction oa) {
- return oa.containsDoOpFacet(BulkFacet.class);
- }};
+ return ObjectAction.Filters.bulk();
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
index 3dd3221..2889e57 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
@@ -45,10 +45,6 @@ public final class ObjectActions {
return "(no name)";
}
- public static List<ObjectAction> flattenedActions(final List<ObjectAction> objectActions) {
- return objectActions;
- }
-
public static Filter<ObjectAction> memberOrderOf(ObjectAssociation association) {
final String assocName = association.getName();
final String assocId = association.getId();
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
index e19897f..284b1b9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
@@ -19,7 +19,14 @@
package org.apache.isis.core.metamodel.spec.feature;
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.facets.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
/**
* Provides reflective access to a field on a domain object.
@@ -85,4 +92,131 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
boolean isMandatory();
+
+ // //////////////////////////////////////////////////////
+ // Filters
+ // //////////////////////////////////////////////////////
+
+
+ public static class Filters {
+
+ private Filters() {
+ }
+
+ /**
+ * Filters only fields that are for properties (ie 1:1 associations)
+ */
+ public final static Filter<ObjectAssociation> PROPERTIES = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation association) {
+ return association.isOneToOneAssociation();
+ }
+ };
+
+ /**
+ * Filters only fields that are for reference properties (ie 1:1 associations)
+ */
+ public final static Filter<ObjectAssociation> REFERENCE_PROPERTIES = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation association) {
+ return association.isOneToOneAssociation() &&
+ !association.getSpecification().containsDoOpFacet(ValueFacet.class);
+ }
+ };
+
+ /**
+ * Filters only fields that are for properties (ie 1:1 associations)
+ */
+ public final static Filter<ObjectAssociation> WHERE_VISIBLE_IN_COLLECTION_TABLE = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation association) {
+ final HiddenFacet hiddenFacet = association.getFacet(HiddenFacet.class);
+ return hiddenFacet == null || !hiddenFacet.where().inParentedTable();
+ }
+ };
+
+ /**
+ * Filters only fields that are for properties (ie 1:1 associations)
+ */
+ public final static Filter<ObjectAssociation> WHERE_VISIBLE_IN_STANDALONE_TABLE = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation association) {
+ final HiddenFacet hiddenFacet = association.getFacet(HiddenFacet.class);
+ return hiddenFacet == null || !hiddenFacet.where().inStandaloneTable();
+ }
+ };
+
+ /**
+ * Returns all fields (that is, filters out nothing).
+ */
+ public final static Filter<ObjectAssociation> ALL = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation property) {
+ return true;
+ }
+ };
+
+ /**
+ * Filters only fields that are for collections (ie 1:m associations)
+ */
+ public final static Filter<ObjectAssociation> COLLECTIONS = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation property) {
+ return property.isOneToManyAssociation();
+ }
+ };
+
+ /**
+ * Filters only properties that are visible statically, ie have not been
+ * unconditionally hidden at compile time.
+ *
+ * <p>
+ * Note this list will include
+ * properties marked as hidden once persisted and until persisted, but not
+ * those marked hidden always.
+ */
+ public static final Filter<ObjectAssociation> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation property) {
+ return !property.isAlwaysHidden();
+ }
+ };
+
+ public static final Filter<ObjectAssociation> staticallyVisible(final Where context) {
+ return new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation association) {
+ final HiddenFacet facet = association.getFacet(HiddenFacet.class);
+ if(facet == null) {
+ return true;
+ }
+ return !(facet.where().includes(context) && facet.when() == When.ALWAYS);
+ }
+ };
+ }
+
+
+ public static Filter<ObjectAssociation> dynamicallyVisible(final AuthenticationSession session, final ObjectAdapter target, final Where where) {
+ return new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation objectAssociation) {
+ final Consent visible = objectAssociation.isVisible(session, target, where);
+ return visible.isAllowed();
+ }
+ };
+ }
+
+
+ public static Filter<ObjectAssociation> enabled(final AuthenticationSession session, final ObjectAdapter adapter, final Where where) {
+ return new Filter<ObjectAssociation>() {
+ @Override
+ public boolean accept(final ObjectAssociation objectAssociation) {
+ final Consent usable = objectAssociation.isUsable(session, adapter, where);
+ return usable.isAllowed();
+ }
+ };
+ }
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFilters.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFilters.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFilters.java
index 59da48d..376fa63 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFilters.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFilters.java
@@ -20,132 +20,50 @@
package org.apache.isis.core.metamodel.spec.feature;
-import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.facets.hide.HiddenFacet;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
public class ObjectAssociationFilters {
private ObjectAssociationFilters() {
}
- /**
- * Filters only fields that are for properties (ie 1:1 associations)
- */
- public final static Filter<ObjectAssociation> PROPERTIES = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation association) {
- return association.isOneToOneAssociation();
- }
- };
+ @Deprecated
+ public final static Filter<ObjectAssociation> PROPERTIES = ObjectAssociation.Filters.PROPERTIES;
- /**
- * Filters only fields that are for reference properties (ie 1:1 associations)
- */
- public final static Filter<ObjectAssociation> REFERENCE_PROPERTIES = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation association) {
- return association.isOneToOneAssociation() &&
- !association.getSpecification().containsDoOpFacet(ValueFacet.class);
- }
- };
+ @Deprecated
+ public final static Filter<ObjectAssociation> REFERENCE_PROPERTIES = ObjectAssociation.Filters.REFERENCE_PROPERTIES;
- /**
- * Filters only fields that are for properties (ie 1:1 associations)
- */
- public final static Filter<ObjectAssociation> WHERE_VISIBLE_IN_COLLECTION_TABLE = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation association) {
- final HiddenFacet hiddenFacet = association.getFacet(HiddenFacet.class);
- return hiddenFacet == null || !hiddenFacet.where().inParentedTable();
- }
- };
+ @Deprecated
+ public final static Filter<ObjectAssociation> WHERE_VISIBLE_IN_COLLECTION_TABLE = ObjectAssociation.Filters.WHERE_VISIBLE_IN_COLLECTION_TABLE;
- /**
- * Filters only fields that are for properties (ie 1:1 associations)
- */
- public final static Filter<ObjectAssociation> WHERE_VISIBLE_IN_STANDALONE_TABLE = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation association) {
- final HiddenFacet hiddenFacet = association.getFacet(HiddenFacet.class);
- return hiddenFacet == null || !hiddenFacet.where().inStandaloneTable();
- }
- };
+ @Deprecated
+ public final static Filter<ObjectAssociation> WHERE_VISIBLE_IN_STANDALONE_TABLE = ObjectAssociation.Filters.WHERE_VISIBLE_IN_STANDALONE_TABLE;
- /**
- * Returns all fields (that is, filters out nothing).
- */
- public final static Filter<ObjectAssociation> ALL = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation property) {
- return true;
- }
- };
+ @Deprecated
+ public final static Filter<ObjectAssociation> ALL = ObjectAssociation.Filters.ALL;
- /**
- * Filters only fields that are for collections (ie 1:m associations)
- */
- public final static Filter<ObjectAssociation> COLLECTIONS = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation property) {
- return property.isOneToManyAssociation();
- }
- };
+ @Deprecated
+ public final static Filter<ObjectAssociation> COLLECTIONS = ObjectAssociation.Filters.COLLECTIONS;
- /**
- * Filters only properties that are visible statically, ie have not been
- * unconditionally hidden at compile time.
- *
- * <p>
- * Note this list will include
- * properties marked as hidden once persisted and until persisted, but not
- * those marked hidden always.
- */
- public static final Filter<ObjectAssociation> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation property) {
- return !property.isAlwaysHidden();
- }
- };
+ @Deprecated
+ public static final Filter<ObjectAssociation> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = ObjectAssociation.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE;
+ @Deprecated
public static final Filter<ObjectAssociation> staticallyVisible(final Where context) {
- return new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation association) {
- final HiddenFacet facet = association.getFacet(HiddenFacet.class);
- if(facet == null) {
- return true;
- }
- return !(facet.where().includes(context) && facet.when() == When.ALWAYS);
- }
- };
+ return ObjectAssociation.Filters.staticallyVisible(context);
}
-
+ @Deprecated
public static Filter<ObjectAssociation> dynamicallyVisible(final AuthenticationSession session, final ObjectAdapter target, final Where where) {
- return new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation objectAssociation) {
- final Consent visible = objectAssociation.isVisible(session, target, where);
- return visible.isAllowed();
- }
- };
+ return ObjectAssociation.Filters.dynamicallyVisible(session, target, where);
}
-
+ @Deprecated
public static Filter<ObjectAssociation> enabled(final AuthenticationSession session, final ObjectAdapter adapter, final Where where) {
- return new Filter<ObjectAssociation>() {
- @Override
- public boolean accept(final ObjectAssociation objectAssociation) {
- final Consent usable = objectAssociation.isUsable(session, adapter, where);
- return usable.isAllowed();
- }
- };
+ return ObjectAssociation.Filters.enabled(session, adapter, where);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index c48bfc8..a8da35e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -51,6 +51,7 @@ import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.lang.JavaClassUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ServicesProvider;
+import org.apache.isis.core.metamodel.adapter.ServicesProviderAbstract;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.InvokeUtils;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
@@ -527,7 +528,13 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
final AuthenticationSessionProvider authenticationSessionProvider = getRuntimeContext().getAuthenticationSessionProvider();
final SpecificationLoader specificationLookup = getRuntimeContext().getSpecificationLoader();
- final ServicesProvider servicesProvider = getRuntimeContext().getServicesProvider();
+ final ServicesProvider servicesProvider = getRuntimeContext().getServicesProvider();/* new ServicesProviderAbstract(){
+
+ @Override
+ public List<ObjectAdapter> getServices() {
+ return ObjectReflectorDefault.this.services;
+ }
+ };*/
final ObjectInstantiator objectInstantiator = getRuntimeContext().getObjectInstantiator();
// create contexts as inputs ...
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
index 34f2ce8..7f5d04a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
@@ -16,15 +16,48 @@
*/
package org.apache.isis.core.metamodel.specloader.specimpl;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacet;
-import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacetAbstract;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
+import com.google.common.base.Predicate;
+
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+
/**
* Marker interface indicating an a contributed association or action.
*/
-public interface ContributeeMember {
+public interface ContributeeMember {
+
+ public static class Predicates {
+
+ private Predicates(){}
+
+ /**
+ * Evaluates the supplied {@link ObjectMember} and includes either if it is not a {@link ContributeeMember}
+ * (ie is a regular member) or is a {@link ContributeeMember} and contributed are to be
+ * {@link Contributed#isIncluded() included}.
+ */
+ public static <T extends ObjectMember> Predicate<T> regularElse(final Contributed contributed) {
+ return com.google.common.base.Predicates.or(regular(), is(contributed));
+ }
+
+ public static <T extends ObjectMember> Predicate<T> regular() {
+ return new Predicate<T>() {
+ @Override
+ public boolean apply(ObjectMember input) {
+ return !(input instanceof ContributeeMember);
+ }
+ };
+ }
+
+ public static <T extends ObjectMember> Predicate<T> is(final Contributed contributed) {
+ return new Predicate<T>() {
+ @Override
+ public boolean apply(ObjectMember input) {
+ return input instanceof ContributeeMember && contributed.isIncluded();
+ }
+ };
+ }
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 5cd2583..ce2608c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -89,6 +90,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -132,15 +134,12 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
private final List<ObjectSpecification> interfaces = Lists.newArrayList();
private final SubclassList subclasses = new SubclassList();
- /**
- * Lazily initialized in {@link #getContributedAssociations()}.
- */
- private List<ObjectAssociation> contributedAssociations;
+ private List<ObjectAssociation> contributeeAssociations;
/**
- * Lazily populated in {@link #getContributedActions(ActionType)}.
+ * Lazily populated in {@link #getContributeeActions(ActionType)}.
*/
- private final Map<ActionType, List<ObjectAction>> contributedActionSetsByType = Maps.newLinkedHashMap();
+ private final Map<ActionType, List<ObjectAction>> contributeeActionsByType = Maps.newLinkedHashMap();
private final Class<?> correspondingClass;
private final String fullName;
@@ -653,15 +652,17 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
// //////////////////////////////////////////////////////////////////////
@Override
- public List<ObjectAssociation> getAssociations(final Contributed contributed) {
+ public List<ObjectAssociation> getAssociations(final Contributed contributee) {
List<ObjectAssociation> associations = Lists.newArrayList(this.associations);
- if(contributed.isIncluded()) {
- associations.addAll(getContributedAssociations());
+ if(contributee.isIncluded()) {
+ associations.addAll(getContributeeAssociations());
}
- return associations;
+ return Lists.newArrayList(Iterables.filter(
+ associations, ContributeeMember.Predicates.regularElse(contributee)));
}
+
/**
* The association with the given {@link ObjectAssociation#getId() id}.
*
@@ -703,72 +704,56 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<OneToManyAssociation> getCollections(Contributed contributed) {
- final List list = getAssociations(contributed, ObjectAssociationFilters.COLLECTIONS);
+ final List list = getAssociations(contributed, ObjectAssociation.Filters.COLLECTIONS);
return list;
}
// //////////////////////////////////////////////////////////////////////
- // getObjectAction, getAction, getActions
+ // getObjectActions
// //////////////////////////////////////////////////////////////////////
@Override
- public List<ObjectAction> getObjectActions(final Contributed contributed) {
-
- // REVIEW: this if/else below almost certainly isn't required;
- // can probably just replace with:
- //
- // return getObjectActions(ActionType.ALL_EXCEPT_SET, contributed);
-
- if (contributed.isExcluded()) {
- return Collections.unmodifiableList(objectActions);
- } else {
- return getObjectActions(ActionType.ALL_EXCEPT_SET, Contributed.INCLUDED);
- }
+ public List<ObjectAction> getObjectActions(
+ final Contributed contributed) {
+ return getObjectActions(ActionType.ALL, contributed, Filters.<ObjectAction>any());
}
@Override
- public List<ObjectAction> getObjectActions(final List<ActionType> requestedTypes, final Contributed contributed) {
- return getObjectActions(requestedTypes, contributed, Filters.<ObjectAction>any());
+ public List<ObjectAction> getObjectActions(
+ final ActionType type,
+ final Contributed contributed,
+ final Filter<ObjectAction> filter) {
+ return getObjectActions(Collections.singletonList(type), contributed, filter);
}
@Override
- public List<ObjectAction> getObjectActions(final List<ActionType> requestedTypes, final Contributed contributed, Filter<ObjectAction> filter) {
+ public List<ObjectAction> getObjectActions(
+ final List<ActionType> types,
+ final Contributed contributed,
+ final Filter<ObjectAction> filter) {
final List<ObjectAction> actions = Lists.newArrayList();
- for (final ActionType type : requestedTypes) {
+ for (final ActionType type : types) {
addActions(type, contributed, filter, actions);
}
- return actions;
- }
-
- @Override
- public List<ObjectAction> getObjectActions(final ActionType type, final Contributed contributed) {
- return getObjectActions(type, contributed, Filters.<ObjectAction>any());
- }
-
- @Override
- public List<ObjectAction> getObjectActions(final ActionType type, final Contributed contributed, Filter<ObjectAction> filter) {
- final List<ObjectAction> actions = Lists.newArrayList();
- return addActions(type, contributed, filter, actions);
+ return Lists.newArrayList(Iterables.filter(
+ actions, ContributeeMember.Predicates.regularElse(contributed)));
}
- private List<ObjectAction> addActions(final ActionType type, final Contributed contributed, final Filter<ObjectAction> filter, final List<ObjectAction> actionListToAppendTo) {
- if (!isService() && contributed.isIncluded()) {
- actionListToAppendTo.addAll(getContributedActions(type, filter));
+ private List<ObjectAction> addActions(final ActionType type, final Contributed contributee, final Filter<ObjectAction> filter, final List<ObjectAction> actionListToAppendTo) {
+ if(contributee.isIncluded()) {
+ actionListToAppendTo.addAll(getContributeeActions(type, filter));
}
- actionListToAppendTo.addAll(getFlattenedActions(objectActions, type, filter));
+ actionListToAppendTo.addAll(filterActions(objectActions, type, filter));
return actionListToAppendTo;
}
@SuppressWarnings("unchecked")
- private static List<ObjectAction> getFlattenedActions(final List<ObjectAction> objectActions, final ActionType type, final Filter<ObjectAction> filter) {
- final List<ObjectAction> actions = ObjectActions.flattenedActions(objectActions);
- return Lists.newArrayList(Iterables.filter(actions, Filters.asPredicate(Filters.and(ObjectActionFilters.filterOfType(type), filter))));
+ private static List<ObjectAction> filterActions(final List<ObjectAction> objectActions, final ActionType type, final Filter<ObjectAction> filter) {
+ return Lists.newArrayList(Iterables.filter(
+ objectActions,
+ Filters.asPredicate(Filters.and(ObjectAction.Filters.ofType(type), filter))));
}
- @Override
- public List<ObjectAction> getServiceActionsReturning(final ActionType type) {
- return getServiceActionsReturning(Collections.singletonList(type));
- }
@Override
public List<ObjectAction> getServiceActionsReturning(final List<ActionType> types) {
@@ -783,7 +768,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
private void appendServiceActionsReturning(final ObjectAdapter serviceAdapter, final List<ActionType> types, final List<ObjectAction> relatedActionsToAppendTo) {
final List<ObjectAction> matchingActionsToAppendTo = Lists.newArrayList();
for (final ActionType type : types) {
- final List<ObjectAction> serviceActions = serviceAdapter.getSpecification().getObjectActions(type, Contributed.INCLUDED);
+ final List<ObjectAction> serviceActions = serviceAdapter.getSpecification().getObjectActions(type, Contributed.INCLUDED, Filters.<ObjectAction>any());
for (final ObjectAction serviceAction : serviceActions) {
addIfReturnsSubtype(serviceAction, matchingActionsToAppendTo);
}
@@ -815,43 +800,44 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
// //////////////////////////////////////////////////////////////////////
- // contributed associations (properties and collections)
+ // contributee associations (properties and collections)
// //////////////////////////////////////////////////////////////////////
- private List<ObjectAssociation> getContributedAssociations() {
+ private List<ObjectAssociation> getContributeeAssociations() {
if (isService()) {
return Collections.emptyList();
}
- if (contributedAssociations == null) {
- contributedAssociations = Lists.newArrayList();
+ if (contributeeAssociations == null) {
+ contributeeAssociations = Lists.newArrayList();
final List<ObjectAdapter> services = getServicesProvider().getServices();
for (final ObjectAdapter serviceAdapter : services) {
- addContributedAssociationsIfAny(serviceAdapter, contributedAssociations);
+ addContributeeAssociationsIfAny(serviceAdapter, contributeeAssociations);
}
}
- return contributedAssociations;
+ return contributeeAssociations;
}
- private void addContributedAssociationsIfAny(final ObjectAdapter serviceAdapter, final List<ObjectAssociation> contributedAssociationsToAppendTo) {
+ private void addContributeeAssociationsIfAny(
+ final ObjectAdapter serviceAdapter,
+ final List<ObjectAssociation> contributeeAssociationsToAppendTo) {
final ObjectSpecification specification = serviceAdapter.getSpecification();
if (specification == this) {
return;
}
- final List<ObjectAssociation> contributedAssociations = findContributedAssociations(serviceAdapter);
- contributedAssociationsToAppendTo.addAll(contributedAssociations);
+ final List<ObjectAssociation> contributeeAssociations = findContributeeAssociations(serviceAdapter);
+ contributeeAssociationsToAppendTo.addAll(contributeeAssociations);
}
/**
* Synthesises {@link ObjectAssociation}s from matching {@link ObjectAction}s of any of the services
* that accept one parameter
*/
- private List<ObjectAssociation> findContributedAssociations(final ObjectAdapter serviceAdapter) {
+ private List<ObjectAssociation> findContributeeAssociations(final ObjectAdapter serviceAdapter) {
final ObjectSpecification specification = serviceAdapter.getSpecification();
-
final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
- final List<ObjectActionImpl> contributingActions = Lists.newArrayList();
+ final List<ObjectActionImpl> contributedActions = Lists.newArrayList();
for (final ObjectAction serviceAction : serviceActions) {
if (serviceAction.isAlwaysHidden()) {
continue;
@@ -869,11 +855,10 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
if(!(serviceAction instanceof ObjectActionImpl)) {
continue;
}
- ObjectActionImpl objectActionImpl = (ObjectActionImpl) serviceAction;
- contributingActions.add(objectActionImpl);
+ contributedActions.add((ObjectActionImpl) serviceAction);
}
- return Lists.newArrayList(Iterables.transform(contributingActions, new Function<ObjectActionImpl, ObjectAssociation>(){
+ return Lists.newArrayList(Iterables.transform(contributedActions, new Function<ObjectActionImpl, ObjectAssociation>(){
@Override
public ObjectAssociation apply(ObjectActionImpl input) {
final ObjectSpecification returnType = input.getReturnType();
@@ -888,46 +873,42 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
// //////////////////////////////////////////////////////////////////////
- // contributed actions
+ // contributee actions
// //////////////////////////////////////////////////////////////////////
/**
- * Finds all service actions that contribute to this spec, if any.
+ * All contributee actions (each wrapping a service's contributed action) for this spec;
+ * these are lazily created and then cached.
*
* <p>
* If this specification {@link #isService() is actually for} a service,
- * then returns an empty array.
- * @param filter TODO
- *
- * @return an array of {@link ObjectActionSet}s (!!), each of which contains
- * {@link ObjectAction}s of the requested type.
- *
+ * then returns an empty list.
*/
- protected List<ObjectAction> getContributedActions(final ActionType actionType, Filter<ObjectAction> filter) {
- List<ObjectAction> contributedActionSets = getContributedActions(actionType);
- return Lists.newArrayList(Iterables.filter(contributedActionSets, Filters.asPredicate(filter)));
- }
-
- private List<ObjectAction> getContributedActions(final ActionType actionType) {
+ protected List<ObjectAction> getContributeeActions(final ActionType actionType, Filter<ObjectAction> filter) {
if (isService()) {
return Collections.emptyList();
}
- List<ObjectAction> contributedActionSets = contributedActionSetsByType.get(actionType);
- if (contributedActionSets == null) {
- contributedActionSets = Lists.newArrayList();
- contributedActionSetsByType.put(actionType, contributedActionSets);
+ List<ObjectAction> contributedActionSets = getContributeeActions(actionType);
+ return Lists.newArrayList(Iterables.filter(contributedActionSets, Filters.asPredicate(filter)));
+ }
+
+ private List<ObjectAction> getContributeeActions(final ActionType actionType) {
+ List<ObjectAction> contributeeActions = contributeeActionsByType.get(actionType);
+ if (contributeeActions == null) {
+ contributeeActions = Lists.newArrayList();
+ contributeeActionsByType.put(actionType, contributeeActions);
// populate an ActionSet with all actions contributed by each
// service
final List<ObjectAdapter> services = getServicesProvider().getServices();
for (final ObjectAdapter serviceAdapter : services) {
- addContributedActionsIfAny(serviceAdapter, actionType, contributedActionSets);
+ addContributeeActionsIfAny(serviceAdapter, actionType, contributeeActions);
}
}
- return contributedActionSets;
+ return contributeeActions;
}
- private void addContributedActionsIfAny(final ObjectAdapter serviceAdapter, final ActionType actionType, final List<ObjectAction> contributedActionsToAppendTo) {
+ private void addContributeeActionsIfAny(final ObjectAdapter serviceAdapter, final ActionType actionType, final List<ObjectAction> contributeeActionsToAppendTo) {
final ObjectSpecification specification = serviceAdapter.getSpecification();
if (specification == this) {
return;
@@ -945,21 +926,21 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
if(!(serviceAction instanceof ObjectActionImpl)) {
continue;
}
- ObjectActionImpl serviceActionImpl = (ObjectActionImpl) serviceAction;
+ ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;
// see if qualifies by inspecting all parameters
- final int contributeeParam = contributeeParameterMatchOf(serviceActionImpl);
+ final int contributeeParam = contributeeParameterMatchOf(contributedAction);
if (contributeeParam != -1) {
- ObjectActionContributee contributee =
- new ObjectActionContributee(serviceAdapter, serviceActionImpl, contributeeParam, this, objectMemberContext);
- contributeeActions.add(contributee);
+ ObjectActionContributee contributeeAction =
+ new ObjectActionContributee(serviceAdapter, contributedAction, contributeeParam, this, objectMemberContext);
+ contributeeActions.add(contributeeAction);
}
}
// only add if there are matching subactions.
if (contributeeActions.isEmpty()) {
return;
}
- contributedActionsToAppendTo.addAll(contributeeActions);
+ contributeeActionsToAppendTo.addAll(contributeeActions);
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index e5b65e2..bc2940b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -385,33 +385,31 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
@Override
public ObjectAction getObjectAction(final ActionType type, final String id, final List<ObjectSpecification> parameters) {
- final List<ObjectAction> availableActions = ListUtils.combine(getObjectActions(Contributed.EXCLUDED), getContributedActions(type, Filters.<ObjectAction>any()));
- return getAction(availableActions, type, id, parameters);
+ final List<ObjectAction> actions =
+ getObjectActions(type, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ return firstAction(actions, id, parameters);
}
@Override
public ObjectAction getObjectAction(final ActionType type, final String id) {
- final List<ObjectAction> availableActions = ListUtils.combine(getObjectActions(type, Contributed.INCLUDED), getContributedActions(type, Filters.<ObjectAction>any()));
- return getAction(availableActions, type, id);
+ final List<ObjectAction> actions =
+ getObjectActions(type, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ return firstAction(actions, id);
}
@Override
public ObjectAction getObjectAction(final String id) {
- for (final ActionType type : ActionType.values()) {
- final ObjectAction action = getObjectAction(type, id);
- if (action != null) {
- return action;
- }
- }
- return null;
+ final List<ObjectAction> actions =
+ getObjectActions(ActionType.ALL, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ return firstAction(actions, id);
}
- private ObjectAction getAction(final List<ObjectAction> availableActions, final ActionType type, final String actionName, final List<ObjectSpecification> parameters) {
- outer: for (int i = 0; i < availableActions.size(); i++) {
- final ObjectAction action = availableActions.get(i);
- if (!action.getType().equals(type)) {
- continue outer;
- }
+ private static ObjectAction firstAction(
+ final List<ObjectAction> candidateActions,
+ final String actionName,
+ final List<ObjectSpecification> parameters) {
+ outer: for (int i = 0; i < candidateActions.size(); i++) {
+ final ObjectAction action = candidateActions.get(i);
if (actionName != null && !actionName.equals(action.getId())) {
continue outer;
}
@@ -428,15 +426,14 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
return null;
}
- private ObjectAction getAction(final List<ObjectAction> availableActions, final ActionType type, final String id) {
+ private static ObjectAction firstAction(
+ final List<ObjectAction> candidateActions,
+ final String id) {
if (id == null) {
return null;
}
- for (int i = 0; i < availableActions.size(); i++) {
- final ObjectAction action = availableActions.get(i);
- if (!type.matchesTypeOf(action)) {
- continue;
- }
+ for (int i = 0; i < candidateActions.size(); i++) {
+ final ObjectAction action = candidateActions.get(i);
if (id.equals(action.getIdentifier().toNameParmsIdentityString())) {
return action;
}
@@ -514,7 +511,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
}
private void catalogueActions(final Map<Method, ObjectMember> membersByMethod) {
- final List<ObjectAction> userActions = getObjectActions(ActionType.USER, Contributed.INCLUDED);
+ final List<ObjectAction> userActions = getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
for (int i = 0; i < userActions.size(); i++) {
final ObjectAction userAction = userActions.get(i);
final List<Facet> facets = userAction.getFacets(ImperativeFacet.FILTER);
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/objectlist/ObjectSpecificationForFreeStandingList.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/objectlist/ObjectSpecificationForFreeStandingList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/objectlist/ObjectSpecificationForFreeStandingList.java
index 2a28783..e87f760 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/objectlist/ObjectSpecificationForFreeStandingList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/objectlist/ObjectSpecificationForFreeStandingList.java
@@ -161,14 +161,6 @@ public class ObjectSpecificationForFreeStandingList extends ObjectSpecificationA
* Review: is it necessary to override for this subclass?
*/
@Override
- public List<ObjectAction> getServiceActionsReturning(final ActionType type) {
- return Collections.emptyList();
- }
-
- /**
- * Review: is it necessary to override for this subclass?
- */
- @Override
public List<ObjectAction> getServiceActionsReturning(final List<ActionType> type) {
return Collections.emptyList();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
index 42c7553..3b2995e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
@@ -24,6 +24,7 @@ import java.util.List;
import com.google.common.collect.Lists;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filters;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.commons.debug.DebugString;
@@ -42,7 +43,6 @@ 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.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
public final class Dump {
@@ -142,11 +142,6 @@ public final class Dump {
debugBuilder.indent();
specificationActionMethods(specification, debugBuilder);
debugBuilder.unindent();
-
- debugBuilder.appendln("Related Service Actions");
- debugBuilder.indent();
- specificationServiceMethods(specification, debugBuilder);
- debugBuilder.unindent();
}
private static String[] specificationNames(final List<ObjectSpecification> specifications) {
@@ -159,22 +154,10 @@ public final class Dump {
private static void specificationActionMethods(final ObjectSpecification specification, final DebugBuilder debugBuilder) {
try {
- final List<ObjectAction> userActions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED);
- final List<ObjectAction> explActions = specification.getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED);
- final List<ObjectAction> prototypeActions = specification.getObjectActions(ActionType.PROTOTYPE, Contributed.INCLUDED);
- final List<ObjectAction> debActions = specification.getObjectActions(ActionType.DEBUG, Contributed.INCLUDED);
- specificationMethods(userActions, explActions, prototypeActions, debActions, debugBuilder);
- } catch (final RuntimeException e) {
- debugBuilder.appendException(e);
- }
- }
-
- private static void specificationServiceMethods(final ObjectSpecification specification, final DebugBuilder debugBuilder) {
- try {
- final List<ObjectAction> userActions = specification.getServiceActionsReturning(ActionType.USER);
- final List<ObjectAction> explActions = specification.getServiceActionsReturning(ActionType.EXPLORATION);
- final List<ObjectAction> prototypeActions = specification.getServiceActionsReturning(ActionType.PROTOTYPE);
- final List<ObjectAction> debActions = specification.getServiceActionsReturning(ActionType.DEBUG);
+ final List<ObjectAction> userActions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ final List<ObjectAction> explActions = specification.getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ final List<ObjectAction> prototypeActions = specification.getObjectActions(ActionType.PROTOTYPE, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ final List<ObjectAction> debActions = specification.getObjectActions(ActionType.DEBUG, Contributed.INCLUDED, Filters.<ObjectAction>any());
specificationMethods(userActions, explActions, prototypeActions, debActions, debugBuilder);
} catch (final RuntimeException e) {
debugBuilder.appendException(e);
@@ -190,7 +173,7 @@ public final class Dump {
}
debugBuilder.unindent();
- final List<ObjectAssociation> fields2 = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE);
+ final List<ObjectAssociation> fields2 = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE);
debugBuilder.appendln("Static");
debugBuilder.indent();
for (int i = 0; i < fields2.size(); i++) {
http://git-wip-us.apache.org/repos/asf/isis/blob/02340bfa/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 779c1af..97c1a7a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -123,11 +123,6 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
- public List<ObjectAction> getServiceActionsReturning(final ActionType type) {
- return null;
- }
-
- @Override
public List<ObjectAction> getServiceActionsReturning(final List<ActionType> types) {
return null;
}
@@ -224,11 +219,6 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
- public List<ObjectAction> getObjectActions(final ActionType type, final Contributed contributed) {
- return null;
- }
-
- @Override
public ObjectAction getObjectAction(final String nameParmsIdentityString) {
for (final ActionType type : ActionType.values()) {
final ObjectAction action = getObjectAction(type, nameParmsIdentityString);
@@ -479,17 +469,12 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
- public List<ObjectAction> getObjectActions(final List<ActionType> types, final Contributed contributed) {
- return null;
- }
-
- @Override
- public List<ObjectAction> getObjectActions(ActionType type, Contributed contributed, Filter<ObjectAction> filter) {
+ public List<ObjectAction> getObjectActions(final ActionType type, final Contributed contributed, final Filter<ObjectAction> filter) {
return null;
}
@Override
- public List<ObjectAction> getObjectActions(List<ActionType> requestedTypes, Contributed contributed, Filter<ObjectAction> filter) {
+ public List<ObjectAction> getObjectActions(List<ActionType> types, final Contributed contributed, final Filter<ObjectAction> filter) {
return null;
}
[2/2] git commit: ISIS-503: store contributee members along with
regular members
Posted by da...@apache.org.
ISIS-503: store contributee members along with regular members
- ie refactor how they are calculated
also:
- more refactorings of the overloads of getAssociations and getObjectActions
- rename "properties" to "metadataProperties" and convert to a field (in order to make available for sorting contributee actions later on when calculated and saved)
- rename "layoutProperties(...)" to "metadataProperties(...)"
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/242739ad
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/242739ad
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/242739ad
Branch: refs/heads/master
Commit: 242739ad6af3670bb443abfa3deac2c5a5ed8d1b
Parents: 02340bf
Author: Dan Haywood <da...@apache.org>
Authored: Wed Sep 4 00:42:54 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Sep 4 00:42:54 2013 +0100
----------------------------------------------------------------------
.../core/metamodel/facets/FacetFactory.java | 57 ++++--
.../specloader/ObjectReflectorDefault.java | 8 +-
.../facetprocessor/FacetProcessor.java | 35 +++-
.../specimpl/FacetedMethodsBuilder.java | 74 ++++---
.../specimpl/ObjectSpecificationAbstract.java | 194 ++++++++++++-------
.../dflt/ObjectSpecificationDefault.java | 97 ++--------
.../members/order/MemberOrderFacetFactory.java | 2 +-
.../MemberGroupLayoutFacetFactory.java | 2 +-
8 files changed, 262 insertions(+), 207 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
index 55ab363..7048ec6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
@@ -55,11 +55,16 @@ public interface FacetFactory {
* the meta-model.
*/
List<FeatureType> getFeatureTypes();
+
+
+ // //////////////////////////////////////
+ // process class
+ // //////////////////////////////////////
public static class ProcessClassContext extends AbstractProcessContext<FacetHolder> implements MethodRemover {
private final Class<?> cls;
private final MethodRemover methodRemover;
- private final Properties properties;
+ private final Properties metadataProperties;
/**
* For testing only.
@@ -68,11 +73,15 @@ public interface FacetFactory {
this(cls, null, methodRemover, facetHolder);
}
- public ProcessClassContext(final Class<?> cls, final Properties properties, final MethodRemover methodRemover, final FacetHolder facetHolder) {
+ public ProcessClassContext(
+ final Class<?> cls,
+ final Properties metadataProperties,
+ final MethodRemover methodRemover,
+ final FacetHolder facetHolder) {
super(facetHolder);
this.cls = cls;
this.methodRemover = methodRemover;
- this.properties = properties;
+ this.metadataProperties = metadataProperties;
}
/**
@@ -102,11 +111,11 @@ public interface FacetFactory {
methodRemover.removeMethods(methods);
}
- public Properties layoutProperties(String prefix) {
- if(properties == null) {
+ public Properties metadataProperties(String prefix) {
+ if(metadataProperties == null) {
return null;
}
- final Properties subsetProperties = PropertyUtil.subset(this.properties, prefix);
+ final Properties subsetProperties = PropertyUtil.subset(this.metadataProperties, prefix);
return !subsetProperties.isEmpty() ? subsetProperties : null;
}
}
@@ -115,19 +124,30 @@ public interface FacetFactory {
* Process the class, and return the correctly setup annotation if present.
*/
void process(ProcessClassContext processClassContext);
+
+ // //////////////////////////////////////
+ // process method
+ // //////////////////////////////////////
+
public static class ProcessMethodContext extends AbstractProcessContext<FacetedMethod> implements MethodRemover {
private final Class<?> cls;
private final FeatureType featureType;
- private final Properties properties;
+ private final Properties metadataProperties;
private final Method method;
private final MethodRemover methodRemover;
- public ProcessMethodContext(final Class<?> cls, FeatureType featureType, Properties properties, final Method method, final MethodRemover methodRemover, final FacetedMethod facetedMethod) {
+ public ProcessMethodContext(
+ final Class<?> cls,
+ final FeatureType featureType,
+ final Properties metadataProperties,
+ final Method method,
+ final MethodRemover methodRemover,
+ final FacetedMethod facetedMethod) {
super(facetedMethod);
this.cls = cls;
this.featureType = featureType;
- this.properties = properties;
+ this.metadataProperties = metadataProperties;
this.method = method;
this.methodRemover = methodRemover;
}
@@ -160,9 +180,9 @@ public interface FacetFactory {
methodRemover.removeMethods(methods);
}
- public Properties layoutProperties(String prefix) {
+ public Properties metadataProperties(String prefix) {
- if(properties == null) {
+ if(metadataProperties == null) {
return null;
}
Identifier identifier = featureType.identifierFor(getCls(), getMethod());
@@ -171,15 +191,14 @@ public interface FacetFactory {
// bit of a hack; to distinguish between actions and properties that have same identifier
// eg getPaidBy() and paidBy()
if(featureType.isAction()) {
- Properties subsetProperties = PropertyUtil.subset(this.properties, prefix+"."+id+"()");
+ Properties subsetProperties = PropertyUtil.subset(this.metadataProperties, prefix+"."+id+"()");
if (!subsetProperties.isEmpty()) {
return subsetProperties;
}
-
}
// otherwise, regular processing...
- Properties subsetProperties = PropertyUtil.subset(this.properties, prefix+"."+id);
+ Properties subsetProperties = PropertyUtil.subset(this.metadataProperties, prefix+"."+id);
if (!subsetProperties.isEmpty()) {
return subsetProperties;
}
@@ -193,11 +212,19 @@ public interface FacetFactory {
*/
void process(ProcessMethodContext processMethodContext);
+
+ // //////////////////////////////////////
+ // process param
+ // //////////////////////////////////////
+
public static class ProcessParameterContext extends AbstractProcessContext<FacetedMethodParameter> {
private final Method method;
private final int paramNum;
- public ProcessParameterContext(final Method method, final int paramNum, final FacetedMethodParameter facetedMethodParameter) {
+ public ProcessParameterContext(
+ final Method method,
+ final int paramNum,
+ final FacetedMethodParameter facetedMethodParameter) {
super(facetedMethodParameter);
this.method = method;
this.paramNum = paramNum;
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index a8da35e..35e49fd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -528,13 +528,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
final AuthenticationSessionProvider authenticationSessionProvider = getRuntimeContext().getAuthenticationSessionProvider();
final SpecificationLoader specificationLookup = getRuntimeContext().getSpecificationLoader();
- final ServicesProvider servicesProvider = getRuntimeContext().getServicesProvider();/* new ServicesProviderAbstract(){
-
- @Override
- public List<ObjectAdapter> getServices() {
- return ObjectReflectorDefault.this.services;
- }
- };*/
+ final ServicesProvider servicesProvider = getRuntimeContext().getServicesProvider();
final ObjectInstantiator objectInstantiator = getRuntimeContext().getObjectInstantiator();
// create contexts as inputs ...
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
index f6a80de..0ba8a87 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
@@ -276,19 +276,26 @@ public class FacetProcessor implements RuntimeContextAware {
* - class to process
* @param facetHolder
* - holder to attach facets to.
- *
*/
- public void process(final Class<?> cls, final Properties properties, final MethodRemover methodRemover, final FacetHolder facetHolder) {
+ public void process(
+ final Class<?> cls,
+ final Properties metadataProperties,
+ final MethodRemover methodRemover,
+ final FacetHolder facetHolder) {
final List<FacetFactory> factoryList = getFactoryListByFeatureType(FeatureType.OBJECT);
for (final FacetFactory facetFactory : factoryList) {
- facetFactory.process(new ProcessClassContext(cls, properties, removerElseNullRemover(methodRemover), facetHolder));
+ facetFactory.process(new ProcessClassContext(cls, metadataProperties, removerElseNullRemover(methodRemover), facetHolder));
}
}
- public void processPost(final Class<?> cls, Properties properties, final MethodRemover methodRemover, final FacetHolder facetHolder) {
+ public void processPost(
+ final Class<?> cls,
+ final Properties metadataProperties,
+ final MethodRemover methodRemover,
+ final FacetHolder facetHolder) {
final List<FacetFactory> factoryList = getFactoryListByFeatureType(FeatureType.OBJECT_POST_PROCESSING);
for (final FacetFactory facetFactory : factoryList) {
- facetFactory.process(new ProcessClassContext(cls, properties, removerElseNullRemover(methodRemover), facetHolder));
+ facetFactory.process(new ProcessClassContext(cls, metadataProperties, removerElseNullRemover(methodRemover), facetHolder));
}
}
@@ -313,12 +320,19 @@ public class FacetProcessor implements RuntimeContextAware {
* @param featureType
* - what type of feature the method represents (property,
* action, collection etc)
- * @param properties TODO
+ * @param metadataProperties
+ * - additional properties to parse and use
*/
- public void process(final Class<?> cls, final Method method, final MethodRemover methodRemover, final FacetedMethod facetedMethod, final FeatureType featureType, Properties properties) {
+ public void process(
+ final Class<?> cls,
+ final Method method,
+ final MethodRemover methodRemover,
+ final FacetedMethod facetedMethod,
+ final FeatureType featureType,
+ final Properties metadataProperties) {
final List<FacetFactory> factoryList = getFactoryListByFeatureType(featureType);
for (final FacetFactory facetFactory : factoryList) {
- facetFactory.process(new ProcessMethodContext(cls, featureType, properties, method, removerElseNullRemover(methodRemover), facetedMethod));
+ facetFactory.process(new ProcessMethodContext(cls, featureType, metadataProperties, method, removerElseNullRemover(methodRemover), facetedMethod));
}
}
@@ -340,7 +354,10 @@ public class FacetProcessor implements RuntimeContextAware {
* @param facetedMethodParameter
* - holder to attach facets to.
*/
- public void processParams(final Method method, final int paramNum, final FacetedMethodParameter facetedMethodParameter) {
+ public void processParams(
+ final Method method,
+ final int paramNum,
+ final FacetedMethodParameter facetedMethodParameter) {
final List<FacetFactory> factoryList = getFactoryListByFeatureType(FeatureType.ACTION_PARAMETER);
for (final FacetFactory facetFactory : factoryList) {
facetFactory.processParams(new ProcessParameterContext(method, paramNum, facetedMethodParameter));
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 06cbf9d..38b62ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -176,8 +176,6 @@ public class FacetedMethodsBuilder {
// ////////////////////////////////////////////////////////////////////////////
-
-
public Properties introspectClass() {
LOG.info("introspecting " + getClassName());
if (LOG.isDebugEnabled()) {
@@ -187,9 +185,9 @@ public class FacetedMethodsBuilder {
// process facets at object level
// this will also remove some methods, such as the superclass methods.
- Properties properties = layoutMetadataProperties(introspectedClass);
+ final Properties metadataProperties = readMetadataProperties(introspectedClass);
- getFacetProcessor().process(introspectedClass, properties, methodRemover, spec);
+ getFacetProcessor().process(introspectedClass, metadataProperties, methodRemover, spec);
// if this class has additional facets (as per @Facets), then process
// them.
@@ -206,10 +204,10 @@ public class FacetedMethodsBuilder {
throw new IsisException(e);
}
getFacetProcessor().injectDependenciesInto(facetFactory);
- facetFactory.process(new ProcessClassContext(introspectedClass, properties, methodRemover, spec));
+ facetFactory.process(new ProcessClassContext(introspectedClass, metadataProperties, methodRemover, spec));
}
}
- return properties;
+ return metadataProperties;
}
/**
@@ -218,10 +216,10 @@ public class FacetedMethodsBuilder {
* <p>
* Not doing for now, though, because expect the {@link LayoutMetadata} to evolve a bit yet.
*/
- private Properties layoutMetadataProperties(Class<?> domainClass) {
+ private Properties readMetadataProperties(Class<?> domainClass) {
List<LayoutMetadataReader> layoutMetadataReaders =
Lists.<LayoutMetadataReader>newArrayList(new LayoutMetadataReaderFromJson(), new LayoutMetadataReaderFromJson());
- for (LayoutMetadataReader reader : layoutMetadataReaders) {
+ for (final LayoutMetadataReader reader : layoutMetadataReaders) {
try {
Properties properties = reader.asProperties(domainClass);
if(properties != null) {
@@ -353,11 +351,10 @@ public class FacetedMethodsBuilder {
/**
* Returns a {@link List} of {@link FacetedMethod}s representing object
* actions, lazily creating them first if required.
- * @param properties TODO
*/
- public List<FacetedMethod> getActionFacetedMethods(Properties properties) {
+ public List<FacetedMethod> getActionFacetedMethods(final Properties metadataProperties) {
if (actionFacetedMethods == null) {
- actionFacetedMethods = findActionFacetedMethods(MethodScope.OBJECT, properties);
+ actionFacetedMethods = findActionFacetedMethods(MethodScope.OBJECT, metadataProperties);
}
return actionFacetedMethods;
}
@@ -374,18 +371,23 @@ public class FacetedMethodsBuilder {
*
* <p>
* Perhaps it's important to skip helpers first. I doubt it, though.
- * @param properties TODO
*/
- private List<FacetedMethod> findActionFacetedMethods(final MethodScope methodScope, Properties properties) {
+ private List<FacetedMethod> findActionFacetedMethods(
+ final MethodScope methodScope,
+ final Properties metadataProperties) {
if (LOG.isDebugEnabled()) {
LOG.debug("introspecting " + getClassName() + ": actions");
}
- final List<FacetedMethod> actionFacetedMethods1 = findActionFacetedMethods(methodScope, RecognisedHelpersStrategy.SKIP, properties);
- final List<FacetedMethod> actionFacetedMethods2 = findActionFacetedMethods(methodScope, RecognisedHelpersStrategy.DONT_SKIP, properties);
+ final List<FacetedMethod> actionFacetedMethods1 = findActionFacetedMethods(methodScope, RecognisedHelpersStrategy.SKIP, metadataProperties);
+ final List<FacetedMethod> actionFacetedMethods2 = findActionFacetedMethods(methodScope, RecognisedHelpersStrategy.DONT_SKIP, metadataProperties);
return ListUtils.combine(actionFacetedMethods1, actionFacetedMethods2);
}
- private List<FacetedMethod> findActionFacetedMethods(final MethodScope methodScope, final RecognisedHelpersStrategy recognisedHelpersStrategy, Properties properties) {
+ private List<FacetedMethod> findActionFacetedMethods(
+ final MethodScope methodScope,
+ final RecognisedHelpersStrategy recognisedHelpersStrategy,
+ final Properties metadataProperties) {
+
if (LOG.isDebugEnabled()) {
LOG.debug(" looking for action methods");
}
@@ -397,7 +399,7 @@ public class FacetedMethodsBuilder {
if (method == null) {
continue;
}
- final FacetedMethod actionPeer = findActionMethodPeer(methodScope, recognisedHelpersStrategy, method, properties);
+ final FacetedMethod actionPeer = findActionFacetedMethod(methodScope, recognisedHelpersStrategy, method, metadataProperties);
if (actionPeer != null) {
methods.set(i, null);
actionFacetedMethods.add(actionPeer);
@@ -407,17 +409,24 @@ public class FacetedMethodsBuilder {
return actionFacetedMethods;
}
- private FacetedMethod findActionMethodPeer(final MethodScope methodScope, final RecognisedHelpersStrategy recognisedHelpersStrategy, final Method actionMethod, Properties properties) {
+ private FacetedMethod findActionFacetedMethod(
+ final MethodScope methodScope,
+ final RecognisedHelpersStrategy recognisedHelpersStrategy,
+ final Method actionMethod,
+ final Properties metadataProperties) {
if (!representsAction(actionMethod, methodScope, recognisedHelpersStrategy)) {
return null;
}
// build action
- return createActionFacetedMethod(actionMethod, properties);
+ return createActionFacetedMethod(actionMethod, metadataProperties);
}
- private FacetedMethod createActionFacetedMethod(final Method actionMethod, Properties properties) {
+ private FacetedMethod createActionFacetedMethod(
+ final Method actionMethod,
+ final Properties metadataProperties) {
+
if (!isAllParamTypesValid(actionMethod)) {
return null;
}
@@ -425,7 +434,7 @@ public class FacetedMethodsBuilder {
final FacetedMethod action = FacetedMethod.createForAction(introspectedClass, actionMethod);
// process facets on the action & parameters
- getFacetProcessor().process(introspectedClass, actionMethod, methodRemover, action, FeatureType.ACTION, properties);
+ getFacetProcessor().process(introspectedClass, actionMethod, methodRemover, action, FeatureType.ACTION, metadataProperties);
final List<FacetedMethodParameter> actionParams = action.getParameters();
for (int j = 0; j < actionParams.size(); j++) {
@@ -445,7 +454,10 @@ public class FacetedMethodsBuilder {
return true;
}
- private boolean representsAction(final Method actionMethod, final MethodScope methodScope, final RecognisedHelpersStrategy recognisedHelpersStrategy) {
+ private boolean representsAction(
+ final Method actionMethod,
+ final MethodScope methodScope,
+ final RecognisedHelpersStrategy recognisedHelpersStrategy) {
if (!MethodFinderUtils.inScope(methodScope, actionMethod)) {
return false;
@@ -502,12 +514,12 @@ public class FacetedMethodsBuilder {
// introspect class post processing
// ////////////////////////////////////////////////////////////////////////////
- public void introspectClassPostProcessing(Properties properties) {
+ public void introspectClassPostProcessing(final Properties metadataProperties) {
if (LOG.isDebugEnabled()) {
LOG.debug("introspecting " + getClassName() + ": class-level post-processing");
}
- getFacetProcessor().processPost(introspectedClass, properties, methodRemover, spec);
+ getFacetProcessor().processPost(introspectedClass, metadataProperties, methodRemover, spec);
}
// ////////////////////////////////////////////////////////////////////////////
@@ -519,7 +531,12 @@ public class FacetedMethodsBuilder {
* {@link #findAndRemovePrefixedNonVoidMethods(boolean, String, Class, int)}
* , but appends to provided {@link List} (collecting parameter pattern).
*/
- private void findAndRemovePrefixedNonVoidMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final int paramCount, final List<Method> methodListToAppendTo) {
+ private void findAndRemovePrefixedNonVoidMethods(
+ final MethodScope methodScope,
+ final String prefix,
+ final Class<?> returnType,
+ final int paramCount,
+ final List<Method> methodListToAppendTo) {
final List<Method> matchingMethods = findAndRemovePrefixedMethods(methodScope, prefix, returnType, false, paramCount);
methodListToAppendTo.addAll(matchingMethods);
}
@@ -533,7 +550,12 @@ public class FacetedMethodsBuilder {
* @see MethodFinderUtils#removeMethods(Method[], boolean, String, Class,
* boolean, int, ClassSubstitutor)
*/
- private List<Method> findAndRemovePrefixedMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount) {
+ private List<Method> findAndRemovePrefixedMethods(
+ final MethodScope methodScope,
+ final String prefix,
+ final Class<?> returnType,
+ final boolean canBeVoid,
+ final int paramCount) {
return MethodFinderUtils.removeMethods(methods, methodScope, prefix, returnType, canBeVoid, paramCount);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index ce2608c..58ece62 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -39,6 +39,7 @@ import org.apache.isis.applib.filter.Filters;
import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.exceptions.UnknownTypeException;
import org.apache.isis.core.commons.lang.JavaClassUtils;
import org.apache.isis.core.commons.lang.ToString;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -63,6 +64,7 @@ import org.apache.isis.core.metamodel.facets.object.dirty.MarkDirtyObjectFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
+import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
import org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet;
import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
@@ -74,6 +76,7 @@ import org.apache.isis.core.metamodel.interactions.InteractionContext;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
+import org.apache.isis.core.metamodel.layout.DeweyOrderSet;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectInstantiator;
@@ -129,18 +132,15 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
protected final ObjectMemberContext objectMemberContext;
- private final List<ObjectAction> objectActions = Lists.newArrayList();
private final List<ObjectAssociation> associations = Lists.newArrayList();
+ private final List<ObjectAction> objectActions = Lists.newArrayList();
+
+ private boolean contributeeAssociationsAdded;
+ private boolean contributeeActionsAdded;
+
private final List<ObjectSpecification> interfaces = Lists.newArrayList();
private final SubclassList subclasses = new SubclassList();
- private List<ObjectAssociation> contributeeAssociations;
-
- /**
- * Lazily populated in {@link #getContributeeActions(ActionType)}.
- */
- private final Map<ActionType, List<ObjectAction>> contributeeActionsByType = Maps.newLinkedHashMap();
-
private final Class<?> correspondingClass;
private final String fullName;
private final String shortName;
@@ -332,20 +332,16 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
this.subclasses.addSubclass(subclass);
}
- /**
- * Intended to be called within {@link #introspectTypeHierarchyAndMembers()}
- */
- protected void updateAssociations(final List<ObjectAssociation> associations) {
+ protected void sortAndUpdateAssociations(final List<ObjectAssociation> associations) {
+ final List<ObjectAssociation> orderedAssociations = sortAssociations(associations);
this.associations.clear();
- this.associations.addAll(associations);
+ this.associations.addAll(orderedAssociations);
}
- /**
- * Intended to be called within {@link #introspectTypeHierarchyAndMembers()}
- */
- protected void updateObjectActions(final List<ObjectAction> objectActions) {
+ protected void sortAndUpdateActions(final List<ObjectAction> objectActions) {
+ final List<ObjectAction> orderedActions = sortActions(objectActions);
this.objectActions.clear();
- this.objectActions.addAll(objectActions);
+ this.objectActions.addAll(orderedActions);
}
// //////////////////////////////////////////////////////////////////////
@@ -653,10 +649,14 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
@Override
public List<ObjectAssociation> getAssociations(final Contributed contributee) {
- List<ObjectAssociation> associations = Lists.newArrayList(this.associations);
- if(contributee.isIncluded()) {
- associations.addAll(getContributeeAssociations());
+ if(contributee.isIncluded() && !contributeeAssociationsAdded) {
+ List<ObjectAssociation> associations = Lists.newArrayList(this.associations);
+ final List<ObjectAssociation> contributeeAssociations = createContributeeAssociations();
+ associations.addAll(contributeeAssociations);
+ sortAndUpdateAssociations(associations);
+ contributeeAssociationsAdded = true;
}
+ final List<ObjectAssociation> associations = Lists.newArrayList(this.associations);
return Lists.newArrayList(Iterables.filter(
associations, ContributeeMember.Predicates.regularElse(contributee)));
}
@@ -697,7 +697,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public List<OneToOneAssociation> getProperties(Contributed contributed) {
- final List list = getAssociations(contributed, ObjectAssociationFilters.PROPERTIES);
+ final List list = getAssociations(contributed, ObjectAssociation.Filters.PROPERTIES);
return list;
}
@@ -714,6 +714,32 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
@Override
public List<ObjectAction> getObjectActions(
+ final List<ActionType> types,
+ final Contributed contributed,
+ final Filter<ObjectAction> filter) {
+ if(contributed.isIncluded() && !contributeeActionsAdded) {
+ final List<ObjectAction> actions = Lists.newArrayList(this.objectActions);
+ actions.addAll(createContributeeActions());
+ sortAndUpdateActions(actions);
+ contributeeActionsAdded = true;
+ }
+
+ final List<ObjectAction> actions = Lists.newArrayList();
+ for (final ActionType type : types) {
+ @SuppressWarnings("unchecked")
+ final List<ObjectAction> filterActions =
+ Lists.newArrayList(Iterables.filter(
+ objectActions,
+ Filters.asPredicate(Filters.and(
+ ObjectAction.Filters.ofType(type), filter))));
+ actions.addAll(filterActions);
+ }
+ return Lists.newArrayList(Iterables.filter(
+ actions, ContributeeMember.Predicates.regularElse(contributed)));
+ }
+
+ @Override
+ public List<ObjectAction> getObjectActions(
final Contributed contributed) {
return getObjectActions(ActionType.ALL, contributed, Filters.<ObjectAction>any());
}
@@ -726,34 +752,70 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return getObjectActions(Collections.singletonList(type), contributed, filter);
}
- @Override
- public List<ObjectAction> getObjectActions(
- final List<ActionType> types,
- final Contributed contributed,
- final Filter<ObjectAction> filter) {
- final List<ObjectAction> actions = Lists.newArrayList();
- for (final ActionType type : types) {
- addActions(type, contributed, filter, actions);
+ // //////////////////////////////////////////////////////////////////////
+ // sorting
+ // //////////////////////////////////////////////////////////////////////
+
+ protected List<ObjectAssociation> sortAssociations(final List<ObjectAssociation> associations) {
+ final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(associations);
+ final MemberGroupLayoutFacet memberGroupLayoutFacet = this.getFacet(MemberGroupLayoutFacet.class);
+
+ if(memberGroupLayoutFacet != null) {
+ final List<String> groupOrder = Lists.newArrayList();
+ groupOrder.addAll(memberGroupLayoutFacet.getLeft());
+ groupOrder.addAll(memberGroupLayoutFacet.getMiddle());
+ groupOrder.addAll(memberGroupLayoutFacet.getRight());
+
+ orderSet.reorderChildren(groupOrder);
+ }
+ final List<ObjectAssociation> orderedAssociations = Lists.newArrayList();
+ sortAssociations(orderSet, orderedAssociations);
+ return orderedAssociations;
+ }
+
+ private static void sortAssociations(final DeweyOrderSet orderSet, final List<ObjectAssociation> associationsToAppendTo) {
+ for (final Object element : orderSet) {
+ if (element instanceof OneToManyAssociation) {
+ associationsToAppendTo.add((ObjectAssociation) element);
+ } else if (element instanceof OneToOneAssociation) {
+ associationsToAppendTo.add((ObjectAssociation) element);
+ } else if (element instanceof DeweyOrderSet) {
+ // just flatten.
+ DeweyOrderSet childOrderSet = (DeweyOrderSet) element;
+ sortAssociations(childOrderSet, associationsToAppendTo);
+ } else {
+ throw new UnknownTypeException(element);
+ }
}
- return Lists.newArrayList(Iterables.filter(
- actions, ContributeeMember.Predicates.regularElse(contributed)));
}
- private List<ObjectAction> addActions(final ActionType type, final Contributed contributee, final Filter<ObjectAction> filter, final List<ObjectAction> actionListToAppendTo) {
- if(contributee.isIncluded()) {
- actionListToAppendTo.addAll(getContributeeActions(type, filter));
- }
- actionListToAppendTo.addAll(filterActions(objectActions, type, filter));
- return actionListToAppendTo;
+ protected static List<ObjectAction> sortActions(final List<ObjectAction> actions) {
+ final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(actions);
+ final List<ObjectAction> orderedActions = Lists.newArrayList();
+ sortActions(orderSet, orderedActions);
+ return orderedActions;
}
- @SuppressWarnings("unchecked")
- private static List<ObjectAction> filterActions(final List<ObjectAction> objectActions, final ActionType type, final Filter<ObjectAction> filter) {
- return Lists.newArrayList(Iterables.filter(
- objectActions,
- Filters.asPredicate(Filters.and(ObjectAction.Filters.ofType(type), filter))));
+ private static void sortActions(final DeweyOrderSet orderSet, final List<ObjectAction> actionsToAppendTo) {
+ for (final Object element : orderSet) {
+ if(element instanceof ObjectAction) {
+ final ObjectAction objectAction = (ObjectAction) element;
+ actionsToAppendTo.add(objectAction);
+ }
+ else if (element instanceof DeweyOrderSet) {
+ final DeweyOrderSet set = ((DeweyOrderSet) element);
+ final List<ObjectAction> actions = Lists.newArrayList();
+ sortActions(set, actions);
+ actionsToAppendTo.addAll(actions);
+ } else {
+ throw new UnknownTypeException(element);
+ }
+ }
}
+ // //////////////////////////////////////////////////////////////////////
+ // getServiceActionsReturning
+ // //////////////////////////////////////////////////////////////////////
@Override
public List<ObjectAction> getServiceActionsReturning(final List<ActionType> types) {
@@ -803,16 +865,15 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
// contributee associations (properties and collections)
// //////////////////////////////////////////////////////////////////////
- private List<ObjectAssociation> getContributeeAssociations() {
+ private List<ObjectAssociation> createContributeeAssociations() {
if (isService()) {
return Collections.emptyList();
}
- if (contributeeAssociations == null) {
- contributeeAssociations = Lists.newArrayList();
- final List<ObjectAdapter> services = getServicesProvider().getServices();
- for (final ObjectAdapter serviceAdapter : services) {
- addContributeeAssociationsIfAny(serviceAdapter, contributeeAssociations);
- }
+
+ final List<ObjectAssociation> contributeeAssociations = Lists.newArrayList();
+ final List<ObjectAdapter> services = getServicesProvider().getServices();
+ for (final ObjectAdapter serviceAdapter : services) {
+ addContributeeAssociationsIfAny(serviceAdapter, contributeeAssociations);
}
return contributeeAssociations;
}
@@ -877,44 +938,34 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
// //////////////////////////////////////////////////////////////////////
/**
- * All contributee actions (each wrapping a service's contributed action) for this spec;
- * these are lazily created and then cached.
+ * All contributee actions (each wrapping a service's contributed action) for this spec.
*
* <p>
* If this specification {@link #isService() is actually for} a service,
* then returns an empty list.
*/
- protected List<ObjectAction> getContributeeActions(final ActionType actionType, Filter<ObjectAction> filter) {
+ protected List<ObjectAction> createContributeeActions() {
if (isService()) {
return Collections.emptyList();
}
- List<ObjectAction> contributedActionSets = getContributeeActions(actionType);
- return Lists.newArrayList(Iterables.filter(contributedActionSets, Filters.asPredicate(filter)));
- }
-
- private List<ObjectAction> getContributeeActions(final ActionType actionType) {
- List<ObjectAction> contributeeActions = contributeeActionsByType.get(actionType);
- if (contributeeActions == null) {
- contributeeActions = Lists.newArrayList();
- contributeeActionsByType.put(actionType, contributeeActions);
+ final List<ObjectAction> contributeeActions = Lists.newArrayList();
- // populate an ActionSet with all actions contributed by each
- // service
- final List<ObjectAdapter> services = getServicesProvider().getServices();
- for (final ObjectAdapter serviceAdapter : services) {
- addContributeeActionsIfAny(serviceAdapter, actionType, contributeeActions);
- }
+ final List<ObjectAdapter> services = getServicesProvider().getServices();
+ for (final ObjectAdapter serviceAdapter : services) {
+ addContributeeActionsIfAny(serviceAdapter, contributeeActions);
}
return contributeeActions;
}
- private void addContributeeActionsIfAny(final ObjectAdapter serviceAdapter, final ActionType actionType, final List<ObjectAction> contributeeActionsToAppendTo) {
+ private void addContributeeActionsIfAny(
+ final ObjectAdapter serviceAdapter,
+ final List<ObjectAction> contributeeActionsToAppendTo) {
final ObjectSpecification specification = serviceAdapter.getSpecification();
if (specification == this) {
return;
}
final List<ObjectAction> contributeeActions = Lists.newArrayList();
- final List<ObjectAction> serviceActions = specification.getObjectActions(actionType, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.ALL, Contributed.INCLUDED, Filters.<ObjectAction>any());
for (final ObjectAction serviceAction : serviceActions) {
if (serviceAction.isAlwaysHidden()) {
continue;
@@ -926,13 +977,14 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
if(!(serviceAction instanceof ObjectActionImpl)) {
continue;
}
- ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;
+ final ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;
// see if qualifies by inspecting all parameters
final int contributeeParam = contributeeParameterMatchOf(contributedAction);
if (contributeeParam != -1) {
ObjectActionContributee contributeeAction =
new ObjectActionContributee(serviceAdapter, contributedAction, contributeeParam, this, objectMemberContext);
+
contributeeActions.add(contributeeAction);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index bc2940b..496f2fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -109,6 +109,11 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
private FacetedMethodsBuilder facetedMethodsBuilder;
+ /**
+ * Only populated once {@link #introspectTypeHierarchyAndMembers()} is called.
+ */
+ private Properties metadataProperties;
+
// //////////////////////////////////////////////////////////////////////
// Constructor
// //////////////////////////////////////////////////////////////////////
@@ -126,10 +131,9 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
@Override
public void introspectTypeHierarchyAndMembers() {
- // class
- Properties properties = null;
+ metadataProperties = null;
if(isNotIntrospected()) {
- properties = facetedMethodsBuilder.introspectClass();
+ metadataProperties = facetedMethodsBuilder.introspectClass();
}
// name
@@ -154,14 +158,15 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
// walk superinterfaces
+ //
// REVIEW: the processing here isn't quite the same as with
- // superclasses,
- // in that with superclasses the superclass adds this type as its
- // subclass,
- // whereas here this type defines itself as the subtype.
+ // superclasses, in that with superclasses the superclass adds this type as its
+ // subclass, whereas here this type defines itself as the subtype.
+ //
// it'd be nice to push the responsibility for adding subclasses to
// the interface type... needs some tests around it, though, before
// making that refactoring.
+ //
final Class<?>[] interfaceTypes = getCorrespondingClass().getInterfaces();
final List<ObjectSpecification> interfaceSpecList = Lists.newArrayList();
for (final Class<?> interfaceType : interfaceTypes) {
@@ -181,19 +186,17 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
// associations and actions
if(isNotIntrospected()) {
- final List<ObjectAssociation> associations = createAssociations(properties);
- final List<ObjectAssociation> orderedAssociations = sortAssociations(associations);
- updateAssociations(orderedAssociations);
+ final List<ObjectAssociation> associations = createAssociations(metadataProperties);
+ sortAndUpdateAssociations(associations);
}
if(isNotIntrospected()) {
- final List<ObjectAction> actions = createActions(properties);
- final List<ObjectAction> orderedActions = sortActions(actions);
- updateObjectActions(orderedActions);
+ final List<ObjectAction> actions = createActions(metadataProperties);
+ sortAndUpdateActions(actions);
}
if(isNotIntrospected()) {
- facetedMethodsBuilder.introspectClassPostProcessing(properties);
+ facetedMethodsBuilder.introspectClassPostProcessing(metadataProperties);
}
if(isNotIntrospected()) {
@@ -242,8 +245,8 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
}
}
- private List<ObjectAction> createActions(Properties properties) {
- final List<FacetedMethod> actionFacetedMethods = facetedMethodsBuilder.getActionFacetedMethods(properties);
+ private List<ObjectAction> createActions(Properties metadataProperties) {
+ final List<FacetedMethod> actionFacetedMethods = facetedMethodsBuilder.getActionFacetedMethods(metadataProperties);
final List<ObjectAction> actions = Lists.newArrayList();
for (FacetedMethod facetedMethod : actionFacetedMethods) {
final ObjectAction action = createAction(facetedMethod);
@@ -263,66 +266,6 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
}
}
- // //////////////////////////////////////////////////////////////////////
- // sorting
- // //////////////////////////////////////////////////////////////////////
-
- private List<ObjectAssociation> sortAssociations(final List<ObjectAssociation> associations) {
- final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(associations);
- final MemberGroupLayoutFacet memberGroupLayoutFacet = this.getFacet(MemberGroupLayoutFacet.class);
-
- if(memberGroupLayoutFacet != null) {
- final List<String> groupOrder = Lists.newArrayList();
- groupOrder.addAll(memberGroupLayoutFacet.getLeft());
- groupOrder.addAll(memberGroupLayoutFacet.getMiddle());
- groupOrder.addAll(memberGroupLayoutFacet.getRight());
-
- orderSet.reorderChildren(groupOrder);
- }
- final List<ObjectAssociation> orderedAssociations = Lists.newArrayList();
- sortAssociations(orderSet, orderedAssociations);
- return orderedAssociations;
- }
-
- private List<ObjectAction> sortActions(final List<ObjectAction> actions) {
- final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(actions);
- final List<ObjectAction> orderedActions = Lists.newArrayList();
- sortActions(orderSet, orderedActions);
- return orderedActions;
- }
-
- private void sortAssociations(final DeweyOrderSet orderSet, final List<ObjectAssociation> associationsToAppendTo) {
- for (final Object element : orderSet) {
- if (element instanceof OneToManyAssociation) {
- associationsToAppendTo.add((ObjectAssociation) element);
- } else if (element instanceof OneToOneAssociation) {
- associationsToAppendTo.add((ObjectAssociation) element);
- } else if (element instanceof DeweyOrderSet) {
- // just flatten.
- DeweyOrderSet childOrderSet = (DeweyOrderSet) element;
- sortAssociations(childOrderSet, associationsToAppendTo);
- } else {
- throw new UnknownTypeException(element);
- }
- }
- }
-
- private void sortActions(final DeweyOrderSet orderSet, final List<ObjectAction> actionsToAppendTo) {
- for (final Object element : orderSet) {
- if(element instanceof ObjectAction) {
- final ObjectAction objectAction = (ObjectAction) element;
- actionsToAppendTo.add(objectAction);
- }
- else if (element instanceof DeweyOrderSet) {
- final DeweyOrderSet set = ((DeweyOrderSet) element);
- final List<ObjectAction> actions = Lists.newArrayList();
- sortActions(set, actions);
- actionsToAppendTo.addAll(actions);
- } else {
- throw new UnknownTypeException(element);
- }
- }
- }
// //////////////////////////////////////////////////////////////////////
// Whether a service or not
@@ -380,7 +323,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
}
// //////////////////////////////////////////////////////////////////////
- // Actions
+ // getObjectAction
// //////////////////////////////////////////////////////////////////////
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/order/MemberOrderFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/order/MemberOrderFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/order/MemberOrderFacetFactory.java
index 334615a..52bafc3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/order/MemberOrderFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/order/MemberOrderFacetFactory.java
@@ -41,7 +41,7 @@ public class MemberOrderFacetFactory extends FacetFactoryAbstract {
final FacetedMethod holder = processMethodContext.getFacetHolder();
MemberOrderFacet memberOrderFacet = null;
- final Properties properties = processMethodContext.layoutProperties("memberOrder");
+ final Properties properties = processMethodContext.metadataProperties("memberOrder");
if(properties != null) {
memberOrderFacet = new MemberOrderFacetProperties(properties, holder);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/242739ad/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/membergroups/MemberGroupLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/membergroups/MemberGroupLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/membergroups/MemberGroupLayoutFacetFactory.java
index 65fb362..e10f81a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/membergroups/MemberGroupLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/membergroups/MemberGroupLayoutFacetFactory.java
@@ -60,7 +60,7 @@ public class MemberGroupLayoutFacetFactory extends FacetFactoryAbstract implemen
final Class<?> cls = processClassContext.getCls();
- final Properties properties = processClassContext.layoutProperties("memberGroupLayout");
+ final Properties properties = processClassContext.metadataProperties("memberGroupLayout");
if(properties != null) {
return new MemberGroupLayoutFacetProperties(properties, holder);
}