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 2015/02/05 19:59:51 UTC

[1/2] isis git commit: ISIS-1027: more stuff...

Repository: isis
Updated Branches:
  refs/heads/ISIS-1027 128f23c20 -> b5f73ec3d


http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 29069c2..347de04 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -20,8 +20,11 @@ package org.apache.isis.core.metamodel.facets.object.domainobject;
 
 
 import org.apache.isis.applib.annotation.Audited;
+import org.apache.isis.applib.annotation.AutoComplete;
+import org.apache.isis.applib.annotation.Bounded;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Immutable;
+import org.apache.isis.applib.annotation.ObjectType;
 import org.apache.isis.applib.annotation.PublishedObject;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -34,14 +37,16 @@ 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.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.object.audit.AuditableFacet;
-import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
 import org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetForAuditedAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetForDomainObjectAnnotation;
+import org.apache.isis.core.metamodel.facets.object.domainobject.autocomplete.AutoCompleteFacetForAutoCompleteAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.autocomplete.AutoCompleteFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.choices.ChoicesFacetForDomainObjectAnnotation;
+import org.apache.isis.core.metamodel.facets.object.domainobject.choices.ChoicesFacetFromBoundedAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.editing.ImmutableFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.publishing.PublishedObjectFacetForDomainObjectAnnotation;
@@ -49,15 +54,25 @@ import org.apache.isis.core.metamodel.facets.object.domainobject.publishing.Publ
 import org.apache.isis.core.metamodel.facets.object.domainobject.recreatable.RecreatableObjectFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetForImmutableAnnotation;
-import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetFromObjectTypeAnnotation;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 
 
-public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract implements IsisConfigurationAware, AdapterManagerAware, ServicesInjectorAware, SpecificationLoaderAware, QuerySubmitterAware {
+public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract implements IsisConfigurationAware, AdapterManagerAware, ServicesInjectorAware, SpecificationLoaderAware, QuerySubmitterAware, MetaModelValidatorRefiner {
+
+    private final MetaModelValidatorForDeprecatedAnnotation auditedValidator = new MetaModelValidatorForDeprecatedAnnotation(Audited.class);
+    private final MetaModelValidatorForDeprecatedAnnotation publishedObjectValidator = new MetaModelValidatorForDeprecatedAnnotation(PublishedObject.class);
+    private final MetaModelValidatorForDeprecatedAnnotation autoCompleteValidator = new MetaModelValidatorForDeprecatedAnnotation(AutoComplete.class);
+    private final MetaModelValidatorForDeprecatedAnnotation boundedValidator = new MetaModelValidatorForDeprecatedAnnotation(Bounded.class);
+    private final MetaModelValidatorForDeprecatedAnnotation immutableValidator = new MetaModelValidatorForDeprecatedAnnotation(Immutable.class);
+    private final MetaModelValidatorForDeprecatedAnnotation objectTypeValidator = new MetaModelValidatorForDeprecatedAnnotation(ObjectType.class);
+
 
     private IsisConfiguration configuration;
     private AdapterManager adapterManager;
@@ -100,7 +115,8 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
 
         // check for the deprecated annotation first
         final Audited annotation = Annotations.getAnnotation(cls, Audited.class);
-        auditableFacet = AuditableFacetForAuditedAnnotation.create(annotation, holder);
+        auditableFacet = auditedValidator.flagIfPresent(
+                            AuditableFacetForAuditedAnnotation.create(annotation, holder));
 
         // else check for @DomainObject(auditing=....)
         if(auditableFacet == null) {
@@ -130,7 +146,8 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
 
         // check for the deprecated @PublishedObject annotation first
         final PublishedObject publishedObject = Annotations.getAnnotation(processClassContext.getCls(), PublishedObject.class);
-        publishedObjectFacet = PublishedObjectFacetForPublishedObjectAnnotation.create(publishedObject, facetHolder);
+        publishedObjectFacet = publishedObjectValidator.flagIfPresent(
+                                    PublishedObjectFacetForPublishedObjectAnnotation.create(publishedObject, facetHolder));
 
         // else check from @DomainObject(publishing=...)
         if(publishedObjectFacet == null) {
@@ -147,9 +164,18 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        final AutoCompleteFacet facet = AutoCompleteFacetForDomainObjectAnnotation.create(
-                domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder);
+        // check for the deprecated @AutoComplete annotation first
+        final AutoComplete annotation = Annotations.getAnnotation(processClassContext.getCls(), AutoComplete.class);
+        Facet facet = autoCompleteValidator.flagIfPresent(
+                AutoCompleteFacetForAutoCompleteAnnotation.create(annotation, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder));
+
+        // else check from @DomainObject(auditing=...)
+        if(facet == null) {
+            facet = AutoCompleteFacetForDomainObjectAnnotation.create(
+                    domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder);
+        }
 
+        // then add
         FacetUtil.addFacet(facet);
     }
 
@@ -158,8 +184,17 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        final Facet facet = ChoicesFacetForDomainObjectAnnotation.create(domainObject, querySubmitter, facetHolder);
+        // check for the deprecated @Bounded annotation first
+        final Bounded annotation = Annotations.getAnnotation(processClassContext.getCls(), Bounded.class);
+        Facet facet = boundedValidator.flagIfPresent(
+            ChoicesFacetFromBoundedAnnotation.create(annotation, querySubmitter, processClassContext.getFacetHolder()));
 
+        // else check from @DomainObject(bounded=...)
+        if(facet == null) {
+            facet = ChoicesFacetForDomainObjectAnnotation.create(domainObject, querySubmitter, facetHolder);
+        }
+
+        // then add
         FacetUtil.addFacet(facet);
     }
 
@@ -170,7 +205,8 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
 
         // check for the deprecated annotation first
         final Immutable annotation = Annotations.getAnnotation(processClassContext.getCls(), Immutable.class);
-        ImmutableFacet facet = ImmutableFacetForImmutableAnnotation.create(annotation, processClassContext.getFacetHolder());
+        ImmutableFacet facet = immutableValidator.flagIfPresent(
+                ImmutableFacetForImmutableAnnotation.create(annotation, processClassContext.getFacetHolder()));
 
         // else check from @DomainObject(editing=...)
         if(facet == null) {
@@ -186,8 +222,17 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        final ObjectSpecIdFacet facet = ObjectSpecIdFacetForDomainObjectAnnotation.create(domainObject, facetHolder);
+        // check for the deprecated annotation first
+        final ObjectType annotation = Annotations.getAnnotation(processClassContext.getCls(), ObjectType.class);
+        Facet facet = objectTypeValidator.flagIfPresent(
+                ObjectSpecIdFacetFromObjectTypeAnnotation.create(annotation, processClassContext.getFacetHolder()));
+
+        // else check from @DomainObject(objectType=...)
+        if(facet == null) {
+            facet = ObjectSpecIdFacetForDomainObjectAnnotation.create(domainObject, facetHolder);
+        }
 
+        // then add
         FacetUtil.addFacet(facet);
     }
 
@@ -203,9 +248,30 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
     }
 
 
+    // //////////////////////////////////////
+
+    @Override
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        metaModelValidator.add(publishedObjectValidator);
+        metaModelValidator.add(auditedValidator);
+        metaModelValidator.add(autoCompleteValidator);
+        metaModelValidator.add(boundedValidator);
+        metaModelValidator.add(immutableValidator);
+        metaModelValidator.add(objectTypeValidator);
+    }
+
+    // //////////////////////////////////////
+
     @Override
     public void setConfiguration(IsisConfiguration configuration) {
         this.configuration = configuration;
+
+        publishedObjectValidator.setConfiguration(configuration);
+        auditedValidator.setConfiguration(configuration);
+        autoCompleteValidator.setConfiguration(configuration);
+        boundedValidator.setConfiguration(configuration);
+        immutableValidator.setConfiguration(configuration);
+        objectTypeValidator.setConfiguration(configuration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForAutoCompleteAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForAutoCompleteAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForAutoCompleteAnnotation.java
new file mode 100644
index 0000000..80d832a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/autocomplete/AutoCompleteFacetForAutoCompleteAnnotation.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.object.domainobject.autocomplete;
+
+import org.apache.isis.applib.annotation.AutoComplete;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
+import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class AutoCompleteFacetForAutoCompleteAnnotation extends AutoCompleteFacetAbstract {
+
+    public static AutoCompleteFacet create(
+            final AutoComplete annotation,
+            final SpecificationLoader specificationLoader,
+            final AdapterManager adapterManager,
+            final ServicesInjector servicesInjector,
+            final FacetHolder holder) {
+
+        if(annotation == null) {
+            return null;
+        }
+
+        final Class<?> repositoryClass = annotation.repository();
+        final String actionName = annotation.action();
+
+        return new AutoCompleteFacetForAutoCompleteAnnotation(holder, repositoryClass, actionName, specificationLoader, adapterManager, servicesInjector);
+    }
+
+    private AutoCompleteFacetForAutoCompleteAnnotation(final FacetHolder holder, final Class<?> repositoryClass, final String actionName, final SpecificationLoader specificationLoader, final AdapterManager adapterManager, final ServicesInjector servicesInjector) {
+        super(holder, repositoryClass, actionName, specificationLoader, adapterManager, servicesInjector);
+    }
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
new file mode 100644
index 0000000..e6f89c5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/choices/ChoicesFacetFromBoundedAnnotation.java
@@ -0,0 +1,44 @@
+/*
+ *  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.object.domainobject.choices;
+
+import org.apache.isis.applib.annotation.Bounded;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
+import org.apache.isis.core.metamodel.facets.propparam.choices.ChoicesFacet;
+
+public class ChoicesFacetFromBoundedAnnotation extends ChoicesFacetFromBoundedAbstract {
+
+    private ChoicesFacetFromBoundedAnnotation(final FacetHolder holder, QuerySubmitter querySubmitter) {
+        super(holder, querySubmitter);
+    }
+
+    public static ChoicesFacet create(final Bounded annotation, final QuerySubmitter querySubmitter, final FacetHolder holder) {
+        if (annotation == null) {
+            return null;
+        }
+
+        return new ChoicesFacetFromBoundedAnnotation(holder, querySubmitter);
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetFromObjectTypeAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetFromObjectTypeAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetFromObjectTypeAnnotation.java
new file mode 100644
index 0000000..5f5281b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetFromObjectTypeAnnotation.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.object.domainobject.objectspecid;
+
+import org.apache.isis.applib.annotation.ObjectType;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacetAbstract;
+
+/**
+ * @deprecated
+ */
+@Deprecated
+public class ObjectSpecIdFacetFromObjectTypeAnnotation extends ObjectSpecIdFacetAbstract {
+
+    public static ObjectSpecIdFacet create(final ObjectType annotation, final FacetHolder holder) {
+        return annotation != null ? new ObjectSpecIdFacetFromObjectTypeAnnotation(annotation.value(), holder) : null;
+    }
+
+    private ObjectSpecIdFacetFromObjectTypeAnnotation(final String value,
+                                                      final FacetHolder holder) {
+        super(value, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetAnnotation.java
deleted file mode 100644
index 518bf75..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetAnnotation.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.object.objectspecid.annotation;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacetAbstract;
-
-public class ObjectSpecIdFacetAnnotation extends ObjectSpecIdFacetAbstract {
-
-    public ObjectSpecIdFacetAnnotation(final String value,
-                                       final FacetHolder holder) {
-        super(value, holder);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetForObjectTypeAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetForObjectTypeAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetForObjectTypeAnnotationFactory.java
deleted file mode 100644
index b97a4cc..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/annotation/ObjectSpecIdFacetForObjectTypeAnnotationFactory.java
+++ /dev/null
@@ -1,64 +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.object.objectspecid.annotation;
-
-import org.apache.isis.applib.annotation.ObjectType;
-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.object.objectspecid.ObjectSpecIdFacet;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class ObjectSpecIdFacetForObjectTypeAnnotationFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner, IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new MetaModelValidatorForDeprecatedAnnotation(ObjectType.class);
-
-
-    public ObjectSpecIdFacetForObjectTypeAnnotationFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final ObjectType annotation = Annotations.getAnnotation(processClassContext.getCls(), ObjectType.class);
-        validator.addFacet(create(annotation, processClassContext.getFacetHolder()));
-    }
-
-    private ObjectSpecIdFacet create(final ObjectType annotation, final FacetHolder holder) {
-        return annotation != null ? new ObjectSpecIdFacetAnnotation(annotation.value(), 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/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/multiline/annotation/MultiLineFacetOnParameterAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/multiline/annotation/MultiLineFacetOnParameterAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/multiline/annotation/MultiLineFacetOnParameterAnnotationFactory.java
index 11e4c18..7ba304b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/multiline/annotation/MultiLineFacetOnParameterAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/multiline/annotation/MultiLineFacetOnParameterAnnotationFactory.java
@@ -64,7 +64,7 @@ public class MultiLineFacetOnParameterAnnotationFactory extends FacetFactoryAbst
     private void process(ProcessParameterContext processParameterContext, MultiLine parameterAnnotation) {
         final MultiLine annotation = (MultiLine) parameterAnnotation;
 
-        final MultiLineFacet facet = validator.invalidIfPresent(create(annotation, processParameterContext.getFacetHolder()));
+        final MultiLineFacet facet = validator.flagIfPresent(create(annotation, processParameterContext.getFacetHolder()));
 
         // no-op if null
         FacetUtil.addFacet(facet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/maskannot/MaskFacetOnParameterAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/maskannot/MaskFacetOnParameterAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/maskannot/MaskFacetOnParameterAnnotationFactory.java
index fd2350a..84182f6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/maskannot/MaskFacetOnParameterAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/maskannot/MaskFacetOnParameterAnnotationFactory.java
@@ -62,7 +62,7 @@ public class MaskFacetOnParameterAnnotationFactory extends FacetFactoryAbstract
     }
 
     private boolean addMaskFacetAndCorrespondingTitleFacet(final FacetHolder holder, final Mask annotation, final Class<?> cls) {
-        final MaskFacet maskFacet = validator.invalidIfPresent(createMaskFacet(annotation, holder));
+        final MaskFacet maskFacet = validator.flagIfPresent(createMaskFacet(annotation, holder));
         if (maskFacet == null) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
index 1dd69e7..4dd4c22 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
@@ -65,7 +65,7 @@ public class RegExFacetFacetOnParameterAnnotationFactory extends FacetFactoryAbs
     }
 
     private void addRegexFacetAndCorrespondingTitleFacet(final FacetHolder holder, final RegEx annotation) {
-        final RegExFacet regexFacet = validator.invalidIfPresent(createRegexFacet(annotation, holder));
+        final RegExFacet regexFacet = validator.flagIfPresent(createRegexFacet(annotation, holder));
         if (regexFacet == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
index 0d28cbc..4f5c756 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
@@ -47,7 +47,7 @@ public class MultiLineFacetOnPropertyFactory extends FacetFactoryAbstract implem
     public void process(final ProcessMethodContext processMethodContext) {
         MultiLineFacet facet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(facet == null) {
-            facet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            facet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         
         // no-op if null

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index 141bee4..68962d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -25,10 +25,13 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyInteraction;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationAware;
 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.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;
@@ -68,8 +71,13 @@ import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacet;
 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;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 
-public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, ContributeeMemberFacetFactory {
+public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, ContributeeMemberFacetFactory, MetaModelValidatorRefiner, IsisConfigurationAware {
+
+    private final MetaModelValidatorForDeprecatedAnnotation postsPropertyChangedEventValidator = new MetaModelValidatorForDeprecatedAnnotation(PostsPropertyChangedEvent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation propertyInteractionValidator = new MetaModelValidatorForDeprecatedAnnotation(PropertyInteraction.class);
 
     private ServicesInjector servicesInjector;
 
@@ -116,14 +124,16 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
         // event on a thread-local, such that it is then picked up later by the setter/clear facets
         if(postsPropertyChangedEvent != null) {
             propertyDomainEventType = postsPropertyChangedEvent.value();
-            propertyDomainEventFacet = new PropertyDomainEventFacetForPostsPropertyChangedEventAnnotation(
-                    propertyDomainEventType, getterFacet, servicesInjector, getSpecificationLoader(), holder);
+            propertyDomainEventFacet = postsPropertyChangedEventValidator.flagIfPresent(
+                    new PropertyDomainEventFacetForPostsPropertyChangedEventAnnotation(
+                        propertyDomainEventType, getterFacet, servicesInjector, getSpecificationLoader(), holder));
         } else
         // search for @PropertyInteraction(value=...)
         if(propertyInteraction != null) {
             propertyDomainEventType = propertyInteraction.value();
-            propertyDomainEventFacet = new PropertyDomainEventFacetForPropertyInteractionAnnotation(
-                    propertyDomainEventType, getterFacet, servicesInjector, getSpecificationLoader(), holder);
+            propertyDomainEventFacet = propertyInteractionValidator.flagIfPresent(
+                    new PropertyDomainEventFacetForPropertyInteractionAnnotation(
+                        propertyDomainEventType, getterFacet, servicesInjector, getSpecificationLoader(), holder));
         } else
         // search for @Property(domainEvent=...)
         if(property != null && property.domainEvent() != null) {
@@ -280,7 +290,7 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
 
     @Override
-    public void process(ContributeeMemberFacetFactory.ProcessContributeeMemberContext processMemberContext) {
+    public void process(final ContributeeMemberFacetFactory.ProcessContributeeMemberContext processMemberContext) {
 
         final ObjectMember objectMember = processMemberContext.getFacetHolder();
 
@@ -301,6 +311,23 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
     }
 
+    // //////////////////////////////////////
+
+    @Override
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        metaModelValidator.add(postsPropertyChangedEventValidator);
+        metaModelValidator.add(propertyInteractionValidator);
+    }
+
+    // //////////////////////////////////////
+
+
+    @Override
+    public void setConfiguration(final IsisConfiguration configuration) {
+        postsPropertyChangedEventValidator.setConfiguration(configuration);
+        propertyInteractionValidator.setConfiguration(configuration);
+    }
+
 
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/typicallen/annotation/TypicalLengthOnPropertyFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/typicallen/annotation/TypicalLengthOnPropertyFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/typicallen/annotation/TypicalLengthOnPropertyFacetFactory.java
index f52386f..e4df95d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/typicallen/annotation/TypicalLengthOnPropertyFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/typicallen/annotation/TypicalLengthOnPropertyFacetFactory.java
@@ -46,7 +46,7 @@ public class TypicalLengthOnPropertyFacetFactory extends FacetFactoryAbstract im
     public void process(final ProcessMethodContext processMethodContext) {
         TypicalLengthFacet facet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(facet == null) {
-            facet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            facet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
 
         // no-op if null

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maskannot/MaskFacetOnPropertyAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maskannot/MaskFacetOnPropertyAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maskannot/MaskFacetOnPropertyAnnotationFactory.java
index 2205beb..84f220e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maskannot/MaskFacetOnPropertyAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maskannot/MaskFacetOnPropertyAnnotationFactory.java
@@ -85,7 +85,7 @@ public class MaskFacetOnPropertyAnnotationFactory extends FacetFactoryAbstract i
     }
 
     private boolean addMaskFacetAndCorrespondingTitleFacet(final FacetHolder holder, final Mask annotation, final Class<?> cls) {
-        final MaskFacet maskFacet = validator.invalidIfPresent(createMaskFacet(annotation, holder));
+        final MaskFacet maskFacet = validator.flagIfPresent(createMaskFacet(annotation, holder));
         if (maskFacet == null) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/regexannot/RegExFacetFacetOnPropertyAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/regexannot/RegExFacetFacetOnPropertyAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/regexannot/RegExFacetFacetOnPropertyAnnotationFactory.java
index 6216212..860f1ca 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/regexannot/RegExFacetFacetOnPropertyAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/regexannot/RegExFacetFacetOnPropertyAnnotationFactory.java
@@ -57,7 +57,7 @@ public class RegExFacetFacetOnPropertyAnnotationFactory extends FacetFactoryAbst
     }
 
     private void addRegexFacetAndCorrespondingTitleFacet(final FacetHolder holder, final RegEx annotation) {
-        final RegExFacet regexFacet = validator.invalidIfPresent(RegExFacetOnPropertyAnnotation.createRegexFacet(annotation, holder));
+        final RegExFacet regexFacet = validator.flagIfPresent(RegExFacetOnPropertyAnnotation.createRegexFacet(annotation, holder));
         FacetUtil.addFacet(regexFacet);
 
         final TitleFacet titleFacet = createTitleFacet(regexFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index f864ac6..18ae963 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.PersistFailedException;
 import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.RepositoryException;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.filter.Filters;
@@ -59,7 +60,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
 
-@DomainService
+@DomainService(nature = NatureOfService.DOMAIN)
 public class  DomainObjectContainerDefault implements DomainObjectContainer, QuerySubmitterAware, ObjectDirtierAware, DomainObjectServicesAware, ObjectPersistorAware, SpecificationLoaderAware, AuthenticationSessionProviderAware, AdapterManagerAware, LocalizationProviderAware, ExceptionRecognizer {
 
     //region > titleOf

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
index 4168cf9..879ae76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
@@ -32,7 +32,7 @@ public abstract class MetaModelValidatorForDeprecatedAbstract extends MetaModelV
 
     private IsisConfiguration configuration;
 
-    public <T extends Facet> T invalidIfPresent(final T facet) {
+    public <T extends Facet> T flagIfPresent(final T facet) {
         if(facet != null) {
             failures.add(failureMessageFor(facet));
         }
@@ -42,7 +42,7 @@ public abstract class MetaModelValidatorForDeprecatedAbstract extends MetaModelV
     protected abstract String failureMessageFor(final Facet facet);
 
     public void addFacet(final Facet facet) {
-        FacetUtil.addFacet(invalidIfPresent(facet));
+        FacetUtil.addFacet(flagIfPresent(facet));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAnnotation.java
index cb782ca..297d412 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAnnotation.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.core.metamodel.specloader.validator;
 
+import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 
@@ -31,7 +32,11 @@ public class MetaModelValidatorForDeprecatedAnnotation extends MetaModelValidato
 
     @Override
     protected String failureMessageFor(final Facet facet) {
-        return String.format("@%s is deprecated: %s", annotationType.getSimpleName(), ((IdentifiedHolder) facet.getFacetHolder()).getIdentifier().toFullIdentityString());
+        final String simpleName = annotationType.getSimpleName();
+        final IdentifiedHolder facetHolder = (IdentifiedHolder) facet.getFacetHolder();
+        final Identifier identifier = facetHolder.getIdentifier();
+        final String s = identifier.toFullIdentityString();
+        return String.format("@%s is deprecated: %s", simpleName, s);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 4cbe165..867488d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -67,7 +67,6 @@ import org.apache.isis.core.metamodel.facets.members.render.annotprop.RenderFace
 import org.apache.isis.core.metamodel.facets.object.ViewModelSemanticCheckingFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.actionorder.annotation.ActionOrderFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.audit.markerifc.AuditableFacetMarkerInterfaceFactory;
-import org.apache.isis.core.metamodel.facets.object.autocomplete.annotation.AutoCompleteFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetViaBookmarkableAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.callbacks.create.CreatedCallbackFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.callbacks.load.LoadCallbackFacetFactory;
@@ -75,7 +74,6 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.persist.PersistCal
 import org.apache.isis.core.metamodel.facets.object.callbacks.persist.PersistCallbackViaSaveMethodFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.callbacks.remove.RemoveCallbackFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.callbacks.update.UpdateCallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.choices.boundedannot.ChoicesFacetFromBoundedAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.choices.boundedmarkerifc.ChoicesFacetFromBoundedMarkerInterfaceFactory;
 import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacetUsingValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.object.cssclass.annotation.CssClassFacetOnTypeAnnotationFactory;
@@ -117,7 +115,6 @@ import org.apache.isis.core.metamodel.facets.object.multiline.annotation.MultiLi
 import org.apache.isis.core.metamodel.facets.object.named.annotation.NamedFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.notpersistable.notpersistableannot.NotPersistableFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.notpersistable.notpersistablemarkerifc.NotPersistableFacetMarkerInterfaceFactory;
-import org.apache.isis.core.metamodel.facets.object.objectspecid.annotation.ObjectSpecIdFacetForObjectTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassNameFactory;
 import org.apache.isis.core.metamodel.facets.object.objectvalidprops.impl.ObjectValidPropertiesFacetImplFactory;
 import org.apache.isis.core.metamodel.facets.object.paged.annotation.PagedFacetOnTypeAnnotationFactory;
@@ -306,7 +303,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(RenderFacetOrResolveFactory.class);
 
         // objects
-        addFactory(ObjectSpecIdFacetForObjectTypeAnnotationFactory.class);
         addFactory(IconFacetMethodFactory.class);
         addFactory(CssClassFacetMethodFactory.class);
 
@@ -333,7 +329,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(ParentedFacetSinceAggregatedAnnotationFactory.class);
         addFactory(BookmarkPolicyFacetViaBookmarkableAnnotationFactory.class);
         addFactory(HomePageFacetAnnotationFactory.class);
-        addFactory(ChoicesFacetFromBoundedAnnotationFactory.class);
         addFactory(ChoicesFacetFromBoundedMarkerInterfaceFactory.class);
         addFactory(DebugFacetAnnotationFactory.class);
 
@@ -438,7 +433,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(PagedFacetOnCollectionFactory.class);
         addFactory(PagedFacetOnActionFactory.class);
 
-        addFactory(AutoCompleteFacetAnnotationFactory.class);
 
         // must come after any facets that install titles
         addFactory(MaskFacetOnTypeAnnotationFactory.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index f3c550a..5291b48 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -72,7 +72,7 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
     public void setUpFacetedMethodAndParameter() throws Exception {
         facetHolder = new FacetHolderImpl();
         facetedMethod = FacetedMethod.createForProperty(AbstractFacetFactoryTest.Customer.class, "firstName");
-        facetedMethodParameter = new FacetedMethodParameter(String.class);
+        facetedMethodParameter = new FacetedMethodParameter(facetedMethod.getOwningType(), facetedMethod.getMethod(), String.class);
     }
     
     @After

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
index 5e901c0..cfb9bed 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
@@ -19,11 +19,10 @@
 
 package org.apache.isis.core.metamodel.facets;
 
-import java.lang.reflect.Method;
-import java.util.List;
-
 import junit.framework.TestCase;
 
+import java.lang.reflect.Method;
+import java.util.List;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -56,7 +55,7 @@ public abstract class AbstractFacetFactoryTest extends TestCase {
         programmableReflector = new ProgrammableReflector();
         facetHolder = new FacetHolderImpl();
         facetedMethod = FacetedMethod.createForProperty(Customer.class, "firstName");
-        facetedMethodParameter = new FacetedMethodParameter(String.class);
+        facetedMethodParameter = new FacetedMethodParameter(facetedMethod.getOwningType(), facetedMethod.getMethod(), String.class);
         methodRemover = new ProgrammableMethodRemover();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetFromBoundedAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetFromBoundedAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetFromBoundedAnnotationFactoryTest.java
deleted file mode 100644
index fade913..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetFromBoundedAnnotationFactoryTest.java
+++ /dev/null
@@ -1,61 +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.object.bounded;
-
-import org.apache.isis.applib.annotation.Bounded;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.choices.boundedannot.ChoicesFacetFromBoundedAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
-import org.apache.isis.core.metamodel.facets.propparam.choices.ChoicesFacet;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-
-public class ChoicesFacetFromBoundedAnnotationFactoryTest extends AbstractFacetFactoryTest {
-
-    private ChoicesFacetFromBoundedAnnotationFactory facetFactory;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        facetFactory = new ChoicesFacetFromBoundedAnnotationFactory();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        facetFactory = null;
-        super.tearDown();
-    }
-
-    public void testBoundedAnnotationPickedUpOnClass() {
-        @Bounded
-        class Customer {
-        }
-
-        facetFactory.process(new ProcessClassContext(Customer.class, null, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(ChoicesFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof ChoicesFacetFromBoundedAbstract);
-
-        assertNoMethodsRemoved();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java
new file mode 100644
index 0000000..f59d202
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.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.object.domainobject;
+
+import org.apache.isis.applib.annotation.Bounded;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
+import org.apache.isis.core.metamodel.facets.propparam.choices.ChoicesFacet;
+
+public class ChoicesFacetFromBoundedAnnotationFactoryTest extends AbstractFacetFactoryTest {
+
+    private DomainObjectAnnotationFacetFactory facetFactory;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        facetFactory = new DomainObjectAnnotationFacetFactory();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        facetFactory = null;
+        super.tearDown();
+    }
+
+    public void testBoundedAnnotationPickedUpOnClass() {
+        @Bounded
+        class Customer {
+        }
+
+        facetFactory.processBounded(new ProcessClassContext(Customer.class, null, methodRemover, facetedMethod));
+
+        final Facet facet = facetedMethod.getFacet(ChoicesFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof ChoicesFacetFromBoundedAbstract);
+
+        assertNoMethodsRemoved();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java
new file mode 100644
index 0000000..8bf3101
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java
@@ -0,0 +1,64 @@
+/*
+ *  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.object.domainobject;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.apache.isis.applib.annotation.ObjectType;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetFromObjectTypeAnnotation;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+public class ObjectTypeAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
+
+    private DomainObjectAnnotationFacetFactory facetFactory;
+
+    @Before
+    public void setUp() throws Exception {
+        facetFactory = new DomainObjectAnnotationFacetFactory();
+    }
+
+    @Test
+    public void objectTypeAnnotationPickedUpOnClass() {
+
+        @ObjectType("CUS")
+        class Customer {
+        }
+        
+        expectNoMethodsRemoved();
+        
+        facetFactory.processObjectType(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+        final ObjectSpecIdFacet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
+        
+        assertThat(facet, is(not(nullValue())));
+        assertThat(facet instanceof ObjectSpecIdFacetFromObjectTypeAnnotation, is(true));
+        assertThat(facet.value(), is(ObjectSpecId.of("CUS")));
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
deleted file mode 100644
index 0ddb2df..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
+++ /dev/null
@@ -1,65 +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.object.objectspecid;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import org.apache.isis.applib.annotation.ObjectType;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.objectspecid.annotation.ObjectSpecIdFacetForObjectTypeAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.object.objectspecid.annotation.ObjectSpecIdFacetAnnotation;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
-
-public class ObjectTypeAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
-
-    private ObjectSpecIdFacetForObjectTypeAnnotationFactory facetFactory;
-
-    @Before
-    public void setUp() throws Exception {
-        facetFactory = new ObjectSpecIdFacetForObjectTypeAnnotationFactory();
-    }
-
-    @Test
-    public void objectTypeAnnotationPickedUpOnClass() {
-
-        @ObjectType("CUS")
-        class Customer {
-        }
-        
-        expectNoMethodsRemoved();
-        
-        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
-
-        final ObjectSpecIdFacet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
-        
-        assertThat(facet, is(not(nullValue())));
-        assertThat(facet instanceof ObjectSpecIdFacetAnnotation, is(true));
-        assertThat(facet.value(), is(ObjectSpecId.of("CUS")));
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
index 9570515..dc942ad 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
@@ -22,6 +22,7 @@ import com.google.common.eventbus.SubscriberExceptionContext;
 import com.google.common.eventbus.SubscriberExceptionHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.core.commons.exceptions.IsisApplicationException;
@@ -53,6 +54,7 @@ public class EventBusServiceDefault extends EventBusService {
      *     registrations are in effect ignored.
      * </p>
      */
+    @Programmatic
     @Override
     public void register(final Object domainService) {
         if(domainService instanceof RequestScopedService) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
index a7f4c64..48c3a2e 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/eventbus/EventBusServiceJdo.java
@@ -17,6 +17,8 @@
 package org.apache.isis.objectstore.jdo.datanucleus.service.eventbus;
 
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
 import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis;
 import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
@@ -35,7 +37,7 @@ import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis.Hint;
  * with {@link org.apache.isis.applib.annotation.DomainService}.  Because it is implemented in the core, this means
  * that it is automatically registered and available for use; no further configuration is required.
  */
-@DomainService
+@DomainService(nature = NatureOfService.DOMAIN)
 public class EventBusServiceJdo extends EventBusServiceDefault {
 
     /**
@@ -45,6 +47,7 @@ public class EventBusServiceJdo extends EventBusServiceDefault {
      * The {@link JDOStateManagerForIsis} sets a {@link JDOStateManagerForIsis#hint threadlocal}
      * if it has been called.
      */
+    @Programmatic
     @Override
     protected boolean skip(Object event) {
         return JDOStateManagerForIsis.hint.get() != Hint.NONE;

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
index c2bec85..c748e15 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
@@ -34,7 +34,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -54,8 +54,7 @@ import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore;
  * with {@link org.apache.isis.applib.annotation.DomainService}.  Because it is implemented in the core, this means
  * that it is automatically registered and available for use; no further configuration is required.
  */
-@DomainService
-@Hidden
+@DomainService(nature = NatureOfService.DOMAIN)
 public class IsisJdoSupportImpl implements IsisJdoSupport {
     
     @Programmatic
@@ -206,9 +205,4 @@ public class IsisJdoSupportImpl implements IsisJdoSupport {
     public PersistenceManager getJdoPersistenceManager() {
         return getObjectStore().getPersistenceManager();
     }
-
-
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
index 041083e..f265aae 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.wrapper;
 
 
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
 
 /**
  * This service provides the ability to &quot;wrap&quot; of a domain object such that it can
@@ -33,7 +34,7 @@ import org.apache.isis.applib.annotation.DomainService;
  * <tt>o.a.i.core:isis-core-wrapper</tt> on the classpath, the service is automatically registered; no further
  * configuration is required.
  */
-@DomainService
+@DomainService(nature = NatureOfService.DOMAIN)
 public class WrapperFactoryDefault extends WrapperFactoryJavassist {
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
index 3698130..85da8c8 100644
--- a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -33,10 +33,10 @@ import org.apache.isis.applib.AbstractFactoryAndRepository;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Contributed;
-import org.apache.isis.applib.annotation.Disabled;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Optional;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
@@ -56,7 +56,10 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
             describedAs = "The relative priority of this item compared to others not yet complete (using 'due by' date)",
             contributed = Contributed.AS_ASSOCIATION
     )
-    @Disabled(reason="Relative priority, derived from due date")
+//    @Property(
+//            editingDisabledReason = "Relative priority, derived from due date"
+//    )
+//    @Disabled(reason="Relative priority, derived from due date")
     public Integer relativePriority(final ToDoItem toDoItem) {
         return queryResultsCache.execute(new Callable<Integer>(){
             @Override
@@ -202,7 +205,7 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     public Categorized updateCategory(
             final Categorized item,
             final @ParameterLayout(named="Category") Category category,
-            final @Optional @ParameterLayout(named="Subcategory") Subcategory subcategory) {
+            final @Parameter(optional = Optionality.TRUE) @ParameterLayout(named="Subcategory") Subcategory subcategory) {
         item.setCategory(category);
         item.setSubcategory(subcategory);
         return item;

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 1d8cd9f..ec5195a 100644
--- a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -94,7 +94,7 @@ isis.authorization=shiro
 #
 # Whether deprecated annotations or method prefixes should raise metamodel validation errors.  Default is false.
 #
-#isis.reflector.validator.allowDeprecated=false
+isis.reflector.validator.allowDeprecated=false
 
 
 


[2/2] isis git commit: ISIS-1027: more stuff...

Posted by da...@apache.org.
ISIS-1027: more stuff...

... undeprecating Isis' own services (eg EventBusServiceJdo)
... adding in validators for XxxAnnotationFacetFactory
... moving Bounded and ObjectType annotation processing into DomainObjectAnnotationFacetFactory


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

Branch: refs/heads/ISIS-1027
Commit: b5f73ec3dcae8015d11004915c15dd81c2945238
Parents: 128f23c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Feb 5 18:59:38 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Feb 5 18:59:38 2015 +0000

----------------------------------------------------------------------
 .../applib/WicketDeveloperUtilitiesService.java | 15 ++--
 .../isis/applib/AbstractContainedObject.java    | 12 +--
 .../org/apache/isis/applib/AbstractService.java |  4 +-
 .../applib/fixturescripts/FixtureResult.java    |  2 +-
 .../applib/fixturescripts/FixtureScript.java    | 13 +--
 .../applib/fixturescripts/FixtureScripts.java   |  6 +-
 .../BookmarkHolderActionContributions.java      | 10 ++-
 .../services/eventbus/EventBusService.java      |  2 -
 .../exceprecog/ExceptionRecognizerAbstract.java |  9 +-
 .../ExceptionRecognizerComposite.java           |  5 --
 .../exceprecog/ExceptionRecognizerForType.java  |  2 -
 .../AbstractHomePageDashboardService.java       | 12 +--
 .../applib/services/wrapper/WrapperFactory.java |  1 -
 ...ionRecognizerCompositeForJdoObjectStore.java |  5 +-
 .../core/metamodel/facets/FacetedMethod.java    |  6 +-
 .../facets/FacetedMethodParameter.java          | 16 +++-
 .../action/ActionAnnotationFacetFactory.java    | 72 ++++++++++++----
 .../action/bulk/BulkFacetForBulkAnnotation.java |  4 +
 ...cetForPostsActionInvokedEventAnnotation.java |  4 +
 ...nSemanticsFacetFromIdempotentAnnotation.java |  4 +
 ...onSemanticsFacetFromQueryOnlyAnnotation.java |  4 +
 .../annotation/PagedFacetOnActionFactory.java   |  2 +-
 .../CollectionAnnotationFacetFactory.java       | 56 ++++++++++---
 .../PagedFacetOnCollectionFactory.java          |  2 +-
 .../annotprop/CssClassFacetOnMemberFactory.java |  2 +-
 .../CssClassFaFacetOnMemberFactory.java         |  2 +-
 .../DescribedAsFacetOnMemberFactory.java        |  2 +-
 .../annotprop/DisabledFacetFactory.java         |  2 +-
 .../annotprop/HiddenFacetOnMemberFactory.java   |  2 +-
 .../annotprop/NamedFacetOnMemberFactory.java    |  2 +-
 .../annotprop/RenderFacetOrResolveFactory.java  |  4 +-
 .../annotation/AutoCompleteFacetAnnotation.java | 37 ---------
 .../AutoCompleteFacetAnnotationFactory.java     | 87 --------------------
 ...cyFacetViaBookmarkableAnnotationFactory.java |  7 +-
 .../ChoicesFacetFromBoundedAnnotation.java      | 33 --------
 ...hoicesFacetFromBoundedAnnotationFactory.java | 55 -------------
 .../DomainObjectAnnotationFacetFactory.java     | 86 ++++++++++++++++---
 ...oCompleteFacetForAutoCompleteAnnotation.java | 56 +++++++++++++
 .../ChoicesFacetFromBoundedAnnotation.java      | 44 ++++++++++
 ...jectSpecIdFacetFromObjectTypeAnnotation.java | 41 +++++++++
 .../annotation/ObjectSpecIdFacetAnnotation.java | 31 -------
 ...ecIdFacetForObjectTypeAnnotationFactory.java | 64 --------------
 ...tiLineFacetOnParameterAnnotationFactory.java |  2 +-
 .../MaskFacetOnParameterAnnotationFactory.java  |  2 +-
 ...xFacetFacetOnParameterAnnotationFactory.java |  2 +-
 .../MultiLineFacetOnPropertyFactory.java        |  2 +-
 .../PropertyAnnotationFacetFactory.java         | 39 +++++++--
 .../TypicalLengthOnPropertyFacetFactory.java    |  2 +-
 .../MaskFacetOnPropertyAnnotationFactory.java   |  2 +-
 ...ExFacetFacetOnPropertyAnnotationFactory.java |  2 +-
 .../container/DomainObjectContainerDefault.java |  3 +-
 ...MetaModelValidatorForDeprecatedAbstract.java |  4 +-
 ...taModelValidatorForDeprecatedAnnotation.java |  7 +-
 .../dflt/ProgrammingModelFacetsJava5.java       |  6 --
 .../AbstractFacetFactoryJUnit4TestCase.java     |  2 +-
 .../facets/AbstractFacetFactoryTest.java        |  7 +-
 ...esFacetFromBoundedAnnotationFactoryTest.java | 61 --------------
 ...esFacetFromBoundedAnnotationFactoryTest.java | 59 +++++++++++++
 .../ObjectTypeAnnotationFacetFactoryTest.java   | 64 ++++++++++++++
 .../ObjectTypeAnnotationFacetFactoryTest.java   | 65 ---------------
 .../eventbus/EventBusServiceDefault.java        |  2 +
 .../service/eventbus/EventBusServiceJdo.java    |  5 +-
 .../service/support/IsisJdoSupportImpl.java     | 10 +--
 .../core/wrapper/WrapperFactoryDefault.java     |  3 +-
 .../java/dom/todo/ToDoItemContributions.java    | 11 ++-
 .../src/main/webapp/WEB-INF/isis.properties     |  2 +-
 66 files changed, 603 insertions(+), 586 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java b/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
index d2d1929..83d03cc 100644
--- a/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
+++ b/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
@@ -20,9 +20,10 @@
 package org.apache.isis.viewer.wicket.viewer.applib;
 
 import org.apache.wicket.Application;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.Hidden;
-import org.apache.isis.applib.annotation.Prototype;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
 
 public class WicketDeveloperUtilitiesService {
 
@@ -34,9 +35,11 @@ public class WicketDeveloperUtilitiesService {
      * the resource cache anyway if running in development/prototype mode.
      * </p>
      */
-    @Hidden
-    @Prototype
-    @ActionSemantics(ActionSemantics.Of.IDEMPOTENT)
+    @Action(
+            restrictTo = RestrictTo.PROTOTYPING,
+            hidden = Where.EVERYWHERE,
+            semantics = SemanticsOf.IDEMPOTENT
+    )
     public void resetI18nCache() {
         Application.get()
                 .getResourceSettings()

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java b/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
index 644f828..d71ad11 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
@@ -20,11 +20,9 @@
 package org.apache.isis.applib;
 
 import java.util.List;
-
 import com.google.common.base.Predicate;
-
 import org.apache.isis.applib.annotation.Aggregated;
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.security.UserMemento;
@@ -69,7 +67,6 @@ public abstract class AbstractContainedObject {
      * 
      * @see #newAggregatedInstance(Object, Class)
      */
-    @Hidden
     protected <T> T newTransientInstance(final Class<T> ofType) {
         return getContainer().newTransientInstance(ofType);
     }
@@ -94,7 +91,6 @@ public abstract class AbstractContainedObject {
      * 
      *  @see #newAggregatedInstance(Object, Class)
      */
-    @Hidden
     protected <T> T newAggregatedInstance(final Class<T> ofType) {
         return newAggregatedInstance(this, ofType);
     }
@@ -108,7 +104,6 @@ public abstract class AbstractContainedObject {
      * 
      *  @see #newAggregatedInstance(Class)
      */
-    @Hidden
     protected <T> T newAggregatedInstance(final Object parent, final Class<T> ofType) {
         return getContainer().newAggregatedInstance(parent, ofType);
     }
@@ -302,7 +297,6 @@ public abstract class AbstractContainedObject {
      * Determines if the specified object is persistent (that it is stored
      * permanently outside of the virtual machine).
      */
-    @Hidden
     protected boolean isPersistent(final Object domainObject) {
         return getContainer().isPersistent(domainObject);
     }
@@ -324,7 +318,6 @@ public abstract class AbstractContainedObject {
      * @see #isPersistent(Object)
      * @see #persistIfNotAlready(Object)
      */
-    @Hidden
     protected <T> T persist(final T transientDomainObject) {
         getContainer().persist(transientDomainObject);
         return transientDomainObject;
@@ -343,7 +336,6 @@ public abstract class AbstractContainedObject {
      * @see #isPersistent(Object)
      * @see #persist(Object)
      */
-    @Hidden
     protected <T> T persistIfNotAlready(final T domainObject) {
         getContainer().persistIfNotAlready(domainObject);
         return domainObject;
@@ -403,7 +395,6 @@ public abstract class AbstractContainedObject {
     /**
      * This field is not persisted, nor displayed to the user.
      */
-    @Hidden
     protected DomainObjectContainer getContainer() {
         return this.container;
     }
@@ -411,6 +402,7 @@ public abstract class AbstractContainedObject {
     /**
      * Injected by the application container itself.
      */
+    @Programmatic
     public void setContainer(final DomainObjectContainer container) {
         this.container = container;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java b/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
index fa65b82..91b2f3f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
@@ -19,11 +19,11 @@
 
 package org.apache.isis.applib;
 
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Programmatic;
 
 public abstract class AbstractService extends AbstractContainedObject {
 
-    @Hidden
+    @Programmatic
     public String getId() {
         return getClassName();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
index 5b1dfc6..7c3fd89 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
@@ -30,7 +30,7 @@ public class FixtureResult {
     private String fixtureScriptClassName;
 
     @PropertyLayout(named="Fixture script")
-    @Optional
+    @Property(optional = Optionality.TRUE)
     @MemberOrder(sequence="1")
     public String getFixtureScriptClassName() {
         return fixtureScriptClassName;

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index c1d7561..33a5e1f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -31,10 +31,11 @@ import com.google.common.collect.Maps;
 import com.google.common.io.CharSource;
 import org.apache.isis.applib.AbstractViewModel;
 import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.fixtures.FixtureType;
 import org.apache.isis.applib.fixtures.InstallableFixture;
 
@@ -139,7 +140,7 @@ public abstract class FixtureScript
 
     //region > qualifiedName
 
-    @Hidden
+    @Programmatic
     public String getQualifiedName() {
         return getParentPath() + getLocalName();
     }
@@ -151,7 +152,7 @@ public abstract class FixtureScript
     private String friendlyName;
     
     @Title
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public String getFriendlyName() {
         return friendlyName;
     }
@@ -168,7 +169,7 @@ public abstract class FixtureScript
      * Will always be populated, initially by the default name, but can be
      * {@link #setLocalName(String) overridden}.
      */
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public String getLocalName() {
         return localName;
     }
@@ -185,7 +186,7 @@ public abstract class FixtureScript
     /**
      * Path of the parent of this script (if any), with trailing {@value #PATH_SEPARATOR}.
      */
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public String getParentPath() {
         return parentPath;
     }
@@ -226,7 +227,7 @@ public abstract class FixtureScript
      * {@link FixtureScript}s are {@link Discoverability#NON_DISCOVERABLE not}.  This can be overridden in the
      * constructor, however or by calling the {@link #withDiscoverability(org.apache.isis.applib.fixturescripts.FixtureScript.Discoverability) setter}.
      */
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public boolean isDiscoverable() {
         return discoverability == Discoverability.DISCOVERABLE;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 8044277..302f1a4 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -39,7 +39,6 @@ import org.apache.isis.applib.util.ObjectContracts;
 
 public abstract class FixtureScripts extends AbstractService {
 
-
     //region > nonPersistedObjectsStrategy, multipleExecutionStrategy enums
 
     /**
@@ -186,7 +185,8 @@ public abstract class FixtureScripts extends AbstractService {
     //region > init
 
     private final List<FixtureScript> fixtureScriptList = Lists.newArrayList();
-    
+
+    @Programmatic
     @PostConstruct
     public void init() {
         findAndInstantiateFixtureScripts(fixtureScriptList);
@@ -255,7 +255,7 @@ public abstract class FixtureScripts extends AbstractService {
                     describedAs="Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
                     multiLine = 10
             )
-            @Optional
+            @Parameter(optional = Optionality.TRUE)
             final String parameters) {
 
         // if this method is called programmatically, the caller may have simply new'd up the fixture script

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
index 461c5fc..7f967e0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
@@ -20,9 +20,11 @@ package org.apache.isis.applib.services.bookmark;
 
 import java.util.Map;
 import javax.annotation.PostConstruct;
-import org.apache.isis.applib.annotation.NotContributed;
-import org.apache.isis.applib.annotation.NotInServiceMenu;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Contributed;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.SemanticsOf;
 
 /**
  * Domain service that contributes an action (named '<tt>lookup</tt>') to
@@ -53,8 +55,8 @@ public class BookmarkHolderActionContributions  {
     //endregion
 
 
-    @NotInServiceMenu
-    @NotContributed(NotContributed.As.ASSOCIATION)
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(contributed = Contributed.AS_ACTION, cssClassFa = "fa-bookmark")
     public Object lookup(final BookmarkHolder bookmarkHolder) {
         return bookmarkService.lookup(bookmarkHolder);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
index 8a994a1..52d1c4e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
@@ -22,7 +22,6 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import com.google.common.collect.Sets;
 import com.google.common.eventbus.EventBus;
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
@@ -41,7 +40,6 @@ import org.apache.isis.applib.annotation.Programmatic;
  *     (keeps things nice and symmetrical).
  * </p>
  */
-@Hidden
 public abstract class EventBusService {
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 8c9c98c..a4658b1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -20,19 +20,15 @@ package org.apache.isis.applib.services.exceprecog;
 
 import java.util.List;
 import java.util.Map;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Throwables;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Programmatic;
 
 /**
  * Abstract implementation of {@link ExceptionRecognizer} that looks 
@@ -44,7 +40,6 @@ import org.apache.isis.applib.annotation.Hidden;
  * If a messaging-parsing {@link Function} is provided through the constructor,
  * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
  */
-@Hidden
 public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer2 {
 
     public static final Logger LOG = LoggerFactory.getLogger(ExceptionRecognizerAbstract.class);
@@ -127,6 +122,7 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
 
     // //////////////////////////////////////
 
+    @Programmatic
     public String recognize(Throwable ex) {
         List<Throwable> causalChain = Throwables.getCausalChain(ex);
         for (Throwable throwable : causalChain) {
@@ -143,6 +139,7 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
         return null;
     }
 
+    @Programmatic
     @Override
     public Recognition recognize2(Throwable ex) {
         return Recognition.of(category, recognize(ex));

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
index f3b6a63..fda96b6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
@@ -21,13 +21,9 @@ package org.apache.isis.applib.services.exceprecog;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-
 import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
@@ -43,7 +39,6 @@ import org.apache.isis.applib.annotation.Programmatic;
  * recognize various types of constraint violations.  These are grouped together as a single
  * set through the use of this class.
  */
-@Hidden
 public class ExceptionRecognizerComposite implements ExceptionRecognizer2 {
 
     private final List<ExceptionRecognizer> services = Lists.newArrayList();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
index 3bb34ba..fa5b652 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
@@ -24,7 +24,6 @@ import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.base.Throwables;
-import org.apache.isis.applib.annotation.Hidden;
 
 /**
  * An specific implementation of {@link ExceptionRecognizer} that looks for an
@@ -36,7 +35,6 @@ import org.apache.isis.applib.annotation.Hidden;
  * If a messaging-parsing {@link Function} is provided through the constructor,
  * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
  */
-@Hidden
 public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
 
     protected final static Predicate<Throwable> ofTypeExcluding(final Class<? extends Throwable> exceptionType, final String... messages) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java b/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
index ac06563..e10835f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
@@ -20,10 +20,10 @@ package org.apache.isis.applib.services.homepage;
 
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.ViewModel;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.ActionSemantics.Of;
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.HomePage;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
 
 /**
  * Convenience domain service to create a view model (eg a dashboard) to be rendered automatically
@@ -46,7 +46,6 @@ import org.apache.isis.applib.annotation.HomePage;
  * for different users), then do <i>not</i> subclass from this service; instead write your own service
  * with a no-arg action with the {@link HomePage} annotation.
  */
-@Hidden
 public abstract class AbstractHomePageDashboardService<T extends ViewModel> extends AbstractService {
     
     /**
@@ -84,7 +83,10 @@ public abstract class AbstractHomePageDashboardService<T extends ViewModel> exte
 
     // //////////////////////////////////////
 
-    @ActionSemantics(Of.SAFE)
+    @Action(
+            semantics = SemanticsOf.SAFE,
+            hidden = Where.EVERYWHERE
+    )
     @HomePage
     public T lookup() {
         return newViewModelInstance(viewModel, id);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
index 9a2f187..b153931 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
@@ -65,7 +65,6 @@ import org.apache.isis.applib.services.wrapper.listeners.InteractionListener;
  * <tt>o.a.i.core:isis-core-wrapper</tt> on the classpath; no further configuration is required.
  * </p>
  */
-@Hidden
 public interface WrapperFactory {
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
index 3abe518..9ef69e6 100644
--- a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
+++ b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.objectstore.jdo.applib.service.exceprecog;
 
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 
@@ -31,10 +30,8 @@ import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
  * If using the JDO Object store, either register in <tt>isis.properties</tt>, or
  * compose your own, out of the underlying more fine-grained {@link ExceptionRecognizer} implementations. 
  */
-@Hidden
 public class ExceptionRecognizerCompositeForJdoObjectStore extends ExceptionRecognizerComposite {
-    
-    
+
     public ExceptionRecognizerCompositeForJdoObjectStore() {
         // most specific ones first
         add(new ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException());

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
index 906b732..920867d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
@@ -87,14 +87,14 @@ public class FacetedMethod extends TypedHolderDefault implements IdentifiedHolde
     }
 
     public static FacetedMethod createForAction(final Class<?> declaringType, final Method method) {
-        return new FacetedMethod(FeatureType.ACTION, declaringType, method, method.getReturnType(), getParameters(method));
+        return new FacetedMethod(FeatureType.ACTION, declaringType, method, method.getReturnType(), getParameters(declaringType, method));
     }
 
-    private static List<FacetedMethodParameter> getParameters(final Method actionMethod) {
+    private static List<FacetedMethodParameter> getParameters(final Class<?> declaringType, final Method actionMethod) {
         final Class<?>[] parameterTypes = actionMethod.getParameterTypes();
         final List<FacetedMethodParameter> actionParams = Lists.newArrayList();
         for (final Class<?> parameterType : parameterTypes) {
-            actionParams.add(new FacetedMethodParameter(parameterType));
+            actionParams.add(new FacetedMethodParameter(declaringType, actionMethod, parameterType));
         }
         return Collections.unmodifiableList(actionParams);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
index bd9327b..077e990 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
@@ -16,12 +16,24 @@
  */
 package org.apache.isis.core.metamodel.facets;
 
+import java.lang.reflect.Method;
+import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 
-public class FacetedMethodParameter extends TypedHolderDefault {
+public class FacetedMethodParameter extends TypedHolderDefault implements IdentifiedHolder {
 
-    public FacetedMethodParameter(final Class<?> type) {
+    private final Identifier identifier;
+
+    public FacetedMethodParameter(final Class<?> declaringType, final Method method, final Class<?> type) {
         super(FeatureType.ACTION_PARAMETER, type);
+
+        // best we can do...
+        this.identifier = FeatureType.ACTION.identifierFor(declaringType, method);
     }
 
+    @Override
+    public Identifier getIdentifier() {
+        return identifier;
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/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 29a6e5a..2d83c2b 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
@@ -44,6 +44,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 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.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -86,8 +87,21 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
+
+public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, IsisConfigurationAware, AdapterManagerAware, RuntimeContextAware, MetaModelValidatorRefiner {
+
+    private final MetaModelValidatorForDeprecatedAnnotation actionSemanticsValidator = new MetaModelValidatorForDeprecatedAnnotation(ActionSemantics.class);
+    private final MetaModelValidatorForDeprecatedAnnotation actionInteractionValidator = new MetaModelValidatorForDeprecatedAnnotation(ActionInteraction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation postsActionInvokedEventValidator = new MetaModelValidatorForDeprecatedAnnotation(PostsActionInvokedEvent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation bulkValidator = new MetaModelValidatorForDeprecatedAnnotation(Bulk.class);
+    private final MetaModelValidatorForDeprecatedAnnotation commandValidator = new MetaModelValidatorForDeprecatedAnnotation(Command.class);
+    private final MetaModelValidatorForDeprecatedAnnotation queryOnlyValidator = new MetaModelValidatorForDeprecatedAnnotation(QueryOnly.class);
+    private final MetaModelValidatorForDeprecatedAnnotation idempotentValidator = new MetaModelValidatorForDeprecatedAnnotation(Idempotent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation publishedActionValidator = new MetaModelValidatorForDeprecatedAnnotation(PublishedAction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation typeOfValidator = new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
 
-public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, IsisConfigurationAware, AdapterManagerAware, RuntimeContextAware {
 
     private ServicesInjector servicesInjector;
     private IsisConfiguration configuration;
@@ -177,15 +191,17 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
             // deprecated
             if (postsActionInvokedEvent != null) {
                 final Class<? extends ActionInvokedEvent<?>> actionInvokedEventType = postsActionInvokedEvent.value();
-                actionInvocationFacet = new ActionInvocationFacetForPostsActionInvokedEventAnnotation(
-                        actionInvokedEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
-                        getRuntimeContext(), getAdapterManager(), getServicesInjector());
+                actionInvocationFacet = actionInteractionValidator.flagIfPresent(
+                        new ActionInvocationFacetForPostsActionInvokedEventAnnotation(
+                                actionInvokedEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
+                                getRuntimeContext(), getAdapterManager(), getServicesInjector()));
             } else
             // deprecated (but more recently)
             if (actionInteraction != null) {
-                actionInvocationFacet = new ActionInvocationFacetForDomainEventFromActionInteractionAnnotation(
-                        actionDomainEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
-                        getRuntimeContext(), getAdapterManager(), getServicesInjector());
+                actionInvocationFacet = actionInteractionValidator.flagIfPresent(
+                        new ActionInvocationFacetForDomainEventFromActionInteractionAnnotation(
+                                actionDomainEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
+                                getRuntimeContext(), getAdapterManager(), getServicesInjector()));
             } else
             // current
             if (action != null) {
@@ -231,18 +247,18 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for the deprecated @QueryOnly...
         final QueryOnly queryOnly = Annotations.getAnnotation(processMethodContext.getMethod(), QueryOnly.class);
-        facet = ActionSemanticsFacetFromQueryOnlyAnnotation.create(queryOnly, holder);
+        facet = queryOnlyValidator.flagIfPresent(ActionSemanticsFacetFromQueryOnlyAnnotation.create(queryOnly, holder));
 
         // else check for the deprecated @Idempotent...
         if(facet == null) {
             final Idempotent idempotent = Annotations.getAnnotation(processMethodContext.getMethod(), Idempotent.class);
-            facet = ActionSemanticsFacetFromIdempotentAnnotation.create(idempotent, holder);
+            facet = idempotentValidator.flagIfPresent(ActionSemanticsFacetFromIdempotentAnnotation.create(idempotent, holder));
         }
 
         // else check for the deprecated @ActionSemantics ...
         if(facet == null) {
             final ActionSemantics actionSemantics = Annotations.getAnnotation(method, ActionSemantics.class);
-            facet = ActionSemanticsFacetForActionSemanticsAnnotation.create(actionSemantics, holder);
+            facet = actionSemanticsValidator.flagIfPresent(ActionSemanticsFacetForActionSemanticsAnnotation.create(actionSemantics, holder));
         }
 
         // else check for @Action(semantics=...)
@@ -268,7 +284,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for the deprecated @Bulk annotation first
         final Bulk annotation = Annotations.getAnnotation(method, Bulk.class);
-        facet = BulkFacetForBulkAnnotation.create(annotation, holder);
+        facet = bulkValidator.flagIfPresent(BulkFacetForBulkAnnotation.create(annotation, holder));
 
         // else check for @Action(invokeOn=...)
         if(facet == null) {
@@ -300,7 +316,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for deprecated @Command annotation first
         final Command annotation = Annotations.getAnnotation(method, Command.class);
-        commandFacet = CommandFacetForCommandAnnotation.create(annotation, processMethodContext.getFacetHolder());
+        commandFacet = commandValidator.flagIfPresent(
+                CommandFacetForCommandAnnotation.create(annotation, processMethodContext.getFacetHolder()));
 
         // else check for @Action(command=...)
         if(commandFacet == null) {
@@ -330,7 +347,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for deprecated @PublishedAction annotation first
         final PublishedAction annotation = Annotations.getAnnotation(processMethodContext.getMethod(), PublishedAction.class);
-        facet = PublishedActionFacetForPublishedActionAnnotation.create(annotation, holder);
+        facet = publishedActionValidator.flagIfPresent(
+                PublishedActionFacetForPublishedActionAnnotation.create(annotation, holder));
 
         // else check for @Action(publishing=...)
         if(facet == null) {
@@ -354,7 +372,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for deprecated @TypeOf
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
-        facet = TypeOfFacetOnActionForTypeOfAnnotation.create(annotation, getSpecificationLoader(), holder);
+        facet = typeOfValidator.flagIfPresent(
+                TypeOfFacetOnActionForTypeOfAnnotation.create(annotation, getSpecificationLoader(), holder));
 
         // check for @Action(typeOf=...)
         if(facet == null) {
@@ -436,7 +455,20 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
     }
 
     // ///////////////////////////////////////////////////////////////
-    // Dependencies
+
+    @Override
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        metaModelValidator.add(actionSemanticsValidator);
+        metaModelValidator.add(actionInteractionValidator);
+        metaModelValidator.add(postsActionInvokedEventValidator);
+        metaModelValidator.add(bulkValidator);
+        metaModelValidator.add(commandValidator);
+        metaModelValidator.add(queryOnlyValidator);
+        metaModelValidator.add(idempotentValidator);
+        metaModelValidator.add(publishedActionValidator);
+        metaModelValidator.add(typeOfValidator);
+    }
+
     // ///////////////////////////////////////////////////////////////
 
     @Override
@@ -447,6 +479,16 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
     @Override
     public void setConfiguration(final IsisConfiguration configuration) {
         this.configuration = configuration;
+
+        actionSemanticsValidator.setConfiguration(configuration);
+        actionInteractionValidator.setConfiguration(configuration);
+        postsActionInvokedEventValidator.setConfiguration(configuration);
+        bulkValidator.setConfiguration(configuration);
+        commandValidator.setConfiguration(configuration);
+        queryOnlyValidator.setConfiguration(configuration);
+        idempotentValidator.setConfiguration(configuration);
+        publishedActionValidator.setConfiguration(configuration);
+        typeOfValidator.setConfiguration(configuration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
index 3ea6ff2..618a9ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
@@ -24,6 +24,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacetAbstract;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class BulkFacetForBulkAnnotation extends BulkFacetAbstract {
 
     public static BulkFacet create(

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
index 20c1ed7..95f815f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
@@ -27,6 +27,10 @@ import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class ActionInvocationFacetForPostsActionInvokedEventAnnotation
         extends ActionInvocationFacetForDomainEventAbstract {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
index 188f1c4..375374d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
@@ -25,6 +25,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class ActionSemanticsFacetFromIdempotentAnnotation extends ActionSemanticsFacetAbstract {
 
     private ActionSemanticsFacetFromIdempotentAnnotation(final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
index d015885..f52f3be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
@@ -25,6 +25,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class ActionSemanticsFacetFromQueryOnlyAnnotation extends ActionSemanticsFacetAbstract {
 
     private ActionSemanticsFacetFromQueryOnlyAnnotation(final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
index eef8f70..421049c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
@@ -54,7 +54,7 @@ public class PagedFacetOnActionFactory extends FacetFactoryAbstract
         
         PagedFacet pagedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(pagedFacet == null) {
-            pagedFacet = validator.invalidIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
+            pagedFacet = validator.flagIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(pagedFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/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 0e3b4f5..e4fcd65 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
@@ -29,9 +29,12 @@ import org.apache.isis.applib.annotation.PostsCollectionAddedToEvent;
 import org.apache.isis.applib.annotation.PostsCollectionRemovedFromEvent;
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
+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;
@@ -40,6 +43,7 @@ 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.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;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromCollectionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromCollectionInteractionAnnotation;
@@ -56,18 +60,24 @@ 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.hidden.HiddenFacetForCollectionAnnotation;
 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.typeof.TypeOfFacetOnCollectionFromTypeOfAnnotation;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 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;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
+
+public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, ContributeeMemberFacetFactory, MetaModelValidatorRefiner, IsisConfigurationAware {
 
-public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, ContributeeMemberFacetFactory {
+    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 typeOfValidator = new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
 
     private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
 
@@ -117,21 +127,24 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
         // search for @PostsCollectionAddedToEvent(value=...)
         if(postsCollectionAddedToEvent != null) {
             collectionDomainEventType = postsCollectionAddedToEvent.value();
-            collectionDomainEventFacet = new CollectionDomainEventFacetForPostsCollectionAddedToEventAnnotation(
-                    collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder);
+            collectionDomainEventFacet = postsCollectionAddedToEventValidator.flagIfPresent(
+                    new CollectionDomainEventFacetForPostsCollectionAddedToEventAnnotation(
+                        collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder));
         } else
         // search for @PostsCollectionRemovedFromEvent(value=...)
         if(postsCollectionRemovedFromEvent != null) {
             collectionDomainEventType = postsCollectionRemovedFromEvent.value();
-            collectionDomainEventFacet = new CollectionDomainEventFacetForPostsCollectionRemovedFromEventAnnotation(
-                    collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder);
+            collectionDomainEventFacet = postsCollectionRemovedFromEventValidator.flagIfPresent(
+                    new CollectionDomainEventFacetForPostsCollectionRemovedFromEventAnnotation(
+                        collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder));
         } else
 
         // search for @CollectionInteraction(value=...)
         if(collectionInteraction != null) {
             collectionDomainEventType = collectionInteraction.value();
-            collectionDomainEventFacet = new CollectionDomainEventFacetForCollectionInteractionAnnotation(
-                    collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder);
+            collectionDomainEventFacet = collectionInteractionValidator.flagIfPresent(
+                    new CollectionDomainEventFacetForCollectionInteractionAnnotation(
+                        collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder));
         } else
         // search for @Collection(domainEvent=...)
         if(collection != null && collection.domainEvent() != null) {
@@ -243,7 +256,8 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
 
         // check for deprecated @TypeOf
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
-        facet = TypeOfFacetOnCollectionFromTypeOfAnnotation.create(annotation, facetHolder, getSpecificationLoader());
+        facet = typeOfValidator.flagIfPresent(
+                TypeOfFacetOnCollectionFromTypeOfAnnotation.create(annotation, facetHolder, getSpecificationLoader()));
 
         // check for @Collection(typeOf=...)
         if(facet == null) {
@@ -315,6 +329,28 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
 
     }
 
+
+    // //////////////////////////////////////
+
+    @Override
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        metaModelValidator.add(postsCollectionAddedToEventValidator);
+        metaModelValidator.add(postsCollectionRemovedFromEventValidator);
+        metaModelValidator.add(collectionInteractionValidator);
+        metaModelValidator.add(typeOfValidator);
+    }
+
+    // //////////////////////////////////////
+
+
+    @Override
+    public void setConfiguration(final IsisConfiguration configuration) {
+        postsCollectionAddedToEventValidator.setConfiguration(configuration);
+        postsCollectionRemovedFromEventValidator.setConfiguration(configuration);
+        collectionInteractionValidator.setConfiguration(configuration);
+        typeOfValidator.setConfiguration(configuration);
+    }
+
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         this.servicesInjector = servicesInjector;

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
index 2d7f28f..4e8a844 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
@@ -51,7 +51,7 @@ public class PagedFacetOnCollectionFactory extends FacetFactoryAbstract
         
         PagedFacet pagedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(pagedFacet == null) {
-            pagedFacet = validator.invalidIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
+            pagedFacet = validator.flagIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(pagedFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
index 33478a4..bfed8f7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
@@ -46,7 +46,7 @@ public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implement
     public void process(final ProcessMethodContext processMethodContext) {
         CssClassFacet cssClassFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(cssClassFacet == null) {
-            cssClassFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            cssClassFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
 
         // no-op if null

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index fb184bb..2bda368 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -56,7 +56,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
     public void process(final ProcessMethodContext processMethodContext) {
         CssClassFaFacet cssClassFaFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(cssClassFaFacet == null) {
-            cssClassFaFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            cssClassFaFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         if(cssClassFaFacet == null) {
             cssClassFaFacet = createFromConfiguredRegexIfPossible(processMethodContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
index edaf759..19b1646 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
@@ -49,7 +49,7 @@ public class DescribedAsFacetOnMemberFactory extends FacetFactoryAbstract implem
         DescribedAsFacet facet = createFromMetadataPropertiesIfPossible(processMethodContext);
         
         if(facet == null) {
-            facet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            facet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         if (facet == null) {
             facet = createFromAnnotationOnReturnTypeIfPossible(processMethodContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/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
index 24c0fb4..b1ab3f2 100644
--- 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
@@ -47,7 +47,7 @@ public class DisabledFacetFactory extends FacetFactoryAbstract
     public void process(final ProcessMethodContext processMethodContext) {
         DisabledFacet disabledFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(disabledFacet == null) {
-            disabledFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            disabledFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(disabledFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/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
index 2eefa6a..795fcc3 100644
--- 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
@@ -47,7 +47,7 @@ public class HiddenFacetOnMemberFactory extends FacetFactoryAbstract
     public void process(final ProcessMethodContext processMethodContext) {
         HiddenFacet hiddenFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(hiddenFacet == null) {
-            hiddenFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            hiddenFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(hiddenFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
index 8d27f74..a5aad10 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
@@ -47,7 +47,7 @@ public class NamedFacetOnMemberFactory extends FacetFactoryAbstract implements C
     public void process(final ProcessMethodContext processMethodContext) {
         NamedFacet namedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(namedFacet == null) {
-            namedFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            namedFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(namedFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
index 9164319..6ab0b42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
@@ -50,10 +50,10 @@ public class RenderFacetOrResolveFactory extends FacetFactoryAbstract
         
         RenderFacet renderFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(renderFacet == null) {
-            renderFacet = renderValidator.invalidIfPresent(createFromRenderAnnotationIfPossible(processMethodContext));
+            renderFacet = renderValidator.flagIfPresent(createFromRenderAnnotationIfPossible(processMethodContext));
         }
         if(renderFacet == null) {
-            renderFacet = resolveValidator.invalidIfPresent(createFromResolveAnnotationIfPossible(processMethodContext));
+            renderFacet = resolveValidator.flagIfPresent(createFromResolveAnnotationIfPossible(processMethodContext));
         }
 
         // no-op if null

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java
deleted file mode 100644
index 15d7f77..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java
+++ /dev/null
@@ -1,37 +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.object.autocomplete.annotation;
-
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacetAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-
-public class AutoCompleteFacetAnnotation extends AutoCompleteFacetAbstract {
-
-    public AutoCompleteFacetAnnotation(FacetHolder holder, Class<?> repositoryClass, String actionName, SpecificationLoader specificationLoader, AdapterManager adapterManager, ServicesInjector servicesInjector) {
-        super(holder, repositoryClass, actionName, specificationLoader, adapterManager, servicesInjector);
-    }
-
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java
deleted file mode 100644
index 128968d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java
+++ /dev/null
@@ -1,87 +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.object.autocomplete.annotation;
-
-import org.apache.isis.applib.annotation.AutoComplete;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
-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.object.autocomplete.AutoCompleteFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class AutoCompleteFacetAnnotationFactory extends FacetFactoryAbstract implements AdapterManagerAware, ServicesInjectorAware, SpecificationLoaderAware, MetaModelValidatorRefiner, IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new MetaModelValidatorForDeprecatedAnnotation(AutoComplete.class);
-
-    private AdapterManager adapterManager;
-    private ServicesInjector servicesInjector;
-
-    public AutoCompleteFacetAnnotationFactory() {
-        super(FeatureType.OBJECTS_POST_PROCESSING_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final AutoComplete annotation = Annotations.getAnnotation(processClassContext.getCls(), AutoComplete.class);
-        validator.addFacet(create(annotation, processClassContext.getFacetHolder()));
-    }
-
-    private AutoCompleteFacet create(final AutoComplete annotation, final FacetHolder holder) {
-        if(annotation == null) { return null; }
-
-        Class<?> repositoryClass = annotation.repository();
-        String actionName = annotation.action();
-        
-        return new AutoCompleteFacetAnnotation(holder, repositoryClass, actionName, getSpecificationLoader(), adapterManager, servicesInjector);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    // //////////////////////////////////////
-
-    @Override
-    public void setAdapterManager(AdapterManager adapterManager) {
-        this.adapterManager = adapterManager;
-    }
-
-    @Override
-    public void setServicesInjector(ServicesInjector servicesInjector) {
-        this.servicesInjector = servicesInjector;
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
index be9ab8a..b301c00 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Bookmarkable;
 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;
@@ -52,17 +53,17 @@ public class BookmarkPolicyFacetViaBookmarkableAnnotationFactory extends FacetFa
     @Override
     public void process(final ProcessClassContext processClassContext) {
         final Bookmarkable annotation = Annotations.getAnnotation(processClassContext.getCls(), Bookmarkable.class);
-        validator.addFacet(create(annotation, processClassContext.getFacetHolder()));
+        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
     }
 
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
         final Bookmarkable annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Bookmarkable.class);
-        validator.addFacet(create(annotation, processMethodContext.getFacetHolder()));
+        FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
     }
 
     private BookmarkPolicyFacet create(final Bookmarkable annotation, final FacetHolder holder) {
-        return annotation == null ? new BookmarkPolicyFacetFallback(holder) : new BookmarkPolicyFacetViaBookmarkableAnnotation(annotation.value(), holder);
+        return annotation == null ? new BookmarkPolicyFacetFallback(holder) : validator.flagIfPresent(new BookmarkPolicyFacetViaBookmarkableAnnotation(annotation.value(), holder));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java
deleted file mode 100644
index 0181d13..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java
+++ /dev/null
@@ -1,33 +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.object.choices.boundedannot;
-
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
-
-public class ChoicesFacetFromBoundedAnnotation extends ChoicesFacetFromBoundedAbstract {
-
-    public ChoicesFacetFromBoundedAnnotation(final FacetHolder holder, QuerySubmitter querySubmitter) {
-        super(holder, querySubmitter);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java
deleted file mode 100644
index 784b6b7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java
+++ /dev/null
@@ -1,55 +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.object.choices.boundedannot;
-
-import org.apache.isis.applib.annotation.Bounded;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
-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.propparam.choices.ChoicesFacet;
-
-public class ChoicesFacetFromBoundedAnnotationFactory extends FacetFactoryAbstract implements QuerySubmitterAware {
-
-    private QuerySubmitter querySubmitter;
-
-    public ChoicesFacetFromBoundedAnnotationFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Bounded annotation = Annotations.getAnnotation(processClassContext.getCls(), Bounded.class);
-        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
-    }
-
-    private ChoicesFacet create(final Bounded annotation, final FacetHolder holder) {
-        return annotation == null ? null : new ChoicesFacetFromBoundedAnnotation(holder, querySubmitter);
-    }
-
-    @Override
-    public void setQuerySubmitter(final QuerySubmitter querySubmitter) {
-        this.querySubmitter = querySubmitter;
-    }
-
-}