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/01/15 11:28:14 UTC

[34/49] isis git commit: ISIS-970: completed the ActionAnnotationFacetFactory, with additional refactoring for DomainObjectFacetFactory

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
new file mode 100644
index 0000000..065da4f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
@@ -0,0 +1,165 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.core.metamodel.facets.collections.layout;
+
+
+import java.util.Properties;
+import org.apache.isis.applib.annotation.CollectionLayout;
+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.ContributeeMemberFacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.render.RenderFacet;
+import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
+
+
+public class CollectionLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+
+    public CollectionLayoutFacetFactory() {
+        super(FeatureType.COLLECTIONS_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        Properties properties = processMethodContext.metadataProperties("collectionLayout");
+        if(properties == null) {
+            // alternate key
+            properties = processMethodContext.metadataProperties("layout");
+        }
+        final CollectionLayout collectionLayout = Annotations.getAnnotation(processMethodContext.getMethod(), CollectionLayout.class);
+
+
+        // cssClass
+        CssClassFacet cssClassFacet = CssClassFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(cssClassFacet == null) {
+            cssClassFacet = CssClassFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(cssClassFacet);
+
+
+        // describedAs
+        DescribedAsFacet describedAsFacet = DescribedAsFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(describedAsFacet == null) {
+            describedAsFacet = DescribedAsFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(describedAsFacet);
+
+
+        // hidden
+        HiddenFacet hiddenFacet = HiddenFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(hiddenFacet == null) {
+            hiddenFacet = HiddenFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(hiddenFacet);
+
+
+        // named
+        NamedFacet namedFacet = NamedFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(namedFacet == null) {
+            namedFacet = NamedFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(namedFacet);
+
+
+        // paged
+        PagedFacet pagedFacet = PagedFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(pagedFacet == null) {
+            pagedFacet = PagedFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(pagedFacet);
+
+
+        // renderType
+        RenderFacet renderFacet = RenderFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(renderFacet == null) {
+            renderFacet = RenderFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(renderFacet);
+
+
+        // sortedBy
+        SortedByFacet sortedByFacet = SortedByFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        if(sortedByFacet == null) {
+            sortedByFacet = SortedByFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
+        }
+        FacetUtil.addFacet(sortedByFacet);
+
+    }
+
+    @Override
+    public void process(ProcessContributeeMemberContext processMemberContext) {
+
+        final FacetHolder holder = processMemberContext.getFacetHolder();
+
+        Properties properties = processMemberContext.metadataProperties("collectionLayout");
+        if(properties == null) {
+            // alternate key
+            properties = processMemberContext.metadataProperties("layout");
+        }
+
+
+        // cssClass
+        CssClassFacet cssClassFacet = CssClassFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(cssClassFacet);
+
+
+        // describedAs
+        DescribedAsFacet describedAsFacet = DescribedAsFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(describedAsFacet);
+
+
+        // hidden
+        HiddenFacet hiddenFacet = HiddenFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(hiddenFacet);
+
+
+        // named
+        NamedFacet namedFacet = NamedFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(namedFacet);
+
+
+        // paged
+        PagedFacet pagedFacet = PagedFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(pagedFacet);
+
+
+        // renderType
+        RenderFacet renderFacet = RenderFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(renderFacet);
+
+
+        // sortedBy
+        SortedByFacet sortedByFacet = SortedByFacetOnCollectionFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(sortedByFacet);
+
+
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFactory.java
deleted file mode 100644
index 236649e..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFactory.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.collections.layout;
-
-
-import java.util.Properties;
-import org.apache.isis.applib.annotation.CollectionLayout;
-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.ContributeeMemberFacetFactory;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
-import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
-import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
-import org.apache.isis.core.metamodel.facets.members.render.RenderFacet;
-import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
-
-
-public class CollectionLayoutFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
-
-    public CollectionLayoutFactory() {
-        super(FeatureType.COLLECTIONS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-
-        final FacetHolder holder = processMethodContext.getFacetHolder();
-
-        Properties properties = processMethodContext.metadataProperties("collectionLayout");
-        if(properties == null) {
-            // alternate key
-            properties = processMethodContext.metadataProperties("layout");
-        }
-        final CollectionLayout collectionLayout = Annotations.getAnnotation(processMethodContext.getMethod(), CollectionLayout.class);
-
-
-        // cssClass
-        CssClassFacet cssClassFacet = CssClassFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(cssClassFacet == null) {
-            cssClassFacet = CssClassFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(cssClassFacet);
-
-
-        // describedAs
-        DescribedAsFacet describedAsFacet = DescribedAsFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(describedAsFacet == null) {
-            describedAsFacet = DescribedAsFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(describedAsFacet);
-
-
-        // hidden
-        HiddenFacet hiddenFacet = HiddenFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(hiddenFacet == null) {
-            hiddenFacet = HiddenFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(hiddenFacet);
-
-
-        // named
-        NamedFacet namedFacet = NamedFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(namedFacet == null) {
-            namedFacet = NamedFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(namedFacet);
-
-
-        // paged
-        PagedFacet pagedFacet = PagedFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(pagedFacet == null) {
-            pagedFacet = PagedFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(pagedFacet);
-
-
-        // renderType
-        RenderFacet renderFacet = RenderFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(renderFacet == null) {
-            renderFacet = RenderFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(renderFacet);
-
-
-        // sortedBy
-        SortedByFacet sortedByFacet = SortedByFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        if(sortedByFacet == null) {
-            sortedByFacet = SortedByFacetForCollectionLayoutAnnotation.create(collectionLayout, holder);
-        }
-        FacetUtil.addFacet(sortedByFacet);
-
-    }
-
-    @Override
-    public void process(ProcessContributeeMemberContext processMemberContext) {
-
-        final FacetHolder holder = processMemberContext.getFacetHolder();
-
-        Properties properties = processMemberContext.metadataProperties("collectionLayout");
-        if(properties == null) {
-            // alternate key
-            properties = processMemberContext.metadataProperties("layout");
-        }
-
-
-        // cssClass
-        CssClassFacet cssClassFacet = CssClassFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(cssClassFacet);
-
-
-        // describedAs
-        DescribedAsFacet describedAsFacet = DescribedAsFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(describedAsFacet);
-
-
-        // hidden
-        HiddenFacet hiddenFacet = HiddenFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(hiddenFacet);
-
-
-        // named
-        NamedFacet namedFacet = NamedFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(namedFacet);
-
-
-        // paged
-        PagedFacet pagedFacet = PagedFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(pagedFacet);
-
-
-        // renderType
-        RenderFacet renderFacet = RenderFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(renderFacet);
-
-
-        // sortedBy
-        SortedByFacet sortedByFacet = SortedByFacetOnCollectionFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(sortedByFacet);
-
-
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetForCollectionLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetForCollectionLayoutAnnotation.java
index f627c3d..9f2df39 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetForCollectionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetForCollectionLayoutAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.collections.layout;
 
 import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.RenderType;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.render.RenderFacet;
 import org.apache.isis.core.metamodel.facets.members.render.RenderFacetAbstract;
@@ -30,12 +31,12 @@ public class RenderFacetForCollectionLayoutAnnotation extends RenderFacetAbstrac
         if (collectionLayout == null) {
             return null;
         }
-        final CollectionLayout.RenderType renderType = collectionLayout.render();
+        final RenderType renderType = collectionLayout.render();
         return renderType != null ? new RenderFacetForCollectionLayoutAnnotation(renderType, holder) : null;
     }
 
-    private RenderFacetForCollectionLayoutAnnotation(final CollectionLayout.RenderType renderType, final FacetHolder holder) {
-        super(CollectionLayout.RenderType.typeOf(renderType), holder);
+    private RenderFacetForCollectionLayoutAnnotation(final RenderType renderType, final FacetHolder holder) {
+        super(RenderType.typeOf(renderType), holder);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetOnCollectionFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetOnCollectionFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetOnCollectionFromLayoutProperties.java
index b5a7b47..e9173c2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetOnCollectionFromLayoutProperties.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/RenderFacetOnCollectionFromLayoutProperties.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.collections.layout;
 
 import java.util.Properties;
 import com.google.common.base.Strings;
-import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.RenderType;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.render.RenderFacet;
 import org.apache.isis.core.metamodel.facets.members.render.RenderFacetAbstract;
@@ -29,15 +29,15 @@ import org.apache.isis.core.metamodel.facets.members.render.RenderFacetAbstract;
 public class RenderFacetOnCollectionFromLayoutProperties extends RenderFacetAbstract {
 
     public static RenderFacet create(Properties properties, FacetHolder holder) {
-        final CollectionLayout.RenderType renderType = render(properties);
+        final RenderType renderType = render(properties);
         return renderType != null? new RenderFacetOnCollectionFromLayoutProperties(renderType, holder): null;
     }
 
-    private RenderFacetOnCollectionFromLayoutProperties(CollectionLayout.RenderType renderType, FacetHolder holder) {
-        super(CollectionLayout.RenderType.typeOf(renderType), holder);
+    private RenderFacetOnCollectionFromLayoutProperties(RenderType renderType, FacetHolder holder) {
+        super(RenderType.typeOf(renderType), holder);
     }
 
-    private static CollectionLayout.RenderType render(Properties properties) {
+    private static RenderType render(Properties properties) {
         if(properties == null) {
             return null;
         }
@@ -45,7 +45,7 @@ public class RenderFacetOnCollectionFromLayoutProperties extends RenderFacetAbst
         if(renderType == null) {
             return null;
         }
-        return CollectionLayout.RenderType.valueOf(renderType);
+        return RenderType.valueOf(renderType);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
index 43eca17..1f0ea8a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
+import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -54,7 +55,16 @@ public class TypeOfFacetOnCollectionAnnotationFactory extends FacetFactoryAbstra
             return;
         }
 
-        Method method = processMethodContext.getMethod();
+        final Method method = processMethodContext.getMethod();
+        final Collection collection = Annotations.getAnnotation(method, Collection.class);
+        if (collection != null) {
+            final Class<?> typeOf = collection.typeOf();
+            if(typeOf != null && typeOf != Object.class) {
+                FacetUtil.addFacet(new TypeOfFacetOnCollectionAnnotation(typeOf, processMethodContext.getFacetHolder(), getSpecificationLoader()));
+                return;
+            }
+        }
+
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
         if (annotation != null) {
             FacetUtil.addFacet(new TypeOfFacetOnCollectionAnnotation(annotation.value(), processMethodContext.getFacetHolder(), getSpecificationLoader()));

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetAuditedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetAuditedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetAuditedAnnotation.java
index 95a69b4..99b76ea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetAuditedAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetAuditedAnnotation.java
@@ -19,7 +19,9 @@
 package org.apache.isis.core.metamodel.facets.object.audit.annotation;
 
 
+import org.apache.isis.applib.annotation.Audited;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacetImpl;
 
 
@@ -29,4 +31,12 @@ public class AuditableFacetAuditedAnnotation extends AuditableFacetImpl {
         super(facetHolder, enablement);
     }
 
+    public static AuditableFacet create(final Audited annotation, final FacetHolder holder) {
+        if (annotation == null) {
+            return null;
+        }
+        return new AuditableFacetAuditedAnnotation(
+                holder,
+                Enablement.ifDisabled(annotation.disabled()));
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetFromAuditedAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetFromAuditedAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetFromAuditedAnnotationFactory.java
index f6e0e67..36440c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetFromAuditedAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/annotation/AuditableFacetFromAuditedAnnotationFactory.java
@@ -19,12 +19,8 @@
 package org.apache.isis.core.metamodel.facets.object.audit.annotation;
 
 
-import org.apache.isis.applib.annotation.Audited;
-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.object.audit.AuditableFacetAbstract.Enablement;
 
 
 public class AuditableFacetFromAuditedAnnotationFactory extends FacetFactoryAbstract {
@@ -35,16 +31,10 @@ public class AuditableFacetFromAuditedAnnotationFactory extends FacetFactoryAbst
 
     @Override
     public void process(ProcessClassContext processClassContext) {
-        final Class<?> cls = processClassContext.getCls();
-        final Audited annotation = Annotations.getAnnotation(cls, Audited.class);
-        if (annotation == null) {
-            return;
-        }
-        FacetUtil.addFacet(
-                new AuditableFacetAuditedAnnotation(
-                        processClassContext.getFacetHolder(), 
-                        Enablement.ifDisabled(annotation.disabled())));
-        return;
+
+        //
+        // moved to DomainObjectAnnotationFacetFactory
+        //
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetForDomainObjectAnnotationAsConfigured.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetForDomainObjectAnnotationAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetForDomainObjectAnnotationAsConfigured.java
new file mode 100644
index 0000000..b5e5a66
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetForDomainObjectAnnotationAsConfigured.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.core.metamodel.facets.object.audit.configuration;
+
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.domainobject.AuditableFacetForDomainObjectAnnotation;
+
+
+public class AuditableFacetForDomainObjectAnnotationAsConfigured extends AuditableFacetForDomainObjectAnnotation {
+
+    public AuditableFacetForDomainObjectAnnotationAsConfigured(final FacetHolder facetHolder) {
+        super(Enablement.ENABLED, facetHolder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfiguration.java
deleted file mode 100644
index a0722a3..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfiguration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.audit.configuration;
-
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacetImpl;
-
-
-public class AuditableFacetFromConfiguration extends AuditableFacetImpl {
-
-    public AuditableFacetFromConfiguration(final FacetHolder facetHolder) {
-        super(facetHolder, Enablement.ENABLED);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfigurationFactory.java
index 11e754c..1a5e826 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/audit/configuration/AuditableFacetFromConfigurationFactory.java
@@ -19,15 +19,10 @@
 package org.apache.isis.core.metamodel.facets.object.audit.configuration;
 
 
-import org.apache.isis.applib.services.HasTransactionId;
 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.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
-import org.apache.isis.core.metamodel.facets.object.domainobject.AuditObjectsConfiguration;
 
 
 public class AuditableFacetFromConfigurationFactory extends FacetFactoryAbstract implements IsisConfigurationAware {
@@ -41,25 +36,10 @@ public class AuditableFacetFromConfigurationFactory extends FacetFactoryAbstract
     @Override
     public void process(ProcessClassContext processClassContext) {
 
-        final AuditObjectsConfiguration categorization = AuditObjectsConfiguration.parse(configuration);
-        if(categorization == AuditObjectsConfiguration.NONE) {
-            return;
-        }
-        final Class<?> cls = processClassContext.getCls();
-        final FacetHolder facetHolder = processClassContext.getFacetHolder();
-        
-        if(facetHolder.containsDoOpFacet(AuditableFacet.class)) {
-            // do not replace
-            return;
-        }
-        if(HasTransactionId.class.isAssignableFrom(cls)) {
-            // do not install on any implementation of HasTransactionId
-            // (ie commands, audit entries, published events).
-            return; 
-        }
-        
-        FacetUtil.addFacet(new AuditableFacetFromConfiguration(facetHolder));
-        return;
+        //
+        // replaced by equivalent processing in DomainObjectAnnotationFacetFactory
+        // that checks the configured value.
+        //
     }
 
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AuditableFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AuditableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AuditableFacetForDomainObjectAnnotation.java
index c0ab0a1..4a88191 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AuditableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AuditableFacetForDomainObjectAnnotation.java
@@ -19,11 +19,13 @@
 package org.apache.isis.core.metamodel.facets.object.domainobject;
 
 
+import org.apache.isis.applib.annotation.Auditing;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacetAbstract;
+import org.apache.isis.core.metamodel.facets.object.audit.configuration.AuditableFacetForDomainObjectAnnotationAsConfigured;
 
 
 public class AuditableFacetForDomainObjectAnnotation extends AuditableFacetAbstract {
@@ -33,23 +35,21 @@ public class AuditableFacetForDomainObjectAnnotation extends AuditableFacetAbstr
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
-        final DomainObject.AuditingPolicy auditingPolicy = domainObject.auditing();
-        switch (auditingPolicy) {
-            case AS_CONFIGURED:
+        if(domainObject == null) {
+            return null;
+        }
 
-                //
-                // this rule also implemented in AuditableFacetFromConfigurationFactory
-                // don't overwrite if already explicitly specified.
-                //
-                if(holder.containsDoOpFacet(AuditableFacet.class)) {
-                    // do not replace
-                    return null;
-                }
+        final Auditing auditing = domainObject.auditing();
+        switch (auditing) {
+            case AS_CONFIGURED:
 
                 final AuditObjectsConfiguration setting = AuditObjectsConfiguration.parse(configuration);
-                return setting.asEnablement() == Enablement.ENABLED
-                        ? new AuditableFacetForDomainObjectAnnotation(Enablement.ENABLED, holder)
-                        : null;
+                switch (setting) {
+                    case NONE:
+                        return null;
+                    default:
+                        return new AuditableFacetForDomainObjectAnnotationAsConfigured(holder);
+                }
             case DISABLED:
                 return null;
             case ENABLED:
@@ -58,7 +58,9 @@ public class AuditableFacetForDomainObjectAnnotation extends AuditableFacetAbstr
         return null;
     }
 
-    private AuditableFacetForDomainObjectAnnotation(Enablement enablement, FacetHolder holder) {
+    protected AuditableFacetForDomainObjectAnnotation(
+            final Enablement enablement,
+            final FacetHolder holder) {
         super(holder, enablement);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AutoCompleteFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AutoCompleteFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AutoCompleteFacetForDomainObjectAnnotation.java
index cd45b62..703f5d8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AutoCompleteFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/AutoCompleteFacetForDomainObjectAnnotation.java
@@ -36,8 +36,12 @@ public class AutoCompleteFacetForDomainObjectAnnotation extends AutoCompleteFace
             final ServicesInjector servicesInjector,
             final FacetHolder holder) {
 
+        if(domainObject == null) {
+            return null;
+        }
+
         final Class<?> autoCompleteRepository = domainObject.autoCompleteRepository();
-        if(autoCompleteRepository == null) {
+        if(autoCompleteRepository == null || autoCompleteRepository == Object.class) {
             return null;
         }
         final String autoCompleteAction = domainObject.autoCompleteAction();

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetForDomainObjectAnnotation.java
index 74dfa00..7a80ceb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ChoicesFacetForDomainObjectAnnotation.java
@@ -31,6 +31,11 @@ public class ChoicesFacetForDomainObjectAnnotation extends ChoicesFacetFromBound
             final DomainObject domainObject,
             final QuerySubmitter querySubmitter,
             final FacetHolder facetHolder) {
+
+        if(domainObject == null) {
+            return null;
+        }
+
         final boolean bounded = domainObject.bounded();
         return bounded ? new ChoicesFacetForDomainObjectAnnotation(facetHolder, querySubmitter): null;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/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 942eacf..18a37d3 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
@@ -19,7 +19,9 @@
 package org.apache.isis.core.metamodel.facets.object.domainobject;
 
 
+import org.apache.isis.applib.annotation.Audited;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.PublishedObject;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationAware;
@@ -32,6 +34,10 @@ 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.object.audit.AuditableFacet;
+import org.apache.isis.core.metamodel.facets.object.audit.annotation.AuditableFacetAuditedAnnotation;
+import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
+import org.apache.isis.core.metamodel.facets.object.publishedobject.annotation.PublishedObjectFacetAnnotation;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
@@ -51,12 +57,6 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
     @Override
     public void process(ProcessClassContext processClassContext) {
 
-        final Class<?> cls = processClassContext.getCls();
-        final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
-        if(domainObject == null) {
-            return;
-        }
-
         processAuditing(processClassContext);
         processPublishing(processClassContext);
         processAutoComplete(processClassContext);
@@ -66,10 +66,10 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         processViewModel(processClassContext);
     }
 
-    private void processAuditing(ProcessClassContext processClassContext) {
+    private void processAuditing(final ProcessClassContext processClassContext) {
         final Class<?> cls = processClassContext.getCls();
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
-        final FacetHolder facetHolder = processClassContext.getFacetHolder();
+        final FacetHolder holder = processClassContext.getFacetHolder();
 
         //
         // this rule originally implemented only in AuditableFacetFromConfigurationFactory
@@ -81,16 +81,49 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
             return;
         }
 
-        FacetUtil.addFacet(AuditableFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder));
+
+        AuditableFacet auditableFacet;
+
+        // check for the deprecated annotation first
+        final Audited annotation = Annotations.getAnnotation(cls, Audited.class);
+        auditableFacet = AuditableFacetAuditedAnnotation.create(annotation, holder);
+
+        // else check for @DomainObject(auditing=....)
+        if(auditableFacet == null) {
+            auditableFacet = AuditableFacetForDomainObjectAnnotation.create(domainObject, configuration, holder);
+        }
+
+        FacetUtil.addFacet(auditableFacet);
     }
 
 
-    private void processPublishing(ProcessClassContext processClassContext) {
+    private void processPublishing(final ProcessClassContext processClassContext) {
         final Class<?> cls = processClassContext.getCls();
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacet(PublishedObjectFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder));
+        //
+        // this rule inspired by a similar rule for auditing, see above
+        //
+        if(HasTransactionId.class.isAssignableFrom(cls)) {
+            // do not install on any implementation of HasTransactionId
+            // (ie commands, audit entries, published events).
+            return;
+        }
+
+        PublishedObjectFacet publishedObjectFacet;
+
+        // check for the deprecated @PublishedObject annotation first
+        final PublishedObject publishedObject = Annotations.getAnnotation(processClassContext.getCls(), PublishedObject.class);
+        publishedObjectFacet = PublishedObjectFacetAnnotation.create(publishedObject, processClassContext.getFacetHolder());
+
+        // else check from @DomainObject(publishing=...)
+        if(publishedObjectFacet == null) {
+            publishedObjectFacet=
+                    PublishedObjectFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder);
+        }
+        FacetUtil.addFacet(
+                publishedObjectFacet);
     }
 
     private void processAutoComplete(final ProcessClassContext processClassContext) {
@@ -98,7 +131,9 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacet(AutoCompleteFacetForDomainObjectAnnotation.create(domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder));
+        FacetUtil.addFacet(
+                AutoCompleteFacetForDomainObjectAnnotation.create(
+                        domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder));
     }
 
     private void processBounded(final ProcessClassContext processClassContext) {
@@ -106,7 +141,8 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacet(ChoicesFacetForDomainObjectAnnotation.create(domainObject, querySubmitter, facetHolder));
+        FacetUtil.addFacet(
+                ChoicesFacetForDomainObjectAnnotation.create(domainObject, querySubmitter, facetHolder));
     }
 
     private void processEditing(final ProcessClassContext processClassContext) {
@@ -114,7 +150,8 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacet(ImmutableFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder));
+        FacetUtil.addFacet(
+                ImmutableFacetForDomainObjectAnnotation.create(domainObject, configuration, facetHolder));
     }
 
     private void processObjectType(final ProcessClassContext processClassContext) {
@@ -122,7 +159,8 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacet(ObjectSpecIdFacetForDomainObjectAnnotation.create(domainObject, facetHolder));
+        FacetUtil.addFacet(
+                ObjectSpecIdFacetForDomainObjectAnnotation.create(domainObject, facetHolder));
     }
 
     private void processViewModel(final ProcessClassContext processClassContext) {
@@ -130,7 +168,9 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        FacetUtil.addFacet(ViewModelFacetForDomainObjectAnnotation.create(domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder));
+        FacetUtil.addFacet(
+                ViewModelFacetForDomainObjectAnnotation.create(
+                        domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder));
     }
 
 
@@ -139,7 +179,6 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
         this.configuration = configuration;
     }
 
-
     @Override
     public void setAdapterManager(AdapterManager adapterManager) {
         this.adapterManager = adapterManager;

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ImmutableFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ImmutableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ImmutableFacetForDomainObjectAnnotation.java
index 9142dcf..7db27c7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ImmutableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ImmutableFacetForDomainObjectAnnotation.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.domainobject;
 
 import com.google.common.base.Strings;
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.EditPolicy;
+import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -40,9 +40,13 @@ public class ImmutableFacetForDomainObjectAnnotation extends ImmutableFacetAbstr
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
-        final EditPolicy editPolicy = domainObject.editing();
+        if(domainObject == null) {
+            return null;
+        }
+
+        final Editing editing = domainObject.editing();
         final String disabledReason = domainObject.editingDisabledReason();
-        switch (editPolicy) {
+        switch (editing) {
             case AS_CONFIGURED:
 
                 if(holder.containsDoOpFacet(ImmutableFacet.class)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectSpecIdFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectSpecIdFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectSpecIdFacetForDomainObjectAnnotation.java
index 963b526..329c96c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectSpecIdFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectSpecIdFacetForDomainObjectAnnotation.java
@@ -31,6 +31,10 @@ public class ObjectSpecIdFacetForDomainObjectAnnotation extends ObjectSpecIdFace
             final DomainObject domainObject,
             final FacetHolder holder) {
 
+        if(domainObject == null) {
+            return null;
+        }
+
         final String objectType = domainObject.objectType();
         if(Strings.isNullOrEmpty(objectType)) {
             return null;

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishObjectsConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishObjectsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishObjectsConfiguration.java
index d77485c..4458b09 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishObjectsConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishObjectsConfiguration.java
@@ -1,3 +1,21 @@
+/*
+ *  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.core.commons.config.IsisConfiguration;

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotation.java
index a2b5329..b6143b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotation.java
@@ -21,7 +21,9 @@ package org.apache.isis.core.metamodel.facets.object.domainobject;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.PublishedObject;
-import org.apache.isis.applib.annotation.PublishingPolicy;
+import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.PublishingChangeKind;
+import org.apache.isis.applib.annotation.PublishingPayloadFactoryForObject;
 import org.apache.isis.applib.services.publish.EventPayload;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -35,29 +37,35 @@ public class PublishedObjectFacetForDomainObjectAnnotation extends PublishedObje
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
-        final PublishingPolicy publishingPolicy = domainObject.publishing();
+        if(domainObject == null) {
+            return null;
+        }
 
-        switch (publishingPolicy) {
-            case AS_CONFIGURED:
+        final Publishing publishing = domainObject.publishing();
 
-                if(holder.containsDoOpFacet(PublishedObjectFacet.class)) {
-                    // do not replace
-                    return null;
-                }
+        switch (publishing) {
+            case AS_CONFIGURED:
 
                 final PublishObjectsConfiguration setting = PublishObjectsConfiguration.parse(configuration);
-                return setting == PublishObjectsConfiguration.ALL
-                        ? new PublishedObjectFacetForDomainObjectAnnotation(newPayloadFactory(domainObject.publishingPayloadFactory()), holder)
-                        : null;
+                switch (setting) {
+                    case NONE:
+                        return null;
+                    default:
+                    return new PublishedObjectFacetForDomainObjectAnnotationAsConfigured(
+                            newPayloadFactory(domainObject), holder);
+                }
             case DISABLED:
                 return null;
             case ENABLED:
-                return new PublishedObjectFacetForDomainObjectAnnotation(newPayloadFactory(domainObject.publishingPayloadFactory()), holder);
+                return new PublishedObjectFacetForDomainObjectAnnotation(
+                        newPayloadFactory(domainObject), holder);
         }
         return null;
     }
 
-    private static DomainObject.PublishingPayloadFactory newPayloadFactory(final Class<? extends DomainObject.PublishingPayloadFactory> value) {
+    protected static PublishingPayloadFactoryForObject newPayloadFactory(
+            final DomainObject domainObject) {
+        final Class<? extends PublishingPayloadFactoryForObject> value = domainObject.publishingPayloadFactory();
         if(value == null) {
             return null;
         }
@@ -71,13 +79,13 @@ public class PublishedObjectFacetForDomainObjectAnnotation extends PublishedObje
     }
 
 
-    private PublishedObjectFacetForDomainObjectAnnotation(DomainObject.PublishingPayloadFactory publishingPayloadFactory, final FacetHolder holder) {
+    PublishedObjectFacetForDomainObjectAnnotation(PublishingPayloadFactoryForObject publishingPayloadFactory, final FacetHolder holder) {
         super(legacyPayloadFactoryFor(publishingPayloadFactory), holder);
     }
 
-    private static PublishedObject.PayloadFactory legacyPayloadFactoryFor(DomainObject.PublishingPayloadFactory publishingPayloadFactory) {
-        if(publishingPayloadFactory instanceof DomainObject.PublishingPayloadFactory.Adapter) {
-            final DomainObject.PublishingPayloadFactory.Adapter adapter = (DomainObject.PublishingPayloadFactory.Adapter) publishingPayloadFactory;
+    private static PublishedObject.PayloadFactory legacyPayloadFactoryFor(PublishingPayloadFactoryForObject publishingPayloadFactory) {
+        if(publishingPayloadFactory instanceof PublishingPayloadFactoryForObject.Adapter) {
+            final PublishingPayloadFactoryForObject.Adapter adapter = (PublishingPayloadFactoryForObject.Adapter) publishingPayloadFactory;
             return adapter.getPayloadFactory();
         }
         return new LegacyAdapter(publishingPayloadFactory);
@@ -85,15 +93,15 @@ public class PublishedObjectFacetForDomainObjectAnnotation extends PublishedObje
 
     private static class LegacyAdapter implements PublishedObject.PayloadFactory {
 
-        private final DomainObject.PublishingPayloadFactory payloadFactory;
+        private final PublishingPayloadFactoryForObject payloadFactory;
 
-        LegacyAdapter(final DomainObject.PublishingPayloadFactory payloadFactory) {
+        LegacyAdapter(final PublishingPayloadFactoryForObject payloadFactory) {
             this.payloadFactory = payloadFactory;
         }
 
         @Override
         public EventPayload payloadFor(Object changedObject, PublishedObject.ChangeKind changeKind) {
-            return payloadFactory.payloadFor(changedObject, DomainObject.PublishingChangeKind.from(changeKind));
+            return payloadFactory.payloadFor(changedObject, PublishingChangeKind.from(changeKind));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotationAsConfigured.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotationAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotationAsConfigured.java
new file mode 100644
index 0000000..72077a1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/PublishedObjectFacetForDomainObjectAnnotationAsConfigured.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobject;
+
+import org.apache.isis.applib.annotation.PublishingPayloadFactoryForObject;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class PublishedObjectFacetForDomainObjectAnnotationAsConfigured extends PublishedObjectFacetForDomainObjectAnnotation {
+
+
+    PublishedObjectFacetForDomainObjectAnnotationAsConfigured(final PublishingPayloadFactoryForObject publishingPayloadFactory, final FacetHolder holder) {
+        super(publishingPayloadFactory, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ViewModelFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ViewModelFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ViewModelFacetForDomainObjectAnnotation.java
index ab2c649..8eb5ef4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ViewModelFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/ViewModelFacetForDomainObjectAnnotation.java
@@ -36,6 +36,10 @@ public class ViewModelFacetForDomainObjectAnnotation extends ViewModelFacetDecla
             final ServicesInjector servicesInjector,
             final FacetHolder holder) {
 
+        if(domainObject == null) {
+            return null;
+        }
+
         final boolean viewModel = domainObject.viewModel();
         if(!viewModel) {
             return null;

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
new file mode 100644
index 0000000..5722b21
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.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.domainobjectlayout;
+
+
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+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;
+
+
+public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
+
+    public DomainObjectLayoutFacetFactory() {
+        super(FeatureType.OBJECTS_ONLY);
+    }
+
+    @Override
+    public void process(ProcessClassContext processClassContext) {
+        final Class<?> cls = processClassContext.getCls();
+        final DomainObjectLayout domainObjectLayout = Annotations.getAnnotation(cls, DomainObjectLayout.class);
+        final FacetHolder facetHolder = processClassContext.getFacetHolder();
+
+        FacetUtil.addFacet(
+                CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
+        FacetUtil.addFacet(
+                DescribedAsFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
+        FacetUtil.addFacet(
+                NamedFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
+        FacetUtil.addFacet(
+                PagedFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
+        FacetUtil.addFacet(
+                PluralFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
+        FacetUtil.addFacet(
+                BookmarkPolicyFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
+
+        return;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactory.java
deleted file mode 100644
index 4e8314b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactory.java
+++ /dev/null
@@ -1,54 +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.domainobjectlayout;
-
-
-import org.apache.isis.applib.annotation.DomainObjectLayout;
-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;
-
-
-public class DomainObjectLayoutFactory extends FacetFactoryAbstract {
-
-    public DomainObjectLayoutFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(ProcessClassContext processClassContext) {
-        final Class<?> cls = processClassContext.getCls();
-        final DomainObjectLayout domainObjectLayout = Annotations.getAnnotation(cls, DomainObjectLayout.class);
-
-        final FacetHolder facetHolder = processClassContext.getFacetHolder();
-
-        FacetUtil.addFacet(CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
-        FacetUtil.addFacet(DescribedAsFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
-        FacetUtil.addFacet(NamedFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
-        FacetUtil.addFacet(PagedFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
-        FacetUtil.addFacet(PluralFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
-        FacetUtil.addFacet(BookmarkPolicyFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
-
-        return;
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotation.java
index 3a211f0..0d279d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotation.java
@@ -21,13 +21,37 @@ package org.apache.isis.core.metamodel.facets.object.publishedobject.annotation;
 
 import org.apache.isis.applib.annotation.PublishedObject;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacetAbstract;
 
 public class PublishedObjectFacetAnnotation extends PublishedObjectFacetAbstract {
 
-    public PublishedObjectFacetAnnotation(PublishedObject.PayloadFactory eventCanonicalizer, final FacetHolder holder) {
-        super(eventCanonicalizer, holder);
+    public static PublishedObjectFacet create(
+            final PublishedObject publishedObject,
+            final FacetHolder holder) {
+
+        if (publishedObject == null) {
+            return null;
+        }
+
+        else return new PublishedObjectFacetAnnotation(newPayloadFactory(publishedObject.value()), holder);
     }
 
+    private PublishedObjectFacetAnnotation(final PublishedObject.PayloadFactory payloadFactory, final FacetHolder holder) {
+        super(payloadFactory, holder);
+    }
+
+    private static PublishedObject.PayloadFactory newPayloadFactory(final Class<? extends PublishedObject.PayloadFactory> value) {
+        if(value == null) {
+            return null;
+        }
+        try {
+            return value.newInstance();
+        } catch (final InstantiationException e) {
+            return null;
+        } catch (final IllegalAccessException e) {
+            return null;
+        }
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotationFactory.java
index 5baae70..c34da38 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/publishedobject/annotation/PublishedObjectFacetAnnotationFactory.java
@@ -19,13 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.object.publishedobject.annotation;
 
-import org.apache.isis.applib.annotation.PublishedObject;
-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.object.publishedobject.PublishedObjectFacet;
 
 public class PublishedObjectFacetAnnotationFactory extends FacetFactoryAbstract {
 
@@ -34,27 +29,12 @@ public class PublishedObjectFacetAnnotationFactory extends FacetFactoryAbstract
     }
 
     @Override
-    public void process(ProcessClassContext processClassContext) {
-        super.process(processClassContext);
-        final PublishedObject annotation = Annotations.getAnnotation(processClassContext.getCls(), PublishedObject.class);
-        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
-    }
+    public void process(final ProcessClassContext processClassContext) {
 
-    private PublishedObjectFacet create(final PublishedObject annotation, final FacetHolder holder) {
-        return annotation == null ? null : new PublishedObjectFacetAnnotation(newPayloadFactory(annotation.value()), holder);
+        //
+        // moved to DomainObjectAnnotationFacetFactory
+        //
     }
 
-    private static PublishedObject.PayloadFactory newPayloadFactory(final Class<? extends PublishedObject.PayloadFactory> value) {
-        if(value == null) {
-            return null;
-        }
-        try {
-            return (PublishedObject.PayloadFactory) value.newInstance();
-        } catch (final InstantiationException e) {
-            return null;
-        } catch (final IllegalAccessException e) {
-            return null;
-        }
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
new file mode 100644
index 0000000..37363f4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
@@ -0,0 +1,67 @@
+/*
+ *  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.param.layout;
+
+import java.lang.annotation.Annotation;
+import org.apache.isis.applib.annotation.ParameterLayout;
+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.FacetedMethodParameter;
+
+public class ParameterLayoutFacetFactory extends FacetFactoryAbstract {
+
+    public ParameterLayoutFacetFactory() {
+        super(FeatureType.PARAMETERS_ONLY);
+    }
+
+    @Override
+    public void processParams(final ProcessParameterContext processParameterContext) {
+        final Class<?>[] parameterTypes = processParameterContext.getMethod().getParameterTypes();
+        if (processParameterContext.getParamNum() >= parameterTypes.length) {
+            // ignore
+            return;
+        }
+        
+        final Annotation[] parameterAnnotations = Annotations.getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
+        for (final Annotation parameterAnnotation : parameterAnnotations) {
+            if (parameterAnnotation instanceof ParameterLayout) {
+                final ParameterLayout parameterLayout = (ParameterLayout) parameterAnnotation;
+                addFacets(processParameterContext, parameterLayout);
+                return;
+            }
+        }
+    }
+
+    protected void addFacets(ProcessParameterContext processParameterContext, ParameterLayout parameterLayout) {
+        final FacetedMethodParameter facetHolder = processParameterContext.getFacetHolder();
+
+        FacetUtil.addFacet(CssClassFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+        FacetUtil.addFacet(DescribedAsFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+        FacetUtil.addFacet(LabelAtFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+        FacetUtil.addFacet(MultiLineFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+        FacetUtil.addFacet(NamedFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+        FacetUtil.addFacet(RenderedAdjustedFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+        FacetUtil.addFacet(TypicalLengthFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFactory.java
deleted file mode 100644
index 757b68b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFactory.java
+++ /dev/null
@@ -1,67 +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.param.layout;
-
-import java.lang.annotation.Annotation;
-import org.apache.isis.applib.annotation.ParameterLayout;
-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.FacetedMethodParameter;
-
-public class ParameterLayoutFactory extends FacetFactoryAbstract {
-
-    public ParameterLayoutFactory() {
-        super(FeatureType.PARAMETERS_ONLY);
-    }
-
-    @Override
-    public void processParams(final ProcessParameterContext processParameterContext) {
-        final Class<?>[] parameterTypes = processParameterContext.getMethod().getParameterTypes();
-        if (processParameterContext.getParamNum() >= parameterTypes.length) {
-            // ignore
-            return;
-        }
-        
-        final Annotation[] parameterAnnotations = Annotations.getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
-        for (final Annotation parameterAnnotation : parameterAnnotations) {
-            if (parameterAnnotation instanceof ParameterLayout) {
-                final ParameterLayout parameterLayout = (ParameterLayout) parameterAnnotation;
-                addFacets(processParameterContext, parameterLayout);
-                return;
-            }
-        }
-    }
-
-    protected void addFacets(ProcessParameterContext processParameterContext, ParameterLayout parameterLayout) {
-        final FacetedMethodParameter facetHolder = processParameterContext.getFacetHolder();
-
-        FacetUtil.addFacet(CssClassFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-        FacetUtil.addFacet(DescribedAsFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-        FacetUtil.addFacet(LabelAtFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-        FacetUtil.addFacet(MultiLineFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-        FacetUtil.addFacet(NamedFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-        FacetUtil.addFacet(RenderedAdjustedFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-        FacetUtil.addFacet(TypicalLengthFacetForParameterLayoutAnnotation.create(parameterLayout, facetHolder));
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MandatoryFacetForParameterAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MandatoryFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MandatoryFacetForParameterAnnotation.java
index 733e472..65de746 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MandatoryFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MandatoryFacetForParameterAnnotation.java
@@ -32,11 +32,20 @@ public abstract class MandatoryFacetForParameterAnnotation extends MandatoryFace
         super(holder, semantics);
     }
 
-    static MandatoryFacet create(final Parameter parameter, Method method, final FacetHolder holder) {
+    static MandatoryFacet create(
+            final Parameter parameter,
+            final Method method,
+            final FacetHolder holder) {
+
+        if (parameter == null) {
+            return null;
+        }
+
         final Class<?> returnType = method.getReturnType();
         if (returnType.isPrimitive()) {
             return new MandatoryFacetForParameterAnnotation.Primitive(holder);
         }
+
         final Optionality optionality = parameter.optional();
         switch (optionality) {
             case DEFAULT:

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MaxLengthFacetForParameterAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MaxLengthFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MaxLengthFacetForParameterAnnotation.java
index 74c17c3..b065684 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MaxLengthFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MaxLengthFacetForParameterAnnotation.java
@@ -26,7 +26,14 @@ import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacetAbst
 
 public class MaxLengthFacetForParameterAnnotation extends MaxLengthFacetAbstract {
 
-    public static MaxLengthFacet create(Parameter parameter, FacetHolder holder) {
+    public static MaxLengthFacet create(
+            final Parameter parameter,
+            final FacetHolder holder) {
+
+        if (parameter == null) {
+            return null;
+        }
+
         final int maxLength = parameter.maxLength();
         return maxLength != -1
                 ? new MaxLengthFacetForParameterAnnotation(maxLength, holder)

http://git-wip-us.apache.org/repos/asf/isis/blob/62ebe98d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MustSatisfySpecificationFacetForParameterAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MustSatisfySpecificationFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MustSatisfySpecificationFacetForParameterAnnotation.java
index 43d9624..25beaf3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MustSatisfySpecificationFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/MustSatisfySpecificationFacetForParameterAnnotation.java
@@ -30,6 +30,11 @@ import org.apache.isis.core.metamodel.facets.propparam.mustsatisfyspec.MustSatis
 public class MustSatisfySpecificationFacetForParameterAnnotation extends MustSatisfySpecificationFacetAbstract {
 
     static Facet create(final Parameter parameter, final FacetHolder holder) {
+
+        if (parameter == null) {
+            return null;
+        }
+
         final Class<?>[] values = parameter.mustSatisfy();
         final List<Specification> specifications = Lists.newArrayList();
         for (final Class<?> value : values) {