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/20 08:26:46 UTC

[2/4] isis git commit: ISIS-970: unit tests for @DomainObject, @ViewModel; also @DomainObjectLayout and @ViewModelLayout

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/DomainObjectAnnotationFacetFactoryTest_auditableFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/DomainObjectAnnotationFacetFactoryTest_auditableFromConfiguration.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/DomainObjectAnnotationFacetFactoryTest_auditableFromConfiguration.java
deleted file mode 100644
index c49e4d3..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/audited/configuration/DomainObjectAnnotationFacetFactoryTest_auditableFromConfiguration.java
+++ /dev/null
@@ -1,137 +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.audited.configuration;
-
-import java.util.UUID;
-import org.jmock.Expectations;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.services.HasTransactionId;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
-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.AuditableFacetForDomainObjectAnnotationAsConfigured;
-import org.apache.isis.core.metamodel.facets.object.domainobject.DomainObjectAnnotationFacetFactory;
-
-public class DomainObjectAnnotationFacetFactoryTest_auditableFromConfiguration extends AbstractFacetFactoryJUnit4TestCase {
-
-    private DomainObjectAnnotationFacetFactory facetFactory;
-
-    @Before
-    public void setUp() throws Exception {
-        facetFactory = new DomainObjectAnnotationFacetFactory();
-        facetFactory.setConfiguration(mockConfiguration);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        facetFactory = null;
-    }
-
-    class Customer {
-        public void someAction() {
-        }
-    }
-
-    class SomeTransactionalId implements HasTransactionId {
-        public void someAction() {
-        }
-
-        @Override
-        public UUID getTransactionId() {
-            return null;
-        }
-
-        @Override
-        public void setTransactionId(UUID transactionId) {
-        }
-    }
-
-
-    @Test
-    public void ignoreHasTransactionId() {
-        String configuredValue = "all";
-
-        allowingConfigurationToReturn(configuredValue);
-
-        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolderImpl));
-
-        final Facet facet = facetHolderImpl.getFacet(AuditableFacet.class);
-        Assert.assertNotNull(facet);
-
-        expectNoMethodsRemoved();
-    }
-
-
-    @Test
-    public void configured_value_set_to_all() {
-        allowingConfigurationToReturn("all");
-
-        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolderImpl));
-
-        final Facet facet = facetHolderImpl.getFacet(AuditableFacet.class);
-        Assert.assertTrue(facet instanceof AuditableFacetForDomainObjectAnnotationAsConfigured);
-
-        expectNoMethodsRemoved();
-    }
-
-    @Test
-    public void configured_value_set_to_none() {
-        allowingConfigurationToReturn("none");
-
-        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolderImpl));
-
-        final Facet facet = facetHolderImpl.getFacet(CommandFacet.class);
-        Assert.assertNull(facet);
-
-        expectNoMethodsRemoved();
-    }
-
-    @Test
-    public void configured_value_set_to_not_recognized() {
-        allowingConfigurationToReturn("foobar");
-        
-        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolderImpl));
-        
-        final Facet facet = facetHolderImpl.getFacet(CommandFacet.class);
-        Assert.assertNull(facet);
-        
-        expectNoMethodsRemoved();
-    }
-    
-
-    private void allowingConfigurationToReturn(final String value) {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.services.audit.objects");
-                will(returnValue(value));
-
-                // anything else
-                ignoring(mockConfiguration);
-            }
-        });
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java
index 2acfda8..3110810 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.cssclassfa.annotation.annotation.CssClassFaFacetOnTypeAnnotationFactory;
+import org.apache.isis.core.metamodel.facets.object.cssclassfa.annotation.CssClassFaFacetOnTypeAnnotationFactory;
 
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.instanceOf;

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
new file mode 100644
index 0000000..36940e9
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
@@ -0,0 +1,1008 @@
+/*
+ *  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 java.util.UUID;
+import org.jmock.Expectations;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.apache.isis.applib.annotation.Audited;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Immutable;
+import org.apache.isis.applib.annotation.PublishedObject;
+import org.apache.isis.applib.annotation.PublishingChangeKind;
+import org.apache.isis.applib.annotation.PublishingPayloadFactoryForObject;
+import org.apache.isis.applib.services.HasTransactionId;
+import org.apache.isis.applib.services.publish.EventPayload;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
+import org.apache.isis.core.metamodel.facets.object.audit.annotation.AuditableFacetForAuditedAnnotation;
+import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
+import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
+import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetForImmutableAnnotation;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
+import org.apache.isis.core.metamodel.facets.object.publishedobject.annotation.PublishedObjectFacetForPublishedObjectAnnotation;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.facets.propparam.choices.ChoicesFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.junit.Assert.assertThat;
+
+public class DomainObjectAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
+
+    DomainObjectAnnotationFacetFactory facetFactory;
+
+    @Before
+    public void setUp() throws Exception {
+        facetFactory = new DomainObjectAnnotationFacetFactory();
+        facetFactory.setConfiguration(mockConfiguration);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        facetFactory = null;
+    }
+
+    class Customer {
+    }
+
+
+    class SomeTransactionalId implements HasTransactionId {
+
+        @Override
+        public UUID getTransactionId() {
+            return null;
+        }
+
+        @Override
+        public void setTransactionId(final UUID transactionId) {
+        }
+    }
+
+    protected void allowingConfigurationToReturn(final String name, final String value) {
+        context.checking(new Expectations() {
+            {
+                allowing(mockConfiguration).getString(name);
+                will(returnValue(value));
+
+                // anything else
+                ignoring(mockConfiguration);
+            }
+        });
+    }
+
+    protected void ignoringConfiguration() {
+        context.checking(new Expectations() {
+            {
+                ignoring(mockConfiguration);
+            }
+        });
+    }
+
+
+    public static class Auditing extends DomainObjectAnnotationFacetFactoryTest {
+
+        @Audited
+        class CustomerWithAuditedAnnotation {
+        }
+
+        @DomainObject(auditing = org.apache.isis.applib.annotation.Auditing.AS_CONFIGURED)
+        class CustomerWithDomainObjectAndAuditingSetToAsConfigured {
+        }
+
+        @DomainObject(auditing = org.apache.isis.applib.annotation.Auditing.DISABLED)
+        class CustomerWithDomainObjectAndAuditingSetToDisabled {
+        }
+
+        @DomainObject(auditing = org.apache.isis.applib.annotation.Auditing.ENABLED)
+        class CustomerWithDomainObjectAndAuditingSetToEnabled {
+        }
+
+        @Test
+        public void ignoreHasTransactionId() {
+
+            allowingConfigurationToReturn("isis.services.audit.objects", "all");
+
+            facetFactory.process(new ProcessClassContext(HasTransactionId.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        public static class WhenNotAnnotatedAndDefaultsFromConfiguration extends Auditing {
+
+            @Test
+            public void configured_value_set_to_all() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertTrue(facet instanceof AuditableFacetForDomainObjectAnnotationAsConfigured);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_none() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "none");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_not_recognized() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "foobar");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class WithAuditedAnnotation extends Auditing {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+                allowingConfigurationToReturn("isis.services.audit.objects", null);
+            }
+
+            @Test
+            public void has_annotation() {
+
+                facetFactory.process(new ProcessClassContext(CustomerWithAuditedAnnotation.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof AuditableFacetForAuditedAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void does_not_have_annotation() {
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+        public static class WithDomainObjectAnnotationWithAuditingSetToAsConfigured extends Auditing {
+
+            @Test
+            public void configured_value_set_to_all() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof AuditableFacetForDomainObjectAnnotationAsConfigured);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_none() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "none");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_not_recognized() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "foobar");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class WithDomainObjectAnnotationWithAuditingSetToEnabled extends Auditing {
+
+            @Test
+            public void irrespective_of_configured_value() {
+                allowingConfigurationToReturn("isis.services.audit.objects", null);
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAuditingSetToEnabled.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof AuditableFacetForDomainObjectAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+        public static class WithDomainObjectAnnotationWithAuditingSetToDisabled extends Auditing {
+
+            @Test
+            public void irrespective_of_configured_value() {
+                allowingConfigurationToReturn("isis.services.audit.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAuditingSetToDisabled.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+    }
+
+    public static class Publishing extends DomainObjectAnnotationFacetFactoryTest {
+
+        @PublishedObject
+        class CustomerWithPublishedObjectAnnotation {
+        }
+
+        @DomainObject(publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED)
+        class CustomerWithDomainObjectAndPublishingSetToAsConfigured {
+        }
+
+        @DomainObject(publishing = org.apache.isis.applib.annotation.Publishing.DISABLED)
+        class CustomerWithDomainObjectAndPublishingSetToDisabled {
+        }
+
+        @DomainObject(publishing = org.apache.isis.applib.annotation.Publishing.ENABLED)
+        class CustomerWithDomainObjectAndPublishingSetToEnabled {
+        }
+
+        public static class CustomerPayloadFactory implements PublishingPayloadFactoryForObject {
+            @Override
+            public EventPayload payloadFor(final Object changedObject, final PublishingChangeKind publishingChangeKind) {
+                return null;
+            }
+        }
+
+        @DomainObject(publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED, publishingPayloadFactory = CustomerPayloadFactory.class)
+        class CustomerWithDomainObjectAndPublishingSetToAsConfiguredWithCustomPayloadFactory {
+        }
+
+        @DomainObject(publishing = org.apache.isis.applib.annotation.Publishing.ENABLED, publishingPayloadFactory = CustomerPayloadFactory.class)
+        class CustomerWithDomainObjectAndPublishingSetToEnabledWithCustomPayloadFactory {
+        }
+
+        @Test
+        public void ignoreHasTransactionId() {
+
+            allowingConfigurationToReturn("isis.services.publish.objects", "all");
+
+            facetFactory.process(new ProcessClassContext(HasTransactionId.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        public static class WhenNotAnnotatedAndDefaultsFromConfiguration extends Publishing {
+
+            @Test
+            public void configured_value_set_to_all() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof PublishedObjectFacetForDomainObjectAnnotationAsConfigured);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_none() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "none");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_not_recognized() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "foobar");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class WithPublishedObjectAnnotation extends Publishing {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+                allowingConfigurationToReturn("isis.services.publish.objects", null);
+            }
+
+            @Test
+            public void has_annotation() {
+
+                facetFactory.process(new ProcessClassContext(CustomerWithPublishedObjectAnnotation.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof PublishedObjectFacetForPublishedObjectAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void does_not_have_annotation() {
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+        public static class WithDomainObjectAnnotationWithPublishingSetToAsConfigured extends Publishing {
+
+            @Test
+            public void configured_value_set_to_all() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof PublishedObjectFacetForDomainObjectAnnotationAsConfigured);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_all_forCustomPayloadFactory() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToAsConfiguredWithCustomPayloadFactory.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof PublishedObjectFacetForDomainObjectAnnotationAsConfigured);
+
+                final PublishedObject.PayloadFactory payloadFactory = ((PublishedObjectFacetForDomainObjectAnnotationAsConfigured) facet).value();
+
+                assertThat(payloadFactory, instanceOf(PublishedObjectFacetForDomainObjectAnnotation.LegacyAdapter.class));
+                final PublishedObjectFacetForDomainObjectAnnotation.LegacyAdapter legacyAdapter = (PublishedObjectFacetForDomainObjectAnnotation.LegacyAdapter) payloadFactory;
+
+                final PublishingPayloadFactoryForObject specifiedPayloadFactory = legacyAdapter.getPayloadFactory();
+                assertThat(specifiedPayloadFactory, instanceOf(CustomerPayloadFactory.class));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_none() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "none");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_not_recognized() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "foobar");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+        public static class WithDomainObjectAnnotationWithPublishingSetToEnabled extends Publishing {
+
+            @Test
+            public void irrespective_of_configured_value() {
+                allowingConfigurationToReturn("isis.services.publish.objects", null);
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToEnabled.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof PublishedObjectFacetForDomainObjectAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void irrespective_of_configured_value_forCustomPayloadFactory() {
+                allowingConfigurationToReturn("isis.services.publish.objects", null);
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToEnabledWithCustomPayloadFactory.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PublishedObjectFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof PublishedObjectFacetForDomainObjectAnnotation);
+
+                final PublishedObject.PayloadFactory payloadFactory = ((PublishedObjectFacetForDomainObjectAnnotation) facet).value();
+
+                assertThat(payloadFactory, instanceOf(PublishedObjectFacetForDomainObjectAnnotation.LegacyAdapter.class));
+                final PublishedObjectFacetForDomainObjectAnnotation.LegacyAdapter legacyAdapter = (PublishedObjectFacetForDomainObjectAnnotation.LegacyAdapter) payloadFactory;
+
+                final PublishingPayloadFactoryForObject specifiedPayloadFactory = legacyAdapter.getPayloadFactory();
+                assertThat(specifiedPayloadFactory, instanceOf(CustomerPayloadFactory.class));
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class WithDomainObjectAnnotationWithPublishingSetToDisabled extends Publishing {
+
+            @Test
+            public void irrespective_of_configured_value() {
+                allowingConfigurationToReturn("isis.services.publish.objects", "all");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndPublishingSetToDisabled.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+    }
+
+    public static class AutoComplete extends DomainObjectAnnotationFacetFactoryTest {
+
+        class CustomerRepository {
+            public String lookup(final String x) { return null; }
+        }
+
+        @DomainObject(autoCompleteRepository = CustomerRepository.class, autoCompleteAction = "lookup")
+        class CustomerWithDomainObjectAndAutoCompleteRepositoryAndAction {
+        }
+
+        @DomainObject(autoCompleteRepository = CustomerRepository.class)
+        class CustomerWithDomainObjectAndAutoCompleteRepository {
+        }
+
+        @DomainObject
+        class CustomerWithDomainObjectButNoAutoCompleteRepository {
+        }
+
+        @Before
+        public void setUp() throws Exception {
+            super.setUp();
+            ignoringConfiguration();
+        }
+
+        @Test
+        public void whenDomainObjectAndAutoCompleteRepositoryAndAction() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAutoCompleteRepositoryAndAction.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof AutoCompleteFacetForDomainObjectAnnotation);
+
+            final AutoCompleteFacetForDomainObjectAnnotation autoCompleteFacet = (AutoCompleteFacetForDomainObjectAnnotation) facet;
+
+            assertThat(CustomerRepository.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true));
+            assertThat(autoCompleteFacet.getActionName(), is("lookup"));
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAndAutoCompleteRepository() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndAutoCompleteRepository.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof AutoCompleteFacetForDomainObjectAnnotation);
+
+            final AutoCompleteFacetForDomainObjectAnnotation autoCompleteFacet = (AutoCompleteFacetForDomainObjectAnnotation) facet;
+
+            assertThat(CustomerRepository.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true));
+            assertThat(autoCompleteFacet.getActionName(), is("autoComplete"));
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAnnotationButNoAutoComplete() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectButNoAutoCompleteRepository.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenNoDomainObjectAnnotation() {
+
+            facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+    }
+
+    public static class Bounded extends DomainObjectAnnotationFacetFactoryTest {
+
+        @DomainObject(bounded = true)
+        class CustomerWithDomainObjectAndBoundedSetToTrue {
+        }
+
+        @DomainObject(bounded = false)
+        class CustomerWithDomainObjectAndBoundedSetToFalse {
+        }
+
+        @DomainObject
+        class CustomerWithDomainObjectButNoBounded {
+        }
+
+        @Before
+        public void setUp() throws Exception {
+            super.setUp();
+            ignoringConfiguration();
+        }
+
+        @Test
+        public void whenDomainObjectAndBoundedSetToTrue() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndBoundedSetToTrue.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ChoicesFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof ChoicesFacetForDomainObjectAnnotation);
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAndAutoCompleteRepository() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndBoundedSetToFalse.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ChoicesFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenNoDomainObjectAnnotation() {
+
+            facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ChoicesFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+    }
+
+    public static class Editing extends DomainObjectAnnotationFacetFactoryTest {
+
+        @Immutable
+        class CustomerWithImmutableAnnotation {
+        }
+
+        @DomainObject(editing = org.apache.isis.applib.annotation.Editing.AS_CONFIGURED)
+        class CustomerWithDomainObjectAndEditingSetToAsConfigured {
+        }
+
+        @DomainObject(editing = org.apache.isis.applib.annotation.Editing.DISABLED)
+        class CustomerWithDomainObjectAndEditingSetToDisabled {
+        }
+
+        @DomainObject(editing = org.apache.isis.applib.annotation.Editing.ENABLED)
+        class CustomerWithDomainObjectAndEditingSetToEnabled {
+        }
+
+
+        public static class WhenNotAnnotatedAndDefaultsFromConfiguration extends Editing {
+
+            @Test
+            public void configured_value_set_to_true() {
+                allowingConfigurationToReturn("isis.objects.editing", "true");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_false() {
+                allowingConfigurationToReturn("isis.objects.editing", "false");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotationAsConfigured);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_not_recognized() {
+                allowingConfigurationToReturn("isis.objects.editing", "foobar");
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class WithImmutableAnnotation extends Editing {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+                ignoringConfiguration();
+            }
+
+            @Ignore // processing is actually still in ImmutableFacetFactory
+            @Test
+            public void has_annotation() {
+
+                final ProcessClassContext processClassContext = new ProcessClassContext(CustomerWithImmutableAnnotation.class, null, mockMethodRemover, facetHolder);
+                facetFactory.process(processClassContext);
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof ImmutableFacetForImmutableAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Ignore // processing is actually still in ImmutableFacetFactory
+            @Test
+            public void does_not_have_annotation() {
+
+                facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+        public static class WithDomainObjectAnnotationWithEditingSetToAsConfigured extends Editing {
+
+            @Test
+            public void configured_value_set_to_true() {
+                allowingConfigurationToReturn("isis.objects.editing", "true");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_false() {
+                allowingConfigurationToReturn("isis.objects.editing", "false");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void configured_value_set_to_not_recognized() {
+                allowingConfigurationToReturn("isis.objects.editing", "foobar");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(ImmutableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class WithDomainObjectAnnotationWithEditingSetToEnabled extends Editing {
+
+            @Test
+            public void irrespective_of_configured_value() {
+                allowingConfigurationToReturn("isis.services.audit.objects", null);
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndEditingSetToEnabled.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNotNull(facet);
+                Assert.assertTrue(facet instanceof AuditableFacetForDomainObjectAnnotation);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+        public static class WithDomainObjectAnnotationWithEditingSetToDisabled extends Editing {
+
+            @Test
+            public void irrespective_of_configured_value() {
+                allowingConfigurationToReturn("isis.objects.editing", "all");
+
+                facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndEditingSetToDisabled.class, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+                Assert.assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+
+        }
+
+    }
+
+    public static class ObjectType extends DomainObjectAnnotationFacetFactoryTest {
+
+        @DomainObject(objectType = "CUS")
+        class CustomerWithDomainObjectAndObjectTypeSet {
+        }
+
+        @DomainObject
+        class CustomerWithDomainObjectButNoObjectType {
+        }
+
+        @Before
+        public void setUp() throws Exception {
+            super.setUp();
+            ignoringConfiguration();
+        }
+
+        @Test
+        public void whenDomainObjectAndObjectTypeSetToTrue() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndObjectTypeSet.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof ObjectSpecIdFacetForDomainObjectAnnotation);
+            final ObjectSpecIdFacetForDomainObjectAnnotation facetForDomainObjectAnnotation =
+                    (ObjectSpecIdFacetForDomainObjectAnnotation) facet;
+
+            assertThat(facetForDomainObjectAnnotation.value(), is(ObjectSpecId.of("CUS")));
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAndObjectTypeNotSet() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectButNoObjectType.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenNoDomainObjectAnnotation() {
+
+            facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+    }
+
+    public static class Nature extends DomainObjectAnnotationFacetFactoryTest {
+
+        @DomainObject(nature = org.apache.isis.applib.annotation.Nature.JDO_ENTITY)
+        class CustomerWithDomainObjectAndNatureSetToJdoEntity {
+        }
+
+        @DomainObject(nature = org.apache.isis.applib.annotation.Nature.NOT_SPECIFIED)
+        class CustomerWithDomainObjectAndNatureSetToNotSpecified {
+        }
+
+        @DomainObject(nature = org.apache.isis.applib.annotation.Nature.INMEMORY_ENTITY)
+        class CustomerWithDomainObjectAndNatureSetToInmemoryEntity {
+        }
+
+        @DomainObject(nature = org.apache.isis.applib.annotation.Nature.EXTERNAL_ENTITY)
+        class CustomerWithDomainObjectAndNatureSetToExternalEntity {
+        }
+
+        @DomainObject(nature = org.apache.isis.applib.annotation.Nature.VIEW_MODEL)
+        class CustomerWithDomainObjectAndNatureSetToViewModel {
+        }
+
+        @DomainObject
+        class CustomerWithDomainObjectButNoNature {
+        }
+
+        @Before
+        public void setUp() throws Exception {
+            super.setUp();
+            ignoringConfiguration();
+        }
+
+        @Test
+        public void whenDomainObjectAndNatureSetToJdoEntity() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndNatureSetToJdoEntity.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ViewModelFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAndNatureSetToNotSpecified() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndNatureSetToNotSpecified.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ViewModelFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAndNatureSetToViewModel() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndNatureSetToViewModel.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ViewModelFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof RecreatableObjectFacetForDomainObjectAnnotation);
+            final RecreatableObjectFacetForDomainObjectAnnotation facetForDomainObjectAnnotation =
+                    (RecreatableObjectFacetForDomainObjectAnnotation) facet;
+
+            assertThat(facetForDomainObjectAnnotation.getArchitecturalLayer(), is(ViewModelFacet.ArchitecturalLayer.APPLICATION));
+
+            expectNoMethodsRemoved();
+        }
+
+
+        @Test
+        public void whenDomainObjectAndNatureSetToExternalEntity() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndNatureSetToExternalEntity.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ViewModelFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof RecreatableObjectFacetForDomainObjectAnnotation);
+            final RecreatableObjectFacetForDomainObjectAnnotation facetForDomainObjectAnnotation =
+                    (RecreatableObjectFacetForDomainObjectAnnotation) facet;
+
+            assertThat(facetForDomainObjectAnnotation.getArchitecturalLayer(), is(ViewModelFacet.ArchitecturalLayer.DOMAIN));
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenDomainObjectAndNatureSetToInmemoryEntity() {
+
+            facetFactory.process(new ProcessClassContext(CustomerWithDomainObjectAndNatureSetToInmemoryEntity.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ViewModelFacet.class);
+            Assert.assertNotNull(facet);
+
+            Assert.assertTrue(facet instanceof RecreatableObjectFacetForDomainObjectAnnotation);
+            final RecreatableObjectFacetForDomainObjectAnnotation facetForDomainObjectAnnotation =
+                    (RecreatableObjectFacetForDomainObjectAnnotation) facet;
+
+            assertThat(facetForDomainObjectAnnotation.getArchitecturalLayer(), is(ViewModelFacet.ArchitecturalLayer.DOMAIN));
+
+            expectNoMethodsRemoved();
+        }
+
+        @Test
+        public void whenNoDomainObjectAnnotation() {
+
+            facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
+
+            final Facet facet = facetHolder.getFacet(ViewModelFacet.class);
+            Assert.assertNull(facet);
+
+            expectNoMethodsRemoved();
+        }
+
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
new file mode 100644
index 0000000..428c19a
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
@@ -0,0 +1,552 @@
+/*
+ *  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.jmock.auto.Mock;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+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.object.bookmarkpolicy.BookmarkPolicyFacet;
+import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
+import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
+
+    DomainObjectLayoutFacetFactory facetFactory;
+
+    @Before
+    public void setUp() throws Exception {
+        facetFactory = new DomainObjectLayoutFacetFactory();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        facetFactory = null;
+        super.tearDown();
+    }
+
+    @DomainObjectLayout(
+            bookmarking = BookmarkPolicy.AS_ROOT,
+            cssClass = "foobar",
+            describedAs = "This is a description",
+            named = "Name override",
+            paged = 20,
+            plural = "Customers Plural Form"
+    )
+    class Customer {
+    }
+    @DomainObjectLayout(
+    )
+    class CustomerWithDefaults {
+    }
+
+    @ViewModelLayout(
+            bookmarking = BookmarkPolicy.AS_ROOT,
+            cssClass = "foobar",
+            describedAs = "This is a description",
+            named = "Name override",
+            paged = 20,
+            plural = "Customers Plural Form"
+    )
+    class CustomerViewModel {
+    }
+    @ViewModelLayout(
+    )
+    class CustomerViewModelWithDefaults {
+    }
+
+    public static class Bookmarking extends DomainObjectLayoutFactoryTest {
+
+        public static class ForDomainObjectLayout extends Bookmarking {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = Customer.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof BookmarkPolicyFacetForDomainObjectLayoutAnnotation);
+
+                final BookmarkPolicyFacetForDomainObjectLayoutAnnotation facetImpl = (BookmarkPolicyFacetForDomainObjectLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is(BookmarkPolicy.AS_ROOT));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class ForViewModelLayout extends Bookmarking {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = CustomerViewModel.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof BookmarkPolicyFacetForViewModelLayoutAnnotation);
+
+                final BookmarkPolicyFacetForViewModelLayoutAnnotation facetImpl =
+                        (BookmarkPolicyFacetForViewModelLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is(BookmarkPolicy.AS_ROOT));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerViewModelWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+    }
+
+    public static class CssClass extends DomainObjectLayoutFactoryTest {
+
+        @Mock
+        ObjectAdapter mockAdapter;
+
+        public static class ForDomainObjectLayout extends CssClass {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+            }
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = Customer.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(CssClassFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof CssClassFacetForDomainObjectLayoutAnnotation);
+
+                final CssClassFacetForDomainObjectLayoutAnnotation facetImpl = (CssClassFacetForDomainObjectLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.cssClass(mockAdapter), is("foobar"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(CssClassFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class ForViewModelLayout extends CssClass {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = CustomerViewModel.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(CssClassFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof CssClassFacetForViewModelLayoutAnnotation);
+
+                final CssClassFacetForViewModelLayoutAnnotation facetImpl = (CssClassFacetForViewModelLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.cssClass(mockAdapter), is("foobar"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerViewModelWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(CssClassFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+    }
+
+    public static class DescribedAs extends DomainObjectLayoutFactoryTest {
+
+        @Mock
+        ObjectAdapter mockAdapter;
+
+        public static class ForDomainObjectLayout extends DescribedAs {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+            }
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = Customer.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(DescribedAsFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof DescribedAsFacetForDomainObjectLayoutAnnotation);
+
+                final DescribedAsFacetForDomainObjectLayoutAnnotation facetImpl = (DescribedAsFacetForDomainObjectLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is("This is a description"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(DescribedAsFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class ForViewModelLayout extends DescribedAs {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = CustomerViewModel.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(DescribedAsFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof DescribedAsFacetForViewModelLayoutAnnotation);
+
+                final DescribedAsFacetForViewModelLayoutAnnotation facetImpl = (DescribedAsFacetForViewModelLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is("This is a description"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerViewModelWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(DescribedAsFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+    }
+
+    public static class Named extends DomainObjectLayoutFactoryTest {
+
+        @Mock
+        ObjectAdapter mockAdapter;
+
+        public static class ForDomainObjectLayout extends Named {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+            }
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = Customer.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(NamedFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof NamedFacetForDomainObjectLayoutAnnotation);
+
+                final NamedFacetForDomainObjectLayoutAnnotation facetImpl = (NamedFacetForDomainObjectLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is("Name override"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(NamedFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class ForViewModelLayout extends Named {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = CustomerViewModel.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(NamedFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof NamedFacetForViewModelLayoutAnnotation);
+
+                final NamedFacetForViewModelLayoutAnnotation facetImpl = (NamedFacetForViewModelLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is("Name override"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerViewModelWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(NamedFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+    }
+
+    public static class Paged extends DomainObjectLayoutFactoryTest {
+
+        @Mock
+        ObjectAdapter mockAdapter;
+
+        public static class ForDomainObjectLayout extends Paged {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+            }
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = Customer.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PagedFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof PagedFacetForDomainObjectLayoutAnnotation);
+
+                final PagedFacetForDomainObjectLayoutAnnotation facetImpl = (PagedFacetForDomainObjectLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is(20));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PagedFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class ForViewModelLayout extends Paged {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = CustomerViewModel.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PagedFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof PagedFacetForViewModelLayoutAnnotation);
+
+                final PagedFacetForViewModelLayoutAnnotation facetImpl = (PagedFacetForViewModelLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is(20));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerViewModelWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PagedFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+    }
+
+    public static class Plural extends DomainObjectLayoutFactoryTest {
+
+        @Mock
+        ObjectAdapter mockAdapter;
+
+        public static class ForDomainObjectLayout extends Plural {
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+            }
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = Customer.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PluralFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof PluralFacetForDomainObjectLayoutAnnotation);
+
+                final PluralFacetForDomainObjectLayoutAnnotation facetImpl = (PluralFacetForDomainObjectLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is("Customers Plural Form"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PluralFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+        public static class ForViewModelLayout extends Plural {
+
+            @Test
+            public void whenSpecified() {
+
+                final Class<?> cls = CustomerViewModel.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PluralFacet.class);
+                assertNotNull(facet);
+                assertTrue(facet instanceof PluralFacetForViewModelLayoutAnnotation);
+
+                final PluralFacetForViewModelLayoutAnnotation facetImpl = (PluralFacetForViewModelLayoutAnnotation) facet;
+                Assert.assertThat(facetImpl.value(), is("Customers Plural Form"));
+
+                expectNoMethodsRemoved();
+            }
+
+            @Test
+            public void whenDefaults() {
+
+                final Class<?> cls = CustomerViewModelWithDefaults.class;
+
+                facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, mockMethodRemover, facetHolder));
+
+                final Facet facet = facetHolder.getFacet(PluralFacet.class);
+                assertNull(facet);
+
+                expectNoMethodsRemoved();
+            }
+        }
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAnnotationFactoryTest.java
index 10b8c75..2b43a0c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAnnotationFactoryTest.java
@@ -25,7 +25,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.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetAnnotation;
+import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetForImmutableAnnotation;
 
 public class ImmutableFacetAnnotationFactoryTest extends AbstractFacetFactoryTest {
 
@@ -53,8 +53,8 @@ public class ImmutableFacetAnnotationFactoryTest extends AbstractFacetFactoryTes
 
         final Facet facet = facetedMethod.getFacet(ImmutableFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof ImmutableFacetAnnotation);
-        final ImmutableFacetAnnotation immutableFacetAnnotation = (ImmutableFacetAnnotation) facet;
+        assertTrue(facet instanceof ImmutableFacetForImmutableAnnotation);
+        final ImmutableFacetForImmutableAnnotation immutableFacetAnnotation = (ImmutableFacetForImmutableAnnotation) facet;
         assertEquals(When.ALWAYS, immutableFacetAnnotation.when());
 
         assertNoMethodsRemoved();
@@ -69,8 +69,8 @@ public class ImmutableFacetAnnotationFactoryTest extends AbstractFacetFactoryTes
 
         final Facet facet = facetedMethod.getFacet(ImmutableFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof ImmutableFacetAnnotation);
-        final ImmutableFacetAnnotation immutableFacetAnnotation = (ImmutableFacetAnnotation) facet;
+        assertTrue(facet instanceof ImmutableFacetForImmutableAnnotation);
+        final ImmutableFacetForImmutableAnnotation immutableFacetAnnotation = (ImmutableFacetForImmutableAnnotation) facet;
         assertEquals(When.ALWAYS, immutableFacetAnnotation.when());
 
         assertNoMethodsRemoved();
@@ -85,8 +85,8 @@ public class ImmutableFacetAnnotationFactoryTest extends AbstractFacetFactoryTes
 
         final Facet facet = facetedMethod.getFacet(ImmutableFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof ImmutableFacetAnnotation);
-        final ImmutableFacetAnnotation immutableFacetAnnotation = (ImmutableFacetAnnotation) facet;
+        assertTrue(facet instanceof ImmutableFacetForImmutableAnnotation);
+        final ImmutableFacetForImmutableAnnotation immutableFacetAnnotation = (ImmutableFacetForImmutableAnnotation) facet;
         assertEquals(When.NEVER, immutableFacetAnnotation.when());
 
         assertNoMethodsRemoved();
@@ -101,8 +101,8 @@ public class ImmutableFacetAnnotationFactoryTest extends AbstractFacetFactoryTes
 
         final Facet facet = facetedMethod.getFacet(ImmutableFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof ImmutableFacetAnnotation);
-        final ImmutableFacetAnnotation immutableFacetAnnotation = (ImmutableFacetAnnotation) facet;
+        assertTrue(facet instanceof ImmutableFacetForImmutableAnnotation);
+        final ImmutableFacetForImmutableAnnotation immutableFacetAnnotation = (ImmutableFacetForImmutableAnnotation) facet;
         assertEquals(When.ONCE_PERSISTED, immutableFacetAnnotation.when());
 
         assertNoMethodsRemoved();
@@ -117,8 +117,8 @@ public class ImmutableFacetAnnotationFactoryTest extends AbstractFacetFactoryTes
 
         final Facet facet = facetedMethod.getFacet(ImmutableFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof ImmutableFacetAnnotation);
-        final ImmutableFacetAnnotation immutableFacetAnnotation = (ImmutableFacetAnnotation) facet;
+        assertTrue(facet instanceof ImmutableFacetForImmutableAnnotation);
+        final ImmutableFacetForImmutableAnnotation immutableFacetAnnotation = (ImmutableFacetForImmutableAnnotation) facet;
         assertEquals(When.UNTIL_PERSISTED, immutableFacetAnnotation.when());
 
         assertNoMethodsRemoved();

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java
index d09671d..865a789 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/membergroups/annotprop/MemberGroupLayoutFacetFactoryTest.java
@@ -29,10 +29,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
-import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetAnnotation;
-import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback;
-import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupsFacetAnnotation;
 
 public class MemberGroupLayoutFacetFactoryTest extends AbstractFacetFactoryTest {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
index 1e7b8df..177a8ee 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
@@ -48,9 +48,9 @@ public class ObjectSpecIdFacetDerivedFromClassNameFactoryTest extends AbstractFa
     public void installsFacet_passedThroughClassSubstitutor() {
         expectNoMethodsRemoved();
 
-        facetFactory.process(new ProcessClassContext(CustomerAsProxiedByDataNucleus.class, mockMethodRemover, facetHolderImpl));
+        facetFactory.process(new ProcessClassContext(CustomerAsProxiedByDataNucleus.class, mockMethodRemover, facetHolder));
 
-        final ObjectSpecIdFacet facet = facetHolderImpl.getFacet(ObjectSpecIdFacet.class);
+        final ObjectSpecIdFacet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
         
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof ObjectSpecIdFacetDerivedFromClassName, is(true));

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
index 0610bab..53380db 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectTypeAnnotationFacetFactoryTest.java
@@ -52,9 +52,9 @@ public class ObjectTypeAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
         
         expectNoMethodsRemoved();
         
-        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolderImpl));
+        facetFactory.process(new ProcessClassContext(Customer.class, null, mockMethodRemover, facetHolder));
 
-        final ObjectSpecIdFacet facet = facetHolderImpl.getFacet(ObjectSpecIdFacet.class);
+        final ObjectSpecIdFacet facet = facetHolder.getFacet(ObjectSpecIdFacet.class);
         
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof ObjectSpecIdFacetAnnotation, is(true));

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
index fe02bdb..f946ef4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.ViewModel;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 
 public class RecreatableObjectFacetFactoryTest extends AbstractFacetFactoryTest {
 
@@ -57,7 +58,7 @@ public class RecreatableObjectFacetFactoryTest extends AbstractFacetFactoryTest
 
         facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
 
-        final Facet facet = facetedMethod.getFacet(RecreatableObjectFacet.class);
+        final Facet facet = facetedMethod.getFacet(ViewModelFacet.class);
         assertNotNull(facet);
         assertTrue(facet instanceof RecreatableObjectFacetForViewModelInterface);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java
index 74f4932..790e7e4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java
@@ -18,19 +18,17 @@
  */
 package org.apache.isis.objectstore.jdo.metamodel.facets.object.auditable;
 
-import java.util.List;
-
-import javax.jdo.annotations.PersistenceCapable;
-
 import junit.framework.Assert;
 
+import java.util.List;
+import javax.jdo.annotations.PersistenceCapable;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 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.audit.annotation.AuditableFacetForAuditedAnnotation;
 import org.apache.isis.core.objectstore.jdo.applib.annotations.Auditable;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 
 
 public class GivenAuditableAnnotationFacetFactoryTest extends
@@ -71,7 +69,7 @@ public class GivenAuditableAnnotationFacetFactoryTest extends
 
         final Facet facet = facetHolder.getFacet(AuditableFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof AuditableFacetAuditedAnnotation);
+        assertTrue(facet instanceof AuditableFacetForAuditedAnnotation);
     }
 
     public void testIfNoAuditableAnnotationThenNoFacet() {

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoRecreatorDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoRecreatorDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoRecreatorDefault.java
index 6097375..ab07a0d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoRecreatorDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoRecreatorDefault.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.runtime.persistence.adaptermanager;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
-import org.apache.isis.core.metamodel.facets.object.recreatable.RecreatableObjectFacet;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -34,7 +34,7 @@ class PojoRecreatorDefault implements PojoRecreator {
         if(oid.isViewModel()) {
             // initialize the view model pojo from the oid's identifier
             
-            final RecreatableObjectFacet facet = spec.getFacet(RecreatableObjectFacet.class);
+            final ViewModelFacet facet = spec.getFacet(ViewModelFacet.class);
             if(facet == null) {
                 throw new IllegalArgumentException("spec does not have RecreatableObjectFacet; " + oid.toString() + "; spec is " + spec.getFullIdentifier());
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
index caa5e28..8104359 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
@@ -38,8 +38,8 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
 /**
- * Wrapper around {@link PublishingService} that also includes the
- * {@link PublishedObject.PayloadFactory event} {@link PublishedAction.PayloadFactory canonicalizers}. 
+ * Wrapper around {@link PublishingService} that also includes the payload factories for
+ * {@link PublishedObject.PayloadFactory published object}s and {@link PublishedAction.PayloadFactory published action}s.
  */
 public class PublishingServiceWithDefaultPayloadFactories {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3156fe64/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
index 32890a6..9570515 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
@@ -23,7 +23,6 @@ import com.google.common.eventbus.SubscriberExceptionHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
-import org.apache.isis.applib.services.eventbus.AbstractInteractionEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.core.commons.exceptions.IsisApplicationException;
 import org.apache.isis.core.metamodel.facets.Annotations;
@@ -81,14 +80,14 @@ public class EventBusServiceDefault extends EventBusService {
             @Override
             public void handleException(Throwable exception, SubscriberExceptionContext context) {
                 Object event = context.getEvent();
-                if(!(event instanceof AbstractInteractionEvent)) {
+                if(!(event instanceof AbstractDomainEvent)) {
                     if(LOG.isDebugEnabled()) {
-                        LOG.debug("Ignoring exception '%s' (%s), not a subclass of AbstractInteractionEvent", exception.getMessage(), exception.getClass().getName());
+                        LOG.debug("Ignoring exception '%s' (%s), not a subclass of AbstractDomainEvent", exception.getMessage(), exception.getClass().getName());
                     }
                     return;
                 } 
-                final AbstractInteractionEvent<?> interactionEvent = (AbstractInteractionEvent<?>) event;
-                final AbstractDomainEvent.Phase phase = interactionEvent.getPhase();
+                final AbstractDomainEvent<?> interactionEvent = (AbstractDomainEvent<?>) event;
+                final AbstractDomainEvent.Phase phase = interactionEvent.getEventPhase();
                 switch (phase) {
                 case HIDE:
                     LOG.warn("Exception thrown during HIDE phase, to be safe will veto (hide) the interaction event, msg='{}', class='{}'", exception.getMessage(), exception.getClass().getName());