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 2014/12/30 10:32:11 UTC

[2/2] isis git commit: ISIS-970: reworking property/collection/action interaction facets (done by the interaction facet factories); process hidden facet for property/collection/action annotation facets; process editing for collections; process typeof for

ISIS-970: reworking property/collection/action interaction facets (done by the interaction facet factories); process hidden facet for property/collection/action annotation facets; process editing for collections; process typeof for collections (done by typeof facet factory)

Also:
- some refactoring of {Disabled/Hidden}Facet{Impl/AlwaysEverywhere}, made abstract (name adjusted accordingly) and created subtypes where used directly
   - most notably DisabledFacetForContributee, also {Disabled/Hidden}FacetOnStaticMethod
- deleted {Disabled/Hidden}FacetNever, since not used.


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

Branch: refs/heads/ISIS-970
Commit: b55af5f1db08e2e2719d6f3dc724fcc700a1cf26
Parents: 06c8199
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Dec 30 09:32:02 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Dec 30 09:32:02 2014 +0000

----------------------------------------------------------------------
 .../core/metamodel/facetapi/FacetAbstract.java  |  2 +-
 .../action/ActionAnnotationFacetFactory.java    | 31 +++++---
 ...tionInteractionFacetForActionAnnotation.java | 36 ++++++++++
 .../action/HiddenFacetForActionAnnotation.java  | 49 +++++++++++++
 .../ActionInteractionFacetAnnotation.java       |  4 +-
 .../ActionInteractionFacetDefault.java          |  4 +-
 .../ActionInteractionFacetFactory.java          | 15 +++-
 .../TypeOfFacetForActionAnnotation.java         | 35 +++++++++
 .../TypeOfFacetOnActionAnnotation.java          |  5 +-
 .../TypeOfFacetOnActionAnnotationFactory.java   | 15 +++-
 .../CollectionAnnotationFacetFactory.java       | 56 +++++++++------
 ...InteractionFacetForCollectionAnnotation.java | 48 +++++++++++++
 .../DisabledFacetForCollectionAnnotation.java   | 57 +++++++++++++++
 .../HiddenFacetForCollectionAnnotation.java     | 49 +++++++++++++
 .../CollectionInteractionFacetAnnotation.java   |  4 +-
 .../CollectionInteractionFacetDefault.java      |  4 +-
 .../CollectionInteractionFacetFactory.java      | 16 +++--
 .../members/disabled/DisabledFacetAbstract.java |  6 +-
 .../DisabledFacetAbstractAlwaysEverywhere.java  | 41 +++++++++++
 .../disabled/DisabledFacetAbstractImpl.java     | 74 ++++++++++++++++++++
 .../disabled/DisabledFacetAlwaysEverywhere.java | 41 -----------
 .../disabled/DisabledFacetForContributee.java   | 31 ++++++++
 .../members/disabled/DisabledFacetImpl.java     | 74 --------------------
 .../members/disabled/DisabledFacetNever.java    | 46 ------------
 .../annotprop/DisabledFacetAnnotation.java      |  4 +-
 .../annotprop/DisabledFacetFromProperties.java  |  4 +-
 .../DisabledFacetForStaticMethod.java           | 32 +++++++++
 .../DisabledFacetStaticMethodFacetFactory.java  |  6 +-
 .../members/hidden/HiddenFacetAbstract.java     |  6 +-
 .../HiddenFacetAbstractAlwaysEverywhere.java    | 41 +++++++++++
 .../members/hidden/HiddenFacetAbstractImpl.java | 59 ++++++++++++++++
 .../hidden/HiddenFacetAlwaysEverywhere.java     | 42 -----------
 .../facets/members/hidden/HiddenFacetImpl.java  | 59 ----------------
 .../facets/members/hidden/HiddenFacetNever.java | 45 ------------
 .../HiddenFacetOnMemberAnnotation.java          |  4 +-
 .../HiddenFacetOnMemberFromProperties.java      |  4 +-
 .../staticmethod/HiddenFacetOnStaticMethod.java | 31 ++++++++
 .../HiddenFacetStaticMethodFactory.java         |  6 +-
 .../annotation/HiddenFacetOnTypeAnnotation.java |  4 +-
 .../DisabledFacetOnPropertyInferred.java        | 15 ++--
 .../DisabledFacetOnPropertyInferredFactory.java |  3 +-
 .../PropertyInteractionFacetAnnotation.java     |  4 +-
 .../PropertyInteractionFacetDefault.java        |  4 +-
 .../PropertyInteractionFacetFactory.java        | 14 +++-
 .../DisabledFacetForPropertyAnnotation.java     | 10 +--
 .../HiddenFacetForPropertyAnnotation.java       | 49 +++++++++++++
 .../PropertyAnnotationFacetFactory.java         | 15 ++--
 ...tyInteractionFacetForPropertyAnnotation.java | 23 +-----
 .../update/PropertySetAndClearFacetFactory.java |  1 -
 .../json/LayoutMetadataReaderFromJson.java      |  6 +-
 .../metamodel/spec/feature/ObjectMember.java    |  1 -
 .../OneToManyAssociationContributee.java        | 11 ++-
 .../OneToOneAssociationContributee.java         |  7 +-
 ...FacetDerivedFromJdoPrimaryKeyAnnotation.java |  4 +-
 .../CollectionFieldMethodsFacetFactoryTest.java | 12 ++--
 .../HiddenAnnotationFacetFactoryTest.java       |  2 +-
 .../PropertyMethodsFacetFactoryTest.java        |  8 +--
 .../system/ObjectMemberAbstractTest.java        | 38 ++++------
 ...oryAbstractTest_wrappedObject_transient.java |  6 +-
 59 files changed, 835 insertions(+), 488 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
index 790540e..5ac2575 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
@@ -54,7 +54,7 @@ public abstract class FacetAbstract implements Facet {
             final Derivation derivation) {
         this.facetType = ensureThatArg(facetType, is(not(nullValue(Class.class))));
         setFacetHolder(ensureThatArg(holder, is(not(nullValue(FacetHolder.class)))));
-        this.derived = derivation == Derivation.DERIVED;
+        this.derived = (derivation == Derivation.DERIVED);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 0cd3927..210c137 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -21,9 +21,13 @@ package org.apache.isis.core.metamodel.facets.actions.action;
 
 import java.lang.reflect.Method;
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.collections.collection.HiddenFacetForCollectionAnnotation;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 
@@ -44,18 +48,25 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
             return;
         }
 
-//        processInteraction(processMethodContext);
+        processInteraction(processMethodContext);
+        processHidden(processMethodContext);
     }
 
-//    private void processInteraction(final ProcessMethodContext processMethodContext) {
-//        final Method method = processMethodContext.getMethod();
-//        final Property property = Annotations.getAnnotation(method, Property.class);
-//        final FacetHolder holder = processMethodContext.getFacetHolder();
-//
-//        FacetUtil.addFacet(
-//                PropertyInteractionFacetForPropertyAnnotation.create(
-//                        property, servicesInjector, getSpecificationLoader(), holder));
-//    }
+    private void processInteraction(final ProcessMethodContext processMethodContext) {
+
+        // interaction is handled by ActionInteractionFacetFactory, because the
+        // deprecated annotations must also be supported.
+
+    }
+
+    private void processHidden(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
+        final Action action = Annotations.getAnnotation(method, Action.class);
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        FacetUtil.addFacet(
+                HiddenFacetForActionAnnotation.create(action, holder));
+    }
 
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionInteractionFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionInteractionFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionInteractionFacetForActionAnnotation.java
new file mode 100644
index 0000000..b074292
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionInteractionFacetForActionAnnotation.java
@@ -0,0 +1,36 @@
+/*
+ *  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.actions.action;
+
+import org.apache.isis.applib.services.eventbus.ActionInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.interaction.ActionInteractionFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class ActionInteractionFacetForActionAnnotation extends ActionInteractionFacetAbstract {
+
+    public ActionInteractionFacetForActionAnnotation(
+            final Class<? extends ActionInteractionEvent<?>> eventType,
+            final ServicesInjector servicesInjector, final SpecificationLoader specificationLoader, final FacetHolder holder) {
+        super(eventType, holder, servicesInjector, specificationLoader);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
new file mode 100644
index 0000000..a0575ef
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/HiddenFacetForActionAnnotation.java
@@ -0,0 +1,49 @@
+/*
+ *  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.actions.action;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+
+public class HiddenFacetForActionAnnotation extends HiddenFacetAbstract {
+
+    public static HiddenFacet create(final Action action, final FacetHolder holder) {
+        final Where where = action.hidden();
+        return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForActionAnnotation(where, holder) : null;
+    }
+
+    private HiddenFacetForActionAnnotation(final Where where, final FacetHolder holder) {
+        super(When.ALWAYS, where, holder);
+    }
+
+    @Override
+    public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) {
+        if(!where().includes(whereContext)) {
+            return null;
+        }
+        return "Hidden on " + where().getFriendlyName();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetAnnotation.java
index 615485e..c0a2173 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetAnnotation.java
@@ -28,9 +28,7 @@ public class ActionInteractionFacetAnnotation extends ActionInteractionFacetAbst
 
     public ActionInteractionFacetAnnotation(
             final Class<? extends ActionInteractionEvent<?>> eventType,
-            final FacetHolder holder,
-            final ServicesInjector servicesInjector,
-            final SpecificationLoader specificationLoader) {
+            final ServicesInjector servicesInjector, final SpecificationLoader specificationLoader, final FacetHolder holder) {
         super(eventType, holder, servicesInjector, specificationLoader);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetDefault.java
index 530adb5..125ae71 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetDefault.java
@@ -28,9 +28,7 @@ public class ActionInteractionFacetDefault extends ActionInteractionFacetAbstrac
 
     public ActionInteractionFacetDefault(
             final Class<? extends ActionInteractionEvent<?>> eventType,
-            final FacetHolder holder,
-            final ServicesInjector servicesInjector,
-            final SpecificationLoader specificationLoader) {
+            final ServicesInjector servicesInjector, final SpecificationLoader specificationLoader, final FacetHolder holder) {
         super(eventType, holder, servicesInjector, specificationLoader);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetFactory.java
index 4f48ff4..95a6b00 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionInteractionFacetFactory.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.actions.interaction;
 
 import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionInteraction;
 import org.apache.isis.applib.annotation.PostsActionInvokedEvent;
 import org.apache.isis.applib.services.eventbus.ActionInteractionEvent;
@@ -32,6 +33,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.actions.action.ActionInteractionFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.debug.DebugFacet;
 import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -107,16 +109,23 @@ public class ActionInteractionFacetFactory extends MethodPrefixBasedFacetFactory
             //
             // Set up ActionInteractionFacet, which will act as the hiding/disabling/validating advisor
             //
+            final Action action = Annotations.getAnnotation(actionMethod, Action.class);
             final ActionInteraction actionInteraction =Annotations.getAnnotation(actionMethod, ActionInteraction.class);
             final Class<? extends ActionInteractionEvent<?>> actionInteractionEventType;
 
             final ActionInteractionFacetAbstract actionInteractionFacet;
-            if(actionInteraction != null) {
+            if(action != null && action.interaction() != null) {
+                actionInteractionEventType = action.interaction();
+                actionInteractionFacet = new ActionInteractionFacetForActionAnnotation(
+                        actionInteractionEventType, servicesInjector, getSpecificationLoader(), holder);
+            } else if(actionInteraction != null) {
                 actionInteractionEventType = actionInteraction.value();
-                actionInteractionFacet = new ActionInteractionFacetAnnotation(actionInteractionEventType, holder, servicesInjector, getSpecificationLoader());
+                actionInteractionFacet = new ActionInteractionFacetAnnotation(
+                        actionInteractionEventType, servicesInjector, getSpecificationLoader(), holder);
             } else {
                 actionInteractionEventType = ActionInteractionEvent.Default.class;
-                actionInteractionFacet = new ActionInteractionFacetDefault(actionInteractionEventType, holder, servicesInjector, getSpecificationLoader());
+                actionInteractionFacet = new ActionInteractionFacetDefault(
+                        actionInteractionEventType, servicesInjector, getSpecificationLoader(), holder);
             }
             FacetUtil.addFacet(actionInteractionFacet);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetForActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetForActionAnnotation.java
new file mode 100644
index 0000000..0b8e561
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetForActionAnnotation.java
@@ -0,0 +1,35 @@
+/*
+ *  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.actions.typeof.annotation;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class TypeOfFacetForActionAnnotation extends TypeOfFacetAbstract {
+
+    public TypeOfFacetForActionAnnotation(
+            final Class<?> type,
+            final SpecificationLoader specificationLookup,
+            final FacetHolder holder) {
+        super(type, holder, specificationLookup);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotation.java
index 5d09294..bb6a460 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotation.java
@@ -25,7 +25,10 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
 public class TypeOfFacetOnActionAnnotation extends TypeOfFacetAbstract {
 
-    public TypeOfFacetOnActionAnnotation(final Class<?> type, final FacetHolder holder, final SpecificationLoader specificationLookup) {
+    public TypeOfFacetOnActionAnnotation(
+            final Class<?> type,
+            final SpecificationLoader specificationLookup,
+            final FacetHolder holder) {
         super(type, holder, specificationLookup);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
index e7f40e8..24636c1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
@@ -19,7 +19,12 @@
 
 package org.apache.isis.core.metamodel.facets.actions.typeof.annotation;
 
-import java.lang.reflect.*;
+import java.lang.reflect.GenericDeclaration;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -53,9 +58,15 @@ public class TypeOfFacetOnActionAnnotationFactory extends FacetFactoryAbstract {
             return;
         }
 
+        final Collection collection = Annotations.getAnnotation(method, Collection.class);
+        if (collection != null && collection.typeOf() != null) {
+            FacetUtil.addFacet(new TypeOfFacetForActionAnnotation(collection.typeOf(), getSpecificationLoader(), processMethodContext.getFacetHolder()));
+            return;
+        }
+
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
         if (annotation != null) {
-            FacetUtil.addFacet(new TypeOfFacetOnActionAnnotation(annotation.value(), processMethodContext.getFacetHolder(), getSpecificationLoader()));
+            FacetUtil.addFacet(new TypeOfFacetOnActionAnnotation(annotation.value(), getSpecificationLoader(), processMethodContext.getFacetHolder()));
             return;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index c9ef42b..b97374a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.metamodel.facets.collections.collection;
 
 import java.lang.reflect.Method;
 import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -44,28 +46,42 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
             return;
         }
 
-//        processInteraction(processMethodContext);
-//        processDisabled(processMethodContext);
+        processInteraction(processMethodContext);
+        processHidden(processMethodContext);
+        processEditing(processMethodContext);
+        processTypeOf(processMethodContext);
     }
 
-//    private void processInteraction(final ProcessMethodContext processMethodContext) {
-//        final Method method = processMethodContext.getMethod();
-//        final Property property = Annotations.getAnnotation(method, Property.class);
-//        final FacetHolder holder = processMethodContext.getFacetHolder();
-//
-//        FacetUtil.addFacet(
-//                PropertyInteractionFacetForPropertyAnnotation.create(
-//                        property, servicesInjector, getSpecificationLoader(), holder));
-//    }
-//
-//    private void processDisabled(final ProcessMethodContext processMethodContext) {
-//        final Method method = processMethodContext.getMethod();
-//        final Property property = Annotations.getAnnotation(method, Property.class);
-//        final FacetHolder holder = processMethodContext.getFacetHolder();
-//
-//        FacetUtil.addFacet(
-//                DisabledFacetForPropertyAnnotation.create(property, holder));
-//    }
+    private void processInteraction(final ProcessMethodContext processMethodContext) {
+
+        // interaction is handled by CollectionInteractionFacetFactory, because the
+        // deprecated annotations must also be supported.
+
+    }
+
+    private void processHidden(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
+        final Collection collection = Annotations.getAnnotation(method, Collection.class);
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        FacetUtil.addFacet(
+                HiddenFacetForCollectionAnnotation.create(collection, holder));
+    }
+
+    private void processEditing(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
+        final Collection collection = Annotations.getAnnotation(method, Collection.class);
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        FacetUtil.addFacet(
+                DisabledFacetForCollectionAnnotation.create(collection, holder));
+    }
+
+    private void processTypeOf(final ProcessMethodContext processMethodContext) {
+
+        // typeOf is handled by TypeOfFacetOnActionAnnotationFactory, because the
+        // deprecated annotations etc that must also be supported.
+    }
 
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionInteractionFacetForCollectionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionInteractionFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionInteractionFacetForCollectionAnnotation.java
new file mode 100644
index 0000000..c6e09c2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionInteractionFacetForCollectionAnnotation.java
@@ -0,0 +1,48 @@
+/*
+ *  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.collections.collection;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.services.eventbus.CollectionInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.collections.interaction.CollectionInteractionFacet;
+import org.apache.isis.core.metamodel.facets.collections.interaction.CollectionInteractionFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class CollectionInteractionFacetForCollectionAnnotation extends CollectionInteractionFacetAbstract {
+
+    static CollectionInteractionFacet create(
+            final Collection collection,
+            final ServicesInjector servicesInjector,
+            final SpecificationLoader specificationLoader,
+            final FacetHolder holder) {
+        Class<? extends CollectionInteractionEvent<?, ?>> collectionInteractionEventType = collection.interaction();
+        return new CollectionInteractionFacetForCollectionAnnotation(
+                collectionInteractionEventType, servicesInjector, specificationLoader, holder);
+    }
+
+    public CollectionInteractionFacetForCollectionAnnotation(
+            final Class<? extends CollectionInteractionEvent<?, ?>> eventType,
+            final ServicesInjector servicesInjector, final SpecificationLoader specificationLoader, final FacetHolder holder) {
+        super(eventType, holder, servicesInjector, specificationLoader);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
new file mode 100644
index 0000000..ed881f4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/DisabledFacetForCollectionAnnotation.java
@@ -0,0 +1,57 @@
+/*
+ *  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.collections.collection;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.EditPolicy;
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstractImpl;
+
+public class DisabledFacetForCollectionAnnotation extends DisabledFacetAbstractImpl {
+
+    public static DisabledFacet create(final Collection collection, final FacetHolder holder) {
+        final EditPolicy editPolicy = collection.editing();
+        final String disabledReason = collection.editingDisabledReason();
+
+        switch (editPolicy) {
+            case AS_CONFIGURED:
+
+                // nothing needs to be done here; the DomainObjectFactory (processing @DomainObject annotation)
+                // will install an ImmutableFacetForDomainObjectAnnotation on the domain object and then a
+                // DisabledFacetOnCollectionDerivedFromImmutable facet will be installed.
+
+                return null;
+
+            case DISABLED:
+                return new DisabledFacetForCollectionAnnotation(disabledReason, holder);
+            case ENABLED:
+                return null;
+        }
+        return null;
+    }
+
+    private DisabledFacetForCollectionAnnotation(final String reason, final FacetHolder holder) {
+        super(When.ALWAYS, Where.EVERYWHERE, reason, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
new file mode 100644
index 0000000..9de9f87
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/HiddenFacetForCollectionAnnotation.java
@@ -0,0 +1,49 @@
+/*
+ *  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.collections.collection;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+
+public class HiddenFacetForCollectionAnnotation extends HiddenFacetAbstract {
+
+    public static HiddenFacet create(final Collection collection, final FacetHolder holder) {
+        final Where where = collection.hidden();
+        return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForCollectionAnnotation(where, holder) : null;
+    }
+
+    private HiddenFacetForCollectionAnnotation(final Where where, final FacetHolder holder) {
+        super(When.ALWAYS, where, holder);
+    }
+
+    @Override
+    public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) {
+        if(!where().includes(whereContext)) {
+            return null;
+        }
+        return "Hidden on " + where().getFriendlyName();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetAnnotation.java
index 292b2b7..3eb8c41 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetAnnotation.java
@@ -28,9 +28,7 @@ public class CollectionInteractionFacetAnnotation extends CollectionInteractionF
 
     public CollectionInteractionFacetAnnotation(
             final Class<? extends CollectionInteractionEvent<?, ?>> eventType,
-            final FacetHolder holder,
-            final ServicesInjector servicesInjector,
-            final SpecificationLoader specificationLoader) {
+            final ServicesInjector servicesInjector, final SpecificationLoader specificationLoader, final FacetHolder holder) {
         super(eventType, holder, servicesInjector, specificationLoader);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetDefault.java
index 394c3e3..a5894c1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetDefault.java
@@ -28,9 +28,7 @@ public class CollectionInteractionFacetDefault extends CollectionInteractionFace
 
     public CollectionInteractionFacetDefault(
             final Class<? extends CollectionInteractionEvent<?, ?>> eventType,
-            final FacetHolder holder,
-            final ServicesInjector servicesInjector,
-            final SpecificationLoader specificationLoader) {
+            final ServicesInjector servicesInjector, final SpecificationLoader specificationLoader, final FacetHolder holder) {
         super(eventType, holder, servicesInjector, specificationLoader);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetFactory.java
index e55cfc0..27ab56b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/interaction/CollectionInteractionFacetFactory.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.collections.interaction;
 
 import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionInteraction;
 import org.apache.isis.applib.annotation.PostsCollectionAddedToEvent;
 import org.apache.isis.applib.annotation.PostsCollectionRemovedFromEvent;
@@ -30,6 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.collections.collection.CollectionInteractionFacetForCollectionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
@@ -54,18 +56,24 @@ public class CollectionInteractionFacetFactory extends FacetFactoryAbstract impl
         //
         // Set up CollectionInteractionFacet, which will act as the hiding/disabling/validating advisor
         //
+        final Collection collection = Annotations.getAnnotation(method, Collection.class);
         final CollectionInteraction collectionInteraction = Annotations.getAnnotation(method, CollectionInteraction.class);
         final Class<? extends CollectionInteractionEvent<?, ?>> collectionInteractionEventType;
 
         final CollectionInteractionFacetAbstract collectionInteractionFacet;
-        if(collectionInteraction != null) {
+        if(collection != null && collection.interaction() != null) {
+            collectionInteractionEventType = collection.interaction();
+            collectionInteractionFacet = new CollectionInteractionFacetForCollectionAnnotation(
+                    collectionInteractionEventType, servicesInjector, getSpecificationLoader(), holder);
+
+        } else if(collectionInteraction != null) {
             collectionInteractionEventType = collectionInteraction.value();
             collectionInteractionFacet = new CollectionInteractionFacetAnnotation(
-                    collectionInteractionEventType, holder, servicesInjector, getSpecificationLoader());
+                    collectionInteractionEventType, servicesInjector, getSpecificationLoader(), holder);
         } else {
             collectionInteractionEventType = CollectionInteractionEvent.Default.class;
             collectionInteractionFacet = new CollectionInteractionFacetDefault(
-                    collectionInteractionEventType, holder, servicesInjector, getSpecificationLoader());
+                    collectionInteractionEventType, servicesInjector, getSpecificationLoader(), holder);
         }
         FacetUtil.addFacet(collectionInteractionFacet);
 
@@ -128,7 +136,7 @@ public class CollectionInteractionFacetFactory extends FacetFactoryAbstract impl
         // would look rather odd
         //
 
-        FacetUtil.addFacet(new CollectionInteractionFacetDefault(CollectionInteractionEvent.Default.class, objectMember, servicesInjector, getSpecificationLoader()));
+        FacetUtil.addFacet(new CollectionInteractionFacetDefault(CollectionInteractionEvent.Default.class, servicesInjector, getSpecificationLoader(), objectMember));
 
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
index c2f9d69..0ca15f7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
@@ -35,7 +35,11 @@ public abstract class DisabledFacetAbstract extends WhenAndWhereValueFacetAbstra
     }
 
     public DisabledFacetAbstract(final When when, Where where, final FacetHolder holder) {
-        super(type(), holder, when, where);
+        this(type(), when, where, holder);
+    }
+
+    private DisabledFacetAbstract(final Class<? extends Facet> type, final When when, Where where, final FacetHolder holder) {
+        super(type, holder, when, where);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractAlwaysEverywhere.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractAlwaysEverywhere.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractAlwaysEverywhere.java
new file mode 100644
index 0000000..52057c6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractAlwaysEverywhere.java
@@ -0,0 +1,41 @@
+/*
+ *  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.members.disabled;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class DisabledFacetAbstractAlwaysEverywhere extends DisabledFacetAbstract {
+
+    public DisabledFacetAbstractAlwaysEverywhere(final FacetHolder holder) {
+        super(When.ALWAYS, Where.ANYWHERE, holder);
+    }
+
+    /**
+     * Always returns <i>Always disabled</i>.
+     */
+    @Override
+    public String disabledReason(final ObjectAdapter target) {
+        return "Always disabled";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
new file mode 100644
index 0000000..45ae641
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
@@ -0,0 +1,74 @@
+/*
+ *  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.members.disabled;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class DisabledFacetAbstractImpl extends DisabledFacetAbstract {
+
+    private final String reason;
+
+    public DisabledFacetAbstractImpl(final When when, final Where where, final FacetHolder holder) {
+        this(when, where, null, holder);
+    }
+
+    public DisabledFacetAbstractImpl(final When when, final Where where, final String reason, final FacetHolder holder) {
+        super(when, where, holder);
+        this.reason = reason;
+    }
+
+    @Override
+    public String disabledReason(final ObjectAdapter targetAdapter) {
+        if (when() == When.ALWAYS) {
+            return disabledReasonElse("Always disabled");
+        } else if (when() == When.NEVER) {
+            return null;
+        }
+
+        // remaining tests depend upon the actual target in question
+        if (targetAdapter == null) {
+            return null;
+        }
+
+        if (when() == When.UNTIL_PERSISTED) {
+            return targetAdapter.isTransient() ? disabledReasonElse("Disabled until persisted") : null;
+        } else if (when() == When.ONCE_PERSISTED) {
+            return targetAdapter.representsPersistent() ? disabledReasonElse("Disabled once persisted") : null;
+        }
+        return null;
+    }
+
+    private String disabledReasonElse(final String defaultReason) {
+        return !Strings.isNullOrEmpty(reason) ? reason : defaultReason;
+    }
+
+    /**
+     * Not API... the reason as defined in subclass
+     */
+    public String getReason() {
+        return reason;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAlwaysEverywhere.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAlwaysEverywhere.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAlwaysEverywhere.java
deleted file mode 100644
index 8831068..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAlwaysEverywhere.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  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.members.disabled;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class DisabledFacetAlwaysEverywhere extends DisabledFacetAbstract {
-
-    public DisabledFacetAlwaysEverywhere(final FacetHolder holder) {
-        super(When.ALWAYS, Where.ANYWHERE, holder);
-    }
-
-    /**
-     * Always returns <i>Always disabled</i>.
-     */
-    @Override
-    public String disabledReason(final ObjectAdapter target) {
-        return "Always disabled";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetForContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetForContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetForContributee.java
new file mode 100644
index 0000000..ea13bf8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetForContributee.java
@@ -0,0 +1,31 @@
+/*
+ *  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.members.disabled;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class DisabledFacetForContributee extends DisabledFacetAbstractImpl {
+
+    public DisabledFacetForContributee(String reason, FacetHolder holder) {
+        super(When.ALWAYS, Where.ANYWHERE, reason, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetImpl.java
deleted file mode 100644
index 070956e..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  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.members.disabled;
-
-import com.google.common.base.Strings;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class DisabledFacetImpl extends DisabledFacetAbstract {
-
-    private final String reason;
-
-    public DisabledFacetImpl(final When when, final Where where, final FacetHolder holder) {
-        this(when, where, null, holder);
-    }
-
-    public DisabledFacetImpl(final When when, final Where where, final String reason, final FacetHolder holder) {
-        super(when, where, holder);
-        this.reason = reason;
-    }
-
-    @Override
-    public String disabledReason(final ObjectAdapter targetAdapter) {
-        if (when() == When.ALWAYS) {
-            return disabledReasonElse("Always disabled");
-        } else if (when() == When.NEVER) {
-            return null;
-        }
-
-        // remaining tests depend upon the actual target in question
-        if (targetAdapter == null) {
-            return null;
-        }
-
-        if (when() == When.UNTIL_PERSISTED) {
-            return targetAdapter.isTransient() ? disabledReasonElse("Disabled until persisted") : null;
-        } else if (when() == When.ONCE_PERSISTED) {
-            return targetAdapter.representsPersistent() ? disabledReasonElse("Disabled once persisted") : null;
-        }
-        return null;
-    }
-
-    private String disabledReasonElse(final String defaultReason) {
-        return !Strings.isNullOrEmpty(reason) ? reason : defaultReason;
-    }
-
-    /**
-     * Not API... the reason as defined in subclass
-     */
-    public String getReason() {
-        return reason;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetNever.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetNever.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetNever.java
deleted file mode 100644
index c3e359c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetNever.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *  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.members.disabled;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class DisabledFacetNever extends DisabledFacetAbstract {
-
-    public DisabledFacetNever(final FacetHolder holder) {
-        super(When.NEVER, Where.ANYWHERE, holder);
-    }
-
-    /**
-     * Always returns <tt>null</tt>.
-     */
-    @Override
-    public String disabledReason(final ObjectAdapter target) {
-        return null;
-    }
-
-    @Override
-    public boolean isNoop() {
-        return true;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetAnnotation.java
index 0a855fd..2ea6b6f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetAnnotation.java
@@ -22,9 +22,9 @@ package org.apache.isis.core.metamodel.facets.members.disabled.annotprop;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetImpl;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstractImpl;
 
-public class DisabledFacetAnnotation extends DisabledFacetImpl {
+public class DisabledFacetAnnotation extends DisabledFacetAbstractImpl {
 
     public DisabledFacetAnnotation(final When when, Where where, String reason, final FacetHolder holder) {
         super(when, where, reason, holder);

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFromProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFromProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFromProperties.java
index 89002d6..9926444 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFromProperties.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFromProperties.java
@@ -24,9 +24,9 @@ import java.util.Properties;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetImpl;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstractImpl;
 
-public class DisabledFacetFromProperties extends DisabledFacetImpl {
+public class DisabledFacetFromProperties extends DisabledFacetAbstractImpl {
 
     public DisabledFacetFromProperties(final When when, Where where, String reason, final FacetHolder holder) {
         super(when, where, reason, holder);

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetForStaticMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetForStaticMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetForStaticMethod.java
new file mode 100644
index 0000000..2b4d663
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetForStaticMethod.java
@@ -0,0 +1,32 @@
+/*
+ *  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.members.disabled.staticmethod;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstractAlwaysEverywhere;
+
+public class DisabledFacetForStaticMethod extends DisabledFacetAbstractAlwaysEverywhere {
+
+    public DisabledFacetForStaticMethod(final FacetHolder holder) {
+        super(holder);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetStaticMethodFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetStaticMethodFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetStaticMethodFacetFactory.java
index 33efd7c..91a62bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetStaticMethodFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/staticmethod/DisabledFacetStaticMethodFacetFactory.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.metamodel.facets.members.disabled.staticmethod;
 
 import java.lang.reflect.Method;
-
 import org.apache.isis.core.commons.lang.MethodExtensions;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
@@ -28,11 +27,10 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAlwaysEverywhere;
-import org.apache.isis.core.metamodel.methodutils.MethodScope;
 import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
 import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
 
 public class DisabledFacetStaticMethodFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
 
@@ -77,7 +75,7 @@ public class DisabledFacetStaticMethodFacetFactory extends MethodPrefixBasedFace
         }
 
         final FacetHolder facetedMethod = processMethodContext.getFacetHolder();
-        FacetUtil.addFacet(new DisabledFacetAlwaysEverywhere(facetedMethod));
+        FacetUtil.addFacet(new DisabledFacetForStaticMethod(facetedMethod));
     }
 
     private static Boolean invokeProtectMethod(final Method protectMethod) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
index 094fd7d..ff75db6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
@@ -36,7 +36,11 @@ public abstract class HiddenFacetAbstract extends WhenAndWhereValueFacetAbstract
     }
 
     public HiddenFacetAbstract(final When when, Where where, final FacetHolder holder) {
-        super(type(), holder, when, where);
+        this(type(), when, where, holder);
+    }
+
+    private HiddenFacetAbstract(final Class<? extends Facet> type, final When when, Where where, final FacetHolder holder) {
+        super(type, holder, when, where);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractAlwaysEverywhere.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractAlwaysEverywhere.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractAlwaysEverywhere.java
new file mode 100644
index 0000000..d805992
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractAlwaysEverywhere.java
@@ -0,0 +1,41 @@
+/*
+ *  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.members.hidden;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class HiddenFacetAbstractAlwaysEverywhere extends HiddenFacetAbstract {
+
+    public HiddenFacetAbstractAlwaysEverywhere(final FacetHolder holder) {
+        super(When.ALWAYS, Where.ANYWHERE, holder);
+    }
+
+    /**
+     * Always returns <i>Always hidden</i>.
+     */
+    @Override
+    public String hiddenReason(final ObjectAdapter target, Where where) {
+        return "Always hidden";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractImpl.java
new file mode 100644
index 0000000..386f56c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstractImpl.java
@@ -0,0 +1,59 @@
+/*
+ *  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.members.hidden;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class HiddenFacetAbstractImpl extends HiddenFacetAbstract {
+
+    public HiddenFacetAbstractImpl(final When when, Where where, final FacetHolder holder) {
+        super(when, where, holder);
+    }
+
+    @Override
+    public String hiddenReason(final ObjectAdapter targetAdapter, Where whereContext) {
+        if(!where().includes(whereContext)) {
+            return null;
+        }
+        
+        if (when() == When.ALWAYS) {
+            return "Always hidden";
+        }
+        if (when() == When.NEVER) {
+            return null;
+        }
+
+        // remaining tests depend on target in question.
+        if (targetAdapter == null) {
+            return null;
+        }
+
+        if (when() == When.UNTIL_PERSISTED) {
+            return targetAdapter.isTransient() ? "Hidden until persisted" : null;
+        } else if (when() == When.ONCE_PERSISTED) {
+            return targetAdapter.representsPersistent() ? "Hidden once persisted" : null;
+        }
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAlwaysEverywhere.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAlwaysEverywhere.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAlwaysEverywhere.java
deleted file mode 100644
index 7b179c2..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAlwaysEverywhere.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  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.members.hidden;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
-
-public class HiddenFacetAlwaysEverywhere extends HiddenFacetAbstract {
-
-    public HiddenFacetAlwaysEverywhere(final FacetHolder holder) {
-        super(When.ALWAYS, Where.ANYWHERE, holder);
-    }
-
-    /**
-     * Always returns <i>Always hidden</i>.
-     */
-    @Override
-    public String hiddenReason(final ObjectAdapter target, Where where) {
-        return "Always hidden";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetImpl.java
deleted file mode 100644
index 5b877be..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  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.members.hidden;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class HiddenFacetImpl extends HiddenFacetAbstract {
-
-    public HiddenFacetImpl(final When when, Where where, final FacetHolder holder) {
-        super(when, where, holder);
-    }
-
-    @Override
-    public String hiddenReason(final ObjectAdapter targetAdapter, Where whereContext) {
-        if(!where().includes(whereContext)) {
-            return null;
-        }
-        
-        if (when() == When.ALWAYS) {
-            return "Always hidden";
-        }
-        if (when() == When.NEVER) {
-            return null;
-        }
-
-        // remaining tests depend on target in question.
-        if (targetAdapter == null) {
-            return null;
-        }
-
-        if (when() == When.UNTIL_PERSISTED) {
-            return targetAdapter.isTransient() ? "Hidden until persisted" : null;
-        } else if (when() == When.ONCE_PERSISTED) {
-            return targetAdapter.representsPersistent() ? "Hidden once persisted" : null;
-        }
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetNever.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetNever.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetNever.java
deleted file mode 100644
index ba7b7da..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetNever.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  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.members.hidden;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class HiddenFacetNever extends HiddenFacetAbstract {
-
-    public HiddenFacetNever(final FacetHolder holder) {
-        super(When.NEVER, Where.ANYWHERE, holder);
-    }
-
-    /**
-     * Always returns <tt>null</tt>.
-     */
-    @Override
-    public String hiddenReason(final ObjectAdapter target, Where where) {
-        return null;
-    }
-
-    @Override
-    public boolean isNoop() {
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberAnnotation.java
index 19b422a..76b9ab4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberAnnotation.java
@@ -22,9 +22,9 @@ package org.apache.isis.core.metamodel.facets.members.hidden.annotprop;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetImpl;
+import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstractImpl;
 
-public class HiddenFacetOnMemberAnnotation extends HiddenFacetImpl {
+public class HiddenFacetOnMemberAnnotation extends HiddenFacetAbstractImpl {
 
     public HiddenFacetOnMemberAnnotation(final When when, Where where, final FacetHolder holder) {
         super(when, where, holder);

http://git-wip-us.apache.org/repos/asf/isis/blob/b55af5f1/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromProperties.java
index 5f238ba..5ddc964 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromProperties.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromProperties.java
@@ -24,9 +24,9 @@ import java.util.Properties;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetImpl;
+import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstractImpl;
 
-public class HiddenFacetOnMemberFromProperties extends HiddenFacetImpl {
+public class HiddenFacetOnMemberFromProperties extends HiddenFacetAbstractImpl {
 
     public HiddenFacetOnMemberFromProperties(final When when, Where where, final FacetHolder holder) {
         super(when, where, holder);