ISIS-1027: moving the handling of deprecated annotations to 
{Property|Collection|Action|Parameter}AnnotationFacetFactory.


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

Branch: refs/heads/master
Commit: 31816a69b0a7e12b14b775e9cc4e3beabd4b3f99
Parents: b5f73ec
Author: Dan Haywood <[email protected]>
Authored: Fri Feb 6 09:58:18 2015 +0000
Committer: Dan Haywood <[email protected]>
Committed: Fri Feb 6 09:58:18 2015 +0000

----------------------------------------------------------------------
 .../isis/applib/annotation/Collection.java      |   9 ++
 .../action/ActionAnnotationFacetFactory.java    |  56 ++++++-
 .../PrototypeFacetForPrototypeAnnotation.java   |  37 +++++
 .../annotation/DebugFacetAnnotationFactory.java |   2 +-
 .../ExplorationFacetAnnotationFactory.java      |   2 +-
 ...ActionNamedDebugExplorationFacetFactory.java |   4 +-
 .../NotContributedFacetAnnotationFactory.java   |   2 +-
 .../NotInServiceMenuFacetAnnotationFactory.java |   2 +-
 .../NotInServiceMenuFacetViaMethodFactory.java  |   2 +-
 .../annotation/PrototypeFacetAnnotation.java    |  32 ----
 .../PrototypeFacetAnnotationFactory.java        |  62 --------
 ...MaxLengthFacetOnActionAnnotationFactory.java |   2 +-
 .../CollectionAnnotationFacetFactory.java       |  77 ++++++++--
 ...otPersistedFacetForCollectionAnnotation.java |  49 ++++++
 ...etForNotPersistedAnnotationOnCollection.java |  41 +++++
 ...NotPersistedFacetOnCollectionAnnotation.java |  31 ----
 ...istedFacetOnCollectionAnnotationFactory.java |  62 --------
 .../SortedByFacetAnnotationFactory.java         |   2 +-
 .../DescribedAsFacetStaticMethodFactory.java    |   2 +-
 .../annotprop/DisabledFacetAnnotation.java      |   7 +
 .../annotprop/DisabledFacetFactory.java         |  90 -----------
 ...abledFacetOnMemberFromPropertiesFactory.java |  56 +++++++
 .../DisabledFacetStaticMethodFacetFactory.java  |   2 +-
 .../HiddenFacetOnMemberAnnotation.java          |  12 +-
 .../annotprop/HiddenFacetOnMemberFactory.java   |  90 -----------
 ...iddenFacetOnMemberFromPropertiesFactory.java |  57 +++++++
 .../HiddenFacetStaticMethodFactory.java         |   2 +-
 .../NamedFacetStaticMethodFactory.java          |   2 +-
 .../ActionOrderFacetAnnotationFactory.java      |   2 +-
 .../CssClassFacetOnTypeAnnotationFactory.java   |   3 +-
 .../CssClassFaFacetOnTypeAnnotationFactory.java |   2 +-
 ...DescribedAsFacetOnTypeAnnotationFactory.java |   2 +-
 .../FieldOrderFacetAnnotationFactory.java       |   3 +-
 .../HiddenFacetOnTypeAnnotationFactory.java     |   3 +-
 .../MaskFacetOnTypeAnnotationFactory.java       |   2 +-
 .../MaxLengthFacetOnTypeAnnotationFactory.java  |   2 +-
 .../MultiLineFacetOnTypeAnnotationFactory.java  |   2 +-
 .../NamedFacetOnTypeAnnotationFactory.java      |   2 +-
 .../NamedFacetStaticMethodFactory.java          |   2 +-
 .../PagedFacetOnTypeAnnotationFactory.java      |   2 +-
 .../PluralAnnotationFacetFactory.java           |   2 +-
 .../PluralFacetStaticMethodFactory.java         |   2 +-
 .../RegExFacetOnTypeAnnotationFactory.java      |   2 +-
 ...picalLengthFacetOnTypeAnnotationFactory.java |   2 +-
 ...tSatisfySpecificationOnTypeFacetFactory.java |   2 +-
 ...OnParameterInvertedByOptionalAnnotation.java |  39 -----
 ...eterInvertedByOptionalAnnotationFactory.java |  70 ---------
 .../NamedFacetOnParameterAnnotationFactory.java |   2 +-
 .../MandatoryFacetForParameterAnnotation.java   |  79 ----------
 .../MaxLengthFacetForParameterAnnotation.java   |  47 ------
 ...pecificationFacetForParameterAnnotation.java |  54 -------
 .../ParameterAnnotationFacetFactory.java        | 152 +++++++++++++++++--
 .../RegExFacetForParameterAnnotation.java       |  74 ---------
 .../MandatoryFacetForParameterAnnotation.java   |  79 ++++++++++
 ...InvertedByOptionalAnnotationOnParameter.java |  53 +++++++
 .../MaxLengthFacetForParameterAnnotation.java   |  47 ++++++
 ...engthFacetOnParamForMaxLengthAnnotation.java |  37 +++++
 ...acetForMustSatisfyAnnotationOnParameter.java |  52 +++++++
 ...pecificationFacetForParameterAnnotation.java |  54 +++++++
 .../regex/RegExFacetForParameterAnnotation.java |  78 ++++++++++
 ...egExFacetFromRegExAnnotationOnParameter.java |  77 ++++++++++
 ...BeforeFacetOnParameterAnnotationFactory.java |   3 +-
 ...LengthFacetOnParameterAnnotationFactory.java |   2 +-
 .../MaxLengthFacetOnParameterAnnotation.java    |  31 ----
 ...LengthFacetOnParameterAnnotationFactory.java |  71 ---------
 ...acetForMustSatisfyAnnotationOnParameter.java |  52 -------
 ...sfySpecificationOnParameterFacetFactory.java |  65 --------
 ...xFacetFacetOnParameterAnnotationFactory.java | 105 -------------
 .../RegExFacetOnParameterAnnotation.java        |  59 -------
 ...atoryFacetOnPropertyMandatoryAnnotation.java |  43 ------
 ...cetOnPropertyMandatoryAnnotationFactory.java |  59 -------
 ...tOnPropertyInvertedByOptionalAnnotation.java |  48 ------
 ...ertyInvertedByOptionalAnnotationFactory.java |  66 --------
 ...atoryFacetOnPropertyStaticMethodFactory.java |   2 +-
 .../MultiLineFacetOnPropertyFactory.java        |  16 +-
 .../NotPersistedFacetOnPropertyAnnotation.java  |  36 -----
 ...rsistedFacetOnPropertyAnnotationFactory.java |  58 -------
 .../PropertyAnnotationFacetFactory.java         | 136 ++++++++++++++---
 ...ryFacetForMandatoryAnnotationOnProperty.java |  48 ++++++
 ...tInvertedByOptionalAnnotationOnProperty.java |  48 ++++++
 ...thFacetForMaxLengthAnnotationOnProperty.java |  36 +++++
 ...FacetForMustSatisfyAnnotationOnProperty.java |  52 +++++++
 ...acetForNotPersistedAnnotationOnProperty.java |  36 +++++
 .../regex/RegExFacetForPropertyAnnotation.java  |  14 +-
 ...RegExFacetFromRegExAnnotationOnProperty.java |  74 +++++++++
 ...yBeforeAnnotationOnPropertyFacetFactory.java |   2 +-
 .../MaxLengthFacetOnPropertyAnnotation.java     |  31 ----
 ...xLengthFacetOnPropertyAnnotationFactory.java |  63 --------
 ...FacetForMustSatisfyAnnotationOnProperty.java |  52 -------
 ...isfySpecificationOnPropertyFacetFactory.java |  63 --------
 ...ExFacetFacetOnPropertyAnnotationFactory.java |  82 ----------
 .../RegExFacetOnPropertyAnnotation.java         |  69 ---------
 .../validator/MetaModelValidatorComposite.java  |  13 +-
 ...MetaModelValidatorForDeprecatedAbstract.java |   3 +-
 ...itableAnnotationInJdoApplibFacetFactory.java |   2 +-
 ...toryFromJdoColumnAnnotationFacetFactory.java |   4 +-
 ...ivedFromJdoColumnAnnotationFacetFactory.java |   4 +-
 .../dflt/ProgrammingModelFacetsJava5.java       |  34 +----
 .../ActionAnnotationFacetFactoryTest.java       |   8 +-
 ...tationFacetFactoryTest_actionInvocation.java |  12 +-
 .../PrototypeFacetAnnotationFactoryTest.java    |  65 ++++++++
 .../PrototypeFacetAnnotationFactoryTest.java    |  65 --------
 .../CollectionAnnotationFacetFactoryTest.java   |   8 +-
 ...dAnnotationOnCollectionFacetFactoryTest.java |  62 ++++++++
 .../DisabledAnnotationFacetFactoryTest.java     |   6 +-
 .../HiddenAnnotationFacetFactoryTest.java       |   6 +-
 ...icationFacetFactoryProcessParameterTest.java |  84 ++++++++++
 ...alAnnotationOnParameterFacetFactoryTest.java |  68 +++++++++
 .../ParameterAnnotationFacetFactoryTest.java    |   4 +
 ...ExAnnotationOnParameterFacetFactoryTest.java |  74 +++++++++
 .../NotPersistedAnnotationFacetFactoryTest.java |  80 ----------
 .../MandatoryAnnotationFacetFactoryTest.java    |  59 +++++++
 ...ficationFacetFactoryProcessPropertyTest.java |  86 +++++++++++
 ...tedAnnotationOnPropertyFacetFactoryTest.java |  60 ++++++++
 ...nalAnnotationOnPropertyFacetFactoryTest.java |  72 +++++++++
 .../PropertyAnnotationFacetFactoryTest.java     |   8 +-
 ...gExAnnotationOnPropertyFacetFactoryTest.java |  79 ++++++++++
 ...icationFacetFactoryProcessParameterTest.java |  87 -----------
 ...ficationFacetFactoryProcessPropertyTest.java |  90 -----------
 .../MandatoryAnnotationFacetFactoryTest.java    |  53 -------
 .../OptionalAnnotationFacetFactoryTest.java     | 104 -------------
 .../regex/RegExAnnotationFacetFactoryTest.java  | 130 ----------------
 .../RegExAnnotationOnTypeFacetFactoryTest.java  |  48 ++++++
 .../legacy/MemberInvalidTest.java               |   8 +-
 124 files changed, 2278 insertions(+), 2555 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
----------------------------------------------------------------------
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java 
b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
index cfa0f46..7649a21 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
@@ -90,6 +90,15 @@ public @interface Collection {
 
     // //////////////////////////////////////
 
+
+    /**
+     * Indicates that the property should not be persisted.
+     */
+    boolean notPersisted() default false;
+
+
+    // //////////////////////////////////////
+
     /**
      * The type-of the elements held within the collection.
      * @return

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/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 2d83c2b..3f9b318 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
@@ -29,8 +29,11 @@ import org.apache.isis.applib.annotation.ActionInteraction;
 import org.apache.isis.applib.annotation.ActionSemantics;
 import org.apache.isis.applib.annotation.Bulk;
 import org.apache.isis.applib.annotation.Command;
+import org.apache.isis.applib.annotation.Disabled;
+import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Idempotent;
 import org.apache.isis.applib.annotation.PostsActionInvokedEvent;
+import org.apache.isis.applib.annotation.Prototype;
 import org.apache.isis.applib.annotation.PublishedAction;
 import org.apache.isis.applib.annotation.QueryOnly;
 import org.apache.isis.applib.annotation.TypeOf;
@@ -78,9 +81,14 @@ import 
org.apache.isis.core.metamodel.facets.actions.action.typeof.TypeOfFacetFo
 import 
org.apache.isis.core.metamodel.facets.actions.action.typeof.TypeOfFacetOnActionForTypeOfAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
+import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
+import 
org.apache.isis.core.metamodel.facets.actions.action.prototype.PrototypeFacetForPrototypeAnnotation;
 import 
org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
 import 
org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import 
org.apache.isis.core.metamodel.facets.members.disabled.annotprop.DisabledFacetAnnotation;
+import 
org.apache.isis.core.metamodel.facets.members.hidden.annotprop.HiddenFacetOnMemberAnnotation;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -101,6 +109,9 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract implement
     private final MetaModelValidatorForDeprecatedAnnotation 
idempotentValidator = new 
MetaModelValidatorForDeprecatedAnnotation(Idempotent.class);
     private final MetaModelValidatorForDeprecatedAnnotation 
publishedActionValidator = new 
MetaModelValidatorForDeprecatedAnnotation(PublishedAction.class);
     private final MetaModelValidatorForDeprecatedAnnotation typeOfValidator = 
new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
+    private final MetaModelValidatorForDeprecatedAnnotation hiddenValidator = 
new MetaModelValidatorForDeprecatedAnnotation(Hidden.class);
+    private final MetaModelValidatorForDeprecatedAnnotation disabledValidator 
= new MetaModelValidatorForDeprecatedAnnotation(Disabled.class);
+    private final MetaModelValidatorForDeprecatedAnnotation prototypeValidator 
= new MetaModelValidatorForDeprecatedAnnotation(Prototype.class);
 
 
     private ServicesInjector servicesInjector;
@@ -117,8 +128,9 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract implement
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
-        processInvocation(processMethodContext);
+        processDomainEvent(processMethodContext);
         processHidden(processMethodContext);
+        processDisabled(processMethodContext);
         processRestrictTo(processMethodContext);
         processSemantics(processMethodContext);
         processBulk(processMethodContext);
@@ -132,7 +144,7 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract implement
         processTypeOf(processMethodContext);
     }
 
-    void processInvocation(final ProcessMethodContext processMethodContext) {
+    void processDomainEvent(final ProcessMethodContext processMethodContext) {
 
         final Method actionMethod = processMethodContext.getMethod();
 
@@ -224,19 +236,47 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract implement
 
     void processHidden(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        // check for deprecated @Hidden
+        final Hidden hiddenAnnotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Hidden.class);
+        HiddenFacet facet = 
hiddenValidator.flagIfPresent(HiddenFacetOnMemberAnnotation.create(hiddenAnnotation,
 holder));
+
+        // else search for @Action(hidden=...)
         final Action action = Annotations.getAnnotation(method, Action.class);
+        if(facet == null) {
+            facet = HiddenFacetForActionAnnotation.create(action, holder);
+        }
+        FacetUtil.addFacet(facet);
+    }
+
+    void processDisabled(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        HiddenFacet facet = HiddenFacetForActionAnnotation.create(action, 
holder);
+        // check for deprecated @Disabled
+        final Disabled annotation = Annotations.getAnnotation(method, 
Disabled.class);
+        DisabledFacet facet = 
disabledValidator.flagIfPresent(DisabledFacetAnnotation.create(annotation, 
holder));
+
+        // there is no equivalent in @Action(...)
+
         FacetUtil.addFacet(facet);
     }
 
     void processRestrictTo(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Action action = Annotations.getAnnotation(method, Action.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        FacetUtil.addFacet(PrototypeFacetForActionAnnotation.create(action, 
holder));
+        // check for deprecated @Prototype
+        final Prototype annotation = Annotations.getAnnotation(method, 
Prototype.class);
+        PrototypeFacet facet = 
prototypeValidator.addFacetFlagIfPresent(PrototypeFacetForPrototypeAnnotation.create(annotation,
 holder));
+
+        // else search for @Action(restrictTo=...)
+        final Action action = Annotations.getAnnotation(method, Action.class);
+        if(facet == null) {
+            facet = PrototypeFacetForActionAnnotation.create(action, holder);
+        }
+        FacetUtil.addFacet(facet);
     }
 
     void processSemantics(final ProcessMethodContext processMethodContext) {
@@ -467,6 +507,9 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract implement
         metaModelValidator.add(idempotentValidator);
         metaModelValidator.add(publishedActionValidator);
         metaModelValidator.add(typeOfValidator);
+        metaModelValidator.add(hiddenValidator);
+        metaModelValidator.add(disabledValidator);
+        metaModelValidator.add(prototypeValidator);
     }
 
     // ///////////////////////////////////////////////////////////////
@@ -489,6 +532,9 @@ public class ActionAnnotationFacetFactory extends 
FacetFactoryAbstract implement
         idempotentValidator.setConfiguration(configuration);
         publishedActionValidator.setConfiguration(configuration);
         typeOfValidator.setConfiguration(configuration);
+        hiddenValidator.setConfiguration(configuration);
+        disabledValidator.setConfiguration(configuration);
+        prototypeValidator.setConfiguration(configuration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/prototype/PrototypeFacetForPrototypeAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/prototype/PrototypeFacetForPrototypeAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/prototype/PrototypeFacetForPrototypeAnnotation.java
new file mode 100644
index 0000000..49f5d8a
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/prototype/PrototypeFacetForPrototypeAnnotation.java
@@ -0,0 +1,37 @@
+/*
+ *  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.prototype;
+
+import org.apache.isis.applib.annotation.Prototype;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
+import 
org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacetAbstract;
+
+public class PrototypeFacetForPrototypeAnnotation extends 
PrototypeFacetAbstract {
+
+    public PrototypeFacetForPrototypeAnnotation(final FacetHolder holder) {
+        super(holder);
+    }
+
+
+    public static PrototypeFacet create(final Prototype annotation, final 
FacetHolder holder) {
+        return annotation == null ? null : new 
PrototypeFacetForPrototypeAnnotation(holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/debug/annotation/DebugFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/debug/annotation/DebugFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/debug/annotation/DebugFacetAnnotationFactory.java
index ee2322a..864eab5 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/debug/annotation/DebugFacetAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/debug/annotation/DebugFacetAnnotationFactory.java
@@ -47,7 +47,7 @@ public class DebugFacetAnnotationFactory extends 
FacetFactoryAbstract implements
     public void process(final ProcessMethodContext processMethodContext) {
         final Debug annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Debug.class);
         final DebugFacet facet = create(annotation, 
processMethodContext.getFacetHolder());
-        validator.addFacet(facet);
+        validator.addFacetFlagIfPresent(facet);
     }
 
     private DebugFacet create(final Debug annotation, final FacetHolder 
holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/exploration/annotation/ExplorationFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/exploration/annotation/ExplorationFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/exploration/annotation/ExplorationFacetAnnotationFactory.java
index cf391f7..4daf0e9 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/exploration/annotation/ExplorationFacetAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/exploration/annotation/ExplorationFacetAnnotationFactory.java
@@ -47,7 +47,7 @@ public class ExplorationFacetAnnotationFactory extends 
FacetFactoryAbstract impl
     public void process(final ProcessMethodContext processMethodContext) {
         final Exploration annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Exploration.class);
         final ExplorationFacet facet = create(annotation, 
processMethodContext.getFacetHolder());
-        validator.addFacet(facet);
+        validator.addFacetFlagIfPresent(facet);
     }
 
     private ExplorationFacet create(final Exploration annotation, final 
FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedDebugExplorationFacetFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedDebugExplorationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedDebugExplorationFacetFactory.java
index 02ca06c..cf588d1 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedDebugExplorationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedDebugExplorationFacetFactory.java
@@ -84,7 +84,7 @@ public class ActionNamedDebugExplorationFacetFactory extends 
MethodPrefixBasedFa
         }
         final FacetHolder facetedMethod = 
processMethodContext.getFacetHolder();
         final Facet facet = new DebugFacetViaNamingConvention(facetedMethod);
-        debugValidator.addFacet(facet);
+        debugValidator.addFacetFlagIfPresent(facet);
     }
 
     private void attachExplorationFacetIfActionMethodNamePrefixed(final 
ProcessMethodContext processMethodContext) {
@@ -96,7 +96,7 @@ public class ActionNamedDebugExplorationFacetFactory extends 
MethodPrefixBasedFa
         }
         final FacetHolder facetedMethod = 
processMethodContext.getFacetHolder();
         final Facet facet = new 
ExplorationFacetViaNamingConvention(facetedMethod);
-        explorationValidator.addFacet(facet);
+        explorationValidator.addFacetFlagIfPresent(facet);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/annotation/NotContributedFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/annotation/NotContributedFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/annotation/NotContributedFacetAnnotationFactory.java
index b7f3b1e..e320ade 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/annotation/NotContributedFacetAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/annotation/NotContributedFacetAnnotationFactory.java
@@ -42,7 +42,7 @@ public class NotContributedFacetAnnotationFactory extends 
FacetFactoryAbstract i
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
         final NotContributed annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), 
NotContributed.class);
-        validator.addFacet(create(annotation, 
processMethodContext.getFacetHolder()));
+        validator.addFacetFlagIfPresent(create(annotation, 
processMethodContext.getFacetHolder()));
     }
 
     private NotContributedFacet create(final NotContributed annotation, final 
FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/annotation/NotInServiceMenuFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/annotation/NotInServiceMenuFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/annotation/NotInServiceMenuFacetAnnotationFactory.java
index b531248..343673d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/annotation/NotInServiceMenuFacetAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/annotation/NotInServiceMenuFacetAnnotationFactory.java
@@ -42,7 +42,7 @@ public class NotInServiceMenuFacetAnnotationFactory extends 
FacetFactoryAbstract
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
         final NotInServiceMenu annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), 
NotInServiceMenu.class);
-        validator.addFacet(create(annotation, 
processMethodContext.getFacetHolder()));
+        validator.addFacetFlagIfPresent(create(annotation, 
processMethodContext.getFacetHolder()));
     }
 
     private NotInServiceMenuFacet create(final NotInServiceMenu annotation, 
final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuFacetViaMethodFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuFacetViaMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuFacetViaMethodFactory.java
index 25a3da9..fb7cb94 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuFacetViaMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuFacetViaMethodFactory.java
@@ -58,7 +58,7 @@ public class NotInServiceMenuFacetViaMethodFactory extends 
MethodPrefixBasedFace
 
         final FacetHolder facetedMethod = 
processMethodContext.getFacetHolder();
         final NotInServiceMenuFacetViaMethod facet = new 
NotInServiceMenuFacetViaMethod(notInServiceMenuMethod, facetedMethod);
-        validator.addFacet(facet);
+        validator.addFacetFlagIfPresent(facet);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotation.java
deleted file mode 100644
index fc9f560..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotation.java
+++ /dev/null
@@ -1,32 +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.actions.prototype.annotation;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacetAbstract;
-
-public class PrototypeFacetAnnotation extends PrototypeFacetAbstract {
-
-    public PrototypeFacetAnnotation(final FacetHolder holder) {
-        super(holder);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotationFactory.java
deleted file mode 100644
index 4cc6a48..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/annotation/PrototypeFacetAnnotationFactory.java
+++ /dev/null
@@ -1,62 +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.actions.prototype.annotation;
-
-import org.apache.isis.applib.annotation.Prototype;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class PrototypeFacetAnnotationFactory extends FacetFactoryAbstract 
implements MetaModelValidatorRefiner, IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(Prototype.class);
-
-    public PrototypeFacetAnnotationFactory() {
-        super(FeatureType.ACTIONS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final Prototype annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Prototype.class);
-        validator.addFacet(create(annotation, 
processMethodContext.getFacetHolder()));
-    }
-
-    private PrototypeFacet create(final Prototype annotation, final 
FacetHolder holder) {
-        return annotation == null ? null : new 
PrototypeFacetAnnotation(holder);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validating/maxlenannot/MaxLengthFacetOnActionAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validating/maxlenannot/MaxLengthFacetOnActionAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validating/maxlenannot/MaxLengthFacetOnActionAnnotationFactory.java
index 9cb1195..9e7375c 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validating/maxlenannot/MaxLengthFacetOnActionAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validating/maxlenannot/MaxLengthFacetOnActionAnnotationFactory.java
@@ -45,7 +45,7 @@ public class MaxLengthFacetOnActionAnnotationFactory extends 
FacetFactoryAbstrac
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
         final MaxLength annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), MaxLength.class);
-        validator.addFacet(create(annotation, 
processMethodContext.getFacetHolder()));
+        validator.addFacetFlagIfPresent(create(annotation, 
processMethodContext.getFacetHolder()));
     }
 
     private MaxLengthFacet create(final MaxLength annotation, final 
FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/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 e4fcd65..debf7fb 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
@@ -25,6 +25,9 @@ import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionInteraction;
+import org.apache.isis.applib.annotation.Disabled;
+import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.NotPersisted;
 import org.apache.isis.applib.annotation.PostsCollectionAddedToEvent;
 import org.apache.isis.applib.annotation.PostsCollectionRemovedFromEvent;
 import org.apache.isis.applib.annotation.TypeOf;
@@ -42,6 +45,7 @@ import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import 
org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromArray;
 import 
org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromGenerics;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.disabled.DisabledFacetForCollectionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromAbstract;
@@ -60,11 +64,17 @@ import 
org.apache.isis.core.metamodel.facets.collections.collection.modify.Colle
 import 
org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromCollectionInteractionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromDefault;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForPostsCollectionRemovedFromEventAnnotation;
+import 
org.apache.isis.core.metamodel.facets.collections.collection.notpersisted.NotPersistedFacetForCollectionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromCollectionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromTypeOfAnnotation;
 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.collections.collection.notpersisted.NotPersistedFacetForNotPersistedAnnotationOnCollection;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import 
org.apache.isis.core.metamodel.facets.members.disabled.annotprop.DisabledFacetAnnotation;
+import 
org.apache.isis.core.metamodel.facets.members.hidden.annotprop.HiddenFacetOnMemberAnnotation;
 import 
org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
@@ -77,6 +87,9 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
     private final MetaModelValidatorForDeprecatedAnnotation 
postsCollectionAddedToEventValidator = new 
MetaModelValidatorForDeprecatedAnnotation(PostsCollectionAddedToEvent.class);
     private final MetaModelValidatorForDeprecatedAnnotation 
postsCollectionRemovedFromEventValidator = new 
MetaModelValidatorForDeprecatedAnnotation(PostsCollectionRemovedFromEvent.class);
     private final MetaModelValidatorForDeprecatedAnnotation 
collectionInteractionValidator = new 
MetaModelValidatorForDeprecatedAnnotation(CollectionInteraction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation hiddenValidator = 
new MetaModelValidatorForDeprecatedAnnotation(Hidden.class);
+    private final MetaModelValidatorForDeprecatedAnnotation disabledValidator 
= new MetaModelValidatorForDeprecatedAnnotation(Disabled.class);
+    private final MetaModelValidatorForDeprecatedAnnotation 
notPersistedValidator = new 
MetaModelValidatorForDeprecatedAnnotation(NotPersisted.class);
     private final MetaModelValidatorForDeprecatedAnnotation typeOfValidator = 
new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
 
     private final CollectionTypeRegistry collectionTypeRegistry = new 
CollectionTypeRegistry();
@@ -90,13 +103,14 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
-        processModify(processMethodContext);
+        processDomainEvent(processMethodContext);
         processHidden(processMethodContext);
         processEditing(processMethodContext);
+        processNotPersisted(processMethodContext);
         processTypeOf(processMethodContext);
     }
 
-    void processModify(final ProcessMethodContext processMethodContext) {
+    void processDomainEvent(final ProcessMethodContext processMethodContext) {
 
         final Method method = processMethodContext.getMethod();
         final FacetHolder holder = processMethodContext.getFacetHolder();
@@ -226,22 +240,56 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
 
     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));
+        // check for deprecated @Hidden
+        final Hidden hiddenAnnotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Hidden.class);
+        HiddenFacet facet = 
hiddenValidator.flagIfPresent(HiddenFacetOnMemberAnnotation.create(hiddenAnnotation,
 holder));
+
+        // else check for @Collection(hidden=...)
+        final Collection collection = Annotations.getAnnotation(method, 
Collection.class);
+        if(facet == null) {
+            facet = HiddenFacetForCollectionAnnotation.create(collection, 
holder);
+        }
+
+        FacetUtil.addFacet(facet);
     }
 
     void processEditing(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        // check for deprecated @Disabled
+        final Disabled annotation = Annotations.getAnnotation(method, 
Disabled.class);
+        DisabledFacet facet = 
disabledValidator.flagIfPresent(DisabledFacetAnnotation.create(annotation, 
holder));
+
+        // else check for @Collection(editing=...)
         final Collection collection = Annotations.getAnnotation(method, 
Collection.class);
+        if(facet == null) {
+            facet = DisabledFacetForCollectionAnnotation.create(collection, 
holder);
+        }
+
+        FacetUtil.addFacet(facet);
+    }
+
+    void processNotPersisted(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        FacetUtil.addFacet(
-                DisabledFacetForCollectionAnnotation.create(collection, 
holder));
+        // check for deprecated @NotPersisted first
+        final NotPersisted annotation = Annotations.getAnnotation(method, 
NotPersisted.class);
+        NotPersistedFacet facet = 
notPersistedValidator.addFacetFlagIfPresent(NotPersistedFacetForNotPersistedAnnotationOnCollection.create(annotation,
 holder));
+
+        // else search for @Collection(notPersisted=...)
+        final Collection collection = Annotations.getAnnotation(method, 
Collection.class);
+        if(facet == null) {
+            facet = 
NotPersistedFacetForCollectionAnnotation.create(collection, holder);
+        }
+
+        FacetUtil.addFacet(facet);
     }
 
+
     void processTypeOf(final ProcessMethodContext processMethodContext) {
 
         final FacetedMethod facetHolder = 
processMethodContext.getFacetHolder();
@@ -259,13 +307,13 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
         facet = typeOfValidator.flagIfPresent(
                 TypeOfFacetOnCollectionFromTypeOfAnnotation.create(annotation, 
facetHolder, getSpecificationLoader()));
 
-        // check for @Collection(typeOf=...)
+        // else check for @Collection(typeOf=...)
+        final Collection collection = Annotations.getAnnotation(method, 
Collection.class);
         if(facet == null) {
-            final Collection collection = Annotations.getAnnotation(method, 
Collection.class);
             facet = 
TypeOfFacetOnCollectionFromCollectionAnnotation.create(collection, facetHolder, 
getSpecificationLoader());
         }
 
-        // infer from return type
+        // else infer from return type
         if(facet == null) {
             final Class<?> returnType = method.getReturnType();
             if (returnType.isArray()) {
@@ -274,12 +322,11 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
             }
         }
 
-        // infer from generic return type
+        // else infer from generic return type
         if(facet == null) {
             facet = inferFromGenericReturnType(processMethodContext);
         }
 
-
         FacetUtil.addFacet(facet);
     }
 
@@ -337,7 +384,10 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
         metaModelValidator.add(postsCollectionAddedToEventValidator);
         metaModelValidator.add(postsCollectionRemovedFromEventValidator);
         metaModelValidator.add(collectionInteractionValidator);
+        metaModelValidator.add(notPersistedValidator);
         metaModelValidator.add(typeOfValidator);
+        metaModelValidator.add(hiddenValidator);
+        metaModelValidator.add(disabledValidator);
     }
 
     // //////////////////////////////////////
@@ -349,6 +399,9 @@ public class CollectionAnnotationFacetFactory extends 
FacetFactoryAbstract imple
         
postsCollectionRemovedFromEventValidator.setConfiguration(configuration);
         collectionInteractionValidator.setConfiguration(configuration);
         typeOfValidator.setConfiguration(configuration);
+        notPersistedValidator.setConfiguration(configuration);
+        hiddenValidator.setConfiguration(configuration);
+        disabledValidator.setConfiguration(configuration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java
new file mode 100644
index 0000000..ce4e888
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.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.notpersisted;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+
+public class NotPersistedFacetForCollectionAnnotation extends 
NotPersistedFacetAbstract {
+
+    public NotPersistedFacetForCollectionAnnotation(final FacetHolder holder) {
+        super(holder);
+    }
+
+    public static NotPersistedFacet create(
+            final Collection collection,
+            final FacetHolder holder) {
+
+        if (collection == null) {
+            return null;
+        }
+
+        final boolean notPersisted = collection.notPersisted();
+        final boolean persisted = !notPersisted;
+        if(persisted) {
+            return null;
+        }
+        return new NotPersistedFacetForCollectionAnnotation(holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnCollection.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnCollection.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnCollection.java
new file mode 100644
index 0000000..f43ea7b
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnCollection.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.collections.collection.notpersisted;
+
+import org.apache.isis.applib.annotation.NotPersisted;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+
+
+/**
+ * @deprecated
+ */
+@Deprecated
+public class NotPersistedFacetForNotPersistedAnnotationOnCollection extends 
NotPersistedFacetAbstract {
+
+    public NotPersistedFacetForNotPersistedAnnotationOnCollection(final 
FacetHolder holder) {
+        super(holder);
+    }
+
+    public static NotPersistedFacet create(final NotPersisted annotation, 
final FacetHolder holder) {
+        return annotation == null ? null : new 
NotPersistedFacetForNotPersistedAnnotationOnCollection(holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotation.java
deleted file mode 100644
index fa7110c..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotation.java
+++ /dev/null
@@ -1,31 +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.collections.notpersisted.annotation;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
-
-public class NotPersistedFacetOnCollectionAnnotation extends 
NotPersistedFacetAbstract {
-
-    public NotPersistedFacetOnCollectionAnnotation(final FacetHolder holder) {
-        super(holder);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotationFactory.java
deleted file mode 100644
index 6ced282..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/notpersisted/annotation/NotPersistedFacetOnCollectionAnnotationFactory.java
+++ /dev/null
@@ -1,62 +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.collections.notpersisted.annotation;
-
-import org.apache.isis.applib.annotation.NotPersisted;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class NotPersistedFacetOnCollectionAnnotationFactory extends 
FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(NotPersisted.class);
-
-    public NotPersistedFacetOnCollectionAnnotationFactory() {
-        super(FeatureType.COLLECTIONS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final NotPersisted annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), NotPersisted.class);
-        validator.addFacet(create(annotation, 
processMethodContext.getFacetHolder()));
-    }
-
-    private NotPersistedFacet create(final NotPersisted annotation, final 
FacetHolder holder) {
-        return annotation == null ? null : new 
NotPersistedFacetOnCollectionAnnotation(holder);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
index 4fef72c..7b6b62b 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
@@ -54,7 +54,7 @@ public class SortedByFacetAnnotationFactory extends 
FacetFactoryAbstract impleme
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
         final SortedBy renderAnnotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), SortedBy.class);
-        validator.addFacet(create(renderAnnotation, 
processMethodContext.getFacetHolder()));
+        validator.addFacetFlagIfPresent(create(renderAnnotation, 
processMethodContext.getFacetHolder()));
     }
 
     private SortedByFacet create(final SortedBy annotation, final FacetHolder 
holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/staticmethod/DescribedAsFacetStaticMethodFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/staticmethod/DescribedAsFacetStaticMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/staticmethod/DescribedAsFacetStaticMethodFactory.java
index 7aff8a6..f0e50ff 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/staticmethod/DescribedAsFacetStaticMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/staticmethod/DescribedAsFacetStaticMethodFactory.java
@@ -79,7 +79,7 @@ public class DescribedAsFacetStaticMethodFactory extends 
MethodPrefixBasedFacetF
         final String description = invokeDescriptionMethod(descriptionMethod);
 
         final FacetHolder facetedMethod = 
processMethodContext.getFacetHolder();
-        validator.addFacet(new DescribedAsFacetStaticMethod(description, 
descriptionMethod, facetedMethod));
+        validator.addFacetFlagIfPresent(new 
DescribedAsFacetStaticMethod(description, descriptionMethod, facetedMethod));
     }
 
     private static String invokeDescriptionMethod(final Method 
descriptionMethod) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/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 2ea6b6f..2b454fc 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
@@ -19,9 +19,11 @@
 
 package org.apache.isis.core.metamodel.facets.members.disabled.annotprop;
 
+import org.apache.isis.applib.annotation.Disabled;
 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 DisabledFacetAnnotation extends DisabledFacetAbstractImpl {
@@ -30,4 +32,9 @@ public class DisabledFacetAnnotation extends 
DisabledFacetAbstractImpl {
         super(when, where, reason, holder);
     }
 
+    public static DisabledFacet create(final Disabled annotation, final 
FacetHolder facetHolder) {
+        return annotation != null
+                ? new DisabledFacetAnnotation(annotation.when(), 
annotation.where(), annotation.reason(), facetHolder)
+                : null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
deleted file mode 100644
index b1ab3f2..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
+++ /dev/null
@@ -1,90 +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.annotprop;
-
-import java.util.Properties;
-import org.apache.isis.applib.annotation.Disabled;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.facetapi.MetaModelValidatorRefiner;
-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.members.disabled.DisabledFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class DisabledFacetFactory extends FacetFactoryAbstract 
-        implements ContributeeMemberFacetFactory, MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(Disabled.class);
-
-    public DisabledFacetFactory() {
-        super(FeatureType.MEMBERS);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        DisabledFacet disabledFacet = 
createFromMetadataPropertiesIfPossible(processMethodContext);
-        if(disabledFacet == null) {
-            disabledFacet = 
validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
-        }
-        // no-op if null
-        FacetUtil.addFacet(disabledFacet);
-    }
-
-    @Override
-    public void process(ProcessContributeeMemberContext processMemberContext) {
-        DisabledFacet disabledFacet = 
createFromMetadataPropertiesIfPossible(processMemberContext);
-        // no-op if null
-        FacetUtil.addFacet(disabledFacet);
-    }
-
-    private static DisabledFacet createFromAnnotationIfPossible(final 
ProcessMethodContext processMethodContext) {
-        final Disabled annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Disabled.class);
-        return annotation != null 
-                ? new DisabledFacetAnnotation(annotation.when(), 
annotation.where(), annotation.reason(), processMethodContext.getFacetHolder()) 
-                : null;
-    }
-
-    private static DisabledFacet createFromMetadataPropertiesIfPossible(
-            final ProcessContextWithMetadataProperties<? extends FacetHolder> 
pcwmp) {
-        
-        final FacetHolder holder = pcwmp.getFacetHolder();
-        
-        final Properties properties = pcwmp.metadataProperties("disabled");
-        return properties != null ? new 
DisabledFacetFromProperties(properties, holder) : null;
-    }
-
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetOnMemberFromPropertiesFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetOnMemberFromPropertiesFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetOnMemberFromPropertiesFactory.java
new file mode 100644
index 0000000..efc2cb9
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetOnMemberFromPropertiesFactory.java
@@ -0,0 +1,56 @@
+/*
+ *  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.annotprop;
+
+import java.util.Properties;
+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.ContributeeMemberFacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+
+public class DisabledFacetOnMemberFromPropertiesFactory extends 
FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+
+    public DisabledFacetOnMemberFromPropertiesFactory() {
+        super(FeatureType.MEMBERS);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+        
FacetUtil.addFacet(createFromMetadataPropertiesIfPossible(processMethodContext));
+    }
+
+    @Override
+    public void process(ProcessContributeeMemberContext processMemberContext) {
+        DisabledFacet disabledFacet = 
createFromMetadataPropertiesIfPossible(processMemberContext);
+        FacetUtil.addFacet(disabledFacet);
+    }
+
+    private static DisabledFacet createFromMetadataPropertiesIfPossible(
+            final ProcessContextWithMetadataProperties<? extends FacetHolder> 
pcwmp) {
+        
+        final FacetHolder holder = pcwmp.getFacetHolder();
+        
+        final Properties properties = pcwmp.metadataProperties("disabled");
+        return properties != null ? new 
DisabledFacetFromProperties(properties, holder) : null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/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 c824929..b59fdb8 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
@@ -81,7 +81,7 @@ public class DisabledFacetStaticMethodFacetFactory extends 
MethodPrefixBasedFace
         }
 
         final FacetHolder facetedMethod = 
processMethodContext.getFacetHolder();
-        validator.addFacet(new DisabledFacetForStaticMethod(facetedMethod));
+        validator.addFacetFlagIfPresent(new 
DisabledFacetForStaticMethod(facetedMethod));
     }
 
     private static Boolean invokeProtectMethod(final Method protectMethod) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/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 c51c59a..ad64990 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
@@ -19,15 +19,25 @@
 
 package org.apache.isis.core.metamodel.facets.members.hidden.annotprop;
 
+import org.apache.isis.applib.annotation.Hidden;
 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.all.hide.HiddenFacet;
 import 
org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstractImpl;
 
 public class HiddenFacetOnMemberAnnotation extends HiddenFacetAbstractImpl {
 
-    public HiddenFacetOnMemberAnnotation(final When when, Where where, final 
FacetHolder holder) {
+    public static HiddenFacet create(final Hidden hiddenAnnotation, final 
FacetHolder facetHolder) {
+        if (hiddenAnnotation == null) {
+            return null;
+        }
+        return new HiddenFacetOnMemberAnnotation(hiddenAnnotation.when(), 
hiddenAnnotation.where(), facetHolder);
+    }
+
+    private HiddenFacetOnMemberAnnotation(final When when, Where where, final 
FacetHolder holder) {
         super(HiddenFacetOnMemberAnnotation.class, when, where, holder);
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
deleted file mode 100644
index 795fcc3..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
+++ /dev/null
@@ -1,90 +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.annotprop;
-
-import java.util.Properties;
-import org.apache.isis.applib.annotation.Hidden;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.facetapi.MetaModelValidatorRefiner;
-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.all.hide.HiddenFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class HiddenFacetOnMemberFactory extends FacetFactoryAbstract
-        implements ContributeeMemberFacetFactory, MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(Hidden.class);
-
-    public HiddenFacetOnMemberFactory() {
-        super(FeatureType.MEMBERS);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        HiddenFacet hiddenFacet = 
createFromMetadataPropertiesIfPossible(processMethodContext);
-        if(hiddenFacet == null) {
-            hiddenFacet = 
validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
-        }
-        // no-op if null
-        FacetUtil.addFacet(hiddenFacet);
-    }
-
-    @Override
-    public void process(final ProcessContributeeMemberContext 
processMemberContext) {
-        HiddenFacet hiddenFacet = 
createFromMetadataPropertiesIfPossible(processMemberContext);
-        // no-op if null
-        FacetUtil.addFacet(hiddenFacet);
-    }
-    
-    private static HiddenFacet createFromAnnotationIfPossible(final 
ProcessMethodContext processMethodContext) {
-        final Hidden hiddenAnnotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Hidden.class);
-        return hiddenAnnotation != null 
-                ? new HiddenFacetOnMemberAnnotation(hiddenAnnotation.when(), 
hiddenAnnotation.where(), processMethodContext.getFacetHolder()) 
-                : null;
-    }
-
-    private static HiddenFacet createFromMetadataPropertiesIfPossible(
-            final ProcessContextWithMetadataProperties<? extends FacetHolder> 
pcwmp) {
-        
-        final FacetHolder holder = pcwmp.getFacetHolder();
-        
-        final Properties properties = pcwmp.metadataProperties("hidden");
-        return properties != null ? new 
HiddenFacetOnMemberFromProperties(properties, holder) : null;
-    }
-
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromPropertiesFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromPropertiesFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromPropertiesFactory.java
new file mode 100644
index 0000000..74c514e
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFromPropertiesFactory.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.members.hidden.annotprop;
+
+import java.util.Properties;
+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.ContributeeMemberFacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+
+public class HiddenFacetOnMemberFromPropertiesFactory extends 
FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+
+    public HiddenFacetOnMemberFromPropertiesFactory() {
+        super(FeatureType.MEMBERS);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+        
FacetUtil.addFacet(createFromMetadataPropertiesIfPossible(processMethodContext));
+    }
+
+    @Override
+    public void process(final ProcessContributeeMemberContext 
processMemberContext) {
+        HiddenFacet hiddenFacet = 
createFromMetadataPropertiesIfPossible(processMemberContext);
+        // no-op if null
+        FacetUtil.addFacet(hiddenFacet);
+    }
+    
+    private static HiddenFacet createFromMetadataPropertiesIfPossible(
+            final ProcessContextWithMetadataProperties<? extends FacetHolder> 
pcwmp) {
+        
+        final FacetHolder holder = pcwmp.getFacetHolder();
+        
+        final Properties properties = pcwmp.metadataProperties("hidden");
+        return properties != null ? new 
HiddenFacetOnMemberFromProperties(properties, holder) : null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/staticmethod/HiddenFacetStaticMethodFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/staticmethod/HiddenFacetStaticMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/staticmethod/HiddenFacetStaticMethodFactory.java
index 3ee29c3..0450794 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/staticmethod/HiddenFacetStaticMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/staticmethod/HiddenFacetStaticMethodFactory.java
@@ -80,7 +80,7 @@ public class HiddenFacetStaticMethodFactory extends 
MethodPrefixBasedFacetFactor
         }
 
         final FacetHolder facetedMethod = 
processMethodContext.getFacetHolder();
-        validator.addFacet(new HiddenFacetOnStaticMethod(facetedMethod));
+        validator.addFacetFlagIfPresent(new 
HiddenFacetOnStaticMethod(facetedMethod));
     }
 
     private static Boolean invokeAlwaysHideMethod(final Method 
alwaysHideMethod) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
index 6d5a8de..e5a4fd3 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
@@ -82,7 +82,7 @@ public class NamedFacetStaticMethodFactory extends 
MethodPrefixBasedFacetFactory
         final String name = invokeNameMethod(nameMethod);
 
         final FacetHolder facetHolder = processMethodContext.getFacetHolder();
-        validator.addFacet(new NamedFacetStaticMethod(name, nameMethod, 
facetHolder));
+        validator.addFacetFlagIfPresent(new NamedFacetStaticMethod(name, 
nameMethod, facetHolder));
     }
 
     private static String invokeNameMethod(final Method nameMethod) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/actionorder/annotation/ActionOrderFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/actionorder/annotation/ActionOrderFacetAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/actionorder/annotation/ActionOrderFacetAnnotationFactory.java
index 3fe4642..8c266d1 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/actionorder/annotation/ActionOrderFacetAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/actionorder/annotation/ActionOrderFacetAnnotationFactory.java
@@ -42,7 +42,7 @@ public class ActionOrderFacetAnnotationFactory extends 
FacetFactoryAbstract impl
     @Override
     public void process(final ProcessClassContext processClassContext) {
         final ActionOrder annotation = 
Annotations.getAnnotation(processClassContext.getCls(), ActionOrder.class);
-        validator.addFacet(create(annotation, 
processClassContext.getFacetHolder()));
+        validator.addFacetFlagIfPresent(create(annotation, 
processClassContext.getFacetHolder()));
     }
 
     private ActionOrderFacet create(final ActionOrder annotation, final 
FacetHolder facetHolder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/annotation/CssClassFacetOnTypeAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/annotation/CssClassFacetOnTypeAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/annotation/CssClassFacetOnTypeAnnotationFactory.java
index d075550..db131f7 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/annotation/CssClassFacetOnTypeAnnotationFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/annotation/CssClassFacetOnTypeAnnotationFactory.java
@@ -23,7 +23,6 @@ import org.apache.isis.applib.annotation.CssClass;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationAware;
 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.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
@@ -43,7 +42,7 @@ public class CssClassFacetOnTypeAnnotationFactory extends 
FacetFactoryAbstract i
     @Override
     public void process(final ProcessClassContext processClassContext) {
         final CssClass annotation = 
Annotations.getAnnotation(processClassContext.getCls(), CssClass.class);
-        validator.addFacet(create(annotation, 
processClassContext.getFacetHolder()));
+        validator.addFacetFlagIfPresent(create(annotation, 
processClassContext.getFacetHolder()));
     }
 
     private static CssClassFacet create(final CssClass annotation, final 
FacetHolder holder) {

Reply via email to