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/05 13:00:15 UTC

[2/2] git commit: ISIS-503: can now order contributed members

ISIS-503: can now order contributed members

* FacetProcessor extended to be able to request sorting on an individual object member
  * introduced new MemberOrderingFacetFactory interface to identify the facet factories that do this work
* ObjectSpecDefault/Abstract now call the FacetProcessor whenever the contributed actions/associations are computed
* ObjectActionContributee, OneToOneAssociationContributee and OneToManyAssociationContributee now have their own copy of FacetHolderImpl (initialized with the facets from the underlying contributed action), so that can sort them without side-effects
* fixed bug such that contributed actions that are associated to contributed associations are also suppressed from the header

Also:
* ObjectAction.isAlwaysHidden redefined, only true if never visible anywhere and always

And also:
* renamed ObjectAssociationFilters -> ObjectAssociation.Filters
* renamed ObjectActionFilters -> ObjectAction.Filters
* renamed ObjectActionParameterFilters -> ObjectActionParameter.Filters

And also:
* enhanced ToDoItem to demonstrate this capability
* ToDoItemContributions#next and ToDoItemContributions#previous added


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/c009dec5
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/c009dec5
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/c009dec5

Branch: refs/heads/master
Commit: c009dec571e84de2ea304807d43558ec08212111
Parents: 242739a
Author: Dan Haywood <da...@apache.org>
Authored: Thu Sep 5 11:59:39 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Thu Sep 5 11:59:39 2013 +0100

----------------------------------------------------------------------
 ...toryFromJdoColumnAnnotationFacetFactory.java |  3 +-
 .../combined/FormWithTableSpecification.java    |  3 +-
 .../dnd/combined/SplitViewSpecification.java    |  3 +-
 .../dnd/combined/TwoPartViewSpecification.java  |  3 +-
 .../viewer/dnd/form/ExpandableViewBorder.java   |  3 +-
 .../dnd/table/AbstractTableSpecification.java   |  3 +-
 .../isis/viewer/dnd/table/TableAxisImpl.java    |  3 +-
 .../dnd/tree/ClosedObjectNodeSpecification.java |  3 +-
 .../dnd/tree/OpenObjectNodeSpecification.java   |  3 +-
 .../viewer/dnd/view/action/OptionFactory.java   |  1 -
 .../dnd/view/composite/ObjectFieldBuilder.java  |  3 +-
 .../dnd/view/content/AbstractObjectContent.java |  5 +-
 .../server/resources/DomainResourceHelper.java  |  3 +-
 .../scimpi/dispatcher/edit/EditAction.java      |  3 +-
 .../dispatcher/view/debug/DebugObjectView.java  |  3 +-
 .../view/display/AbstractFormView.java          |  3 +-
 .../view/display/AbstractTableView.java         |  3 +-
 .../dispatcher/view/display/LongFormView.java   |  3 +-
 .../scimpi/dispatcher/view/edit/EditObject.java |  3 +-
 .../scimpi/dispatcher/view/simple/EditLink.java |  3 +-
 .../dispatcher/view/simple/ObjectLink.java      |  3 +-
 .../dispatcher/view/simple/RemoveElement.java   |  3 +-
 .../wicket/model/models/BookmarkTreeNode.java   |  3 +-
 .../additionallinks/EntityActionUtil.java       |  3 +-
 .../CollectionContentsAsAjaxTablePanel.java     |  9 +-
 .../collections/EntityCollectionsPanel.java     |  3 +-
 .../entity/header/EntityHeaderPanel.java        | 10 +--
 .../entity/properties/EntityPropertiesForm.java |  5 +-
 .../widgets/cssmenu/CssMenuBuilder.java         |  4 +-
 .../isis/core/metamodel/facetapi/FacetUtil.java |  8 ++
 .../core/metamodel/facets/FacetFactory.java     | 15 +++-
 .../facets/MemberOrderingFacetFactory.java      | 79 ++++++++++++++++
 .../autocomplete/AutoCompleteFacetAbstract.java |  3 +-
 .../json/LayoutMetadataReaderFromJson.java      |  8 +-
 .../DeveloperUtilitiesServiceDefault.java       |  5 +-
 .../metamodel/spec/SpecificationContext.java    | 15 +++-
 .../metamodel/spec/feature/ObjectAction.java    |  8 +-
 .../spec/feature/ObjectActionFilters.java       | 58 ------------
 .../spec/feature/ObjectActionParameter.java     | 15 ++++
 .../spec/feature/ObjectAssociation.java         | 10 +--
 .../spec/feature/ObjectAssociationFilters.java  | 69 --------------
 .../metamodel/spec/feature/ObjectMember.java    |  2 +-
 .../spec/feature/ObjectParameterFilters.java    | 39 --------
 .../specloader/ObjectReflectorDefault.java      |  2 +-
 .../facetprocessor/FacetProcessor.java          | 39 ++++++++
 .../specimpl/ObjectActionContributee.java       | 80 +++++++++++++----
 .../specloader/specimpl/ObjectActionImpl.java   |  1 -
 .../specimpl/ObjectMemberAbstract.java          |  2 +-
 .../specimpl/ObjectSpecificationAbstract.java   | 64 ++++++++-----
 .../OneToManyAssociationContributee.java        | 94 +++++++++++++-------
 .../OneToOneAssociationContributee.java         | 73 ++++++++++++---
 .../dflt/ObjectSpecificationDefault.java        | 20 ++---
 .../ObjectSpecificationForFreeStandingList.java |  1 +
 .../apache/isis/core/metamodel/util/Dump.java   |  2 +-
 .../members/order/MemberOrderFacetFactory.java  | 42 ++++++---
 .../order/MemberOrderFacetProperties.java       |  3 +-
 .../MemberGroupLayoutFacetFactory.java          |  3 +-
 .../ObjectValidPropertiesFacetImpl.java         |  3 +-
 ...jectAssociationFiltersTest_visibleWhere.java |  3 +-
 .../feature/ObjectAssociationFiltersTests.java  |  2 +-
 .../specimpl/ObjectAssociationAbstractTest.java |  1 -
 ...ectAssociationAbstractTest_alwaysHidden.java | 17 ++--
 .../testspec/ObjectSpecificationStub.java       |  5 +-
 .../system/transaction/IsisTransaction.java     |  7 +-
 .../dom/src/main/java/dom/todo/ToDoItem.java    | 12 ---
 .../src/main/java/dom/todo/ToDoItem.layout.json | 15 +++-
 .../java/dom/todo/ToDoItemContributions.java    | 54 ++++++++---
 67 files changed, 560 insertions(+), 422 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index ce668ae..d03d51d 100644
--- a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -36,7 +36,6 @@ import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacetDefault;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.Visitor;
@@ -119,7 +118,7 @@ public class MandatoryFromJdoColumnAnnotationFacetFactory extends FacetFactoryAb
 
             private void validate(ObjectSpecification objectSpec, ValidationFailures validationFailures) {
                 
-                List<ObjectAssociation> associations = objectSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.PROPERTIES);
+                List<ObjectAssociation> associations = objectSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.PROPERTIES);
                 for (ObjectAssociation association : associations) {
                     
                     

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/FormWithTableSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/FormWithTableSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/FormWithTableSpecification.java
index b8a5552..4c10e78 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/FormWithTableSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/FormWithTableSpecification.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.form.FormSpecification;
 import org.apache.isis.viewer.dnd.table.InternalTableSpecification;
@@ -77,7 +76,7 @@ public class FormWithTableSpecification extends SplitViewSpecification {
         final ObjectSpecification spec = content.getSpecification();
         final ObjectAdapter target = content.getAdapter();
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, target, where));
+        final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, target, where));
         for (final ObjectAssociation field : fields) {
             if (field.isOneToManyAssociation()) {
                 return Toolkit.getContentFactory().createFieldContent(field, target);

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/SplitViewSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/SplitViewSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/SplitViewSpecification.java
index 02fbe5f..66c5a4e 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/SplitViewSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/SplitViewSpecification.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.view.Axes;
 import org.apache.isis.viewer.dnd.view.Content;
@@ -76,7 +75,7 @@ public abstract class SplitViewSpecification extends CompositeViewSpecification
         final ObjectSpecification spec = content.getSpecification();
         final ObjectAdapter target = content.getAdapter();
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, target, where));
+        final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, target, where));
         final List<ObjectAssociation> selectableFields = new ArrayList<ObjectAssociation>();
         for (final ObjectAssociation field : fields) {
             if (validField(field)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/TwoPartViewSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/TwoPartViewSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/TwoPartViewSpecification.java
index 9c472f0..302451e 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/TwoPartViewSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/combined/TwoPartViewSpecification.java
@@ -26,7 +26,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.form.FormSpecification;
 import org.apache.isis.viewer.dnd.form.InternalFormSpecification;
@@ -70,7 +69,7 @@ public class TwoPartViewSpecification extends SplitViewSpecification {
         final ObjectSpecification spec = content.getSpecification();
         final ObjectAdapter target = content.getAdapter();
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, target, where));
+        final List<ObjectAssociation> fields = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, target, where));
         for (final ObjectAssociation field : fields) {
             if (validField(field)) {
                 return Toolkit.getContentFactory().createFieldContent(field, target);

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/form/ExpandableViewBorder.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/form/ExpandableViewBorder.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/form/ExpandableViewBorder.java
index 46f911f..ff9a757 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/form/ExpandableViewBorder.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/form/ExpandableViewBorder.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 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.OneToOneAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.drawing.Canvas;
@@ -206,7 +205,7 @@ public class ExpandableViewBorder extends AbstractBorder {
     private int canOpenObject(final Content content) {
         final ObjectAdapter object = ((ObjectContent) content).getObject();
         if (object != null) {
-            final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where));
+            final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where));
             for (int i = 0; i < fields.size(); i++) {
                 if (fields.get(i).isOneToManyAssociation()) {
                     return CAN_OPEN;

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/AbstractTableSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/AbstractTableSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/AbstractTableSpecification.java
index 911904c..427925f 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/AbstractTableSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/AbstractTableSpecification.java
@@ -24,7 +24,6 @@ import java.util.List;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.viewer.dnd.view.Axes;
 import org.apache.isis.viewer.dnd.view.Content;
 import org.apache.isis.viewer.dnd.view.View;
@@ -80,7 +79,7 @@ public abstract class AbstractTableSpecification extends CompositeViewSpecificat
         } else {
             final CollectionContent collectionContent = (CollectionContent) requirement.getContent();
             final ObjectSpecification elementSpecification = collectionContent.getElementSpecification();
-            final List<ObjectAssociation> fields = elementSpecification.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE);
+            final List<ObjectAssociation> fields = elementSpecification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES);
             for (int i = 0; i < fields.size(); i++) {
                 if (fields.get(i).isOneToOneAssociation()) {
                     return true;

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/TableAxisImpl.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/TableAxisImpl.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/TableAxisImpl.java
index 91c8666..8df3255 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/TableAxisImpl.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/table/TableAxisImpl.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.commons.lang.ToString;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.viewer.dnd.view.View;
 import org.apache.isis.viewer.dnd.view.collection.CollectionContent;
@@ -43,7 +42,7 @@ public class TableAxisImpl implements TableAxis {
         // TODO create axis first, then after view built set up the axis
         // details?
         final ObjectSpecification elementSpecification = (content).getElementSpecification();
-        final List<ObjectAssociation> accessibleFields = elementSpecification.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE);
+        final List<ObjectAssociation> accessibleFields = elementSpecification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES);
 
         this.columns = tableFields(accessibleFields, content);
         widths = new int[columns.size()];

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
index 31eafae..2363173 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
@@ -26,7 +26,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.view.Axes;
 import org.apache.isis.viewer.dnd.view.Content;
@@ -68,7 +67,7 @@ class ClosedObjectNodeSpecification extends NodeSpecification {
     @Override
     public int canOpen(final Content content) {
         final ObjectAdapter object = ((ObjectContent) content).getObject();
-        final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where));
+        final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where));
         for (int i = 0; i < fields.size(); i++) {
             if (fields.get(i).isOneToManyAssociation()) {
                 return CAN_OPEN;

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/OpenObjectNodeSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/OpenObjectNodeSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/OpenObjectNodeSpecification.java
index 6d325c1..43e3a71 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/OpenObjectNodeSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/OpenObjectNodeSpecification.java
@@ -25,7 +25,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.view.Axes;
 import org.apache.isis.viewer.dnd.view.Content;
@@ -72,7 +71,7 @@ public class OpenObjectNodeSpecification extends CompositeNodeSpecification {
     public boolean canDisplay(final ViewRequirement requirement) {
         if (requirement.isObject() && requirement.hasReference()) {
             final ObjectAdapter object = requirement.getAdapter();
-            final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where));
+            final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where));
             for (int i = 0; i < fields.size(); i++) {
                 if (fields.get(i).isOneToManyAssociation()) {
                     return true;

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/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 19b45b8..55c9e56 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
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.dnd.view.action;
 
-import java.util.Arrays;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/composite/ObjectFieldBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/composite/ObjectFieldBuilder.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/composite/ObjectFieldBuilder.java
index 458babb..b8f2d9f 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/composite/ObjectFieldBuilder.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/composite/ObjectFieldBuilder.java
@@ -33,7 +33,6 @@ import org.apache.isis.core.metamodel.adapter.util.AdapterUtils;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.dnd.view.Axes;
 import org.apache.isis.viewer.dnd.view.Content;
@@ -73,7 +72,7 @@ public class ObjectFieldBuilder extends AbstractViewBuilder {
         LOG.debug("build view " + view + " for " + object);
 
         final ObjectSpecification spec = object.getSpecification();
-        final Filter<ObjectAssociation> filter = ObjectAssociationFilters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where);
+        final Filter<ObjectAssociation> filter = ObjectAssociation.Filters.dynamicallyVisible(IsisContext.getAuthenticationSession(), object, where);
         final List<ObjectAssociation> flds = spec.getAssociations(Contributed.EXCLUDED, filter);
 
         if (view.getSubviews().length == 0) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/content/AbstractObjectContent.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/content/AbstractObjectContent.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/content/AbstractObjectContent.java
index 1b12ac6..6586e08 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/content/AbstractObjectContent.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/content/AbstractObjectContent.java
@@ -38,7 +38,6 @@ import org.apache.isis.core.metamodel.spec.Persistability;
 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.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.Persistor;
@@ -168,7 +167,7 @@ public abstract class AbstractObjectContent extends AbstractContent implements O
             // TODO: use Facet for this test instead.
             return new Veto("Can't set field in persistent object with reference to non-persistent object");
         }
-        final List<ObjectAssociation> fields = targetAdapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(IsisContext.getAuthenticationSession(), targetAdapter, where));
+        final List<ObjectAssociation> fields = targetAdapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(IsisContext.getAuthenticationSession(), targetAdapter, where));
         for (final ObjectAssociation fld : fields) {
             if (!fld.isOneToOneAssociation()) {
                 continue;
@@ -216,7 +215,7 @@ public abstract class AbstractObjectContent extends AbstractContent implements O
             return action.execute(target, new ObjectAdapter[] { source });
         }
 
-        final List<ObjectAssociation> associations = target.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(IsisContext.getAuthenticationSession(), target, where));
+        final List<ObjectAssociation> associations = target.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(IsisContext.getAuthenticationSession(), target, where));
 
         for (int i = 0; i < associations.size(); i++) {
             final ObjectAssociation association = associations.get(i);

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index b76261e..4c8a2e4 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -46,7 +46,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;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -104,7 +103,7 @@ public final class DomainResourceHelper {
 
     static boolean copyOverProperties(final RendererContext resourceContext, final ObjectAdapter objectAdapter, final JsonRepresentation propertiesList) {
         final ObjectSpecification objectSpec = objectAdapter.getSpecification();
-        final List<ObjectAssociation> properties = objectSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.PROPERTIES);
+        final List<ObjectAssociation> properties = objectSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.PROPERTIES);
         boolean allOk = true;
 
         for (final ObjectAssociation association : properties) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java
index 5c999dd..d069ea3 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java
@@ -36,7 +36,6 @@ import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseExce
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.transaction.MessageBroker;
@@ -79,7 +78,7 @@ public class EditAction implements Action {
 
             final ObjectAdapter adapter = context.getMappedObject(objectId);
 
-            final List<ObjectAssociation> fields = adapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, adapter, where));
+            final List<ObjectAssociation> fields = adapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, adapter, where));
 
             for (final ObjectAssociation objectAssociation : fields) {
                 if (objectAssociation.isVisible(session, adapter, where).isVetoed()) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugObjectView.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugObjectView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugObjectView.java
index 75b82d5..020377d 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugObjectView.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugObjectView.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.AbstractObjectProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
@@ -60,7 +59,7 @@ public class DebugObjectView extends AbstractObjectProcessor {
         request.appendAsHtmlEncoded("#" + version.sequence() + " - " + version.getUser() + " (" + version.getTime() + ")" );
         request.appendHtml("</div>");
 
-        final List<ObjectAssociation> fields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.ALL);
+        final List<ObjectAssociation> fields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.ALL);
 
         int row = 1;
         for (int i = 0; i < fields.size(); i++) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
index 0c4d0f0..e88f89a 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.AbstractObjectProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
@@ -61,7 +60,7 @@ public abstract class AbstractFormView extends AbstractObjectProcessor {
             request.processUtilCloseTag();
 
             final AuthenticationSession session = IsisContext.getAuthenticationSession(); 
-            List<ObjectAssociation> associations = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, object, Where.OBJECT_FORMS));
+            List<ObjectAssociation> associations = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, object, Where.OBJECT_FORMS));
             final List<ObjectAssociation> fields = tag.includedFields(associations);
             final LinkedObject[] linkFields = tag.linkedFields(fields);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java
index ed87e18..e5a2887 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractTableView.java
@@ -29,7 +29,6 @@ import org.apache.isis.core.metamodel.facets.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.Persistor;
 import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
@@ -89,7 +88,7 @@ public abstract class AbstractTableView extends AbstractElementProcessor {
             rowClasses = rowClassesList.split("[,|/]");
         }
 
-        final List<ObjectAssociation> allFields = elementSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE);
+        final List<ObjectAssociation> allFields = elementSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES);
         final TableContentWriter rowBuilder = createRowBuilder(request, context, isFieldEditable ? parentObjectId : null, allFields, collection);
         write(request, collection, summary, rowBuilder, tableId, tableClass, rowClasses);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java
index 0ea6d5a..5630bcb 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/LongFormView.java
@@ -25,7 +25,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
 import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableView.SimpleTableBuilder;
@@ -47,7 +46,7 @@ public class LongFormView extends AbstractFormView {
             IsisContext.getPersistenceSession().resolveField(object, field);
             final ObjectAdapter collection = field.get(object);
             final ObjectSpecification elementSpec = collection.getElementSpecification();
-            final List<ObjectAssociation> fields = elementSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE);
+            final List<ObjectAssociation> fields = elementSpec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES);
             if (noColumnsString.equalsIgnoreCase("all")) {
                 noColumns = fields.size();
             } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java
index fb35349..90dd604 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.progmodel.facets.object.choices.enums.EnumFacet;
 import org.apache.isis.core.progmodel.facets.value.booleans.BooleanValueFacet;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -113,7 +112,7 @@ public class EditObject extends AbstractElementProcessor {
         request.processUtilCloseTag();
 
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        List<ObjectAssociation> viewFields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, object, where));
+        List<ObjectAssociation> viewFields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, object, where));
         viewFields = containedBlock.includedFields(viewFields);
         final InputField[] formFields = createFields(viewFields);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/EditLink.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/EditLink.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/EditLink.java
index e7e6162..ab43eb6 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/EditLink.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/EditLink.java
@@ -29,7 +29,6 @@ import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
@@ -47,7 +46,7 @@ public class EditLink extends AbstractLink {
     protected boolean valid(final Request request, final ObjectAdapter adapter) {
         final ObjectSpecification specification = adapter.getSpecification();
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        final List<ObjectAssociation> visibleFields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, adapter, where));
+        final List<ObjectAssociation> visibleFields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, adapter, where));
         final ImmutableFacet facet = specification.getFacet(ImmutableFacet.class);
         final boolean isImmutable = facet != null && facet.when() == When.ALWAYS;
         final boolean isImmutableOncePersisted = facet != null && facet.when() == When.ONCE_PERSISTED && adapter.representsPersistent();

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/ObjectLink.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/ObjectLink.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/ObjectLink.java
index cbd2900..f2726bf 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/ObjectLink.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/ObjectLink.java
@@ -26,7 +26,6 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
@@ -43,7 +42,7 @@ public class ObjectLink extends AbstractLink {
     @Override
     protected boolean valid(final Request request, final ObjectAdapter object) {
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        final List<ObjectAssociation> visibleFields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.dynamicallyVisible(session, object, where));
+        final List<ObjectAssociation> visibleFields = object.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, object, where));
         return visibleFields.size() > 0;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java
index d0f7fd5..56ed442 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 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.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
@@ -133,7 +132,7 @@ public class RemoveElement extends AbstractElementProcessor {
 
         // TODO check is valid to remove element
         final AuthenticationSession session = IsisContext.getAuthenticationSession();
-        final Filter<ObjectAssociation> filter = ObjectAssociationFilters.dynamicallyVisible(session, adapter, where);
+        final Filter<ObjectAssociation> filter = ObjectAssociation.Filters.dynamicallyVisible(session, adapter, where);
         final List<ObjectAssociation> visibleFields = adapter.getSpecification().getAssociations(Contributed.EXCLUDED, filter);
         if (visibleFields.size() == 0) {
             return false;

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index fa99d00..a4cda1c 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -32,7 +32,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
@@ -116,7 +115,7 @@ public class BookmarkTreeNode implements Serializable {
             if(candidateBookmarkableModel instanceof EntityModel) {
                 EntityModel entityModel = (EntityModel) candidateBookmarkableModel;
                 final ObjectAdapter candidateAdapter = entityModel.getObject();
-                final List<ObjectAssociation> properties = candidateAdapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.REFERENCE_PROPERTIES);
+                final List<ObjectAssociation> properties = candidateAdapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.REFERENCE_PROPERTIES);
                 for (ObjectAssociation objectAssoc : properties) {
                     final ObjectAdapter possibleParentAdapter = objectAssoc.get(candidateAdapter);
                     if(possibleParentAdapter == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
index 9c6fe5a..dac7df2 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
@@ -40,7 +40,6 @@ import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -86,7 +85,7 @@ public final class EntityActionUtil {
     private static Filter<ObjectAction> dynamicallyVisibleFor(final ObjectAdapter adapter) {
         final AuthenticationSessionProvider asa = (AuthenticationSessionProvider) Session.get();
         AuthenticationSession authSession = asa.getAuthenticationSession();
-        return ObjectActionFilters.dynamicallyVisible(authSession, adapter, Where.ANYWHERE);
+        return ObjectAction.Filters.dynamicallyVisible(authSession, adapter, Where.ANYWHERE);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/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 d808f00..0becb33 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
@@ -43,10 +43,7 @@ import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
-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.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.common.SelectionHandler;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
@@ -66,7 +63,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
  */
 public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> {
 
-    private static final Predicate<ObjectAction> BULK = Filters.asPredicate(ObjectActionFilters.bulk());
+    private static final Predicate<ObjectAction> BULK = Filters.asPredicate(ObjectAction.Filters.bulk());
 
     private static final long serialVersionUID = 1L;
 
@@ -198,8 +195,8 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
         
         @SuppressWarnings("unchecked")
         final Filter<ObjectAssociation> filter = Filters.and(
-                ObjectAssociationFilters.PROPERTIES, 
-                ObjectAssociationFilters.staticallyVisible(getModel().isParented()? Where.PARENTED_TABLES: Where.STANDALONE_TABLES),
+                ObjectAssociation.Filters.PROPERTIES, 
+                ObjectAssociation.Filters.staticallyVisible(getModel().isParented()? Where.PARENTED_TABLES: Where.STANDALONE_TABLES),
                 associationDoesNotReferenceParent(parentSpecIfAny));
         final List<? extends ObjectAssociation> propertyList = typeOfSpec.getAssociations(Contributed.INCLUDED, filter);
         for (final ObjectAssociation property : propertyList) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
index 34651ee..d255445 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
@@ -34,7 +34,6 @@ import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.components.collection.CollectionPanel;
@@ -124,7 +123,7 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
 
     @SuppressWarnings("unchecked")
 	private Filter<ObjectAssociation> visibleCollectionsFilter(final ObjectAdapter adapter) {
-        return Filters.and(ObjectAssociationFilters.COLLECTIONS, ObjectAssociationFilters.dynamicallyVisible(getAuthenticationSession(), adapter, Where.PARENTED_TABLES));
+        return Filters.and(ObjectAssociation.Filters.COLLECTIONS, ObjectAssociation.Filters.dynamicallyVisible(getAuthenticationSession(), adapter, Where.PARENTED_TABLES));
     }
 
     private void requestRepaintPanel(final AjaxRequestTarget target) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/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 5cb0729..9593147 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
@@ -36,8 +36,6 @@ import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
-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.ObjectAssociations;
 import org.apache.isis.core.runtime.system.DeploymentType;
@@ -135,13 +133,13 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> implements Act
         final ObjectSpecification adapterSpec = adapter.getSpecification();
         @SuppressWarnings("unchecked")
         final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, 
-                Filters.and(memberOrderNameNotCollection(adapterSpec), dynamicallyVisibleFor(adapter)));
+                Filters.and(memberOrderNameNotAssociation(adapterSpec), dynamicallyVisibleFor(adapter)));
         topLevelActions.addAll(userActions);
     }
     
-    private Filter<ObjectAction> memberOrderNameNotCollection(final ObjectSpecification adapterSpec) {
+    private Filter<ObjectAction> memberOrderNameNotAssociation(final ObjectSpecification adapterSpec) {
 
-        final List<ObjectAssociation> associations = adapterSpec.getAssociations(Contributed.EXCLUDED);
+        final List<ObjectAssociation> associations = adapterSpec.getAssociations(Contributed.INCLUDED);
         final List<String> associationNames = Lists.transform(associations, ObjectAssociations.toName());
         final List<String> associationIds = Lists.transform(associations, ObjectAssociations.toId());
 
@@ -161,7 +159,7 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> implements Act
 
 
     protected Filter<ObjectAction> dynamicallyVisibleFor(final ObjectAdapter adapter) {
-        return ObjectActionFilters.dynamicallyVisible(getAuthenticationSession(), adapter, Where.ANYWHERE);
+        return ObjectAction.Filters.dynamicallyVisible(getAuthenticationSession(), adapter, Where.ANYWHERE);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index 770b09d..181b11f 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -55,7 +55,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 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.ObjectAssociations;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.memento.Memento;
@@ -236,7 +235,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
 
     @SuppressWarnings("unchecked")
     private Filter<ObjectAssociation> visiblePropertyFilter(final ObjectAdapter adapter, Where where) {
-        return Filters.and(ObjectAssociationFilters.PROPERTIES, ObjectAssociationFilters.dynamicallyVisible(getAuthenticationSession(), adapter, where));
+        return Filters.and(ObjectAssociation.Filters.PROPERTIES, ObjectAssociation.Filters.dynamicallyVisible(getAuthenticationSession(), adapter, where));
     }
 
     private void addButtons(MarkupContainer markupContainer) {
@@ -501,7 +500,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
 
     @SuppressWarnings("unchecked")
     private Filter<ObjectAssociation> enabledAssociationFilter(final ObjectAdapter adapter) {
-        return Filters.and(ObjectAssociationFilters.PROPERTIES, ObjectAssociationFilters.enabled(getAuthenticationSession(), adapter, Where.OBJECT_FORMS));
+        return Filters.and(ObjectAssociation.Filters.PROPERTIES, ObjectAssociation.Filters.enabled(getAuthenticationSession(), adapter, Where.OBJECT_FORMS));
     }
 
     private void toEditMode(final AjaxRequestTarget target) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
index fb41708..7d8f6ba 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
@@ -28,9 +28,7 @@ import com.google.common.collect.Collections2;
 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;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
 import org.apache.isis.core.progmodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.progmodel.facets.actions.notcontributed.NotContributedFacet;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -106,7 +104,7 @@ public class CssMenuBuilder {
     }
 
     private void addMenuItemsForActionsOfType(final CssMenuItem parent, final List<ObjectAction> actions, final ActionType type) {
-        final Collection<ObjectAction> filterActionsOfType = Collections2.filter(actions, Filters.asPredicate(ObjectActionFilters.filterOfType(type)));
+        final Collection<ObjectAction> filterActionsOfType = Collections2.filter(actions, Filters.asPredicate(ObjectAction.Filters.ofType(type)));
         for (final ObjectAction action : filterActionsOfType) {
             addMenuItem(parent, action);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
index e618300..2116a68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
@@ -150,4 +150,12 @@ public final class FacetUtil {
         return facetByType;
     }
 
+    public static void copyFacets(final FacetHolder source, final FacetHolder target) {
+        List<Facet> facets = source.getFacets(org.apache.isis.applib.filter.Filters.<Facet>any());
+        for (Facet facet : facets) {
+            target.addFacet(facet);
+        }
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/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 7048ec6..e7638bb 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
@@ -30,6 +30,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MethodRemover;
 import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 
 public interface FacetFactory {
 
@@ -44,6 +46,11 @@ public interface FacetFactory {
             return facetHolder;
         }
     }
+    
+    public interface ProcessContextWithMetadataProperties<T extends FacetHolder> {
+        public Properties metadataProperties(String prefix);
+        public T getFacetHolder();
+    }
 
     /**
      * The {@link FeatureType feature type}s that this facet factory can create
@@ -61,7 +68,7 @@ public interface FacetFactory {
     // process class
     // //////////////////////////////////////
 
-    public static class ProcessClassContext extends AbstractProcessContext<FacetHolder> implements MethodRemover {
+    public static class ProcessClassContext extends AbstractProcessContext<FacetHolder> implements MethodRemover, ProcessContextWithMetadataProperties<FacetHolder> {
         private final Class<?> cls;
         private final MethodRemover methodRemover;
         private final Properties metadataProperties;
@@ -130,7 +137,7 @@ public interface FacetFactory {
     // //////////////////////////////////////
 
 
-    public static class ProcessMethodContext extends AbstractProcessContext<FacetedMethod> implements MethodRemover {
+    public static class ProcessMethodContext extends AbstractProcessContext<FacetedMethod> implements MethodRemover, ProcessContextWithMetadataProperties<FacetedMethod> {
         private final Class<?> cls;
         private final FeatureType featureType;
         private final Properties metadataProperties;
@@ -212,7 +219,9 @@ public interface FacetFactory {
      */
     void process(ProcessMethodContext processMethodContext);
 
-    
+
+
+
     // //////////////////////////////////////
     // process param
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MemberOrderingFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MemberOrderingFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MemberOrderingFacetFactory.java
new file mode 100644
index 0000000..881fc18
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MemberOrderingFacetFactory.java
@@ -0,0 +1,79 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets;
+
+import java.util.Properties;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.commons.lang.PropertyUtil;
+import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+
+/**
+ * A {@link FacetFactory} which orders {@link ObjectMember}s (eg, according to
+ * the {@link MemberOrderFacet}).
+ */
+public interface MemberOrderingFacetFactory extends FacetFactory {
+
+    public static class ProcessMemberContext extends AbstractProcessContext<ObjectMember> implements ProcessContextWithMetadataProperties<ObjectMember> {
+        
+        private final Properties metadataProperties;
+
+        public ProcessMemberContext(
+                final Properties metadataProperties, 
+                final ObjectMember facetHolder) {
+            super(facetHolder);
+            this.metadataProperties = metadataProperties;
+        }
+
+        public Properties metadataProperties(String prefix) {
+            
+            if(metadataProperties == null) {
+                return null;
+            }
+            Identifier identifier = getFacetHolder().getIdentifier();
+            final String id = identifier.getMemberName();
+            
+            // bit of a hack; to distinguish between actions and properties that have same identifier
+            // eg getPaidBy() and paidBy()
+            if(getFacetHolder() instanceof ObjectAction) {
+                Properties subsetProperties = PropertyUtil.subset(this.metadataProperties, prefix+"."+id+"()");
+                if (!subsetProperties.isEmpty()) {
+                    return subsetProperties;
+                } 
+            }
+
+            // otherwise, regular processing...
+            Properties subsetProperties = PropertyUtil.subset(this.metadataProperties, prefix+"."+id);
+            if (!subsetProperties.isEmpty()) {
+                return subsetProperties;
+            }
+            
+            return null;
+        }
+    }
+    
+    /**
+     * Sort the member, and return the correctly setup annotation if present.
+     */
+    void process(ProcessMemberContext processMemberContext);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
index 83ce224..2b563cc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
@@ -34,7 +34,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 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.ObjectActionFilters;
 
 public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements AutoCompleteFacet {
 
@@ -97,7 +96,7 @@ public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements
     private void cacheRepositoryAction() {
         try {
             final ObjectSpecification repositorySpec = specificationLoader.loadSpecification(repositoryClass);
-            final List<ObjectAction> objectActions = repositorySpec.getObjectActions(ActionType.USER, Contributed.EXCLUDED, ObjectActionFilters.withId(actionName));
+            final List<ObjectAction> objectActions = repositorySpec.getObjectActions(ActionType.USER, Contributed.EXCLUDED, ObjectAction.Filters.withId(actionName));
 
             repositoryAction = objectActions.size() == 1? objectActions.get(0): null;
         } finally {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/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 642fa8a..2ba2e79 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
@@ -52,10 +52,8 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
 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.ObjectActionFilters;
 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.ObjectAssociations;
 
 public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
@@ -310,13 +308,13 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
     private static List<ObjectAssociation> propertiesOf(final ObjectSpecification objSpec) {
         return objSpec.getAssociations(Contributed.EXCLUDED, 
                 Filters.and(ObjectAssociation.Filters.PROPERTIES, 
-                            ObjectAssociation.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
+                            ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES));
     }
     @SuppressWarnings("unchecked")
     private static List<ObjectAssociation> collectionsOf(final ObjectSpecification objSpec) {
         return objSpec.getAssociations(Contributed.EXCLUDED, 
                 Filters.and(ObjectAssociation.Filters.COLLECTIONS, 
-                            ObjectAssociation.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
+                            ObjectAssociation.Filters.VISIBLE_AT_LEAST_SOMETIMES));
     }
     private static List<ObjectAction> actionsOf(final ObjectSpecification objSpec, final Set<String> excludedActionIds) {
         return objSpec.getObjectActions(ActionType.ALL, Contributed.INCLUDED, staticallyVisibleExcluding(excludedActionIds));
@@ -325,7 +323,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
     @SuppressWarnings("unchecked")
     private static Filter<ObjectAction> staticallyVisibleExcluding(final Set<String> excludedActionIds) {
         return Filters.and(
-                ObjectAction.Filters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE, 
+                ObjectAction.Filters.VISIBLE_AT_LEAST_SOMETIMES, 
                 new Filter<ObjectAction>(){
                     @Override
                     public boolean accept(ObjectAction t) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/devutils/DeveloperUtilitiesServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/devutils/DeveloperUtilitiesServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/devutils/DeveloperUtilitiesServiceDefault.java
index 328c3dc..1c13ab6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/devutils/DeveloperUtilitiesServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/devutils/DeveloperUtilitiesServiceDefault.java
@@ -50,7 +50,6 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
 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.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
@@ -83,7 +82,7 @@ public class DeveloperUtilitiesServiceDefault implements DeveloperUtilitiesServi
             if (exclude(spec)) {
                 continue;
             }
-            final List<ObjectAssociation> properties = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.PROPERTIES);
+            final List<ObjectAssociation> properties = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.PROPERTIES);
             for (ObjectAssociation property : properties) {
                 final OneToOneAssociation otoa = (OneToOneAssociation) property;
                 if (exclude(otoa)) {
@@ -91,7 +90,7 @@ public class DeveloperUtilitiesServiceDefault implements DeveloperUtilitiesServi
                 }
                 rows.add(new MetaModelRow(spec, otoa));
             }
-            final List<ObjectAssociation> associations = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociationFilters.COLLECTIONS);
+            final List<ObjectAssociation> associations = spec.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.COLLECTIONS);
             for (ObjectAssociation collection : associations) {
                 final OneToManyAssociation otma = (OneToManyAssociation) collection;
                 if (exclude(otma)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
index 7e7cecb..a55b94f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
@@ -19,6 +19,7 @@ package org.apache.isis.core.metamodel.spec;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
 
 public class SpecificationContext {
 
@@ -27,13 +28,21 @@ public class SpecificationContext {
     private final ServicesProvider servicesProvider;
     private final ObjectInstantiator objectInstantiator;
     private final SpecificationLoader specificationLookup;
+    private final FacetProcessor facetProcessor;
 
-    public SpecificationContext(final DeploymentCategory deploymentCategory, final AuthenticationSessionProvider authenticationSessionProvider, final ServicesProvider servicesProvider, final ObjectInstantiator objectInstantiator, final SpecificationLoader specificationLookup) {
+    public SpecificationContext(
+            final DeploymentCategory deploymentCategory, 
+            final AuthenticationSessionProvider authenticationSessionProvider, 
+            final ServicesProvider servicesProvider, 
+            final ObjectInstantiator objectInstantiator, 
+            final SpecificationLoader specificationLookup,
+            final FacetProcessor facetProcessor) {
         this.deploymentCategory = deploymentCategory;
         this.authenticationSessionProvider = authenticationSessionProvider;
         this.servicesProvider = servicesProvider;
         this.objectInstantiator = objectInstantiator;
         this.specificationLookup = specificationLookup;
+        this.facetProcessor = facetProcessor;
     }
 
     public DeploymentCategory getDeploymentCategory() {
@@ -55,4 +64,8 @@ public class SpecificationContext {
     public SpecificationLoader getSpecificationLookup() {
         return specificationLookup;
     }
+
+    public FacetProcessor getFacetProcessor() {
+        return facetProcessor;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/c009dec5/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 f3e2a6b..c3227a3 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,6 +22,7 @@ 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.When;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -30,6 +31,8 @@ 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.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.interactions.AccessContext;
 import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
 import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
@@ -179,10 +182,11 @@ public interface ObjectAction extends ObjectMember {
         
         private Filters(){}
         
-        public static final Filter<ObjectAction> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = new Filter<ObjectAction>() {
+        public static final Filter<ObjectAction> VISIBLE_AT_LEAST_SOMETIMES = new Filter<ObjectAction>() {
             @Override
             public boolean accept(final ObjectAction action) {
-                return !action.isAlwaysHidden();
+                final HiddenFacet hiddenFacet = action.getFacet(HiddenFacet.class);
+                return hiddenFacet == null || hiddenFacet.when() != When.ALWAYS || hiddenFacet.where() != Where.ANYWHERE;
             }
         };