You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/12/30 14:57:26 UTC

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

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
index 41c64b8..21a28df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
@@ -40,12 +40,6 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
-        final Method method = processMethodContext.getMethod();
-        final Parameter parameter = Annotations.getAnnotation(method, Parameter.class);
-        if (parameter == null) {
-            return;
-        }
-
         processMaxLength(processMethodContext);
         processMustSatisfy(processMethodContext);
         processOptional(processMethodContext);
@@ -75,7 +69,8 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
         final Parameter parameter = Annotations.getAnnotation(method, Parameter.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        FacetUtil.addFacet(MandatoryFacetForParameterAnnotation.create(parameter, method, holder));
+        FacetUtil.addFacet(
+                MandatoryFacetForParameterAnnotation.create(parameter, method, holder));
     }
 
     private void processRegEx(final ProcessMethodContext processMethodContext) {
@@ -83,7 +78,8 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
         final Parameter parameter = Annotations.getAnnotation(method, Parameter.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        FacetUtil.addFacet(RegExFacetForParameterAnnotation.create(parameter, holder));
+        FacetUtil.addFacet(
+                RegExFacetForParameterAnnotation.create(parameter, holder));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExFacetForParameterAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExFacetForParameterAnnotation.java
index d28ed17..722bf68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExFacetForParameterAnnotation.java
@@ -29,7 +29,13 @@ public class RegExFacetForParameterAnnotation extends RegExFacetAbstract {
 
     private final Pattern pattern;
 
-    static RegExFacet create(final Parameter parameter, final FacetHolder holder) {
+    static RegExFacet create(
+            final Parameter parameter,
+            final FacetHolder holder) {
+
+        if (parameter == null) {
+            return null;
+        }
 
         final String pattern = parameter.regexPattern();
         final int patternFlags = parameter.regexPatternFlags();

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/DisabledFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/DisabledFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/DisabledFacetForPropertyAnnotation.java
index c169c28..ae2000b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/DisabledFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/DisabledFacetForPropertyAnnotation.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.properties.property;
 
-import org.apache.isis.applib.annotation.EditPolicy;
+import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
@@ -30,10 +30,15 @@ import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstr
 public class DisabledFacetForPropertyAnnotation extends DisabledFacetAbstractImpl {
 
     public static DisabledFacet create(final Property property, final FacetHolder holder) {
-        final EditPolicy editPolicy = property.editing();
+
+        if (property == null) {
+            return null;
+        }
+
+        final Editing editing = property.editing();
         final String disabledReason = property.editingDisabledReason();
 
-        switch (editPolicy) {
+        switch (editing) {
             case AS_CONFIGURED:
 
                 // nothing needs to be done here; the DomainObjectFactory (processing @DomainObject annotation)

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/HiddenFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/HiddenFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/HiddenFacetForPropertyAnnotation.java
index 4e38895..f78da2d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/HiddenFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/HiddenFacetForPropertyAnnotation.java
@@ -30,8 +30,17 @@ import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
 public class HiddenFacetForPropertyAnnotation extends HiddenFacetAbstract {
 
     public static HiddenFacet create(final Property property, final FacetHolder holder) {
+
+        if (property == null) {
+            return null;
+        }
+
         final Where where = property.hidden();
-        return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForPropertyAnnotation(where, holder) : null;
+        if (where != null && where != Where.NOT_SPECIFIED) {
+            return new HiddenFacetForPropertyAnnotation(where, holder);
+        }
+
+        return null;
     }
 
     private HiddenFacetForPropertyAnnotation(final Where where, final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MandatoryFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MandatoryFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MandatoryFacetForPropertyAnnotation.java
index 5e22fb2..f36a871 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MandatoryFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MandatoryFacetForPropertyAnnotation.java
@@ -32,11 +32,20 @@ public abstract class MandatoryFacetForPropertyAnnotation extends MandatoryFacet
         super(holder, semantics);
     }
 
-    static MandatoryFacet create(final Property property, Method method, final FacetHolder holder) {
+    static MandatoryFacet create(
+            final Property property,
+            final Method method,
+            final FacetHolder holder) {
+
+        if (property == null) {
+            return null;
+        }
+
         final Class<?> returnType = method.getReturnType();
         if (returnType.isPrimitive()) {
             return new MandatoryFacetForPropertyAnnotation.Primitive(holder);
         }
+
         final Optionality optionality = property.optional();
         switch (optionality) {
             case DEFAULT:

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MaxLengthFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MaxLengthFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MaxLengthFacetForPropertyAnnotation.java
index 677eb2a..fbe29f5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MaxLengthFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MaxLengthFacetForPropertyAnnotation.java
@@ -26,7 +26,13 @@ import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacetAbst
 
 public class MaxLengthFacetForPropertyAnnotation extends MaxLengthFacetAbstract {
 
-    public static MaxLengthFacet create(Property property, FacetHolder holder) {
+    public static MaxLengthFacet create(
+            final Property property,
+            final FacetHolder holder) {
+
+        if (property == null) {
+            return null;
+        }
         final int maxLength = property.maxLength();
         return maxLength != -1
                 ? new MaxLengthFacetForPropertyAnnotation(maxLength, holder)

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MustSatisfySpecificationFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MustSatisfySpecificationFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MustSatisfySpecificationFacetForPropertyAnnotation.java
index d2859b5..374d302 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MustSatisfySpecificationFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/MustSatisfySpecificationFacetForPropertyAnnotation.java
@@ -29,7 +29,14 @@ import org.apache.isis.core.metamodel.facets.propparam.mustsatisfyspec.MustSatis
 
 public class MustSatisfySpecificationFacetForPropertyAnnotation extends MustSatisfySpecificationFacetAbstract {
 
-    static Facet create(final Property property, final FacetHolder holder) {
+    static Facet create(
+            final Property property,
+            final FacetHolder holder) {
+
+        if (property == null) {
+            return null;
+        }
+
         final Class<?>[] values = property.mustSatisfy();
         final List<Specification> specifications = Lists.newArrayList();
         for (final Class<?> value : values) {

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedFacetForPropertyAnnotation.java
index ee16eb6..011a0c6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/NotPersistedFacetForPropertyAnnotation.java
@@ -30,7 +30,14 @@ public class NotPersistedFacetForPropertyAnnotation extends NotPersistedFacetAbs
         super(holder);
     }
 
-    static NotPersistedFacet create(final Property property, final FacetHolder holder) {
+    static NotPersistedFacet create(
+            final Property property,
+            final FacetHolder holder) {
+
+        if (property == null) {
+            return null;
+        }
+
         final boolean notPersisted = property.notPersisted();
         final boolean persisted = !notPersisted;
         if(persisted) {

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/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 792ac23..f382a19 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
@@ -40,12 +40,6 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
-        final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, Property.class);
-        if (property == null) {
-            return;
-        }
-
         processInteraction(processMethodContext);
         processHidden(processMethodContext);
         processEditing(processMethodContext);
@@ -113,7 +107,8 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
         final Property property = Annotations.getAnnotation(method, Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        FacetUtil.addFacet(MandatoryFacetForPropertyAnnotation.create(property, method, holder));
+        FacetUtil.addFacet(
+                MandatoryFacetForPropertyAnnotation.create(property, method, holder));
     }
 
     private void processRegEx(final ProcessMethodContext processMethodContext) {
@@ -121,7 +116,8 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
         final Property property = Annotations.getAnnotation(method, Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        FacetUtil.addFacet(RegExFacetForPropertyAnnotation.create(property, holder));
+        FacetUtil.addFacet(
+                RegExFacetForPropertyAnnotation.create(property, holder));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/RegExFacetForPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/RegExFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/RegExFacetForPropertyAnnotation.java
index 14b3db2..55e099d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/RegExFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/RegExFacetForPropertyAnnotation.java
@@ -29,7 +29,13 @@ public class RegExFacetForPropertyAnnotation extends RegExFacetAbstract {
 
     private final Pattern pattern;
 
-    static RegExFacet create(final Property property, final FacetHolder holder) {
+    static RegExFacet create(
+            final Property property,
+            final FacetHolder holder) {
+
+        if (property == null) {
+            return null;
+        }
 
         final String pattern = property.regexPattern();
         final int patternFlags = property.regexPatternFlags();

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
new file mode 100644
index 0000000..0641093
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
@@ -0,0 +1,175 @@
+/*
+ *  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.properties.propertylayout;
+
+import java.util.Properties;
+import org.apache.isis.applib.annotation.PropertyLayout;
+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.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.objpropparam.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.propparam.labelat.LabelAtFacet;
+import org.apache.isis.core.metamodel.facets.propparam.multiline.MultiLineFacet;
+import org.apache.isis.core.metamodel.facets.propparam.renderedadjusted.RenderedAdjustedFacet;
+
+public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+
+    public PropertyLayoutFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+
+        Properties properties = processMethodContext.metadataProperties("propertyLayout");
+        if(properties == null) {
+            // alternate key
+            properties = processMethodContext.metadataProperties("layout");
+        }
+        final PropertyLayout propertyLayout = Annotations.getAnnotation(processMethodContext.getMethod(), PropertyLayout.class);
+
+
+        // cssClass
+        CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(cssClassFacet == null) {
+            cssClassFacet = CssClassFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(cssClassFacet);
+
+
+        // describedAs
+        DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(describedAsFacet == null) {
+            describedAsFacet = DescribedAsFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(describedAsFacet);
+
+
+        // hidden
+        HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(hiddenFacet == null) {
+            hiddenFacet = HiddenFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(hiddenFacet);
+
+
+        // labelAt
+        LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(labelAtFacet == null) {
+            labelAtFacet = LabelAtFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(labelAtFacet);
+
+
+        // multiLine
+        MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(multiLineFacet == null) {
+            multiLineFacet = MultiLineFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(multiLineFacet);
+
+
+        // named
+        NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(namedFacet == null) {
+            namedFacet = NamedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(namedFacet);
+
+
+        // renderedAsDayBefore
+        RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(renderedAdjustedFacet == null) {
+            renderedAdjustedFacet = RenderedAdjustedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(renderedAdjustedFacet);
+
+
+        // typicalLength
+        TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        if(typicalLengthFacet == null) {
+            typicalLengthFacet = TypicalLengthFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
+        }
+        FacetUtil.addFacet(typicalLengthFacet);
+
+    }
+
+    @Override
+    public void process(ProcessContributeeMemberContext processMemberContext) {
+        final FacetHolder holder = processMemberContext.getFacetHolder();
+
+        Properties properties = processMemberContext.metadataProperties("propertyLayout");
+        if(properties == null) {
+            // alternate key
+            properties = processMemberContext.metadataProperties("layout");
+        }
+
+
+        // cssClass
+        CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(cssClassFacet);
+
+
+        // describedAs
+        DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(describedAsFacet);
+
+
+        // hidden
+        HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(hiddenFacet);
+
+
+        // labelAt
+        LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(labelAtFacet);
+
+
+        // multiLine
+        MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(multiLineFacet);
+
+
+        // named
+        NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(namedFacet);
+
+
+        // renderedAsDayBefore
+        RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(renderedAdjustedFacet);
+
+
+        // typicalLength
+        TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties.create(properties, holder);
+        FacetUtil.addFacet(typicalLengthFacet);
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFactory.java
deleted file mode 100644
index b9075c3..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFactory.java
+++ /dev/null
@@ -1,175 +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.properties.propertylayout;
-
-import java.util.Properties;
-import org.apache.isis.applib.annotation.PropertyLayout;
-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.members.cssclass.CssClassFacet;
-import org.apache.isis.core.metamodel.facets.objpropparam.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.facets.propparam.labelat.LabelAtFacet;
-import org.apache.isis.core.metamodel.facets.propparam.multiline.MultiLineFacet;
-import org.apache.isis.core.metamodel.facets.propparam.renderedadjusted.RenderedAdjustedFacet;
-
-public class PropertyLayoutFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
-
-    public PropertyLayoutFactory() {
-        super(FeatureType.PROPERTIES_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-
-        final FacetHolder holder = processMethodContext.getFacetHolder();
-
-        Properties properties = processMethodContext.metadataProperties("propertyLayout");
-        if(properties == null) {
-            // alternate key
-            properties = processMethodContext.metadataProperties("layout");
-        }
-        final PropertyLayout propertyLayout = Annotations.getAnnotation(processMethodContext.getMethod(), PropertyLayout.class);
-
-
-        // cssClass
-        CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(cssClassFacet == null) {
-            cssClassFacet = CssClassFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(cssClassFacet);
-
-
-        // describedAs
-        DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(describedAsFacet == null) {
-            describedAsFacet = DescribedAsFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(describedAsFacet);
-
-
-        // hidden
-        HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(hiddenFacet == null) {
-            hiddenFacet = HiddenFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(hiddenFacet);
-
-
-        // labelAt
-        LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(labelAtFacet == null) {
-            labelAtFacet = LabelAtFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(labelAtFacet);
-
-
-        // multiLine
-        MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(multiLineFacet == null) {
-            multiLineFacet = MultiLineFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(multiLineFacet);
-
-
-        // named
-        NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(namedFacet == null) {
-            namedFacet = NamedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(namedFacet);
-
-
-        // renderedAsDayBefore
-        RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(renderedAdjustedFacet == null) {
-            renderedAdjustedFacet = RenderedAdjustedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(renderedAdjustedFacet);
-
-
-        // typicalLength
-        TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        if(typicalLengthFacet == null) {
-            typicalLengthFacet = TypicalLengthFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
-        }
-        FacetUtil.addFacet(typicalLengthFacet);
-
-    }
-
-    @Override
-    public void process(ProcessContributeeMemberContext processMemberContext) {
-        final FacetHolder holder = processMemberContext.getFacetHolder();
-
-        Properties properties = processMemberContext.metadataProperties("propertyLayout");
-        if(properties == null) {
-            // alternate key
-            properties = processMemberContext.metadataProperties("layout");
-        }
-
-
-        // cssClass
-        CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(cssClassFacet);
-
-
-        // describedAs
-        DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(describedAsFacet);
-
-
-        // hidden
-        HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(hiddenFacet);
-
-
-        // labelAt
-        LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(labelAtFacet);
-
-
-        // multiLine
-        MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(multiLineFacet);
-
-
-        // named
-        NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(namedFacet);
-
-
-        // renderedAsDayBefore
-        RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(renderedAdjustedFacet);
-
-
-        // typicalLength
-        TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties.create(properties, holder);
-        FacetUtil.addFacet(typicalLengthFacet);
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/CollectionLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/CollectionLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/CollectionLayoutFacetRepr.java
index ed5ab80..3b71f50 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/CollectionLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/CollectionLayoutFacetRepr.java
@@ -17,7 +17,7 @@
 package org.apache.isis.core.metamodel.layoutmetadata;
 
 
-import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.RenderType;
 import org.apache.isis.applib.annotation.Where;
 
 public class CollectionLayoutFacetRepr {
@@ -27,7 +27,7 @@ public class CollectionLayoutFacetRepr {
     public Where hidden;
     public String named;
     public int paged;
-    public CollectionLayout.RenderType render;
+    public RenderType render;
     public String sortedBy;
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index dbcbbfc..46d9a18 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -22,6 +22,7 @@ import java.util.List;
 import com.google.common.collect.Lists;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.BulkInteractionContext;
+import org.apache.isis.applib.annotation.InvokedOn;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -188,7 +189,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
             bulkInteractionContext != null &&
             bulkInteractionContext.getInvokedAs() == null) {
             
-            bulkInteractionContext.setActionInvokedAs(BulkInteractionContext.InvokedAs.REGULAR);
+            bulkInteractionContext.setActionInvokedOn(InvokedOn.OBJECT);
             bulkInteractionContext.setDomainObjects(Collections.singletonList(contributee.getObject()));
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/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 d11e65d..bda7ba3 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
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facets.actions.defaults.method.ActionDefau
 import org.apache.isis.core.metamodel.facets.actions.exploration.annotation.ExplorationFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.actions.homepage.annotation.HomePageFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.actions.interaction.ActionInteractionFacetFactory;
-import org.apache.isis.core.metamodel.facets.actions.layout.ActionLayoutFactory;
+import org.apache.isis.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.actions.notcontributed.annotation.NotContributedFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.annotation.NotInServiceMenuFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.method.NotInServiceMenuFacetViaMethodFactory;
@@ -46,7 +46,7 @@ import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFa
 import org.apache.isis.core.metamodel.facets.collections.javautilcollection.CollectionFacetFactory;
 import org.apache.isis.core.metamodel.facets.collections.disabled.fromimmutable.DisabledFacetOnCollectionDerivedFromImmutableFactory;
 import org.apache.isis.core.metamodel.facets.collections.interaction.CollectionInteractionFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.layout.CollectionLayoutFactory;
+import org.apache.isis.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToRemoveFromAndValidateFacetFactory;
 import org.apache.isis.core.metamodel.facets.collections.notpersisted.annotation.NotPersistedFacetOnCollectionAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.collections.paged.annotation.PagedFacetOnCollectionFactory;
@@ -115,7 +115,7 @@ import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoEnhancem
 import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoPrefixedMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutablemarkerifc.ImmutableFacetMarkerInterfaceFactory;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DomainObjectLayoutFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DomainObjectLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.mask.annotation.MaskFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.maxlen.annotation.MaxLengthFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
@@ -151,7 +151,7 @@ import org.apache.isis.core.metamodel.facets.param.choices.methodnum.ActionParam
 import org.apache.isis.core.metamodel.facets.param.defaults.fromtype.ActionParameterDefaultFacetDerivedFromTypeFactory;
 import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.param.describedas.annotderived.DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory;
-import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFactory;
+import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.param.mandatory.annotation.MandatoryFacetOnParameterInvertedByOptionalAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.param.mandatory.dflt.MandatoryFacetOnParametersDefaultFactory;
 import org.apache.isis.core.metamodel.facets.param.multiline.annotation.MultiLineFacetOnParameterAnnotationFactory;
@@ -173,7 +173,7 @@ import org.apache.isis.core.metamodel.facets.properties.defaults.method.Property
 import org.apache.isis.core.metamodel.facets.properties.disabled.fromimmutable.DisabledFacetOnPropertyDerivedFromImmutableFactory;
 import org.apache.isis.core.metamodel.facets.properties.disabled.inferred.DisabledFacetOnPropertyInferredFactory;
 import org.apache.isis.core.metamodel.facets.properties.interaction.PropertyInteractionFacetFactory;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFactory;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.properties.mandatory.annotation.mandatory.MandatoryFacetOnPropertyMandatoryAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.properties.mandatory.annotation.optional.MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.properties.mandatory.dflt.MandatoryFacetOnProperyDefaultFactory;
@@ -415,12 +415,12 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
 
 
         addFactory(DomainServiceLayoutFactory.class);
-        addFactory(DomainObjectLayoutFactory.class);
+        addFactory(DomainObjectLayoutFacetFactory.class);
         // must come after MultiLine
-        addFactory(PropertyLayoutFactory.class);
-        addFactory(ParameterLayoutFactory.class);
-        addFactory(ActionLayoutFactory.class);
-        addFactory(CollectionLayoutFactory.class);
+        addFactory(PropertyLayoutFacetFactory.class);
+        addFactory(ParameterLayoutFacetFactory.class);
+        addFactory(ActionLayoutFacetFactory.class);
+        addFactory(CollectionLayoutFacetFactory.class);
 
         addFactory(NamedFacetOnTypeAnnotationFactory.class);
         addFactory(NamedFacetOnMemberFactory.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java
index 2d59fcd..321102f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java
@@ -37,7 +37,7 @@ import static org.junit.Assert.assertThat;
 public class ActionLayoutAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
 
     public void testActionLayoutAnnotationPickedUp() {
-        final ActionLayoutFactory facetFactory = new ActionLayoutFactory();
+        final ActionLayoutFacetFactory facetFactory = new ActionLayoutFacetFactory();
 
         class Customer {
             @SuppressWarnings("unused")
@@ -58,7 +58,7 @@ public class ActionLayoutAnnotationFacetFactoryTest extends AbstractFacetFactory
     }
 
     public void testActionLayoutFallbackPickedUp() {
-        final ActionLayoutFactory facetFactory = new ActionLayoutFactory();
+        final ActionLayoutFacetFactory facetFactory = new ActionLayoutFacetFactory();
 
         class Customer {
             @SuppressWarnings("unused")
@@ -77,7 +77,7 @@ public class ActionLayoutAnnotationFacetFactoryTest extends AbstractFacetFactory
     }
 
     public void testCssClassFaLeftPositionIsDefault() {
-        final ActionLayoutFactory facetFactory = new ActionLayoutFactory();
+        final ActionLayoutFacetFactory facetFactory = new ActionLayoutFacetFactory();
 
         class Customer {
             @SuppressWarnings("unused")
@@ -99,7 +99,7 @@ public class ActionLayoutAnnotationFacetFactoryTest extends AbstractFacetFactory
     }
 
     public void testCssClassFaRightPosition() {
-        final ActionLayoutFactory facetFactory = new ActionLayoutFactory();
+        final ActionLayoutFacetFactory facetFactory = new ActionLayoutFacetFactory();
 
         class Customer {
             @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/AuditableFacetFromConfigurationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/AuditableFacetFromConfigurationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/AuditableFacetFromConfigurationFactoryTest.java
index 4253741..1192e09 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/AuditableFacetFromConfigurationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/AuditableFacetFromConfigurationFactoryTest.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
-import org.apache.isis.core.metamodel.facets.object.audit.configuration.AuditableFacetFromConfiguration;
+import org.apache.isis.core.metamodel.facets.object.audit.configuration.AuditableFacetForDomainObjectAnnotationAsConfigured;
 import org.apache.isis.core.metamodel.facets.object.audit.configuration.AuditableFacetFromConfigurationFactory;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 
@@ -93,7 +93,7 @@ public class AuditableFacetFromConfigurationFactoryTest extends AbstractFacetFac
         facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolderImpl));
 
         final Facet facet = facetHolderImpl.getFacet(AuditableFacet.class);
-        Assert.assertTrue(facet instanceof AuditableFacetFromConfiguration);
+        Assert.assertTrue(facet instanceof AuditableFacetForDomainObjectAnnotationAsConfigured);
 
         expectNoMethodsRemoved();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java
index ae09d4d..d01213b 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java
@@ -26,13 +26,13 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation;
-import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFactory;
+import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.propparam.labelat.LabelAtFacet;
 
 public class LabelAtFacetForParameterLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
 
     public void testParameterLayoutAnnotationPickedUp() {
-        final ParameterLayoutFactory facetFactory = new ParameterLayoutFactory();
+        final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory();
 
         class Customer {
             @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
index 9a842db..a9e1deb 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
@@ -26,13 +26,13 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFactory;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.propparam.labelat.LabelAtFacet;
 
 public class LabelAtFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
 
     public void testPropertyLayoutAnnotationPickedUp() {
-        final PropertyLayoutFactory facetFactory = new PropertyLayoutFactory();
+        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
 
         class Customer {
             @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java b/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
index 74cef09..91f5e07 100644
--- a/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
+++ b/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
@@ -21,9 +21,10 @@ package dom.simple;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.VersionStrategy;
 import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.ObjectType;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.util.ObjectContracts;
 
@@ -35,8 +36,12 @@ import org.apache.isis.applib.util.ObjectContracts;
         strategy=VersionStrategy.VERSION_NUMBER, 
         column="version")
 @javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"})
-@ObjectType("SIMPLE")
-@Bookmarkable
+@DomainObject(
+        objectType = "SIMPLE"
+)
+@DomainObjectLayout(
+        bookmarking = BookmarkPolicy.AS_ROOT
+)
 public class SimpleObject implements Comparable<SimpleObject> {
 
     //region > name (property)
@@ -59,7 +64,7 @@ public class SimpleObject implements Comparable<SimpleObject> {
     //region > compareTo
 
     @Override
-    public int compareTo(SimpleObject other) {
+    public int compareTo(final SimpleObject other) {
         return ObjectContracts.compare(this, other, "name");
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java b/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java
index 5540293..e9fdc84 100644
--- a/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java
+++ b/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java
@@ -20,20 +20,31 @@ package dom.simple;
 
 import java.util.List;
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.ActionSemantics;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Bookmarkable;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.ParameterLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
 
-@DomainService(menuOrder = "10", repositoryFor = SimpleObject.class)
+@DomainService(
+        menuOrder = "10",
+        repositoryFor = SimpleObject.class
+)
 public class SimpleObjects {
 
     //region > listAll (action)
 
-    @Bookmarkable
-    @ActionSemantics(Of.SAFE)
+    @Action(
+            semantics = SemanticsOf.SAFE
+    )
+    @ActionLayout(
+            bookmarking = BookmarkPolicy.AS_ROOT
+    )
     @MemberOrder(sequence = "1")
     public List<SimpleObject> listAll() {
         return container.allInstances(SimpleObject.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/simpleapp/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java b/example/application/simpleapp/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
index 690b7b6..f5544d8 100644
--- a/example/application/simpleapp/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
+++ b/example/application/simpleapp/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
@@ -21,6 +21,7 @@ package fixture.simple;
 import fixture.simple.scenario.SimpleObjectsFixture;
 
 import java.util.List;
+import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
@@ -34,7 +35,11 @@ import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
  * Enables fixtures to be installed from the application.
  */
 @DomainService
-@DomainServiceLayout(named="Prototyping", menuBar = DomainServiceLayout.MenuBar.SECONDARY, menuOrder = "20")
+@DomainServiceLayout(
+        named="Prototyping",
+        menuBar = DomainServiceLayout.MenuBar.SECONDARY,
+        menuOrder = "20"
+)
 public class SimpleObjectsFixturesService extends FixtureScripts {
 
     public SimpleObjectsFixturesService() {
@@ -58,7 +63,9 @@ public class SimpleObjectsFixturesService extends FixtureScripts {
 
     // //////////////////////////////////////
 
-    @Prototype
+    @ActionLayout(
+            prototype = true
+    )
     @MemberOrder(sequence="20")
     public Object installFixturesAndReturnFirst() {
         final List<FixtureResult> run = findFixtureScriptFor(SimpleObjectsFixture.class).run(null);

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java b/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java
index b50a50d..4844d12 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java
@@ -20,8 +20,10 @@ package app;
 
 import java.util.List;
 import org.apache.isis.applib.AbstractViewModel;
+import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
-import org.apache.isis.applib.annotation.Disabled;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.RenderType;
 
 public class ToDoAppDashboard extends AbstractViewModel {
 
@@ -40,7 +42,7 @@ public class ToDoAppDashboard extends AbstractViewModel {
     }
 
     @Override
-    public void viewModelInit(String memento) {
+    public void viewModelInit(final String memento) {
         this.memento = memento;
     }
 
@@ -49,9 +51,11 @@ public class ToDoAppDashboard extends AbstractViewModel {
     //region > getAnalysisByCategory (collection)
     @CollectionLayout(
             named="By Category",
-            render = CollectionLayout.RenderType.EAGERLY
+            render = RenderType.EAGERLY
+    )
+    @Collection(
+            editing = Editing.DISABLED
     )
-    @Disabled
     public List<ToDoItemsByCategoryViewModel> getAnalysisByCategory() {
         return toDoItemAnalysis.toDoItemsByCategory();
     }
@@ -60,9 +64,11 @@ public class ToDoAppDashboard extends AbstractViewModel {
     //region > getAnalysisByDateRange (collection)
     @CollectionLayout(
             named="By Date Range",
-            render = CollectionLayout.RenderType.EAGERLY
+            render = RenderType.EAGERLY
+    )
+    @Collection(
+            editing = Editing.DISABLED
     )
-    @Disabled
     public List<ToDoItemsByDateRangeViewModel> getAnalysisByDateRange() {
         return toDoItemAnalysis.toDoItemsByDateRange();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java b/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
index fecad1f..7fc67af 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
@@ -19,11 +19,9 @@
 package app;
 
 import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.services.homepage.AbstractHomePageDashboardService;
 
 @DomainService
-@Hidden
 public class ToDoAppDashboardService extends AbstractHomePageDashboardService<ToDoAppDashboard> {
 
     public ToDoAppDashboardService() {

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java b/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java
index c045e97..4c7d157 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java
@@ -26,17 +26,19 @@ import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.ActionSemantics.Of;
-import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.SemanticsOf;
 
-@DomainServiceLayout(named="Analysis", menuOrder = "20")
-@DomainService()
+@DomainServiceLayout(
+        named="Analysis",
+        menuOrder = "20")
+@DomainService
 public class ToDoItemAnalysis {
 
 
@@ -54,10 +56,10 @@ public class ToDoItemAnalysis {
     //region > byCategory (action)
     @ActionLayout(
         cssClassFa="fa fa-pie-chart",
-        named="By Category"
+        named="By Category",
+        bookmarking = BookmarkPolicy.AS_ROOT
     )
-    @Bookmarkable
-    @ActionSemantics(Of.SAFE)
+    @Action(semantics = SemanticsOf.SAFE)
     @MemberOrder(sequence = "1")
     public List<ToDoItemsByCategoryViewModel> toDoItemsByCategory() {
         final List<Category> categories = Arrays.asList(Category.values());
@@ -87,17 +89,17 @@ public class ToDoItemAnalysis {
 
     @ActionLayout(
         cssClassFa="fa fa-calendar",
-        named="By Date Range"
+        named="By Date Range",
+        bookmarking = BookmarkPolicy.AS_ROOT
     )
-    @Bookmarkable
-    @ActionSemantics(Of.SAFE)
+    @Action(semantics = SemanticsOf.SAFE)
     @MemberOrder(sequence = "1")
     public List<ToDoItemsByDateRangeViewModel> toDoItemsByDateRange() {
         final List<DateRange> dateRanges = Arrays.asList(DateRange.values());
         return Lists.newArrayList(Iterables.transform(dateRanges, byDateRange()));
     }
 
-    private Function<DateRange, ToDoItemsByDateRangeViewModel> byDateRange() {
+    private static Function<DateRange, ToDoItemsByDateRangeViewModel> byDateRange() {
         return new Function<DateRange, ToDoItemsByDateRangeViewModel>(){
              @Override
              public ToDoItemsByDateRangeViewModel apply(final DateRange dateRange) {
@@ -109,7 +111,7 @@ public class ToDoItemAnalysis {
 
     //region > forCategory (programmatic)
     @Programmatic
-    public ToDoItemsByCategoryViewModel toDoItemsForCategory(Category category) {
+    public ToDoItemsByCategoryViewModel toDoItemsForCategory(final Category category) {
         return byCategory().apply(category);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysisContributions.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysisContributions.java b/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysisContributions.java
index b61daf4..6527ffe 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysisContributions.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysisContributions.java
@@ -20,23 +20,24 @@ package app;
 
 import dom.todo.ToDoItem;
 
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.ActionSemantics.Of;
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.NotContributed;
 import org.apache.isis.applib.annotation.NotContributed.As;
 import org.apache.isis.applib.annotation.NotInServiceMenu;
+import org.apache.isis.applib.annotation.SemanticsOf;
 
 @DomainService
-@Hidden
 public class ToDoItemAnalysisContributions {
 
 
     //region > analyseCategory (action)
     @NotInServiceMenu
     @NotContributed(As.ASSOCIATION)
-    @ActionSemantics(Of.SAFE)
+    @Action(
+            semantics = SemanticsOf.SAFE
+    )
     public ToDoItemsByCategoryViewModel analyseCategory(final ToDoItem item) {
         return toDoAppAnalysis.toDoItemsForCategory(item.getCategory());
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/todoapp/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java b/example/application/todoapp/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
index 114ff0d..8c8ae6e 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
@@ -30,27 +30,29 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.annotation.Render;
-import org.apache.isis.applib.annotation.Render.Type;
+import org.apache.isis.applib.annotation.RenderType;
 import org.apache.isis.applib.annotation.Title;
-import org.apache.isis.applib.annotation.ViewModel;
 import org.apache.isis.applib.util.ObjectContracts;
 
 @DomainObjectLayout(
-    named="By Category"
+        named="By Category",
+        bookmarking = BookmarkPolicy.AS_ROOT
 )
-@Bookmarkable
-@ViewModel
-public class ToDoItemsByCategoryViewModel 
+@DomainObject(
+        viewModel = true
+)
+public class ToDoItemsByCategoryViewModel
         implements Comparable<ToDoItemsByCategoryViewModel> {
 
     //region > constructors
     public ToDoItemsByCategoryViewModel() {
     }
-    public ToDoItemsByCategoryViewModel(Category category) {
+    public ToDoItemsByCategoryViewModel(final Category category) {
         setCategory(category);
     }
     //endregion
@@ -113,7 +115,9 @@ public class ToDoItemsByCategoryViewModel
     /**
      * All those items {@link ToDoItems#notYetComplete() not yet complete}, for this {@link #getCategory() category}.
      */
-    @Render(Type.EAGERLY)
+    @CollectionLayout(
+            render = RenderType.EAGERLY
+    )
     public List<ToDoItem> getItemsNotYetComplete() {
         final List<ToDoItem> notYetComplete = toDoItems.notYetCompleteNoUi();
         return Lists.newArrayList(Iterables.filter(notYetComplete, ToDoItem.Predicates.thoseCategorised(getCategory())));
@@ -122,7 +126,9 @@ public class ToDoItemsByCategoryViewModel
     /**
      * All those items {@link ToDoItems#complete() complete}, for this {@link #getCategory() category}.
      */
-    @Render(Type.EAGERLY)
+    @CollectionLayout(
+            render = RenderType.EAGERLY
+    )
     public List<ToDoItem> getItemsComplete() {
         final List<ToDoItem> complete = toDoItems.completeNoUi();
         return Lists.newArrayList(Iterables.filter(complete, ToDoItem.Predicates.thoseCategorised(getCategory())));
@@ -135,7 +141,7 @@ public class ToDoItemsByCategoryViewModel
             named="Delete"
     )
     public ToDoItemsByCategoryViewModel deleteCompleted() {
-        for (ToDoItem item : getItemsComplete()) {
+        for (final ToDoItem item : getItemsComplete()) {
             container.removeIfNotAlready(item);
         }
         // force reload of page
@@ -146,7 +152,7 @@ public class ToDoItemsByCategoryViewModel
 
     //region > compareTo
     @Override
-    public int compareTo(ToDoItemsByCategoryViewModel other) {
+    public int compareTo(final ToDoItemsByCategoryViewModel other) {
         return ObjectContracts.compare(this, other, "category");
     }
     //endregion

http://git-wip-us.apache.org/repos/asf/isis/blob/8f4ca51c/example/application/todoapp/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java b/example/application/todoapp/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
index 93e78d2..11487a4 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
@@ -28,27 +28,27 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.joda.time.DateTime;
-import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
-import org.apache.isis.applib.annotation.Render;
-import org.apache.isis.applib.annotation.Render.Type;
+import org.apache.isis.applib.annotation.RenderType;
 import org.apache.isis.applib.annotation.Title;
-import org.apache.isis.applib.annotation.ViewModel;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.util.ObjectContracts;
 
 @DomainObjectLayout(
-    named="By Date Range"
+        named="By Date Range",
+        bookmarking = BookmarkPolicy.AS_ROOT
 )
-@Bookmarkable
-@ViewModel
+@DomainObject(viewModel = true)
 public class ToDoItemsByDateRangeViewModel
         implements Comparable<ToDoItemsByDateRangeViewModel> {
 
     //region > constructors
     public ToDoItemsByDateRangeViewModel() {
     }
-    public ToDoItemsByDateRangeViewModel(DateRange dateRange) {
+    public ToDoItemsByDateRangeViewModel(final DateRange dateRange) {
         setDateRange(dateRange);
     }
     //endregion
@@ -74,9 +74,11 @@ public class ToDoItemsByDateRangeViewModel
 
     //region > getItemsNotYetComplete (collection)
     /**
-     * All those items {@link ToDoItems#notYetComplete() not yet complete}, for this {@link #getCategory() category}.
+     * All those items {@link ToDoItems#notYetComplete() not yet complete}, for this {@link #getDateRange() date range}.
      */
-    @Render(Type.EAGERLY)
+    @CollectionLayout(
+            render = RenderType.EAGERLY
+    )
     public List<ToDoItem> getItemsNotYetComplete() {
         final List<ToDoItem> notYetComplete = toDoItems.notYetCompleteNoUi();
         return Lists.newArrayList(Iterables.filter(notYetComplete, thoseInDateRange()));
@@ -85,7 +87,7 @@ public class ToDoItemsByDateRangeViewModel
     private Predicate<ToDoItem> thoseInDateRange() {
         return new Predicate<ToDoItem>() {
             @Override
-            public boolean apply(ToDoItem t) {
+            public boolean apply(final ToDoItem t) {
                 return Objects.equal(dateRangeFor(t), getDateRange());
             }
         };
@@ -116,7 +118,7 @@ public class ToDoItemsByDateRangeViewModel
 
     //region > compareTo
     @Override
-    public int compareTo(ToDoItemsByDateRangeViewModel other) {
+    public int compareTo(final ToDoItemsByDateRangeViewModel other) {
         return ObjectContracts.compare(this, other, "dateRange");
     }
     //endregion