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/07/28 15:28:39 UTC

[01/39] git commit: ISIS-839: fixing RAT errors (missing license headers).

Repository: isis
Updated Branches:
  refs/heads/master 0af321912 -> 090e491cc


ISIS-839: fixing RAT errors (missing license headers).


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

Branch: refs/heads/master
Commit: 38f69b8d9cc820564508278b4410cac56789ebea
Parents: 3915970
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 18 17:50:34 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 18 17:50:34 2014 +0100

----------------------------------------------------------------------
 .../core/wrapper/WrapperFactoryAbstractTest.java  | 18 ++++++++++++++++++
 core/pom.xml                                      |  1 +
 .../services/DeweyOrderComparatorTest.java        | 18 ++++++++++++++++++
 .../core/runtime/services/DeweyOrderUtilTest.java | 18 ++++++++++++++++++
 .../authorization/IsisPermissionTest_equals.java  | 18 ++++++++++++++++++
 5 files changed, 73 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/38f69b8d/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java b/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
index c8323bd..6bc2e8e 100644
--- a/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
+++ b/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
@@ -1,3 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.core.wrapper;
 
 import org.jmock.auto.Mock;

http://git-wip-us.apache.org/repos/asf/isis/blob/38f69b8d/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index df0e152..f013902 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -429,6 +429,7 @@
                             <exclude>**/*.json</exclude>
                             <exclude>**/*.min.js</exclude>
                             
+                            <exclude>**/MANIFEST.MF</exclude>
                             <exclude>**/*.ucd</exclude>
                             <exclude>**/*.ucls</exclude>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/38f69b8d/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderComparatorTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderComparatorTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderComparatorTest.java
index 8335632..d0f5448 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderComparatorTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderComparatorTest.java
@@ -1,3 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.core.runtime.services;
 
 import java.util.*;

http://git-wip-us.apache.org/repos/asf/isis/blob/38f69b8d/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderUtilTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderUtilTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderUtilTest.java
index 671a251..db256dc 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderUtilTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/DeweyOrderUtilTest.java
@@ -1,3 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.core.runtime.services;
 
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/isis/blob/38f69b8d/core/security-shiro/src/test/java/org/apache/isis/security/shiro/authorization/IsisPermissionTest_equals.java
----------------------------------------------------------------------
diff --git a/core/security-shiro/src/test/java/org/apache/isis/security/shiro/authorization/IsisPermissionTest_equals.java b/core/security-shiro/src/test/java/org/apache/isis/security/shiro/authorization/IsisPermissionTest_equals.java
index e4194fe..e3f9fb1 100644
--- a/core/security-shiro/src/test/java/org/apache/isis/security/shiro/authorization/IsisPermissionTest_equals.java
+++ b/core/security-shiro/src/test/java/org/apache/isis/security/shiro/authorization/IsisPermissionTest_equals.java
@@ -1,3 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.security.shiro.authorization;
 
 import org.junit.Assert;


[31/39] ISIS-839: recreating todoapp archetype

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_notYetCompleted.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_notYetCompleted.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_notYetCompleted.java
deleted file mode 100644
index bc02446..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_notYetCompleted.java
+++ /dev/null
@@ -1,71 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/**
- *  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 dom.todo;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.annotation.Bulk;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-
-public class ToDoTest_notYetCompleted {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    @Mock
-    private EventBusService eventBusService;
-    
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        toDoItem = new ToDoItem();
-
-        toDoItem.bulkInteractionContext = Bulk.InteractionContext.regularAction(toDoItem);
-        toDoItem.eventBusService = eventBusService;
-
-        context.ignoring(eventBusService);
-        toDoItem.setComplete(true);
-    }
-    
-    @Test
-    public void happyCase() throws Exception {
-        // given
-        assertThat(toDoItem.disableNotYetCompleted(), is(nullValue()));
-        
-        // when
-        toDoItem.notYetCompleted();
-        
-        // then
-        assertThat(toDoItem.isComplete(), is(false));
-        assertThat(toDoItem.disableNotYetCompleted(), is(not(nullValue())));
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/pom.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/pom.xml
index 1872775..d75a856 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/pom.xml
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/pom.xml
@@ -26,7 +26,7 @@
     </parent>
 
 	<artifactId>${artifactId}</artifactId>
-	<name>Quickstart Wicket/Restful/JDO Fixtures</name>
+	<name>ToDo App Fixtures</name>
 
 	<dependencies>
 		<dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java b/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
index 38676d4..da1c7c3 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
@@ -24,6 +24,7 @@ package fixture.todo;
 import fixture.todo.scenarios.RecreateToDoItemsAndCompleteSeveralForCurrent;
 
 import java.util.List;
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Named;
 import org.apache.isis.applib.annotation.Prototype;
@@ -35,12 +36,18 @@ import org.apache.isis.applib.fixturescripts.FixtureScripts;
  * Enables fixtures to be installed from the application.
  */
 @Named("Prototyping") // has the effect of defining a "Prototyping" menu item
+@DomainService(menuOrder = "40.1")
 public class ToDoItemsFixturesService extends FixtureScripts {
 
     public ToDoItemsFixturesService() {
         super("fixture.todo");
     }
 
+    //@Override // compatibility with core 1.5.0
+    public FixtureScript default0RunFixtureScript() {
+        return findFixtureScriptFor(RecreateToDoItemsAndCompleteSeveralForCurrent.class);
+    }
+
     /**
      * Raising visibility to <tt>public</tt> so that choices are available for first param
      * of {@link ${symbol_pound}runFixtureScript(FixtureScript, String)}.
@@ -50,6 +57,9 @@ public class ToDoItemsFixturesService extends FixtureScripts {
         return super.choices0RunFixtureScript();
     }
 
+    // //////////////////////////////////////
+
+
     @Prototype
     @MemberOrder(sequence="20")
     public Object recreateToDoItemsForCurrentAndReturnFirst() {

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/pom.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/pom.xml
index 93dbfee..ba865c1 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/pom.xml
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/pom.xml
@@ -26,7 +26,7 @@
     </parent>
 
 	<artifactId>${artifactId}</artifactId>
-	<name>Quickstart Wicket/Restful/JDO Integration Tests</name>
+	<name>ToDo App Integration Tests</name>
 
     <build>
         <testResources>
@@ -76,8 +76,8 @@
             <artifactId>isis-core-wrapper</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-            <artifactId>isis-objectstore-jdo-datanucleus</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/ToDoSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/ToDoSystemInitializer.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/ToDoSystemInitializer.java
index f0f0cdf..70adfb8 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/ToDoSystemInitializer.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/ToDoSystemInitializer.java
@@ -19,25 +19,10 @@
  */
 package integration;
 
-import app.ToDoItemAnalysis;
-import dom.todo.ToDoItemContributions;
-import dom.todo.ToDoItemSubscriptions;
-import dom.todo.ToDoItems;
-import fixture.todo.ToDoItemsFixturesService;
-
-import org.apache.isis.applib.annotation.Bulk;
-import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
-import org.apache.isis.applib.services.clock.ClockService;
-import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.integtestsupport.IsisSystemForTest;
-import org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault;
-import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
-import org.apache.isis.core.wrapper.WrapperFactoryDefault;
 import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller;
 import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
-import org.apache.isis.objectstore.jdo.datanucleus.service.eventbus.EventBusServiceJdo;
-import org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl;
 
 /**
  * Holds an instance of an {@link IsisSystemForTest} as a {@link ThreadLocal} on the current thread,
@@ -59,27 +44,23 @@ public class ToDoSystemInitializer {
     private static class ToDoSystemBuilder extends IsisSystemForTest.Builder {
 
         public ToDoSystemBuilder() {
-            //withFixtures( ... reference data fixtures ...); // if we had any...
             withLoggingAt(org.apache.log4j.Level.INFO);
             with(testConfiguration());
             with(new DataNucleusPersistenceMechanismInstaller());
-            
-            withServices(
-                    new ToDoItems(),
-                    new ToDoItemAnalysis(),
-                    new ToDoItemContributions(),
-                    new ToDoItemsFixturesService(),
-                    new ClassDiscoveryServiceUsingReflections(),
-                    new ToDoItemSubscriptions(),
-                    new WrapperFactoryDefault(),
-                    new IsisJdoSupportImpl(),
-                    new Bulk.InteractionContext(),
-                    new EventBusServiceJdo(),
-                    new QueryResultsCache(),
-                    new MementoServiceDefault(),
-                    new BookmarkServiceDefault(),
-                    new ClockService()
-                    );
+
+            // services annotated with @DomainService
+            withServicesIn("app"
+                            ,"dom.todo"
+                            ,"fixture.todo"
+                            ,"webapp.admin"
+                            ,"webapp.prototyping"
+                            ,"org.apache.isis.core.wrapper"
+                            ,"org.apache.isis.applib"
+                            ,"org.apache.isis.core.metamodel.services"
+                            ,"org.apache.isis.core.runtime.services"
+                            ,"org.apache.isis.objectstore.jdo.datanucleus.service.support" // IsisJdoSupportImpl
+                            ,"org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" // EventBusServiceJdo
+                            );
         }
 
         private static IsisConfiguration testConfiguration() {

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/AbstractToDoIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/AbstractToDoIntegTest.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/AbstractToDoIntegTest.java
new file mode 100644
index 0000000..f6625d1
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/AbstractToDoIntegTest.java
@@ -0,0 +1,41 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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 integration.tests;
+
+import integration.ToDoSystemInitializer;
+
+import org.junit.BeforeClass;
+import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
+import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
+
+public abstract class AbstractToDoIntegTest extends IntegrationTestAbstract {
+    
+    @BeforeClass
+    public static void initClass() {
+        org.apache.log4j.PropertyConfigurator.configure("logging.properties");
+        ToDoSystemInitializer.initIsft();
+
+        // instantiating will install onto ThreadLocal
+        new ScenarioExecutionForIntegration();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoIntegTest.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoIntegTest.java
deleted file mode 100644
index ce12615..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoIntegTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests;
-
-import integration.ToDoSystemInitializer;
-
-import org.junit.BeforeClass;
-import org.apache.isis.core.integtestsupport.IntegrationTestAbstract;
-import org.apache.isis.core.integtestsupport.scenarios.ScenarioExecutionForIntegration;
-
-public abstract class ToDoIntegTest extends IntegrationTestAbstract {
-    
-    @BeforeClass
-    public static void initClass() {
-        org.apache.log4j.PropertyConfigurator.configure("logging.properties");
-        ToDoSystemInitializer.initIsft();
-        
-        // instantiating will install onto ThreadLocal
-        new ScenarioExecutionForIntegration();
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemContributionsIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemContributionsIntegTest.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemContributionsIntegTest.java
new file mode 100644
index 0000000..c1b59ed
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemContributionsIntegTest.java
@@ -0,0 +1,152 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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 integration.tests;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItemContributions;
+import dom.todo.ToDoItems;
+import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+
+import java.util.List;
+import javax.inject.Inject;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public abstract class ToDoItemContributionsIntegTest extends AbstractToDoIntegTest {
+
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture().withTracing());
+    }
+
+    @Inject
+    ToDoItems toDoItems;
+    @Inject
+    ToDoItemContributions toDoItemContributions;
+
+    ToDoItemContributions toDoItemContributionsWrapped;
+    ToDoItem toDoItem;
+
+    @Before
+    public void setUp() throws Exception {
+        final List<ToDoItem> all = toDoItems.notYetComplete();
+        toDoItem = wrap(all.get(0));
+
+        toDoItemContributionsWrapped = wrap(toDoItemContributions);
+    }
+
+    public static class Actions {
+        public static class UpdateCategory extends ToDoItemContributionsIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // when
+                toDoItemContributionsWrapped.updateCategory(toDoItem, ToDoItem.Category.Professional, ToDoItem.Subcategory.Consulting);
+
+                // then
+                assertThat(toDoItem.getCategory(), is(ToDoItem.Category.Professional));
+                assertThat(toDoItem.getSubcategory(), is(ToDoItem.Subcategory.Consulting));
+
+                // when
+                toDoItemContributionsWrapped.updateCategory(toDoItem, ToDoItem.Category.Domestic, ToDoItem.Subcategory.Chores);
+
+                // then
+                assertThat(toDoItem.getCategory(), is(ToDoItem.Category.Domestic));
+                assertThat(toDoItem.getSubcategory(), is(ToDoItem.Subcategory.Chores));
+            }
+
+
+            @Test
+            public void categoryCannotBeNull() throws Exception {
+
+                // when, then
+                expectedExceptions.expectMessage("'Category' is mandatory");
+                toDoItemContributionsWrapped.updateCategory(toDoItem, null, ToDoItem.Subcategory.Chores);
+            }
+
+            @Test
+            public void subcategoryCanBeNull() throws Exception {
+
+                // when, then
+                toDoItemContributionsWrapped.updateCategory(toDoItem, ToDoItem.Category.Professional, null);
+            }
+
+            @Test
+            public void subcategoryMustBelongToCategory() throws Exception {
+
+                // when, then
+                expectedExceptions.expectMessage(containsString("Invalid subcategory"));
+                toDoItemContributionsWrapped.updateCategory(toDoItem, ToDoItem.Category.Professional, ToDoItem.Subcategory.Chores);
+            }
+        }
+
+        public static class SimilarTo extends ToDoItemContributionsIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // when
+                List<ToDoItem> similarItems = toDoItemContributionsWrapped.similarTo(toDoItem);
+
+                // then
+                assertThat(similarItems.size(), is(6));
+            }
+
+        }
+    }
+
+    public static class Properties {
+        public static class Priority extends ToDoItemContributionsIntegTest {
+
+            private List<ToDoItem> notYetComplete;
+
+            @Before
+            public void setUp() throws Exception {
+                notYetComplete = wrap(toDoItems).notYetComplete();
+            }
+
+            @Test
+            public void happyCase() throws Exception {
+                assertPriority(0, 1);
+                assertPriority(1, 2);
+                assertPriority(2, 4);
+                assertPriority(3, 6);
+                assertPriority(4, 5);
+                assertPriority(5, 7);
+                assertPriority(6, 9);
+                assertPriority(7, 8);
+                assertPriority(8, 3);
+                assertPriority(9, 10);
+            }
+
+            private void assertPriority(final int n, final int priority) {
+                assertThat(toDoItemContributions.relativePriority(notYetComplete.get(n)), is(Integer.valueOf(priority)));
+            }
+        }
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemIntegTest.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemIntegTest.java
new file mode 100644
index 0000000..447070e
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemIntegTest.java
@@ -0,0 +1,1040 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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 integration.tests;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItemSubscriptions;
+import dom.todo.ToDoItems;
+import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
+import java.util.EventObject;
+import java.util.List;
+import javax.activation.MimeType;
+import javax.inject.Inject;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+import org.jmock.Expectations;
+import org.jmock.Sequence;
+import org.jmock.auto.Mock;
+import org.joda.time.LocalDate;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.apache.isis.applib.NonRecoverableException;
+import org.apache.isis.applib.RecoverableException;
+import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.eventbus.*;
+import org.apache.isis.applib.value.Blob;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+public class ToDoItemIntegTest extends AbstractToDoIntegTest {
+
+    @Before
+    public void setUpData() throws Exception {
+        scenarioExecution().install(new ToDoItemsIntegTestFixture());
+    }
+
+    @Inject
+    ToDoItems toDoItems;
+    @Inject
+    ToDoItemSubscriptions toDoItemSubscriptions;
+
+    ToDoItem toDoItem;
+
+    @Before
+    public void setUp() throws Exception {
+        final List<ToDoItem> all = toDoItems.notYetComplete();
+        toDoItem = wrap(all.get(0));
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        toDoItemSubscriptions.reset();
+    }
+
+
+    public static class Title extends ToDoItemIntegTest {
+
+        private LocalDate dueBy;
+
+        @Before
+        public void setUp() throws Exception {
+            final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
+            toDoItem = wrap(all.get(0));
+
+            dueBy = toDoItem.getDueBy();
+        }
+
+
+        @Test
+        public void includesDescription() throws Exception {
+
+            // given
+            assertThat(container().titleOf(toDoItem), containsString("Buy bread due by"));
+
+            // when
+            unwrap(toDoItem).setDescription("Buy bread and butter");
+
+            // then
+            assertThat(container().titleOf(toDoItem), containsString("Buy bread and butter due by"));
+        }
+
+        @Test
+        public void includesDueDateIfAny() throws Exception {
+
+            // given
+            assertThat(container().titleOf(toDoItem), containsString("due by " + dueBy.toString("yyyy-MM-dd")));
+
+            // when
+            final LocalDate fiveDaysFromNow = Clock.getTimeAsLocalDate().plusDays(5);
+            unwrap(toDoItem).setDueBy(fiveDaysFromNow);
+
+            // then
+            assertThat(container().titleOf(toDoItem), containsString("due by " + fiveDaysFromNow.toString("yyyy-MM-dd")));
+        }
+
+
+        @Test
+        public void ignoresDueDateIfNone() throws Exception {
+
+            // when
+            // (since wrapped, will call clearDueBy)
+            toDoItem.setDueBy(null);
+
+            // then
+            assertThat(container().titleOf(toDoItem), not(containsString("due by")));
+        }
+
+        @Test
+        public void usesWhetherCompleted() throws Exception {
+
+            // given
+            assertThat(container().titleOf(toDoItem), not(containsString("Completed!")));
+
+            // when
+            toDoItem.completed();
+
+            // then
+            assertThat(container().titleOf(toDoItem), not(containsString("due by")));
+            assertThat(container().titleOf(toDoItem), containsString("Buy bread - Completed!"));
+        }
+    }
+
+    public static class Actions {
+
+        public static class Completed extends ToDoItemIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // given
+                assertThat(toDoItem.isComplete(), is(false));
+
+                // when
+                toDoItem.completed();
+
+                // then
+                assertThat(toDoItem.isComplete(), is(true));
+            }
+
+            @Test
+            public void cannotCompleteIfAlreadyCompleted() throws Exception {
+
+                // given
+                unwrap(toDoItem).setComplete(true);
+
+                // when, then should fail
+                expectedExceptions.expectMessage("Already completed");
+                toDoItem.completed();
+
+                // and then
+                final EventObject ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(EventObject.class);
+                assertThat(ev, is(nullValue()));
+            }
+
+
+            @Test
+            public void cannotSetPropertyDirectly() throws Exception {
+
+                // given
+
+                // when, then should fail
+                expectedExceptions.expectMessage("Always disabled");
+                toDoItem.setComplete(true);
+
+                // and then
+                final EventObject ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(EventObject.class);
+                assertThat(ev, is(nullValue()));
+            }
+
+            @Test
+            public void subscriberReceivesEvents() throws Exception {
+
+                // given
+                toDoItemSubscriptions.reset();
+                assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AnyExecuteAccept));
+                assertThat(unwrap(toDoItem).isComplete(), is(false));
+
+                // when
+                toDoItem.completed();
+
+                // then
+                assertThat(unwrap(toDoItem).isComplete(), is(true));
+
+                // and then
+                final List<ToDoItem.CompletedEvent> receivedEvents = toDoItemSubscriptions.receivedEvents(ToDoItem.CompletedEvent.class);
+
+                // hide, disable, validate, executing, executed
+                // sent to both the general on(ActionInteractionEvent ev)
+                // and also the specific on(final ToDoItem.CompletedEvent ev)
+                assertThat(receivedEvents.size(), is(5*2));
+                final ToDoItem.CompletedEvent ev = receivedEvents.get(0);
+
+                ToDoItem source = ev.getSource();
+                assertThat(source, is(equalTo(unwrap(toDoItem))));
+                assertThat(ev.getIdentifier().getMemberName(), is("completed"));
+            }
+
+            @Test
+            public void subscriberVetoesEventWithRecoverableException() throws Exception {
+
+                // given
+                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+
+                // then
+                expectedExceptions.expect(RecoverableException.class);
+
+                // when
+                toDoItem.completed();
+            }
+
+            @Test
+            public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
+
+                // given
+                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+
+                // then
+                expectedExceptions.expect(NonRecoverableException.class);
+
+                // when
+                toDoItem.completed();
+            }
+
+            @Test
+            public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
+
+                // given
+                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+
+                // when
+                toDoItem.completed();
+
+                // then
+                // (no expectedExceptions setup, expect to continue)
+                assertTrue(true);
+            }
+
+        }
+
+        /**
+         * This test demonstrates how a single service can be replaced, eg to use a mock.
+         */
+        public static class Completed_withMockService extends ToDoItemIntegTest {
+
+            private EventBusService originalEventBusService;
+            @Mock
+            private EventBusService mockEventBusService;
+
+            @Before
+            public void setUpMockEventBusService() throws Exception {
+                originalEventBusService = scenarioExecution().service(EventBusService.class);
+
+                context.checking(new Expectations() {{
+                    ignoring(mockEventBusService).register(with(any(Object.class)));
+                    ignoring(mockEventBusService).unregister(with(any(Object.class)));
+                }});
+
+                scenarioExecution().replaceService(originalEventBusService, mockEventBusService);
+                scenarioExecution().closeSession();
+                scenarioExecution().openSession();
+            }
+
+            @After
+            public void reinstateOriginalEventBusService() throws Exception {
+                scenarioExecution().replaceService(mockEventBusService, originalEventBusService);
+            }
+
+            @Test
+            public void raisesEvent() throws Exception {
+
+                final Sequence busRulesThenExec = context.sequence("busRulesThenExec");
+                // then
+                context.checking(new Expectations() {{
+                    oneOf(mockEventBusService).post(with(completedEvent(AbstractInteractionEvent.Phase.HIDE)));
+                    inSequence(busRulesThenExec);
+                    oneOf(mockEventBusService).post(with(completedEvent(AbstractInteractionEvent.Phase.DISABLE)));
+                    inSequence(busRulesThenExec);
+                    oneOf(mockEventBusService).post(with(completedEvent(AbstractInteractionEvent.Phase.VALIDATE)));
+                    inSequence(busRulesThenExec);
+                    oneOf(mockEventBusService).post(with(completedEvent(AbstractInteractionEvent.Phase.EXECUTING)));
+                    inSequence(busRulesThenExec);
+                    oneOf(mockEventBusService).post(with(completedEvent(AbstractInteractionEvent.Phase.EXECUTED)));
+                    inSequence(busRulesThenExec);
+                }});
+
+                // when
+                toDoItem.completed();
+            }
+
+            private Matcher<Object> completedEvent(final AbstractInteractionEvent.Phase phase) {
+                return new TypeSafeMatcher<Object>() {
+                    @Override
+                    protected boolean matchesSafely(Object item) {
+                        if (!(item instanceof ToDoItem.CompletedEvent)) {
+                            return false;
+                        }
+
+                        final ToDoItem.CompletedEvent completedEvent = (ToDoItem.CompletedEvent) item;
+                        return completedEvent.getPhase() == phase;
+
+                    }
+
+                    @Override
+                    public void describeTo(Description description) {
+                        description.appendText(" instance of a ToDoItem.CompletedEvent, " + phase);
+                    }
+                };
+            }
+        }
+
+
+        public static class Duplicate extends ToDoItemIntegTest {
+
+            ToDoItem duplicateToDoItem;
+
+            @Inject
+            private ClockService clockService;
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // given
+                final LocalDate todaysDate = clockService.now();
+                toDoItem.setDueBy(todaysDate);
+                toDoItem.updateCost(new BigDecimal("123.45"));
+
+                duplicateToDoItem = toDoItem.duplicate(
+                        unwrap(toDoItem).default0Duplicate(),
+                        unwrap(toDoItem).default1Duplicate(),
+                        unwrap(toDoItem).default2Duplicate(),
+                        unwrap(toDoItem).default3Duplicate(),
+                        new BigDecimal("987.65"));
+
+                // then
+                assertThat(duplicateToDoItem.getDescription(), is(toDoItem.getDescription() + " - Copy"));
+                assertThat(duplicateToDoItem.getCategory(), is(toDoItem.getCategory()));
+                assertThat(duplicateToDoItem.getDueBy(), is(todaysDate));
+                assertThat(duplicateToDoItem.getCost(), is(new BigDecimal("987.65")));
+            }
+        }
+
+        public static class NotYetCompleted extends ToDoItemIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // given
+                unwrap(toDoItem).setComplete(true);
+
+                // when
+                toDoItem.notYetCompleted();
+
+                // then
+                assertThat(toDoItem.isComplete(), is(false));
+            }
+
+            @Test
+            public void cannotUndoIfNotYetCompleted() throws Exception {
+
+                // given
+                assertThat(toDoItem.isComplete(), is(false));
+
+                // when, then should fail
+                expectedExceptions.expectMessage("Not yet completed");
+                toDoItem.notYetCompleted();
+            }
+
+            /**
+             * Even though {@link dom.todo.ToDoItem${symbol_pound}notYetCompleted()} is not annotated with
+             * {@link org.apache.isis.applib.annotation.ActionInteraction}, an event is still raised.
+             */
+            @Test
+            public void subscriberReceivesEvent() throws Exception {
+
+                // given
+                assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AnyExecuteAccept));
+                unwrap(toDoItem).setComplete(true);
+
+                // when
+                toDoItem.notYetCompleted();
+
+                // then
+                assertThat(unwrap(toDoItem).isComplete(), is(false));
+
+                // and then
+                final ActionInteractionEvent<ToDoItem> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(ActionInteractionEvent.class);
+                assertThat(ev, is(not(nullValue())));
+
+                ToDoItem source = ev.getSource();
+                assertThat(source, is(equalTo(unwrap(toDoItem))));
+                assertThat(ev.getIdentifier().getMemberName(), is("notYetCompleted"));
+            }
+        }
+    }
+
+    public static class Collections {
+
+        public static class Dependencies {
+            public static class Add extends ToDoItemIntegTest {
+
+                private ToDoItem otherToDoItem;
+
+                @Before
+                public void setUp() throws Exception {
+                    super.setUp();
+                    final List<ToDoItem> items = wrap(toDoItems).notYetComplete();
+                    otherToDoItem = wrap(items.get(1));
+                }
+
+                @After
+                public void tearDown() throws Exception {
+                    unwrap(toDoItem).getDependencies().clear();
+                    super.tearDown();
+                }
+
+                @Test
+                public void happyCase() throws Exception {
+
+                    // given
+                    assertThat(toDoItem.getDependencies().size(), is(0));
+
+                    // when
+                    toDoItem.add(otherToDoItem);
+
+                    // then
+                    assertThat(toDoItem.getDependencies().size(), is(1));
+                    assertThat(toDoItem.getDependencies().first(), is(unwrap(otherToDoItem)));
+                }
+
+
+                @Test
+                public void cannotDependOnSelf() throws Exception {
+
+                    // then
+                    expectedExceptions.expectMessage("Can't set up a dependency to self");
+
+                    // when
+                    toDoItem.add(toDoItem);
+                }
+
+                @Test
+                public void cannotAddIfComplete() throws Exception {
+
+                    // given
+                    unwrap(toDoItem).setComplete(true);
+
+                    // then
+                    expectedExceptions.expectMessage("Cannot add dependencies for items that are complete");
+
+                    // when
+                    toDoItem.add(otherToDoItem);
+                }
+
+
+                @Test
+                public void subscriberReceivesEvent() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.reset();
+
+                    // when
+                    toDoItem.add(otherToDoItem);
+
+                    // then received events
+                    @SuppressWarnings("unchecked")
+                    final List<EventObject> receivedEvents = toDoItemSubscriptions.receivedEvents();
+
+                    assertThat(receivedEvents.size(), is(7));
+                    assertThat(receivedEvents.get(0) instanceof ActionInteractionEvent, is(true)); // ToDoItem${symbol_pound}add() executed
+                    assertThat(receivedEvents.get(1) instanceof CollectionInteractionEvent, is(true)); // ToDoItem${symbol_pound}dependencies add, executed
+                    assertThat(receivedEvents.get(2) instanceof CollectionInteractionEvent, is(true)); // ToDoItem${symbol_pound}dependencies add, executing
+                    assertThat(receivedEvents.get(3) instanceof ActionInteractionEvent, is(true)); // ToDoItem${symbol_pound}add executing
+                    assertThat(receivedEvents.get(4) instanceof ActionInteractionEvent, is(true)); // ToDoItem${symbol_pound}add validate
+                    assertThat(receivedEvents.get(5) instanceof ActionInteractionEvent, is(true)); // ToDoItem${symbol_pound}add disable
+                    assertThat(receivedEvents.get(6) instanceof ActionInteractionEvent, is(true)); // ToDoItem${symbol_pound}add hide
+
+                    // inspect the collection interaction (posted programmatically in ToDoItem${symbol_pound}add)
+                    final CollectionInteractionEvent<ToDoItem,ToDoItem> ciEv = (CollectionInteractionEvent<ToDoItem, ToDoItem>) toDoItemSubscriptions.mostRecentlyReceivedEvent(CollectionInteractionEvent.class);
+                    assertThat(ciEv, is(notNullValue()));
+
+                    assertThat(ciEv.getSource(), is(equalTo(unwrap(toDoItem))));
+                    assertThat(ciEv.getIdentifier().getMemberName(), is("dependencies"));
+                    assertThat(ciEv.getOf(), is(CollectionInteractionEvent.Of.ADD_TO));
+                    assertThat(ciEv.getValue(), is(unwrap(otherToDoItem)));
+
+                    // inspect the action interaction (posted declaratively by framework)
+                    final ActionInteractionEvent<ToDoItem> aiEv = (ActionInteractionEvent<ToDoItem>) toDoItemSubscriptions.mostRecentlyReceivedEvent(ActionInteractionEvent.class);
+                    assertThat(aiEv, is(notNullValue()));
+
+                    assertThat(aiEv.getSource(), is(equalTo(unwrap(toDoItem))));
+                    assertThat(aiEv.getIdentifier().getMemberName(), is("add"));
+                    assertThat(aiEv.getArguments().size(), is(1));
+                    assertThat(aiEv.getArguments().get(0), is(unwrap((Object)otherToDoItem)));
+                    assertThat(aiEv.getCommand(), is(notNullValue()));
+                }
+
+                @Test
+                public void subscriberVetoesEventWithRecoverableException() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+
+                    // then
+                    expectedExceptions.expect(RecoverableException.class);
+
+                    // when
+                    toDoItem.add(otherToDoItem);
+                }
+
+                @Test
+                public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+
+                    // then
+                    expectedExceptions.expect(NonRecoverableException.class);
+
+                    // when
+                    toDoItem.add(otherToDoItem);
+                }
+
+                @Test
+                public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+
+                    // when
+                    toDoItem.add(otherToDoItem);
+
+                    // then
+                    // (no expectedExceptions setup, expect to continue)
+                    assertTrue(true);
+                }
+            }
+            public static class Remove extends ToDoItemIntegTest {
+
+                private ToDoItem otherToDoItem;
+                private ToDoItem yetAnotherToDoItem;
+
+                @Before
+                public void setUp() throws Exception {
+                    super.setUp();
+                    final List<ToDoItem> items = wrap(toDoItems).notYetComplete();
+                    otherToDoItem = wrap(items.get(1));
+                    yetAnotherToDoItem = wrap(items.get(2));
+
+                    toDoItem.add(otherToDoItem);
+                }
+
+                @After
+                public void tearDown() throws Exception {
+                    unwrap(toDoItem).getDependencies().clear();
+                    super.tearDown();
+                }
+
+                @Test
+                public void happyCase() throws Exception {
+
+                    // given
+                    assertThat(toDoItem.getDependencies().size(), is(1));
+
+                    // when
+                    toDoItem.remove(otherToDoItem);
+
+                    // then
+                    assertThat(toDoItem.getDependencies().size(), is(0));
+                }
+
+
+                @Test
+                public void cannotRemoveItemIfNotADependency() throws Exception {
+
+                    // then
+                    expectedExceptions.expectMessage("Not a dependency");
+
+                    // when
+                    toDoItem.remove(yetAnotherToDoItem);
+                }
+
+                @Test
+                public void cannotRemoveDependencyIfComplete() throws Exception {
+
+                    // given
+                    unwrap(toDoItem).setComplete(true);
+
+                    // then
+                    expectedExceptions.expectMessage("Cannot remove dependencies for items that are complete");
+
+                    // when
+                    toDoItem.remove(otherToDoItem);
+                }
+
+                @Test
+                public void subscriberVetoesEventWithRecoverableException() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+
+                    // then
+                    expectedExceptions.expect(RecoverableException.class);
+
+                    // when
+                    toDoItem.remove(otherToDoItem);
+                }
+
+                @Test
+                public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+
+                    // then
+                    expectedExceptions.expect(NonRecoverableException.class);
+
+                    // when
+                    toDoItem.remove(otherToDoItem);
+                }
+
+                @Test
+                public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
+
+                    // given
+                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+
+                    // when
+                    toDoItem.remove(otherToDoItem);
+
+                    // then
+                    // (no expectedExceptions setup, expect to continue)
+                    assertTrue(true);
+                }
+            }
+        }
+
+    }
+
+    public static class Properties {
+
+        public static class Attachment extends ToDoItemIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                byte[] bytes = "{${symbol_escape}"foo${symbol_escape}": ${symbol_escape}"bar${symbol_escape}"}".getBytes(Charset.forName("UTF-8"));
+                final Blob newAttachment = new Blob("myfile.json", new MimeType("application/json"), bytes);
+
+                // when
+                toDoItem.setAttachment(newAttachment);
+
+                // then
+                assertThat(toDoItem.getAttachment(), is(newAttachment));
+            }
+
+            @Test
+            public void canBeNull() throws Exception {
+
+                // when
+                toDoItem.setAttachment((Blob)null);
+
+                // then
+                assertThat(toDoItem.getAttachment(), is((Blob)null));
+            }
+        }
+
+        public static class Category extends ToDoItemIntegTest {
+
+            @Test
+            public void cannotModify() throws Exception {
+
+                // when, then
+                expectedExceptions.expectMessage(containsString("Reason: Use action to update both category and subcategory."));
+                toDoItem.setCategory(ToDoItem.Category.Professional);
+            }
+        }
+
+        public static class Cost extends ToDoItemIntegTest {
+
+            private BigDecimal cost;
+
+            @Before
+            public void setUp() throws Exception {
+                super.setUp();
+                cost = toDoItem.getCost();
+            }
+
+            @Test
+            public void happyCaseUsingProperty() throws Exception {
+
+                final BigDecimal newCost = new BigDecimal("123.45");
+
+                // when
+                toDoItem.updateCost(newCost);
+
+                // then
+                assertThat(toDoItem.getCost(), is(newCost));
+            }
+
+            @Test
+            public void happyCaseUsingAction() throws Exception {
+
+                final BigDecimal newCost = new BigDecimal("123.45");
+
+                // when
+                toDoItem.updateCost(newCost);
+
+                // then
+                assertThat(toDoItem.getCost(), is(newCost));
+            }
+
+            @Test
+            public void canBeNull() throws Exception {
+
+                // when
+                toDoItem.updateCost((BigDecimal)null);
+
+                // then
+                assertThat(toDoItem.getCost(), is((BigDecimal)null));
+            }
+
+            @Test
+            public void defaultForAction() throws Exception {
+
+                // then
+                assertThat(unwrap(toDoItem).default0UpdateCost(), is(cost));
+            }
+
+        }
+
+        public static class Description extends ToDoItemIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // given
+                assertThat(toDoItem.getDescription(), is("Buy bread"));
+
+                // when
+                toDoItem.setDescription("Buy bread and butter");
+
+                // then
+                assertThat(toDoItem.getDescription(), is("Buy bread and butter"));
+            }
+
+
+            @Test
+            public void failsRegex() throws Exception {
+
+                // when
+                expectedExceptions.expectMessage("Doesn't match pattern");
+                toDoItem.setDescription("exclamation marks are not allowed!!!");
+            }
+
+            @Test
+            public void cannotBeNull() throws Exception {
+
+                // when, then
+                expectedExceptions.expectMessage("Mandatory");
+                toDoItem.setDescription(null);
+            }
+
+            @Test
+            public void cannotUseModify() throws Exception {
+
+                expectedExceptions.expectMessage("Cannot invoke supporting method for 'Description'; use only property accessor/mutator");
+
+                // given
+                assertThat(toDoItem.getDescription(), is("Buy bread"));
+
+                // when
+                toDoItem.modifyDescription("Buy bread and butter");
+
+                // then
+                assertThat(toDoItem.getDescription(), is("Buy bread"));
+            }
+
+            @Test
+            public void cannotUseClear() throws Exception {
+
+                expectedExceptions.expectMessage("Cannot invoke supporting method for 'Description'; use only property accessor/mutator");
+
+                // given
+                assertThat(toDoItem.getDescription(), is("Buy bread"));
+
+                // when
+                toDoItem.clearDescription();
+
+                // then
+                assertThat(toDoItem.getDescription(), is("Buy bread"));
+            }
+
+
+            @Test
+            public void onlyJustShortEnough() throws Exception {
+
+                // when, then
+                toDoItem.setDescription(characters(100));
+            }
+
+            @Test
+            public void tooLong() throws Exception {
+
+                // then
+                expectedExceptions.expectMessage("The value proposed exceeds the maximum length of 100");
+
+                // when
+                toDoItem.setDescription(characters(101));
+            }
+
+
+            @Test
+            public void subscriberReceivesEvent() throws Exception {
+
+                // given
+                assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AnyExecuteAccept));
+                assertThat(toDoItem.getDescription(), is("Buy bread"));
+
+                // when
+                toDoItem.setDescription("Buy bread and butter");
+
+                // then published and received
+                @SuppressWarnings("unchecked")
+                final PropertyInteractionEvent<ToDoItem,String> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(PropertyInteractionEvent.class);
+                assertThat(ev, is(not(nullValue())));
+
+                ToDoItem source = ev.getSource();
+                assertThat(source, is(equalTo(unwrap(toDoItem))));
+                assertThat(ev.getIdentifier().getMemberName(), is("description"));
+                assertThat(ev.getOldValue(), is("Buy bread"));
+                assertThat(ev.getNewValue(), is("Buy bread and butter"));
+            }
+
+            @Test
+            public void subscriberVetoesEventWithRecoverableException() throws Exception {
+
+                // given
+                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+
+                // then
+                expectedExceptions.expect(RecoverableException.class);
+
+                // when
+                toDoItem.setDescription("Buy bread and butter");
+            }
+
+
+            @Test
+            public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
+
+                // given
+                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+
+                // then
+                expectedExceptions.expect(NonRecoverableException.class);
+
+                // when
+                toDoItem.setDescription("Buy bread and butter");
+            }
+
+
+            @Test
+            public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
+
+                // given
+                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+
+                // when
+                toDoItem.setDescription("Buy bread and butter");
+
+                // then
+                // (no expectedExceptions setup, expect to continue)
+                assertTrue(true);
+            }
+
+
+            private static String characters(final int n) {
+                StringBuffer buf = new StringBuffer();
+                for(int i=0; i<n; i++) {
+                    buf.append("a");
+                }
+                return buf.toString();
+            }
+        }
+
+        public static class DueBy extends ToDoItemIntegTest {
+
+            @Inject
+            private ClockService clockService;
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // when
+                final LocalDate fiveDaysFromNow = clockService.now().plusDays(5);
+                toDoItem.setDueBy(fiveDaysFromNow);
+
+                // then
+                assertThat(toDoItem.getDueBy(), is(fiveDaysFromNow));
+            }
+
+
+            @Test
+            public void canBeNull() throws Exception {
+
+                // when
+                toDoItem.setDueBy((LocalDate)null);
+
+                // then
+                assertThat(toDoItem.getDueBy(), is((LocalDate)null));
+            }
+
+            @Test
+            public void canBeUpToSixDaysInPast() throws Exception {
+
+                final LocalDate nowAsLocalDate = clockService.now();
+                final LocalDate sixDaysAgo = nowAsLocalDate.plusDays(-5);
+
+                // when
+                toDoItem.setDueBy(sixDaysAgo);
+
+                // then
+                assertThat(toDoItem.getDueBy(), is(sixDaysAgo));
+            }
+
+
+            @Test
+            public void cannotBeMoreThanSixDaysInPast() throws Exception {
+
+                final LocalDate sevenDaysAgo = Clock.getTimeAsLocalDate().plusDays(-7);
+
+                // when, then
+                expectedExceptions.expectMessage("Due by date cannot be more than one week old");
+                toDoItem.setDueBy(sevenDaysAgo);
+            }
+        }
+
+        public static class Notes extends ToDoItemIntegTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                final String newNotes = "Lorem ipsum yada yada";
+
+                // when
+                toDoItem.setNotes(newNotes);
+
+                // then
+                assertThat(toDoItem.getNotes(), is(newNotes));
+            }
+
+            @Test
+            public void canBeNull() throws Exception {
+
+                // when
+                toDoItem.setNotes((String)null);
+
+                // then
+                assertThat(toDoItem.getNotes(), is((String)null));
+            }
+
+            @Test
+            public void suscriberReceivedDefaultEvent() throws Exception {
+
+                final String newNotes = "Lorem ipsum yada yada";
+
+                // when
+                toDoItem.setNotes(newNotes);
+
+                // then
+                assertThat(unwrap(toDoItem).getNotes(), is(newNotes));
+
+                // and then receive the default event.
+                @SuppressWarnings("unchecked")
+                final PropertyInteractionEvent.Default ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(PropertyInteractionEvent.Default.class);
+                assertThat(ev, is(notNullValue()));
+
+                assertThat(ev.getSource(), is((Object)unwrap(toDoItem)));
+                assertThat(ev.getNewValue(), is((Object)newNotes));
+            }
+
+
+        }
+
+        public static class OwnedBy extends ToDoItemIntegTest {
+
+            @Test
+            public void cannotModify() throws Exception {
+
+                // when, then
+                expectedExceptions.expectMessage("Always hidden");
+                toDoItem.setOwnedBy("other");
+            }
+
+
+        }
+
+        public static class Subcategory extends ToDoItemIntegTest {
+
+            @Test
+            public void cannotModify() throws Exception {
+
+                // when, then
+                expectedExceptions.expectMessage(containsString("Reason: Use action to update both category and subcategory."));
+                toDoItem.setSubcategory(ToDoItem.Subcategory.Chores);
+            }
+        }
+
+    }
+
+
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemsIntegTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemsIntegTest.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemsIntegTest.java
new file mode 100644
index 0000000..c95e9c0
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/ToDoItemsIntegTest.java
@@ -0,0 +1,116 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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 integration.tests;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItems;
+import fixture.todo.integtests.ToDoItemsIntegTestFixture;
+
+import java.util.List;
+import javax.inject.Inject;
+import org.hamcrest.Matchers;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ToDoItemsIntegTest extends AbstractToDoIntegTest {
+
+    @Inject
+    ToDoItems toDoItems;
+
+    public static class Finders extends ToDoItemsIntegTest {
+
+        @Before
+        public void setUpData() throws Exception {
+            scenarioExecution().install(new ToDoItemsIntegTestFixture());
+        }
+
+        private int notYetCompletedSize;
+        private int completedSize;
+
+        @Before
+        public void setUp() throws Exception {
+            final List<ToDoItem> notYetCompleteItems = wrap(toDoItems).notYetComplete();
+            final List<ToDoItem> completedItems = wrap(toDoItems).complete();
+
+            notYetCompletedSize = notYetCompleteItems.size();
+            completedSize = completedItems.size();
+
+            assertThat(notYetCompletedSize, is(Matchers.greaterThan(5)));
+        }
+
+        @Test
+        public void complete_and_notYetComplete() throws Exception {
+
+            // given
+            List<ToDoItem> notYetCompleteItems = wrap(service(ToDoItems.class)).notYetComplete();
+            final ToDoItem toDoItem = wrap(notYetCompleteItems.get(0));
+
+            // when
+            toDoItem.completed();
+
+            // then
+            assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(notYetCompletedSize-1));
+            assertThat(wrap(service(ToDoItems.class)).complete().size(), is(completedSize+1));
+
+            // and when
+            toDoItem.notYetCompleted();
+
+            // then
+            assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(notYetCompletedSize));
+            assertThat(wrap(service(ToDoItems.class)).complete().size(), is(completedSize));
+        }
+    }
+
+    public static class NewToDo_and_Delete extends ToDoItemsIntegTest {
+
+        @Before
+        public void setUpData() throws Exception {
+            // none
+        }
+
+        @Test
+        public void happyCase() throws Exception {
+
+            // given
+            int size = wrap(toDoItems).notYetComplete().size();
+
+            // when
+            final ToDoItem newToDo = toDoItems.newToDo("new todo", ToDoItem.Category.Professional, ToDoItem.Subcategory.OpenSource, null, null);
+
+            // then
+            assertThat(newToDo.getDescription(), is("new todo"));
+            assertThat(newToDo.getCategory(), is(ToDoItem.Category.Professional));
+            assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(size+1));
+
+            // when
+            newToDo.delete();
+
+            // then
+            assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(size));
+        }
+
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
deleted file mode 100644
index 9fd3683..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
+++ /dev/null
@@ -1,106 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.actions;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItem.Category;
-import dom.todo.ToDoItem.Subcategory;
-import dom.todo.ToDoItemContributions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemContributionsTest_updateCategory extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture().withTracing());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemContributions toDoItemContributions;
-
-    private ToDoItemContributions toDoItemContributionsWrapper;
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = toDoItems.notYetComplete();
-        toDoItem = wrap(all.get(0));
-
-        toDoItemContributionsWrapper = wrap(toDoItemContributions);
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // when
-        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Professional, Subcategory.Consulting);
-        
-        // then
-        assertThat(toDoItem.getCategory(), is(Category.Professional));
-        assertThat(toDoItem.getSubcategory(), is(Subcategory.Consulting));
-        
-        // when
-        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Domestic, Subcategory.Chores);
-        
-        // then
-        assertThat(toDoItem.getCategory(), is(Category.Domestic));
-        assertThat(toDoItem.getSubcategory(), is(Subcategory.Chores));
-    }
-
-
-    @Test
-    public void categoryCannotBeNull() throws Exception {
-        
-        // when, then
-        expectedExceptions.expectMessage("'Category' is mandatory");
-        toDoItemContributionsWrapper.updateCategory(toDoItem, null, Subcategory.Chores);
-    }
-
-    @Test
-    public void subcategoryCanBeNull() throws Exception {
-        
-        // when, then
-        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Professional, null);
-    }
-    
-    @Test
-    public void subcategoryMustBelongToCategory() throws Exception {
-        
-        // when, then
-        expectedExceptions.expectMessage(containsString("Invalid subcategory"));
-        toDoItemContributionsWrapper.updateCategory(toDoItem, Category.Professional, Subcategory.Chores);
-    }
-    
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
deleted file mode 100644
index 98e5ee8..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_completed.java
+++ /dev/null
@@ -1,174 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.actions;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemSubscriptions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.EventObject;
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.NonRecoverableException;
-import org.apache.isis.applib.RecoverableException;
-
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-public class ToDoItemTest_completed extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemSubscriptions toDoItemSubscriptions;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = toDoItems.notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        toDoItemSubscriptions.reset();
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // given
-        assertThat(toDoItem.isComplete(), is(false));
-        
-        // when
-        toDoItem.completed();
-        
-        // then
-        assertThat(toDoItem.isComplete(), is(true));
-    }
-
-    @Test
-    public void cannotCompleteIfAlreadyCompleted() throws Exception {
-        
-        // given
-        unwrap(toDoItem).setComplete(true);
-
-        // when, then should fail
-        expectedExceptions.expectMessage("Already completed");
-        toDoItem.completed();
-
-        // and then
-        final EventObject ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(EventObject.class);
-        assertThat(ev, is(nullValue())); 
-    }
-
-
-    @Test
-    public void cannotSetPropertyDirectly() throws Exception {
-        
-        // given
-
-        // when, then should fail
-        expectedExceptions.expectMessage("Always disabled");
-        toDoItem.setComplete(true);
-
-        // and then
-        final EventObject ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(EventObject.class);
-        assertThat(ev, is(nullValue())); 
-    }
-
-    @Test
-    public void subscriberReceivesEvent() throws Exception {
-
-        // given
-        assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AcceptEvents));
-        assertThat(toDoItem.isComplete(), is(false));
-
-        // when
-        toDoItem.completed();
-
-        // then
-        assertThat(toDoItem.isComplete(), is(true));
-
-        // and then
-        final ToDoItem.CompletedEvent ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(ToDoItem.CompletedEvent.class);
-        assertThat(ev, is(not(nullValue())));
-
-        ToDoItem source = ev.getSource();
-        assertThat(source, is(equalTo(unwrap(toDoItem))));
-        assertThat(ev.getIdentifier().getMemberName(), is("completed"));
-    }
-
-    @Test
-    public void subscriberVetoesEventWithRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithRecoverableException);
-
-        // then
-        expectedExceptions.expect(RecoverableException.class);
-
-        // when
-        toDoItem.completed();
-    }
-
-    @Test
-    public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithNonRecoverableException);
-
-        // then
-        expectedExceptions.expect(NonRecoverableException.class);
-
-        // when
-        toDoItem.completed();
-    }
-
-    @Test
-    public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.ThrowOtherException);
-
-        // when
-        toDoItem.completed();
-
-        // then
-        // (no expectedExceptions setup, expect to continue)
-        assertTrue(true);
-    }
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
deleted file mode 100644
index e959918..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
+++ /dev/null
@@ -1,83 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.actions;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.math.BigDecimal;
-import java.util.List;
-import javax.inject.Inject;
-import org.joda.time.LocalDate;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.services.clock.ClockService;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_duplicate extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ClockService clockService;
-
-    private ToDoItem toDoItem;
-    private ToDoItem duplicateToDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // given
-        final LocalDate todaysDate = clockService.now();
-        toDoItem.setDueBy(todaysDate);
-        toDoItem.updateCost(new BigDecimal("123.45"));
-        
-        duplicateToDoItem = toDoItem.duplicate(
-                unwrap(toDoItem).default0Duplicate(), 
-                unwrap(toDoItem).default1Duplicate(),
-                unwrap(toDoItem).default2Duplicate(),
-                unwrap(toDoItem).default3Duplicate(),
-                new BigDecimal("987.65"));
-        
-        // then
-        assertThat(duplicateToDoItem.getDescription(), is(toDoItem.getDescription() + " - Copy"));
-        assertThat(duplicateToDoItem.getCategory(), is(toDoItem.getCategory()));
-        assertThat(duplicateToDoItem.getDueBy(), is(todaysDate));
-        assertThat(duplicateToDoItem.getCost(), is(new BigDecimal("987.65")));
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
deleted file mode 100644
index 47ff7d8..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/actions/ToDoItemTest_notYetCompleted.java
+++ /dev/null
@@ -1,79 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.actions;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_notYetCompleted extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // given
-        unwrap(toDoItem).setComplete(true);
-        
-        // when
-        toDoItem.notYetCompleted();
-        
-        // then
-        assertThat(toDoItem.isComplete(), is(false));
-    }
-
-    @Test
-    public void cannotUndoIfNotYetCompleted() throws Exception {
-        
-        // given
-        assertThat(toDoItem.isComplete(), is(false));
-
-        // when, then should fail
-        expectedExceptions.expectMessage("Not yet completed");
-        toDoItem.notYetCompleted();
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
deleted file mode 100644
index 451904a..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
+++ /dev/null
@@ -1,71 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.colls;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemContributions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemContributionsTest_similarTo extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemContributions toDoItemContributions;
-
-    private ToDoItemContributions toDoItemContributionsWrapped;
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = this.toDoItems.notYetComplete();
-        toDoItem = wrap(all.get(0));
-
-        toDoItemContributionsWrapped = wrap(toDoItemContributions);
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // when
-        List<ToDoItem> similarItems = toDoItemContributionsWrapped.similarTo(toDoItem);
-        
-        // then
-        assertThat(similarItems.size(), is(6));
-    }
-    
-}
\ No newline at end of file


[30/39] ISIS-839: recreating todoapp archetype

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
deleted file mode 100644
index 3423a34..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_add.java
+++ /dev/null
@@ -1,181 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.colls;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemSubscriptions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.NonRecoverableException;
-import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
-
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-public class ToDoItemTest_dependencies_add extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemSubscriptions toDoItemSubscriptions;
-
-    private ToDoItem toDoItem;
-    private ToDoItem otherToDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> items = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(items.get(0));
-        otherToDoItem = wrap(items.get(1));
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        unwrap(toDoItem).getDependencies().clear();
-        toDoItemSubscriptions.reset();
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-
-        // given
-        assertThat(toDoItem.getDependencies().size(), is(0));
-        
-        // when
-        toDoItem.add(otherToDoItem);
-        
-        // then
-        assertThat(toDoItem.getDependencies().size(), is(1));
-        assertThat(toDoItem.getDependencies().first(), is(unwrap(otherToDoItem)));
-        
-        // and then
-        @SuppressWarnings("unchecked")
-        final CollectionAddedToEvent<ToDoItem,ToDoItem> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(CollectionAddedToEvent.class);
-        assertThat(ev, is(not(nullValue()))); 
-        
-        ToDoItem source = ev.getSource();
-        assertThat(source, is(equalTo(unwrap(toDoItem))));
-        assertThat(ev.getIdentifier().getMemberName(), is("dependencies"));
-        assertThat(ev.getValue(), is(unwrap(otherToDoItem)));
-    }
-
-
-    @Test
-    public void cannotDependOnSelf() throws Exception {
-
-        // then
-        expectedExceptions.expectMessage("Can't set up a dependency to self");
-
-        // when
-        toDoItem.add(toDoItem);
-    }
-
-    @Test
-    public void cannotAddDependencyIfComplete() throws Exception {
-
-        // given
-        unwrap(toDoItem).setComplete(true);
-        
-        // then
-        expectedExceptions.expectMessage("Cannot add dependencies for items that are complete");
-
-        // when
-        toDoItem.add(otherToDoItem);
-    }
-
-
-    @Test
-    public void subscriberReceivesEvent() throws Exception {
-
-        // given
-        assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AcceptEvents));
-
-        // when
-        toDoItem.add(otherToDoItem);
-
-        // then
-        @SuppressWarnings("unchecked")
-        final CollectionAddedToEvent<ToDoItem,ToDoItem> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(CollectionAddedToEvent.class);
-        assertThat(ev, is(not(nullValue())));
-
-        ToDoItem source = ev.getSource();
-        assertThat(source, is(equalTo(unwrap(toDoItem))));
-        assertThat(ev.getIdentifier().getMemberName(), is("dependencies"));
-        assertThat(ev.getValue(), is(unwrap(otherToDoItem)));
-    }
-
-    @Test
-    public void subscriberVetoesEventWithRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithRecoverableException);
-
-        // then
-        expectedExceptions.expect(RecoverableException.class);
-
-        // when
-        toDoItem.add(otherToDoItem);
-    }
-
-    @Test
-    public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithNonRecoverableException);
-
-        // then
-        expectedExceptions.expect(NonRecoverableException.class);
-
-        // when
-        toDoItem.add(otherToDoItem);
-    }
-
-    @Test
-    public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.ThrowOtherException);
-
-        // when
-        toDoItem.add(otherToDoItem);
-
-        // then
-        // (no expectedExceptions setup, expect to continue)
-        assertTrue(true);
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
deleted file mode 100644
index de8fb37..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/colls/ToDoItemTest_dependencies_remove.java
+++ /dev/null
@@ -1,176 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.colls;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemSubscriptions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.NonRecoverableException;
-import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
-
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-public class ToDoItemTest_dependencies_remove extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemSubscriptions toDoItemSubscriptions;
-
-    private ToDoItem toDoItem;
-    private ToDoItem otherToDoItem;
-    private ToDoItem yetAnotherToDoItem;
-
-
-    @Before
-    public void setUp() throws Exception {
-
-        final List<ToDoItem> items = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(items.get(0));
-        otherToDoItem = wrap(items.get(1));
-        yetAnotherToDoItem = wrap(items.get(2));
-        
-        toDoItem.add(otherToDoItem);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        unwrap(toDoItem).getDependencies().clear();
-        toDoItemSubscriptions.reset();
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-
-        // given
-        assertThat(toDoItem.getDependencies().size(), is(1));
-        
-        // when
-        toDoItem.remove(otherToDoItem);
-        
-        // then
-        assertThat(toDoItem.getDependencies().size(), is(0));
-    }
-
-
-    @Test
-    public void cannotRemoveItemIfNotADependency() throws Exception {
-
-        // then
-        expectedExceptions.expectMessage("Not a dependency");
-
-        // when
-        toDoItem.remove(yetAnotherToDoItem);
-    }
-
-    @Test
-    public void cannotRemoveDependencyIfComplete() throws Exception {
-
-        // given
-        unwrap(toDoItem).setComplete(true);
-
-        // then
-        expectedExceptions.expectMessage("Cannot remove dependencies for items that are complete");
-
-        // when
-        toDoItem.remove(otherToDoItem);
-    }
-
-    @Test
-    public void subscriberReceivesEvent() throws Exception {
-
-        // given
-        assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AcceptEvents));
-        assertThat(toDoItem.getDependencies().size(), is(1));
-
-        // when
-        toDoItem.remove(otherToDoItem);
-
-        // then
-        @SuppressWarnings("unchecked")
-        final CollectionRemovedFromEvent<ToDoItem,ToDoItem> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(CollectionRemovedFromEvent.class);
-        assertThat(ev, is(not(nullValue())));
-
-        ToDoItem source = ev.getSource();
-        assertThat(source, is(equalTo(unwrap(toDoItem))));
-        assertThat(ev.getIdentifier().getMemberName(), is("dependencies"));
-        assertThat(ev.getValue(), is(unwrap(otherToDoItem)));
-    }
-
-    @Test
-    public void subscriberVetoesEventWithRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithRecoverableException);
-
-        // then
-        expectedExceptions.expect(RecoverableException.class);
-
-        // when
-        toDoItem.remove(otherToDoItem);
-    }
-
-    @Test
-    public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithNonRecoverableException);
-
-        // then
-        expectedExceptions.expect(NonRecoverableException.class);
-
-        // when
-        toDoItem.remove(otherToDoItem);
-    }
-
-    @Test
-    public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.ThrowOtherException);
-
-        // when
-        toDoItem.remove(otherToDoItem);
-
-        // then
-        // (no expectedExceptions setup, expect to continue)
-        assertTrue(true);
-    }
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
deleted file mode 100644
index 6f358c7..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
+++ /dev/null
@@ -1,75 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemContributions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemContributionsTest_priority extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemContributions toDoItemContributions;
-    
-    private List<ToDoItem> notYetComplete;
-
-    @Before
-    public void setUp() throws Exception {
-        notYetComplete = wrap(toDoItems).notYetComplete();
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        assertPriority(0, 1);
-        assertPriority(1, 2);
-        assertPriority(2, 4);
-        assertPriority(3, 6);
-        assertPriority(4, 5);
-        assertPriority(5, 7);
-        assertPriority(6, 9);
-        assertPriority(7, 8);
-        assertPriority(8, 3);
-        assertPriority(9, 10);
-    }
-
-    private void assertPriority(final int n, final int priority) {
-        assertThat(toDoItemContributions.relativePriority(notYetComplete.get(n)), is(Integer.valueOf(priority)));
-    }
-    
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
deleted file mode 100644
index 0e08405..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_attachment.java
+++ /dev/null
@@ -1,82 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.nio.charset.Charset;
-import java.util.List;
-import javax.activation.MimeType;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.value.Blob;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_attachment extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        byte[] bytes = "{${symbol_escape}"foo${symbol_escape}": ${symbol_escape}"bar${symbol_escape}"}".getBytes(Charset.forName("UTF-8"));
-        final Blob newAttachment = new Blob("myfile.json", new MimeType("application/json"), bytes);
-        
-        // when
-        toDoItem.setAttachment(newAttachment);
-        
-        // then
-        assertThat(toDoItem.getAttachment(), is(newAttachment));
-    }
-
-    @Test
-    public void canBeNull() throws Exception {
-        
-        // when
-        toDoItem.setAttachment((Blob)null);
-        
-        // then
-        assertThat(toDoItem.getAttachment(), is((Blob)null));
-    }
-
-    
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
deleted file mode 100644
index 75b907b..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
+++ /dev/null
@@ -1,62 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItem.Category;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.containsString;
-
-public class ToDoItemTest_category extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void cannotModify() throws Exception {
-        
-        // when, then
-        expectedExceptions.expectMessage(containsString("Reason: Use action to update both category and subcategory."));
-        toDoItem.setCategory(Category.Professional);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
deleted file mode 100644
index f9f2278..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_cost.java
+++ /dev/null
@@ -1,100 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.math.BigDecimal;
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_cost extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-    private BigDecimal cost;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-        cost = toDoItem.getCost();
-    }
-
-    @Test
-    public void happyCaseUsingProperty() throws Exception {
-        
-        final BigDecimal newCost = new BigDecimal("123.45");
-        
-        // when
-        toDoItem.updateCost(newCost);
-        
-        // then
-        assertThat(toDoItem.getCost(), is(newCost));
-    }
-
-    @Test
-    public void happyCaseUsingAction() throws Exception {
-        
-        final BigDecimal newCost = new BigDecimal("123.45");
-        
-        // when
-        toDoItem.updateCost(newCost);
-        
-        // then
-        assertThat(toDoItem.getCost(), is(newCost));
-    }
-    
-    @Test
-    public void canBeNull() throws Exception {
-        
-        // when
-        toDoItem.updateCost((BigDecimal)null);
-        
-        // then
-        assertThat(toDoItem.getCost(), is((BigDecimal)null));
-    }
-
-    @Test
-    public void defaultForAction() throws Exception {
-        
-        // then
-        assertThat(unwrap(toDoItem).default0UpdateCost(), is(cost));
-    }
-    
-    
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
deleted file mode 100644
index 619520a..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_description.java
+++ /dev/null
@@ -1,220 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemSubscriptions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.NonRecoverableException;
-import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-public class ToDoItemTest_description extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-    @Inject
-    private ToDoItemSubscriptions toDoItemSubscriptions;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        toDoItemSubscriptions.reset();
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // given
-        assertThat(toDoItem.getDescription(), is("Buy bread"));
-        
-        // when
-        toDoItem.setDescription("Buy bread and butter");
-        
-        // then
-        assertThat(toDoItem.getDescription(), is("Buy bread and butter"));
-    }
-
-
-    @Test
-    public void failsRegex() throws Exception {
-        
-        // when
-        expectedExceptions.expectMessage("Doesn't match pattern");
-        toDoItem.setDescription("exclamation marks are not allowed!!!");
-    }
-
-    @Test
-    public void cannotBeNull() throws Exception {
-        
-        // when, then
-        expectedExceptions.expectMessage("Mandatory");
-        toDoItem.setDescription(null);
-    }
-
-    @Test
-    public void cannotUseModify() throws Exception {
-
-        expectedExceptions.expectMessage("Cannot invoke supporting method for 'Description'; use only property accessor/mutator");
-
-        // given
-        assertThat(toDoItem.getDescription(), is("Buy bread"));
-        
-        // when
-        toDoItem.modifyDescription("Buy bread and butter");
-        
-        // then
-        assertThat(toDoItem.getDescription(), is("Buy bread"));
-    }
-
-    @Test
-    public void cannotUseClear() throws Exception {
-        
-        expectedExceptions.expectMessage("Cannot invoke supporting method for 'Description'; use only property accessor/mutator");
-        
-        // given
-        assertThat(toDoItem.getDescription(), is("Buy bread"));
-        
-        // when
-        toDoItem.clearDescription();
-        
-        // then
-        assertThat(toDoItem.getDescription(), is("Buy bread"));
-    }
-    
-
-    @Test
-    public void onlyJustShortEnough() throws Exception {
-        
-        // when, then
-        toDoItem.setDescription(characters(100));
-    }
-
-    @Test
-    public void tooLong() throws Exception {
-
-        // then
-        expectedExceptions.expectMessage("The value proposed exceeds the maximum length of 100");
-
-        // when
-        toDoItem.setDescription(characters(101));
-    }
-
-
-    @Test
-    public void subscriberReceivesEvent() throws Exception {
-
-        // given
-        assertThat(toDoItemSubscriptions.getSubscriberBehaviour(), is(ToDoItemSubscriptions.Behaviour.AcceptEvents));
-        assertThat(toDoItem.getDescription(), is("Buy bread"));
-
-        // when
-        toDoItem.setDescription("Buy bread and butter");
-
-        // then published and received
-        @SuppressWarnings("unchecked")
-        final PropertyChangedEvent<ToDoItem,String> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(PropertyChangedEvent.class);
-        assertThat(ev, is(not(nullValue())));
-
-        ToDoItem source = ev.getSource();
-        assertThat(source, is(equalTo(unwrap(toDoItem))));
-        assertThat(ev.getIdentifier().getMemberName(), is("description"));
-        assertThat(ev.getOldValue(), is("Buy bread"));
-        assertThat(ev.getNewValue(), is("Buy bread and butter"));
-    }
-
-    @Test
-    public void subscriberVetoesEventWithRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithRecoverableException);
-
-        // then
-        expectedExceptions.expect(RecoverableException.class);
-
-        // when
-        toDoItem.setDescription("Buy bread and butter");
-    }
-
-
-    @Test
-    public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.RejectEventsWithNonRecoverableException);
-
-        // then
-        expectedExceptions.expect(NonRecoverableException.class);
-
-        // when
-        toDoItem.setDescription("Buy bread and butter");
-    }
-
-
-    @Test
-    public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
-
-        // given
-        toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.ThrowOtherException);
-
-        // when
-        toDoItem.setDescription("Buy bread and butter");
-
-        // then
-        // (no expectedExceptions setup, expect to continue)
-        assertTrue(true);
-    }
-
-
-    private static String characters(final int n) {
-        StringBuffer buf = new StringBuffer();
-        for(int i=0; i<n; i++) {
-            buf.append("a");
-        }
-        return buf.toString();
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
deleted file mode 100644
index f9b043f..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_dueBy.java
+++ /dev/null
@@ -1,106 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.joda.time.LocalDate;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.applib.services.clock.ClockService;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_dueBy extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ClockService clockService;
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // when
-        final LocalDate fiveDaysFromNow = clockService.now().plusDays(5);
-        toDoItem.setDueBy(fiveDaysFromNow);
-        
-        // then
-        assertThat(toDoItem.getDueBy(), is(fiveDaysFromNow));
-    }
-
-
-    @Test
-    public void canBeNull() throws Exception {
-        
-        // when
-        toDoItem.setDueBy((LocalDate)null);
-        
-        // then
-        assertThat(toDoItem.getDueBy(), is((LocalDate)null));
-    }
-
-    @Test
-    public void canBeUpToSixDaysInPast() throws Exception {
-        
-        final LocalDate nowAsLocalDate = clockService.now();
-        final LocalDate sixDaysAgo = nowAsLocalDate.plusDays(-5);
-
-        // when
-        toDoItem.setDueBy(sixDaysAgo);
-        
-        // then
-        assertThat(toDoItem.getDueBy(), is(sixDaysAgo));
-    }
-
-
-    @Test
-    public void cannotBeMoreThanSixDaysInPast() throws Exception {
-        
-        final LocalDate sevenDaysAgo = Clock.getTimeAsLocalDate().plusDays(-7);
-        
-        // when, then
-        expectedExceptions.expectMessage("Due by date cannot be more than one week old");
-        toDoItem.setDueBy(sevenDaysAgo);
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
deleted file mode 100644
index e8b9a00..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_notes.java
+++ /dev/null
@@ -1,90 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItemSubscriptions;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_notes extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    private ToDoItem toDoItem;
-    private ToDoItemSubscriptions toDoItemSubscriptions;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
-        toDoItem = wrap(all.get(0));
-        toDoItemSubscriptions = service(ToDoItemSubscriptions.class);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        toDoItemSubscriptions.reset();
-    }
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        final String newNotes = "Lorem ipsum yada yada";
-        
-        // when
-        toDoItem.setNotes(newNotes);
-        
-        // then
-        assertThat(toDoItem.getNotes(), is(newNotes));
-
-        // and then not published so not received
-        @SuppressWarnings("unchecked")
-        final PropertyChangedEvent<ToDoItem,String> ev = toDoItemSubscriptions.mostRecentlyReceivedEvent(PropertyChangedEvent.class);
-        assertThat(ev, is(nullValue())); 
-    }
-
-    @Test
-    public void canBeNull() throws Exception {
-        
-        // when
-        toDoItem.setNotes((String)null);
-        
-        // then
-        assertThat(toDoItem.getNotes(), is((String)null));
-    }
-
-    
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
deleted file mode 100644
index caeb116..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
+++ /dev/null
@@ -1,61 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-public class ToDoItemTest_ownedBy extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void cannotModify() throws Exception {
-        
-        // when, then
-        expectedExceptions.expectMessage("Always hidden");
-        toDoItem.setOwnedBy("other");
-    }
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
deleted file mode 100644
index 20579b2..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
+++ /dev/null
@@ -1,62 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.props;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItem.Subcategory;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.containsString;
-
-public class ToDoItemTest_subcategory extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-    }
-
-    @Test
-    public void cannotModify() throws Exception {
-        
-        // when, then
-        expectedExceptions.expectMessage(containsString("Reason: Use action to update both category and subcategory."));
-        toDoItem.setSubcategory(Subcategory.Chores);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
deleted file mode 100644
index 03681ff..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_finders.java
+++ /dev/null
@@ -1,84 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.repo;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.hamcrest.Matchers;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemsTest_finders extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private int notYetCompletedSize;
-    private int completedSize;
-
-    @Before
-    public void setUp() throws Exception {
-        final List<ToDoItem> notYetCompleteItems = wrap(toDoItems).notYetComplete();
-        final List<ToDoItem> completedItems = wrap(toDoItems).complete();
-
-        notYetCompletedSize = notYetCompleteItems.size();
-        completedSize = completedItems.size();
-        
-        assertThat(notYetCompletedSize, is(Matchers.greaterThan(5)));
-    }
-
-    @Test
-    public void complete_and_notYetComplete() throws Exception {
-        
-        // given
-        List<ToDoItem> notYetCompleteItems = wrap(service(ToDoItems.class)).notYetComplete();
-        final ToDoItem toDoItem = wrap(notYetCompleteItems.get(0));
-        
-        // when
-        toDoItem.completed();
-        
-        // then
-        assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(notYetCompletedSize-1));
-        assertThat(wrap(service(ToDoItems.class)).complete().size(), is(completedSize+1));
-        
-        // and when
-        toDoItem.notYetCompleted();
-        
-        // then
-        assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(notYetCompletedSize));
-        assertThat(wrap(service(ToDoItems.class)).complete().size(), is(completedSize));
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
deleted file mode 100644
index 6b8e94d..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
+++ /dev/null
@@ -1,68 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.repo;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItem.Category;
-import dom.todo.ToDoItem.Subcategory;
-import dom.todo.ToDoItems;
-import integration.tests.ToDoIntegTest;
-
-import javax.inject.Inject;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemsTest_newToDo_and_delete extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        // none
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    @Test
-    public void happyCase() throws Exception {
-        
-        // given
-        int size = wrap(toDoItems).notYetComplete().size();
-        
-        // when
-        final ToDoItem newToDo = wrap(service(ToDoItems.class)).newToDo("new todo", Category.Professional, Subcategory.OpenSource, null, null);
-
-        // then
-        assertThat(newToDo.getDescription(), is("new todo"));
-        assertThat(newToDo.getCategory(), is(Category.Professional));
-        assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(size+1));
-        
-        // when
-        newToDo.delete();
-
-        // then
-        assertThat(wrap(service(ToDoItems.class)).notYetComplete().size(), is(size));
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java b/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
deleted file mode 100644
index afbc6b7..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/tests/smoke/ToDoItemTest_title.java
+++ /dev/null
@@ -1,116 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 integration.tests.smoke;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-import fixture.todo.integtests.ToDoItemsIntegTestFixture;
-import integration.tests.ToDoIntegTest;
-
-import java.util.List;
-import javax.inject.Inject;
-import org.joda.time.LocalDate;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.isis.applib.clock.Clock;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertThat;
-
-public class ToDoItemTest_title extends ToDoIntegTest {
-
-    @Before
-    public void setUpData() throws Exception {
-        scenarioExecution().install(new ToDoItemsIntegTestFixture());
-    }
-
-    @Inject
-    private ToDoItems toDoItems;
-
-    private ToDoItem toDoItem;
-    private LocalDate dueBy;
-
-    @Before
-    public void setUp() throws Exception {
-
-        final List<ToDoItem> all = wrap(toDoItems).notYetComplete();
-        toDoItem = wrap(all.get(0));
-
-        dueBy = toDoItem.getDueBy();
-    }
-
-    
-    @Test
-    public void includesDescription() throws Exception {
-
-        // given
-        assertThat(container().titleOf(toDoItem), containsString("Buy bread due by"));
-
-        // when
-        unwrap(toDoItem).setDescription("Buy bread and butter");
-        
-        // then
-        assertThat(container().titleOf(toDoItem), containsString("Buy bread and butter due by"));
-    }
-
-    @Test
-    public void includesDueDateIfAny() throws Exception {
-
-        // given
-        assertThat(container().titleOf(toDoItem), containsString("due by " + dueBy.toString("yyyy-MM-dd")));
-
-        // when
-        final LocalDate fiveDaysFromNow = Clock.getTimeAsLocalDate().plusDays(5);
-        unwrap(toDoItem).setDueBy(fiveDaysFromNow);
-
-        // then
-        assertThat(container().titleOf(toDoItem), containsString("due by " + fiveDaysFromNow.toString("yyyy-MM-dd")));
-    }
-
-
-    @Test
-    public void ignoresDueDateIfNone() throws Exception {
-
-        // when
-        // (since wrapped, will call clearDueBy) 
-        toDoItem.setDueBy(null);
-
-        // then
-        assertThat(container().titleOf(toDoItem), not(containsString("due by")));
-    }
-
-    @Test
-    public void usesWhetherCompleted() throws Exception {
-
-        // given
-        assertThat(container().titleOf(toDoItem), not(containsString("Completed!")));
-
-        // when
-        toDoItem.completed();
-
-        // then
-        assertThat(container().titleOf(toDoItem), not(containsString("due by")));
-        assertThat(container().titleOf(toDoItem), containsString("Buy bread - Completed!"));
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml
index 1ba2a5a..8b6ee60 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml
@@ -23,7 +23,7 @@
     <artifactId>${artifactId}</artifactId>
     <version>${version}</version>
 
-    <name>Quickstart Wicket/Restful/JDO App</name>
+    <name>ToDo App</name>
 
     <packaging>pom</packaging>
 
@@ -32,11 +32,8 @@
     </prerequisites>
 
 	<properties>
-        <isis.version>1.5.0</isis.version>
-		<isis-objectstore-jdo.version>1.5.0</isis-objectstore-jdo.version>
-		<isis-viewer-wicket.version>1.5.0</isis-viewer-wicket.version>
-		<isis-viewer-restfulobjects.version>2.3.0</isis-viewer-restfulobjects.version>
-		<isis-security-shiro.version>1.5.0</isis-security-shiro.version>
+        <isis.version>1.6.0</isis.version>
+		<isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
 
         <!-- must be consistent with the versions defined by the JDO Objectstore -->
         <datanucleus-accessplatform-jdo-rdbms.version>3.3.6</datanucleus-accessplatform-jdo-rdbms.version>
@@ -90,13 +87,9 @@
                     <version>2.16</version>
                     <configuration>
                         <includes>
-                            <include>**/*Test.java</include>
-                            <include>**/*Test_*.java</include>
-                            <include>**/*Spec*.java</include>
+                            <include>**/*.java</include>
                         </includes>
                         <excludes>
-                            <exclude>**/Test*.java</exclude>
-                            <exclude>**/*ForTesting.java</exclude>
                             <exclude>**/*Abstract*.java</exclude>
                         </excludes>
                         <useFile>true</useFile>
@@ -310,14 +303,6 @@
 			</dependency>
 
 			<dependency>
-				<groupId>org.apache.isis.objectstore</groupId>
-				<artifactId>isis-objectstore-jdo</artifactId>
-				<version>${isis-objectstore-jdo.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
-			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket</artifactId>
 				<version>${isis-viewer-wicket.version}</version>
@@ -325,22 +310,6 @@
 				<scope>import</scope>
 			</dependency>
 
-			<dependency>
-				<groupId>org.apache.isis.viewer</groupId>
-				<artifactId>isis-viewer-restfulobjects</artifactId>
-				<version>${isis-viewer-restfulobjects.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.isis.security</groupId>
-				<artifactId>isis-security-shiro</artifactId>
-				<version>${isis-security-shiro.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
 
             <!-- this project's own modules -->
             <dependency>
@@ -360,7 +329,6 @@
             </dependency>
 
 
-
             <!-- quartz scheduler integration -->
 
             <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt
new file mode 100644
index 0000000..4160805
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Copy into workspace${symbol_escape}.idea${symbol_escape}runConfigurations directory, and adjust file paths for Maven tasks.
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml
new file mode 100644
index 0000000..a1e657d
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml
@@ -0,0 +1,32 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="TodoApp-PROTOTYPE" type="Application" factoryName="Application" singleton="true">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.WebServer" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="--type SERVER_PROTOTYPE --port 8080" />
+    <option name="WORKING_DIRECTORY" value="file://${symbol_dollar}MODULE_DIR${symbol_dollar}" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="${parentArtifactId}-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Debug" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/${parentArtifactId}/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml
new file mode 100644
index 0000000..536351b
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml
@@ -0,0 +1,26 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="TodoApp (enhance only)" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.Dummy" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://${symbol_dollar}MODULE_DIR${symbol_dollar}" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="${parentArtifactId}-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/${parentArtifactId}/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/pom.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/pom.xml
index fd82d02..9fafe06 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/pom.xml
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/pom.xml
@@ -26,7 +26,7 @@
     </parent>
 
     <artifactId>${artifactId}</artifactId>
-    <name>Quickstart Wicket/Restful/JDO Webapp</name>
+    <name>ToDo App Webapp</name>
 
     <description>This module runs both the Wicket viewer and the Restfulobjects viewer in a single webapp configured to run using the datanucleus object store.</description>
 
@@ -156,20 +156,20 @@
         
         <!-- other isis components -->
         <dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-            <artifactId>isis-objectstore-jdo-datanucleus</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.isis.viewer</groupId>
             <artifactId>isis-viewer-wicket-impl</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.viewer</groupId>
-            <artifactId>isis-viewer-restfulobjects-server</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-viewer-restfulobjects-server</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.security</groupId>
-            <artifactId>isis-security-shiro</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-security-shiro</artifactId>
         </dependency>
 
 
@@ -190,7 +190,39 @@
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-security</artifactId>
         </dependency>
-        
+
+
+        <!-- isis modules -->
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-background</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-devutils-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-audit-jdo</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-command-jdo</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-publishing-jdo</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-publishingeventserializer-ro</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-settings-impl-jdo</artifactId>
+        </dependency>
+
+
         <!-- to run using WebServer (optional) -->
         <dependency>
             <groupId>org.apache.isis.core</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/Admin.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/Admin.java b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/Admin.java
index 748b29e..9130c31 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/Admin.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/Admin.java
@@ -33,6 +33,7 @@ import org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoR
 import org.apache.isis.objectstore.jdo.applib.service.publish.PublishedEventJdo;
 import org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoRepository;
 
+@DomainService(menuOrder = "35")
 public class Admin extends AbstractService {
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/AdminContributions.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/AdminContributions.java b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/AdminContributions.java
index a4b6707..1267098 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/AdminContributions.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/admin/AdminContributions.java
@@ -28,12 +28,8 @@ import org.joda.time.LocalDate;
 
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.ViewModel;
-import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.Named;
-import org.apache.isis.applib.annotation.NotInServiceMenu;
-import org.apache.isis.applib.annotation.Optional;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
@@ -46,6 +42,7 @@ import org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoR
 import org.apache.isis.objectstore.jdo.applib.service.publish.PublishedEventJdo;
 import org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoRepository;
 
+@DomainService
 public class AdminContributions extends AbstractService {
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
index f9bf99e..a75ecdb 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
@@ -19,8 +19,7 @@
  */
 package webapp.prototyping;
 
-import fixture.todo.ToDoItemsFixturesService;
-
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
@@ -28,8 +27,9 @@ import org.apache.isis.core.metamodel.services.devutils.DeveloperUtilitiesServic
 
 /**
  * These overrides are simply to 'move' the action underneath the 
- * {@link ToDoItemsFixturesService fixtures} menu.
+ * 'Prototyping' menu.
  */
+@DomainService(menuOrder = "40.2")
 public class DeveloperUtilities extends DeveloperUtilitiesServiceDefault {
 
     @MemberOrder(name="Prototyping", sequence="90.1")

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/ExternalLinksService.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/ExternalLinksService.java b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/ExternalLinksService.java
index a7326a8..b947ec1 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/ExternalLinksService.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/ExternalLinksService.java
@@ -22,17 +22,15 @@ package webapp.prototyping;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.Named;
-import org.apache.isis.applib.annotation.Prototype;
+import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
-import org.apache.isis.applib.annotation.MemberOrder;
 
+@DomainService(menuOrder = "40.3")
 public class ExternalLinksService {
 
     public static enum ExternalLink {
         ISIS_DOCUMENTATION("Apache Isis docs", "http://isis.apache.org/documentation.html"),
-        PROJECT_ON_GITHUB("Project source code on Github", "https://github.com/apache/isis/tree/master/example/application/${parentArtifactId}/");
+        PROJECT_ON_GITHUB("Project source code on Github", "https://github.com/apache/isis/tree/master/example/application/quickstart_wicket_restful_jdo/");
         
         private final String title;
         private final String url;

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/WicketDeveloperUtilities.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/WicketDeveloperUtilities.java b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/WicketDeveloperUtilities.java
new file mode 100644
index 0000000..5c7678f
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/WicketDeveloperUtilities.java
@@ -0,0 +1,42 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/**
+ *  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 webapp.prototyping;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.viewer.wicket.viewer.applib.WicketDeveloperUtilitiesService;
+
+/**
+ * These overrides are simply to 'move' the action underneath the 
+ * 'Prototyping' menu.
+ */
+@DomainService(menuOrder = "40.3")
+public class WicketDeveloperUtilities extends WicketDeveloperUtilitiesService {
+
+    @Named("Clear i18n Cache")
+    @MemberOrder(name="Prototyping", sequence="90.3")
+    @Override
+    public void resetI18nCache() {
+        super.resetI18nCache();
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/ToDoApplication_en.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/ToDoApplication_en.properties b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/ToDoApplication_en.properties
new file mode 100644
index 0000000..65dc6ea
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/ToDoApplication_en.properties
@@ -0,0 +1,54 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+${symbol_pound}
+${symbol_pound}  Licensed to the Apache Software Foundation (ASF) under one
+${symbol_pound}  or more contributor license agreements.  See the NOTICE file
+${symbol_pound}  distributed with this work for additional information
+${symbol_pound}  regarding copyright ownership.  The ASF licenses this file
+${symbol_pound}  to you under the Apache License, Version 2.0 (the
+${symbol_pound}  "License"); you may not use this file except in compliance
+${symbol_pound}  with the License.  You may obtain a copy of the License at
+${symbol_pound}
+${symbol_pound}        http://www.apache.org/licenses/LICENSE-2.0
+${symbol_pound}
+${symbol_pound}  Unless required by applicable law or agreed to in writing,
+${symbol_pound}  software distributed under the License is distributed on an
+${symbol_pound}  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+${symbol_pound}  KIND, either express or implied.  See the License for the
+${symbol_pound}  specific language governing permissions and limitations
+${symbol_pound}  under the License.
+${symbol_pound}
+
+
+${symbol_pound} override WicketSignInPage.properties
+loginHeader=Login
+
+${symbol_pound} override PageAbstract.properties
+aboutLabel=About
+logoutLabel=Logout
+
+${symbol_pound} override EntityPropertiesForm.properties and also
+${symbol_pound} override ActionParametersFormPanel.properties
+okLabel=OK
+cancelLabel=Cancel
+editLabel=Edit
+
+
+
+
+${symbol_pound}
+${symbol_pound} 3rd-party components
+${symbol_pound}
+
+${symbol_pound} Select2Choice
+
+${symbol_pound}noMatches=...
+${symbol_pound}inputTooShortSingular=...
+${symbol_pound}inputTooShortPlural=...
+${symbol_pound}loadMore=...
+${symbol_pound}searching=...
+
+${symbol_pound} datatables
+${symbol_pound}no-records-found=...
+

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/realm1.ini
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/realm1.ini b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/realm1.ini
index 13246ad..311694b 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/realm1.ini
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/realm1.ini
@@ -38,6 +38,18 @@ bob  = pass, user_role, self-install_role
 
 
 
+#
+# some additional users/roles
+# require IsisPermissionResolver to be configured in shiro.ini, and
+# require additional role/perms to be configured below in [roles]
+#
+
+# # fred should have access to everything except the analysis features
+# fred = pass,isisperms_all_but_analysis_role
+# # bill should have access to everything (the admin role 'trumps' the vetos)
+# bill = pass,isisperms_all_but_analysis_role,isisperms_admin_role
+
+
 # -----------------------------------------------------------------------------
 # Roles with assigned permissions
 # 
@@ -66,3 +78,17 @@ analysis_role = *:ToDoItemAnalysis:*:*,\
 self-install_role = *:ToDoItemsFixturesService:installFixtures:*
 admin_role = *
 
+
+
+
+#
+# some additional role/perms
+# require IsisPermissionResolver to be configured in shiro.ini
+#
+
+# isisperms_all_but_analysis_role =  aba/*,\
+#                                   !aba/*:ToDoItemAnalysis:*,\
+#                                   !aba/*:ToDoItemsByCategoryViewModel:*:*,\
+#                                   !aba/*:ToDoItemsByDateRangeViewModel:*:*
+# isisperms_admin_role = adm/*
+

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
index a71ec99..dda189b 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
@@ -21,16 +21,17 @@
   under the License.
 -->
 <p class="intro">
-    <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+    <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a platform to let you rapidly develop
     domain-driven apps in Java.
     <br/>
     <br/>
     This app has been generated using Isis' 
-    <a href="http://isis.apache.org/getting-started/quickstart-archetype.html">quickstart</a> archetype, 
+    <a href="http://isis.apache.org/intro/getting-started/todo%61pp-archetype.html" target="_blank">TodoApp</a> archetype,
     which configures Isis' most commonly used components in a straightforward &quot;todo&quot; app.
     <br/>
     <br/>
-    The core domain functionality class is provided by the <a href="https://github.com/apache/isis/blob/master/example/application/${parentArtifactId}/dom/src/main/java/dom/todo/ToDoItem.java"  target="_blank">ToDoItem</a> domain class.  
+    The core functionality of the app is provided by the
+    <a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank">ToDoItem</a> domain class.
     Supporting services provide additional capabilities.
     <br/>
     <br/>


[11/39] ISIS-833: reverting isis-module-wrapper -> isis-core-wrapper.

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
new file mode 100644
index 0000000..041083e
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
@@ -0,0 +1,39 @@
+/*
+ *  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.wrapper;
+
+
+import org.apache.isis.applib.annotation.DomainService;
+
+/**
+ * This service provides the ability to &quot;wrap&quot; of a domain object such that it can
+ * be interacted with while enforcing the hide/disable/validate rules implies by
+ * the Isis programming model.
+ *
+ * <p>
+ * This implementation has no UI-visible actions and is the supported implementation, so it is annotated with
+ * {@link org.apache.isis.applib.annotation.DomainService}.   This means that by including
+ * <tt>o.a.i.core:isis-core-wrapper</tt> on the classpath, the service is automatically registered; no further
+ * configuration is required.
+ */
+@DomainService
+public class WrapperFactoryDefault extends WrapperFactoryJavassist {
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java
new file mode 100644
index 0000000..e71580f
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java
@@ -0,0 +1,30 @@
+/*
+ *  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.wrapper;
+
+import org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist;
+
+public class WrapperFactoryJavassist extends WrapperFactoryAbstract  {
+
+    public WrapperFactoryJavassist() {
+        super(new ProxyInstantiatorForJavassist());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java
new file mode 100644
index 0000000..2dfa70c
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java
@@ -0,0 +1,28 @@
+/*
+ *  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.wrapper.dispatchers;
+
+import org.apache.isis.applib.events.InteractionEvent;
+
+public interface InteractionEventDispatcher {
+
+    void dispatch(InteractionEvent interactionEvent);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java
new file mode 100644
index 0000000..c568633
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java
@@ -0,0 +1,34 @@
+/*
+ *  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.wrapper.dispatchers;
+
+import org.apache.isis.applib.events.InteractionEvent;
+
+public abstract class InteractionEventDispatcherTypeSafe<T extends InteractionEvent> implements InteractionEventDispatcher {
+
+    public abstract void dispatchTypeSafe(T interactionEvent);
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void dispatch(final InteractionEvent interactionEvent) {
+        dispatchTypeSafe((T) interactionEvent);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java
new file mode 100644
index 0000000..b8a4464
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java
@@ -0,0 +1,92 @@
+/*
+ *  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.wrapper.handlers;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.events.CollectionMethodEvent;
+import org.apache.isis.applib.events.InteractionEvent;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+abstract class AbstractCollectionInvocationHandler<T, C> extends DelegatingInvocationHandlerDefault<C> {
+
+    private final List<Method> interceptedMethods = Lists.newArrayList();
+    private final List<Method> vetoedMethods = Lists.newArrayList();
+
+    private final String collectionName;
+    private final OneToManyAssociation oneToManyAssociation;
+    private final T domainObject;
+
+    public AbstractCollectionInvocationHandler(final C collectionOrMapToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
+        super(collectionOrMapToProxy, handler.getHeadlessViewer(), handler.getExecutionMode());
+        this.collectionName = collectionName;
+        this.oneToManyAssociation = otma;
+        this.domainObject = handler.getDelegate();
+    }
+
+    protected Method intercept(final Method method) {
+        this.interceptedMethods.add(method);
+        return method;
+    }
+
+    protected Method veto(final Method method) {
+        this.vetoedMethods.add(method);
+        return method;
+    }
+
+    public String getCollectionName() {
+        return collectionName;
+    }
+
+    public OneToManyAssociation getCollection() {
+        return oneToManyAssociation;
+    }
+
+    public T getDomainObject() {
+        return domainObject;
+    }
+
+    @Override
+    public Object invoke(final Object collectionObject, final Method method, final Object[] args) throws Throwable {
+
+        // delegate
+        final Object returnValueObj = delegate(method, args);
+
+        if (interceptedMethods.contains(method)) {
+
+            resolveIfRequired(domainObject);
+
+            final InteractionEvent ev = new CollectionMethodEvent(getDelegate(), getCollection().getIdentifier(), getDomainObject(), method.getName(), args, returnValueObj);
+            notifyListeners(ev);
+            return returnValueObj;
+        }
+
+        if (vetoedMethods.contains(method)) {
+            throw new UnsupportedOperationException(String.format("Method '%s' may not be called directly.", method.getName()));
+        }
+
+        return returnValueObj;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java
new file mode 100644
index 0000000..bcf2973
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java
@@ -0,0 +1,53 @@
+/*
+ *  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.wrapper.handlers;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.ObjectExtensions;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+class CollectionInvocationHandler<T, R> extends AbstractCollectionInvocationHandler<T, R> {
+
+    public CollectionInvocationHandler(final R collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
+        super(collectionToProxy, collectionName, handler, otma);
+
+        try {
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "contains", Object.class));
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "size"));
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "isEmpty"));
+            if (collectionToProxy instanceof List) {
+                intercept(ObjectExtensions.getMethod(collectionToProxy, "get", int.class));
+            }
+            veto(ObjectExtensions.getMethod(collectionToProxy, "add", Object.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "remove", Object.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "addAll", Collection.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "removeAll", Collection.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "retainAll", Collection.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "clear"));
+        } catch (final NoSuchMethodException e) {
+            // ///CLOVER:OFF
+            throw new RuntimeException("A Collection method could not be found: " + e.getMessage());
+            // ///CLOVER:ON
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java
new file mode 100644
index 0000000..d424f64
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.wrapper.handlers;
+
+import java.lang.reflect.InvocationHandler;
+
+public interface DelegatingInvocationHandler<T> extends InvocationHandler {
+
+    T getDelegate();
+
+    public boolean isResolveObjectChangedEnabled();
+
+    public void setResolveObjectChangedEnabled(boolean resolveObjectChangedEnabled);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java
new file mode 100644
index 0000000..e1b7cdd
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java
@@ -0,0 +1,131 @@
+/*
+ *  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.wrapper.handlers;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.apache.isis.applib.events.InteractionEvent;
+import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerObjectChanged;
+import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerResolve;
+
+public class DelegatingInvocationHandlerDefault<T> implements DelegatingInvocationHandler<T> {
+
+    private final T delegate;
+    protected final WrapperFactory wrapperFactory;
+    private final ExecutionMode executionMode;
+
+    protected final Method equalsMethod;
+    protected final Method hashCodeMethod;
+    protected final Method toStringMethod;
+
+    private final DomainObjectContainerObjectChanged domainObjectContainerObjectChanged;
+    private final DomainObjectContainerResolve domainObjectContainerResolve;
+
+    private boolean resolveObjectChangedEnabled;
+
+    public DelegatingInvocationHandlerDefault(final T delegate, final WrapperFactory headlessViewer, final ExecutionMode executionMode) {
+        if (delegate == null) {
+            throw new IllegalArgumentException("delegate must not be null");
+        }
+        this.delegate = delegate;
+        this.wrapperFactory = headlessViewer;
+        this.executionMode = executionMode;
+
+        this.domainObjectContainerResolve = new DomainObjectContainerResolve();
+        this.domainObjectContainerObjectChanged = new DomainObjectContainerObjectChanged();
+
+        try {
+            equalsMethod = delegate.getClass().getMethod("equals", new Class[] { Object.class });
+            hashCodeMethod = delegate.getClass().getMethod("hashCode", new Class[] {});
+            toStringMethod = delegate.getClass().getMethod("toString", new Class[] {});
+        } catch (final NoSuchMethodException e) {
+            // ///CLOVER:OFF
+            throw new RuntimeException("An Object method could not be found: " + e.getMessage());
+            // ///CLOVER:ON
+        }
+    }
+
+    @Override
+    public boolean isResolveObjectChangedEnabled() {
+        return resolveObjectChangedEnabled;
+    }
+
+    @Override
+    public void setResolveObjectChangedEnabled(final boolean resolveObjectChangedEnabled) {
+        this.resolveObjectChangedEnabled = resolveObjectChangedEnabled;
+    }
+
+    protected void resolveIfRequired(final ObjectAdapter targetAdapter) {
+        resolveIfRequired(targetAdapter.getObject());
+    }
+
+    protected void resolveIfRequired(final Object domainObject) {
+        if (resolveObjectChangedEnabled) {
+            domainObjectContainerResolve.resolve(domainObject);
+        }
+    }
+
+    protected void objectChangedIfRequired(final ObjectAdapter targetAdapter) {
+        objectChangedIfRequired(targetAdapter.getObject());
+    }
+
+    protected void objectChangedIfRequired(final Object domainObject) {
+        if (resolveObjectChangedEnabled) {
+            domainObjectContainerObjectChanged.objectChanged(domainObject);
+        }
+    }
+
+    public WrapperFactory getHeadlessViewer() {
+        return wrapperFactory;
+    }
+
+    @Override
+    public T getDelegate() {
+        return delegate;
+    }
+
+    public ExecutionMode getExecutionMode() {
+        return executionMode;
+    }
+
+    protected Object delegate(final Method method, final Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+
+        return method.invoke(getDelegate(), args);
+    }
+
+    protected boolean isObjectMethod(final Method method) {
+        return toStringMethod.equals(method) || hashCodeMethod.equals(method) || equalsMethod.equals(method);
+    }
+
+    @Override
+    public Object invoke(final Object object, final Method method, final Object[] args) throws Throwable {
+        return method.invoke(object, args);
+    }
+
+    protected InteractionEvent notifyListeners(final InteractionEvent interactionEvent) {
+        wrapperFactory.notifyListeners(interactionEvent);
+        return interactionEvent;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
new file mode 100644
index 0000000..d505add
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -0,0 +1,720 @@
+/*
+ *  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.wrapper.handlers;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.events.*;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.services.wrapper.*;
+import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.consent.InteractionResult;
+import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
+import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
+
+public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandlerDefault<T> {
+
+    private final Map<Method, Collection<?>> collectionViewObjectsByMethod = new HashMap<Method, Collection<?>>();
+    private final Map<Method, Map<?, ?>> mapViewObjectsByMethod = new HashMap<Method, Map<?, ?>>();
+
+    private final AuthenticationSessionProvider authenticationSessionProvider;
+    private final SpecificationLoader specificationLookup;
+    private final AdapterManager adapterManager;
+    private final ObjectPersistor objectPersistor;
+
+    private final ProxyContextHandler proxy;
+    private final ExecutionMode executionMode;
+
+    /**
+     * The <tt>title()</tt> method; may be <tt>null</tt>.
+     */
+    protected Method titleMethod;
+
+    /**
+     * The <tt>__isis_save()</tt> method from {@link WrapperObject#__isis_save()}.
+     */
+    protected Method __isis_saveMethod;
+
+    /**
+     * The <tt>save()</tt> method from {@link WrapperObject#save()}.
+     */
+    @Deprecated
+    protected Method saveMethod;
+
+    /**
+     * The <tt>__isis_wrapped()</tt> method from {@link WrapperObject#__isis_wrapped()}.
+     */
+    protected Method __isis_wrappedMethod;
+
+    /**
+     * The <tt>wrapped()</tt> method from {@link WrapperObject#wrapped()}.
+     */
+    @Deprecated
+    protected Method wrappedMethod;
+
+    /**
+     * The <tt>__isis_executionMode()</tt> method from {@link WrapperObject#__isis_executionMode()}.
+     */
+    protected Method __isis_executionMode;
+
+    public DomainObjectInvocationHandler(
+            final T delegate,
+            final WrapperFactory wrapperFactory,
+            final ExecutionMode mode,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final SpecificationLoader specificationLookup,
+            final AdapterManager adapterManager,
+            final ObjectPersistor objectPersistor,
+            final ProxyContextHandler proxy) {
+        super(delegate, wrapperFactory, mode);
+
+        this.proxy = proxy;
+        this.authenticationSessionProvider = authenticationSessionProvider;
+        this.specificationLookup = specificationLookup;
+        this.adapterManager = adapterManager;
+        this.objectPersistor = objectPersistor;
+        this.executionMode = mode;
+
+        try {
+            titleMethod = delegate.getClass().getMethod("title", new Class[]{});
+            __isis_saveMethod = WrapperObject.class.getMethod("__isis_save", new Class[]{});
+            __isis_wrappedMethod = WrapperObject.class.getMethod("__isis_wrapped", new Class[]{});
+            __isis_executionMode = WrapperObject.class.getMethod("__isis_executionMode", new Class[]{});
+            saveMethod = WrapperObject.class.getMethod("save", new Class[] {});
+            wrappedMethod = WrapperObject.class.getMethod("wrapped", new Class[] {});
+        } catch (final NoSuchMethodException e) {
+        }
+    }
+
+    @Override
+    public Object invoke(final Object proxyObject, final Method method, final Object[] args) throws Throwable {
+
+        if (isObjectMethod(method)) {
+            return delegate(method, args);
+        }
+
+        // workaround for JDO-enhanced..
+        if(isJdoMethod(method)) {
+            return delegate(method, args);
+        }
+
+        if(isInjectMethod(method)) {
+            return delegate(method, args);
+        }
+
+        final ObjectAdapter targetAdapter = getAdapterManager().adapterFor(getDelegate());
+
+        if (isTitleMethod(method)) {
+            return handleTitleMethod(method, args, targetAdapter);
+        }
+
+
+        final ObjectSpecification targetNoSpec = targetAdapter.getSpecification();
+
+        // save method, through the proxy
+        if (isSaveMethod(method)) {
+            return handleSaveMethod(getAuthenticationSession(), targetAdapter, targetNoSpec);
+        }
+
+        if (isWrappedMethod(method)) {
+            return getDelegate();
+        }
+
+        if (isExecutionModeMethod(method)) {
+            return executionMode;
+        }
+
+        final ObjectMember objectMember = locateAndCheckMember(method);
+
+        final String memberName = objectMember.getName();
+
+        final Intent intent = ImperativeFacet.Util.getIntent(objectMember, method);
+        if(intent == Intent.CHECK_IF_HIDDEN || intent == Intent.CHECK_IF_DISABLED) {
+            throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'", memberName));
+        }
+
+        final String methodName = method.getName();
+
+        if (intent == Intent.DEFAULTS || intent == Intent.CHOICES_OR_AUTOCOMPLETE) {
+            return method.invoke(getDelegate(), args);
+        }
+
+        if (objectMember.isOneToOneAssociation()) {
+
+            if (intent == Intent.CHECK_IF_VALID || intent == Intent.MODIFY_PROPERTY_SUPPORTING) {
+                throw new UnsupportedOperationException(String.format("Cannot invoke supporting method for '%s'; use only property accessor/mutator", memberName));
+            }
+
+            final OneToOneAssociation otoa = (OneToOneAssociation) objectMember;
+            
+            if (intent == Intent.ACCESSOR) {
+                return handleGetterMethodOnProperty(args, targetAdapter, otoa, methodName);
+            }
+            
+            if (intent == Intent.MODIFY_PROPERTY || intent == Intent.INITIALIZATION) {
+                return handleSetterMethodOnProperty(args, getAuthenticationSession(), targetAdapter, otoa, methodName);
+            }
+        }
+        if (objectMember.isOneToManyAssociation()) {
+
+            if (intent == Intent.CHECK_IF_VALID) {
+                throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only collection accessor/mutator", memberName));
+            }
+
+            final OneToManyAssociation otma = (OneToManyAssociation) objectMember;
+            if (intent == Intent.ACCESSOR) {
+                return handleGetterMethodOnCollection(method, args, targetAdapter, otma, memberName);
+            }
+            if (intent == Intent.MODIFY_COLLECTION_ADD) {
+                return handleCollectionAddToMethod(args, targetAdapter, otma, methodName);
+            }
+            if (intent == Intent.MODIFY_COLLECTION_REMOVE) {
+                return handleCollectionRemoveFromMethod(args, targetAdapter, otma, methodName);
+            }
+        }
+
+        if (objectMember instanceof ObjectAction) {
+
+            if (intent == Intent.CHECK_IF_VALID) {
+                throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only the 'invoke' method", memberName));
+            }
+
+            final ObjectAction noa = (ObjectAction) objectMember;
+            return handleActionMethod(args, getAuthenticationSession(), targetAdapter, noa, memberName);
+        }
+
+        throw new UnsupportedOperationException(String.format("Unknown member type '%s'", objectMember));
+    }
+
+    private boolean isJdoMethod(final Method method) {
+        return methodStartsWith(method, "jdo");
+    }
+
+    private boolean isInjectMethod(final Method method) {
+        return methodStartsWith(method, "inject");
+    }
+
+    private boolean methodStartsWith(final Method method, final String prefix) {
+        return method.getName().startsWith(prefix);
+    }
+    
+    public List<Facet> getImperativeFacets(final ObjectMember objectMember, final Method method) {
+        final List<Facet> imperativeFacets = objectMember.getFacets(new Filter<Facet>() {
+            @Override
+            public boolean accept(final Facet facet) {
+                final ImperativeFacet imperativeFacet = asImperativeFacet(facet);
+                if (imperativeFacet == null) {
+                    return false;
+                }
+                return imperativeFacet.getMethods().contains(method);
+            }
+
+            private ImperativeFacet asImperativeFacet(final Facet facet) {
+                if (facet == null) {
+                    return null;
+                }
+                if (facet instanceof ImperativeFacet) {
+                    return (ImperativeFacet) facet;
+                }
+                Facet underlyingFacet = facet.getUnderlyingFacet();
+                return asImperativeFacet(underlyingFacet);
+            }
+        });
+
+        // there will be at least one
+        if (imperativeFacets.isEmpty()) {
+            throw new IllegalStateException("should be at least one imperative facet");
+        }
+        return imperativeFacets;
+    }
+
+    private static boolean instanceOf(final List<?> objects, final Class<?>... superTypes) {
+        for (final Class<?> superType : superTypes) {
+            // REVIEW: this is all a bit hacky...
+            for (Object obj : objects) {
+                // handle the *decorators
+                if(obj instanceof DecoratingFacet) {
+                    DecoratingFacet<?> decoratingFacet = (DecoratingFacet<?>) obj;
+                    obj = ((DecoratingFacet<?>) obj).getDecoratedFacet();
+                }
+                if (superType.isAssignableFrom(obj.getClass())) {
+                    return true;
+                }
+                if(obj instanceof Facet) {
+                    Facet facet = (Facet) obj;
+                    // handle any wrapping (eg PostPropertyChangedSetterEventFacet)
+                    Facet underlyingFacet = facet.getUnderlyingFacet();
+                    if(underlyingFacet != null && superType.isAssignableFrom(obj.getClass())) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // title
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleTitleMethod(final Method method, final Object[] args, final ObjectAdapter targetAdapter) throws IllegalAccessException, InvocationTargetException {
+
+        resolveIfRequired(targetAdapter);
+
+        final ObjectSpecification targetNoSpec = targetAdapter.getSpecification();
+        final ObjectTitleContext titleContext = targetNoSpec.createTitleInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, targetAdapter);
+        final ObjectTitleEvent titleEvent = titleContext.createInteractionEvent();
+        notifyListeners(titleEvent);
+        return titleEvent.getTitle();
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // save
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleSaveMethod(final AuthenticationSession session, final ObjectAdapter targetAdapter, final ObjectSpecification targetNoSpec) {
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            final InteractionResult interactionResult = targetNoSpec.isValidResult(targetAdapter);
+            notifyListenersAndVetoIfRequired(interactionResult);
+        }
+
+        if (getExecutionMode().shouldExecute()) {
+            if (targetAdapter.isTransient()) {
+                getObjectPersistor().makePersistent(targetAdapter);
+            }
+        }
+        return null;
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // property - access
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleGetterMethodOnProperty(final Object[] args, final ObjectAdapter targetAdapter, final OneToOneAssociation otoa, final String methodName) {
+
+        if (args.length != 0) {
+            throw new IllegalArgumentException("Invoking a 'get' should have no arguments");
+        }
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            checkVisibility(getAuthenticationSession(), targetAdapter, otoa);
+        }
+
+        resolveIfRequired(targetAdapter);
+
+        final ObjectAdapter currentReferencedAdapter = otoa.get(targetAdapter);
+        final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter);
+
+        final PropertyAccessEvent ev = new PropertyAccessEvent(getDelegate(), otoa.getIdentifier(), currentReferencedObj);
+        notifyListeners(ev);
+        return currentReferencedObj;
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // property - modify
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleSetterMethodOnProperty(final Object[] args, final AuthenticationSession session, final ObjectAdapter targetAdapter, final OneToOneAssociation otoa, final String methodName) {
+        if (args.length != 1) {
+            throw new IllegalArgumentException("Invoking a setter should only have a single argument");
+        }
+
+        final Object argumentObj = underlying(args[0]);
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            checkVisibility(getAuthenticationSession(), targetAdapter, otoa);
+            checkUsability(getAuthenticationSession(), targetAdapter, otoa);
+        }
+
+        final ObjectAdapter argumentAdapter = argumentObj != null ? getAdapterManager().adapterFor(argumentObj) : null;
+
+        resolveIfRequired(targetAdapter);
+
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentAdapter).getInteractionResult();
+            notifyListenersAndVetoIfRequired(interactionResult);
+        }
+
+        if (getExecutionMode().shouldExecute()) {
+            otoa.set(targetAdapter, argumentAdapter);
+        }
+
+        objectChangedIfRequired(targetAdapter);
+
+        return null;
+    }
+
+
+    // /////////////////////////////////////////////////////////////////
+    // collection - access
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleGetterMethodOnCollection(final Method method, final Object[] args, final ObjectAdapter targetAdapter, final OneToManyAssociation otma, final String memberName) {
+
+
+        if (args.length != 0) {
+            throw new IllegalArgumentException("Invoking a 'get' should have no arguments");
+        }
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            checkVisibility(getAuthenticationSession(), targetAdapter, otma);
+        }
+
+        resolveIfRequired(targetAdapter);
+
+        final ObjectAdapter currentReferencedAdapter = otma.get(targetAdapter);
+        final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter);
+
+        final CollectionAccessEvent ev = new CollectionAccessEvent(getDelegate(), otma.getIdentifier());
+
+        if (currentReferencedObj instanceof Collection) {
+            final Collection<?> collectionViewObject = lookupViewObject(method, memberName, (Collection<?>) currentReferencedObj, otma);
+            notifyListeners(ev);
+            return collectionViewObject;
+        } else if (currentReferencedObj instanceof Map) {
+            final Map<?, ?> mapViewObject = lookupViewObject(method, memberName, (Map<?, ?>) currentReferencedObj, otma);
+            notifyListeners(ev);
+            return mapViewObject;
+        }
+        throw new IllegalArgumentException(String.format("Collection type '%s' not supported by framework", currentReferencedObj.getClass().getName()));
+    }
+
+    /**
+     * Looks up (or creates) a proxy for this object.
+     */
+    private Collection<?> lookupViewObject(final Method method, final String memberName, final Collection<?> collectionToLookup, final OneToManyAssociation otma) {
+        Collection<?> collectionViewObject = collectionViewObjectsByMethod.get(method);
+        if (collectionViewObject == null) {
+            if (collectionToLookup instanceof WrapperObject) {
+                collectionViewObject = collectionToLookup;
+            } else {
+                collectionViewObject = proxy.proxy(collectionToLookup, memberName, this, otma);
+            }
+            collectionViewObjectsByMethod.put(method, collectionViewObject);
+        }
+        return collectionViewObject;
+    }
+
+    private Map<?, ?> lookupViewObject(final Method method, final String memberName, final Map<?, ?> mapToLookup, final OneToManyAssociation otma) {
+        Map<?, ?> mapViewObject = mapViewObjectsByMethod.get(method);
+        if (mapViewObject == null) {
+            if (mapToLookup instanceof WrapperObject) {
+                mapViewObject = mapToLookup;
+            } else {
+                mapViewObject = proxy.proxy(mapToLookup, memberName, this, otma);
+            }
+            mapViewObjectsByMethod.put(method, mapViewObject);
+        }
+        return mapViewObject;
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // collection - add to
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleCollectionAddToMethod(final Object[] args, final ObjectAdapter targetAdapter, final OneToManyAssociation otma, final String methodName) {
+
+        if (args.length != 1) {
+            throw new IllegalArgumentException("Invoking a addTo should only have a single argument");
+        }
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            checkVisibility(getAuthenticationSession(), targetAdapter, otma);
+            checkUsability(getAuthenticationSession(), targetAdapter, otma);
+        }
+
+        resolveIfRequired(targetAdapter);
+
+        final Object argumentObj = underlying(args[0]);
+        if (argumentObj == null) {
+            throw new IllegalArgumentException("Must provide a non-null object to add");
+        }
+        final ObjectAdapter argumentNO = getAdapterManager().adapterFor(argumentObj);
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            final InteractionResult interactionResult = otma.isValidToAdd(targetAdapter, argumentNO).getInteractionResult();
+            notifyListenersAndVetoIfRequired(interactionResult);
+        }
+
+        if (getExecutionMode().shouldExecute()) {
+            otma.addElement(targetAdapter, argumentNO);
+        }
+
+        objectChangedIfRequired(targetAdapter);
+
+        return null;
+    }
+
+
+    // /////////////////////////////////////////////////////////////////
+    // collection - remove from
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleCollectionRemoveFromMethod(final Object[] args, final ObjectAdapter targetAdapter, final OneToManyAssociation otma, final String methodName) {
+        if (args.length != 1) {
+            throw new IllegalArgumentException("Invoking a removeFrom should only have a single argument");
+        }
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            checkVisibility(getAuthenticationSession(), targetAdapter, otma);
+            checkUsability(getAuthenticationSession(), targetAdapter, otma);
+        }
+
+
+        resolveIfRequired(targetAdapter);
+
+        final Object argumentObj = underlying(args[0]);
+        if (argumentObj == null) {
+            throw new IllegalArgumentException("Must provide a non-null object to remove");
+        }
+        final ObjectAdapter argumentAdapter = getAdapterManager().adapterFor(argumentObj);
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            final InteractionResult interactionResult = otma.isValidToRemove(targetAdapter, argumentAdapter).getInteractionResult();
+            notifyListenersAndVetoIfRequired(interactionResult);
+        }
+
+        if (getExecutionMode().shouldExecute()) {
+            otma.removeElement(targetAdapter, argumentAdapter);
+        }
+
+        objectChangedIfRequired(targetAdapter);
+
+        return null;
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // action
+    // /////////////////////////////////////////////////////////////////
+
+    private Object handleActionMethod(final Object[] args, final AuthenticationSession session, final ObjectAdapter targetAdapter, final ObjectAction noa, final String memberName) {
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            checkVisibility(getAuthenticationSession(), targetAdapter, noa);
+            checkUsability(getAuthenticationSession(), targetAdapter, noa);
+        }
+
+        final Object[] underlyingArgs = new Object[args.length];
+        int i = 0;
+        for (final Object arg : args) {
+            underlyingArgs[i++] = underlying(arg);
+        }
+
+        final ObjectAdapter[] argAdapters = new ObjectAdapter[underlyingArgs.length];
+        int j = 0;
+        for (final Object underlyingArg : underlyingArgs) {
+            argAdapters[j++] = underlyingArg != null ? getAdapterManager().adapterFor(underlyingArg) : null;
+        }
+
+        if(getExecutionMode().shouldEnforceRules()) {
+            final InteractionResult interactionResult = noa.isProposedArgumentSetValid(targetAdapter, argAdapters).getInteractionResult();
+            notifyListenersAndVetoIfRequired(interactionResult);
+        }
+
+        if (getExecutionMode().shouldExecute()) {
+            final ObjectAdapter actionReturnNO = noa.execute(targetAdapter, argAdapters);
+            return ObjectAdapter.Util.unwrap(actionReturnNO);
+        }
+
+        objectChangedIfRequired(targetAdapter);
+
+        return null;
+    }
+
+    private Object underlying(final Object arg) {
+        if (arg instanceof WrapperObject) {
+            final WrapperObject argViewObject = (WrapperObject) arg;
+            return argViewObject.wrapped();
+        } else {
+            return arg;
+        }
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // visibility and usability checks (common to all members)
+    // /////////////////////////////////////////////////////////////////
+
+    /**
+     * REVIEW: ideally should provide some way to allow to caller to indicate the 'where' context.  Having
+     * a hard-coded value like this is an approximation. 
+     */
+    private final Where where = Where.ANYWHERE;
+
+    private void checkVisibility(final AuthenticationSession session, final ObjectAdapter targetObjectAdapter, final ObjectMember objectMember) {
+        final Consent visibleConsent = objectMember.isVisible(getAuthenticationSession(), targetObjectAdapter, where);
+        final InteractionResult interactionResult = visibleConsent.getInteractionResult();
+        notifyListenersAndVetoIfRequired(interactionResult);
+    }
+
+    private void checkUsability(final AuthenticationSession session, final ObjectAdapter targetObjectAdapter, final ObjectMember objectMember) {
+        final InteractionResult interactionResult = objectMember.isUsable(getAuthenticationSession(), targetObjectAdapter, where).getInteractionResult();
+        notifyListenersAndVetoIfRequired(interactionResult);
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // notify listeners
+    // /////////////////////////////////////////////////////////////////
+
+    private void notifyListenersAndVetoIfRequired(final InteractionResult interactionResult) {
+        final InteractionEvent interactionEvent = interactionResult.getInteractionEvent();
+        notifyListeners(interactionEvent);
+        if (interactionEvent.isVeto()) {
+            throw toException(interactionEvent);
+        }
+    }
+
+    private String decode(final ObjectMember objectMember) {
+        if (objectMember instanceof OneToOneAssociation) {
+            return "a property";
+        }
+        if (objectMember instanceof OneToManyAssociation) {
+            return "a collection";
+        }
+        if (objectMember instanceof ObjectAction) {
+            return "an action";
+        }
+        return "an UNKNOWN member type";
+    }
+
+    /**
+     * Wraps a {@link InteractionEvent#isVeto() vetoing}
+     * {@link InteractionEvent} in a corresponding {@link InteractionException},
+     * and returns it.
+     */
+    private InteractionException toException(final InteractionEvent interactionEvent) {
+        if (!interactionEvent.isVeto()) {
+            throw new IllegalArgumentException("Provided interactionEvent must be a veto");
+        }
+        if (interactionEvent instanceof ValidityEvent) {
+            final ValidityEvent validityEvent = (ValidityEvent) interactionEvent;
+            return new InvalidException(validityEvent);
+        }
+        if (interactionEvent instanceof VisibilityEvent) {
+            final VisibilityEvent visibilityEvent = (VisibilityEvent) interactionEvent;
+            return new HiddenException(visibilityEvent);
+        }
+        if (interactionEvent instanceof UsabilityEvent) {
+            final UsabilityEvent usabilityEvent = (UsabilityEvent) interactionEvent;
+            return new DisabledException(usabilityEvent);
+        }
+        throw new IllegalArgumentException("Provided interactionEvent must be a VisibilityEvent, UsabilityEvent or a ValidityEvent");
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // switching
+    // /////////////////////////////////////////////////////////////////
+
+    private ObjectMember locateAndCheckMember(final Method method) {
+        final ObjectSpecificationDefault objectSpecificationDefault = getJavaSpecificationOfOwningClass(method);
+        final ObjectMember member = objectSpecificationDefault.getMember(method);
+        
+        if (member == null) {
+            final String methodName = method.getName();
+            throw new UnsupportedOperationException("Method '" + methodName + "' being invoked does not correspond to any of the object's fields or actions.");
+        }
+        return member;
+    }
+
+    protected boolean isTitleMethod(final Method method) {
+        return method.equals(titleMethod);
+    }
+
+    protected boolean isSaveMethod(final Method method) {
+        return method.equals(saveMethod) || method.equals(__isis_saveMethod);
+    }
+
+    protected boolean isWrappedMethod(final Method method) {
+        return method.equals(wrappedMethod) || method.equals(__isis_wrappedMethod);
+    }
+
+    protected boolean isExecutionModeMethod(final Method method) {
+        return method.equals(__isis_executionMode);
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // Specification lookup
+    // /////////////////////////////////////////////////////////////////
+
+    private ObjectSpecificationDefault getJavaSpecificationOfOwningClass(final Method method) {
+        return getJavaSpecification(method.getDeclaringClass());
+    }
+
+    private ObjectSpecificationDefault getJavaSpecification(final Class<?> clazz) {
+        final ObjectSpecification nos = getSpecification(clazz);
+        if (!(nos instanceof ObjectSpecificationDefault)) {
+            throw new UnsupportedOperationException("Only Java is supported (specification is '" + nos.getClass().getCanonicalName() + "')");
+        }
+        return (ObjectSpecificationDefault) nos;
+    }
+
+    private ObjectSpecification getSpecification(final Class<?> type) {
+        final ObjectSpecification nos = getSpecificationLookup().loadSpecification(type);
+        return nos;
+    }
+
+    // /////////////////////////////////////////////////////////////////
+    // Dependencies
+    // /////////////////////////////////////////////////////////////////
+
+    protected SpecificationLoader getSpecificationLookup() {
+        return specificationLookup;
+    }
+
+    public AuthenticationSessionProvider getAuthenticationSessionProvider() {
+        return authenticationSessionProvider;
+    }
+
+    protected AuthenticationSession getAuthenticationSession() {
+        return getAuthenticationSessionProvider().getAuthenticationSession();
+    }
+
+    protected AdapterManager getAdapterManager() {
+        return adapterManager;
+    }
+
+    protected ObjectPersistor getObjectPersistor() {
+        return objectPersistor;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java
new file mode 100644
index 0000000..ed6cbc1
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java
@@ -0,0 +1,48 @@
+/*
+ *  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.wrapper.handlers;
+
+import java.util.Map;
+
+import org.apache.isis.core.commons.lang.ObjectExtensions;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+class MapInvocationHandler<T, C> extends AbstractCollectionInvocationHandler<T, C> {
+
+    public MapInvocationHandler(final C collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
+        super(collectionToProxy, collectionName, handler, otma);
+
+        try {
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "containsKey", Object.class));
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "containsValue", Object.class));
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "size"));
+            intercept(ObjectExtensions.getMethod(collectionToProxy, "isEmpty"));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "put", Object.class, Object.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "remove", Object.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "putAll", Map.class));
+            veto(ObjectExtensions.getMethod(collectionToProxy, "clear"));
+        } catch (final NoSuchMethodException e) {
+            // ///CLOVER:OFF
+            throw new RuntimeException("A Collection method could not be found: " + e.getMessage());
+            // ///CLOVER:ON
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
new file mode 100644
index 0000000..5f942bc
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
@@ -0,0 +1,84 @@
+/*
+ *  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.wrapper.handlers;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.ensure.Ensure;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.wrapper.proxy.ProxyInstantiator;
+
+public class ProxyContextHandler {
+
+    private final ProxyInstantiator proxyInstantiator;
+    
+    public ProxyContextHandler(final ProxyInstantiator proxyInstantiator) {
+        this.proxyInstantiator = proxyInstantiator;
+    }
+    
+    public <T> T proxy(final T domainObject, final WrapperFactory wrapperFactory, final ExecutionMode mode, final AuthenticationSessionProvider authenticationSessionProvider, final SpecificationLoader specificationLookup, final AdapterManager adapterManager, final ObjectPersistor objectPersistor) {
+
+        Ensure.ensureThatArg(wrapperFactory, is(not(nullValue())));
+        Ensure.ensureThatArg(authenticationSessionProvider, is(not(nullValue())));
+        Ensure.ensureThatArg(specificationLookup, is(not(nullValue())));
+        Ensure.ensureThatArg(adapterManager, is(not(nullValue())));
+        Ensure.ensureThatArg(objectPersistor, is(not(nullValue())));
+
+        final DomainObjectInvocationHandler<T> invocationHandler = new DomainObjectInvocationHandler<T>(domainObject, wrapperFactory, mode, authenticationSessionProvider, specificationLookup, adapterManager, objectPersistor, this);
+
+        return proxyInstantiator.instantiateProxy(invocationHandler);
+    }
+
+    /**
+     * Whether to execute or not will be picked up from the supplied parent
+     * handler.
+     */
+    public <T, E> Collection<E> proxy(final Collection<E> collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
+
+        final CollectionInvocationHandler<T, Collection<E>> collectionInvocationHandler = new CollectionInvocationHandler<T, Collection<E>>(collectionToProxy, collectionName, handler, otma);
+        collectionInvocationHandler.setResolveObjectChangedEnabled(handler.isResolveObjectChangedEnabled());
+
+        return proxyInstantiator.instantiateProxy(collectionInvocationHandler);
+    }
+
+    /**
+     * Whether to execute or not will be picked up from the supplied parent
+     * handler.
+     */
+    public <T, P, Q> Map<P, Q> proxy(final Map<P, Q> collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
+
+        final MapInvocationHandler<T, Map<P, Q>> mapInvocationHandler = new MapInvocationHandler<T, Map<P, Q>>(collectionToProxy, collectionName, handler, otma);
+        mapInvocationHandler.setResolveObjectChangedEnabled(handler.isResolveObjectChangedEnabled());
+
+        return proxyInstantiator.instantiateProxy(mapInvocationHandler);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java
new file mode 100644
index 0000000..0021038
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java
@@ -0,0 +1,52 @@
+/*
+ *  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.wrapper.internal.util;
+
+public final class Constants {
+    private Constants() {
+    }
+
+    public static final String PREFIX_CHOICES = "choices";
+    public static final String PREFIX_DEFAULT = "default";
+    public static final String PREFIX_HIDE = "hide";
+    public static final String PREFIX_DISABLE = "disable";
+    public static final String PREFIX_VALIDATE_REMOVE_FROM = "validateRemoveFrom";
+    public static final String PREFIX_VALIDATE_ADD_TO = "validateAddTo";
+    public static final String PREFIX_VALIDATE = "validate";
+    public static final String PREFIX_REMOVE_FROM = "removeFrom";
+    public static final String PREFIX_ADD_TO = "addTo";
+    public static final String PREFIX_MODIFY = "modify";
+    public static final String PREFIX_CLEAR = "clear";
+    public static final String PREFIX_SET = "set";
+    public static final String PREFIX_GET = "get";
+
+    public final static String TITLE_METHOD_NAME = "title";
+    public final static String TO_STRING_METHOD_NAME = "toString";
+
+    /**
+     * Cannot invoke methods with these prefixes.
+     */
+    public final static String[] INVALID_PREFIXES = { PREFIX_MODIFY, PREFIX_CLEAR, PREFIX_DISABLE, PREFIX_VALIDATE, PREFIX_VALIDATE_ADD_TO, PREFIX_VALIDATE_REMOVE_FROM, PREFIX_HIDE, };
+
+    public final static String[] PROPERTY_PREFIXES = { PREFIX_GET, PREFIX_SET, PREFIX_MODIFY, PREFIX_CLEAR, PREFIX_DISABLE, PREFIX_VALIDATE, PREFIX_HIDE, PREFIX_DEFAULT, PREFIX_CHOICES };
+    public final static String[] COLLECTION_PREFIXES = { PREFIX_GET, PREFIX_SET, PREFIX_ADD_TO, PREFIX_REMOVE_FROM, PREFIX_DISABLE, PREFIX_VALIDATE_ADD_TO, PREFIX_VALIDATE_REMOVE_FROM, PREFIX_HIDE, PREFIX_DEFAULT, PREFIX_CHOICES };
+    public final static String[] ACTION_PREFIXES = { PREFIX_VALIDATE, PREFIX_DISABLE, PREFIX_HIDE, PREFIX_DEFAULT, PREFIX_CHOICES, };
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java
new file mode 100644
index 0000000..dd78056
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java
@@ -0,0 +1,48 @@
+/*
+ *  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.wrapper.internal.util;
+
+import java.util.Arrays;
+import java.util.LinkedHashSet;
+
+public final class MethodPrefixFinder {
+
+    // a Linked Hash Set is used to ensure that the ordering is preserved.
+    public final static LinkedHashSet<String> ALL_PREFIXES = new LinkedHashSet<String>() {
+        private static final long serialVersionUID = 1L;
+        {
+            // collection prefixes are added first because we want to
+            // test validateAddTo and validateRemoveFrom before validate
+            addAll(Arrays.asList(Constants.COLLECTION_PREFIXES));
+            addAll(Arrays.asList(Constants.PROPERTY_PREFIXES));
+            addAll(Arrays.asList(Constants.ACTION_PREFIXES));
+        }
+    };
+
+    public String findPrefix(final String methodName) {
+        for (final String prefix : ALL_PREFIXES) {
+            if (methodName.startsWith(prefix)) {
+                return prefix;
+            }
+        }
+        return "";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java
new file mode 100644
index 0000000..7cfecbd
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java
@@ -0,0 +1,53 @@
+/*
+ *  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.wrapper.internal.util;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+import org.objenesis.ObjenesisHelper;
+
+public final class Util {
+
+    private Util(){}
+    
+    @SuppressWarnings("unchecked")
+    public static <T> T createInstance(final Class<T> toProxy, final InvocationHandler handler, final Class<?>... auxiliaryTypes) {
+        return (T) Proxy.newProxyInstance(toProxy.getClassLoader(), combine(toProxy, auxiliaryTypes) , handler);
+    }
+ 
+    /**
+     * Return a new instance of the specified class. The recommended way is
+     * without calling any constructor. This is usually done by doing like
+     * <code>ObjectInputStream.readObject()</code> which is JVM specific.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T createInstance(final Class<T> enhancedClass) {
+        return (T) ObjenesisHelper.newInstance(enhancedClass);
+    }
+    
+    private static Class<?>[] combine(Class<?> first, Class<?>... rest) {
+        Class<?>[] all = new Class<?>[rest.length+1];
+        all[0] = first;
+        System.arraycopy(rest, 0, all, 1, rest.length);
+        return all;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java
new file mode 100644
index 0000000..255cbfa
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java
@@ -0,0 +1,26 @@
+/*
+ *  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.wrapper.proxy;
+
+import org.apache.isis.core.wrapper.handlers.DelegatingInvocationHandler;
+
+public interface ProxyInstantiator {
+    public <T> T instantiateProxy(final DelegatingInvocationHandler<T> invocationHandler);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java
new file mode 100644
index 0000000..65241e9
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java
@@ -0,0 +1,101 @@
+/*
+ *  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.wrapper.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import net.sf.cglib.proxy.Callback;
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.Factory;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import org.apache.isis.applib.services.wrapper.WrapperObject;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.CglibEnhanced;
+import org.apache.isis.core.wrapper.handlers.DelegatingInvocationHandler;
+import org.apache.isis.core.wrapper.internal.util.Util;
+
+public class ProxyInstantiatorForCglib implements ProxyInstantiator {
+
+    @SuppressWarnings("unchecked")
+    public <T> T instantiateProxy(final DelegatingInvocationHandler<T> handler) {
+
+        final T toProxy = handler.getDelegate();
+
+        // handle if already proxied using cglib
+        // (this is in case the CglibObjectFactory is configured, to handle lazy loading/object dirtying.  
+        // Have decided not to port this over to the Javassist version, in anticipation of the CglibObjectFactory being dropped from Isis in v2.0.0.
+        // (If that isn't the case, then this class is still available).
+        if (CglibEnhanced.class.isAssignableFrom(toProxy.getClass())) {
+
+            handler.setResolveObjectChangedEnabled(true);
+
+            final Class<? extends Object> enhancedClass = toProxy.getClass();
+            final Class<? extends Object> origSuperclass = toProxy.getClass().getSuperclass();
+
+            final List<Class<?>> interfaces = Lists.newArrayList();
+            interfaces.addAll(Arrays.asList(enhancedClass.getInterfaces()));
+            interfaces.remove(Factory.class); // if there.
+            interfaces.add(WrapperObject.class);
+
+            return (T) Enhancer.create(origSuperclass, interfaces.toArray(new Class[] {}), newMethodInterceptor(handler));
+        }
+
+        final Class<T> clazz = (Class<T>) toProxy.getClass();
+
+        if (clazz.isInterface()) {
+            return Util.createInstance(clazz, handler, WrapperObject.class);
+        } else {
+            final Class<T> enhancedClass = createEnhancedClass(clazz, handler, WrapperObject.class);
+            return Util.createInstance(enhancedClass);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private static <T> Class<T> createEnhancedClass(final Class<T> toProxyClass, final InvocationHandler handler, final Class<?>... auxiliaryTypes) {
+
+        // Create the proxy
+        final Enhancer enhancer = new Enhancer();
+        enhancer.setSuperclass(toProxyClass);
+        enhancer.setInterfaces(auxiliaryTypes);
+        enhancer.setCallbackType(newMethodInterceptor(handler).getClass());
+
+        final Class<?> enhancedClass = enhancer.createClass();
+
+        Enhancer.registerCallbacks(enhancedClass, new Callback[] { newMethodInterceptor(handler) });
+        return (Class<T>) enhancedClass;
+    }
+
+    private static <T> MethodInterceptor newMethodInterceptor(final InvocationHandler handler) {
+        return new MethodInterceptor() {
+            @Override
+            public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
+                return handler.invoke(obj, method, args);
+            }
+        };
+    }
+    
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java
new file mode 100644
index 0000000..3d2b838
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java
@@ -0,0 +1,77 @@
+/*
+ *  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.wrapper.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+import javassist.util.proxy.MethodFilter;
+import javassist.util.proxy.MethodHandler;
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import org.apache.isis.applib.services.wrapper.WrapperObject;
+import org.apache.isis.core.commons.lang.ArrayExtensions;
+import org.apache.isis.core.wrapper.handlers.DelegatingInvocationHandler;
+import org.apache.isis.core.wrapper.internal.util.Util;
+
+public class ProxyInstantiatorForJavassist implements ProxyInstantiator {
+
+    @SuppressWarnings("unchecked")
+    public <T> T instantiateProxy(final DelegatingInvocationHandler<T> handler) {
+
+        final T toProxy = handler.getDelegate();
+
+        final Class<T> clazz = (Class<T>) toProxy.getClass();
+
+        if (clazz.isInterface()) {
+            return Util.createInstance(clazz, handler, WrapperObject.class);
+        } else {
+            final Class<T> enhancedClass = createEnhancedClass(clazz, handler, WrapperObject.class);
+            ProxyObject proxyObject = (ProxyObject) Util.createInstance(enhancedClass);
+            proxyObject.setHandler(new MethodHandler() {
+                @Override
+                public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable {
+                    return handler.invoke(self, thisMethod, args);
+                }
+            });
+            return (T) proxyObject;
+        }
+    }
+    
+    @SuppressWarnings("unchecked")
+    private static <T> Class<T> createEnhancedClass(final Class<T> toProxyClass, final InvocationHandler handler, final Class<?>... auxiliaryTypes) {
+        
+        final ProxyFactory proxyFactory = new ProxyFactory();
+        proxyFactory.setSuperclass(toProxyClass);
+        proxyFactory.setInterfaces(ArrayExtensions.combine(toProxyClass.getInterfaces(), new Class<?>[]{org.apache.isis.core.metamodel.specloader.classsubstitutor.JavassistEnhanced.class}, auxiliaryTypes));
+
+        proxyFactory.setFilter(new MethodFilter() {
+            @Override
+            public boolean isHandled(final Method m) {
+                // ignore finalize()
+                return !m.getName().equals("finalize") || m.isBridge();
+            }
+        });
+        
+        return proxyFactory.createClass();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java b/core/wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
new file mode 100644
index 0000000..6bc2e8e
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
@@ -0,0 +1,127 @@
+/*
+ *  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.wrapper;
+
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.applib.services.wrapper.WrappingObject;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.wrapper.proxy.ProxyInstantiator;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class WrapperFactoryAbstractTest {
+
+    private static class DomainObject {
+    }
+
+    private static class WrappedDomainObject extends DomainObject implements WrappingObject {
+
+        private final DomainObject wrappedObject;
+        private final WrapperFactory.ExecutionMode mode;
+
+        WrappedDomainObject(final DomainObject wrappedObject, WrapperFactory.ExecutionMode mode) {
+            this.wrappedObject = wrappedObject;
+            this.mode = mode;
+        }
+
+        @Override
+        public void __isis_save() {
+        }
+
+        @Override
+        public Object __isis_wrapped() {
+            return wrappedObject;
+        }
+
+        @Override
+        public WrapperFactory.ExecutionMode __isis_executionMode() {
+            return mode;
+        }
+    }
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    private ProxyInstantiator mockProxyInstantiator;
+    private WrapperFactoryAbstract wrapperFactory;
+
+    private DomainObject createProxyCalledWithDomainObject;
+    private WrapperFactory.ExecutionMode createProxyCalledWithMode;
+
+    @Before
+    public void setUp() throws Exception {
+        wrapperFactory = new WrapperFactoryAbstract(mockProxyInstantiator) {
+
+            @Override
+            protected <T> T createProxy(T domainObject, ExecutionMode mode) {
+                WrapperFactoryAbstractTest.this.createProxyCalledWithMode = mode;
+                WrapperFactoryAbstractTest.this.createProxyCalledWithDomainObject = (DomainObject) domainObject;
+                return domainObject;
+            }
+        };
+    }
+
+    @Test
+    public void wrap_ofUnwrapped_delegates_to_createProxy() throws Exception {
+        final DomainObject domainObject = new DomainObject();
+        wrapperFactory.wrap(domainObject);
+
+        assertThat(createProxyCalledWithDomainObject, is(domainObject));
+        assertThat(createProxyCalledWithMode, is(WrapperFactory.ExecutionMode.EXECUTE));
+    }
+
+
+    @Test
+    public void wrap_ofWrapped_sameMode_returnsUnchanged() throws Exception {
+        // given
+        final DomainObject wrappedObject = new DomainObject();
+        final DomainObject domainObject = new WrappedDomainObject(wrappedObject, WrapperFactory.ExecutionMode.EXECUTE);
+
+        // when
+        final DomainObject wrappingObject = wrapperFactory.wrap(domainObject, WrapperFactory.ExecutionMode.EXECUTE);
+
+        // then
+        assertThat(wrappingObject, is(domainObject));
+        assertThat(createProxyCalledWithDomainObject, is(nullValue()));
+    }
+
+    @Test
+    public void wrap_ofWrapped_differentMode_delegates_to_createProxy() throws Exception {
+        // given
+        final DomainObject wrappedObject = new DomainObject();
+        final DomainObject domainObject = new WrappedDomainObject(wrappedObject, WrapperFactory.ExecutionMode.EXECUTE);
+
+        // when
+        final DomainObject wrappingObject = wrapperFactory.wrap(domainObject, WrapperFactory.ExecutionMode.SKIP_RULES);
+
+        // then
+        assertThat(wrappingObject, is(not(domainObject)));
+        assertThat(createProxyCalledWithDomainObject, is(wrappedObject));
+        assertThat(createProxyCalledWithMode, is(WrapperFactory.ExecutionMode.SKIP_RULES));
+    }
+
+}
\ No newline at end of file


[33/39] git commit: [maven-release-plugin] prepare release todoapp-archetype-1.6.0-RC3

Posted by da...@apache.org.
[maven-release-plugin] prepare release todoapp-archetype-1.6.0-RC3


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

Branch: refs/heads/master
Commit: 055a18caa59396bc21b8900787d4b50c06ea7749
Parents: 95b3e9e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 08:26:27 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:26:27 2014 +0100

----------------------------------------------------------------------
 example/archetype/todoapp/pom.xml | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/055a18ca/example/archetype/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/pom.xml b/example/archetype/todoapp/pom.xml
index 19c35fe..c8cb973 100644
--- a/example/archetype/todoapp/pom.xml
+++ b/example/archetype/todoapp/pom.xml
@@ -17,11 +17,11 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.isis.archetype</groupId>
   <artifactId>todoapp-archetype</artifactId>
-  <version>1.6.0-SNAPSHOT</version>
+  <version>1.6.0</version>
   <packaging>maven-archetype</packaging>
   <name>todoapp-archetype</name>
   <build>
@@ -47,4 +47,8 @@
     <version>1.6.0</version>
     <relativePath>../../../core/pom.xml</relativePath>
   </parent>
+
+  <scm>
+    <tag>todoapp-archetype-1.6.0-RC3</tag>
+  </scm>
 </project>


[06/39] git commit: ISIS-839: audit, command and publish services all @DomainService ...

Posted by da...@apache.org.
ISIS-839: audit, command and publish services all @DomainService ...

... since now in own modules; can use inclusion on classpath as indicator as to whether to register or not.


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

Branch: refs/heads/master
Commit: c0d3c41efbe77860aaa4e1a9025f5bd3375d47d3
Parents: 19cfaa8
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 11:12:46 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 12:34:17 2014 +0100

----------------------------------------------------------------------
 .../jdo/applib/service/audit/AuditingServiceJdo.java          | 7 ++++---
 .../jdo/applib/service/command/CommandServiceJdo.java         | 2 ++
 .../jdo/applib/service/publish/PublishingServiceJdo.java      | 2 ++
 3 files changed, 8 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c0d3c41e/core/module-audit-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/audit/AuditingServiceJdo.java
----------------------------------------------------------------------
diff --git a/core/module-audit-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/audit/AuditingServiceJdo.java b/core/module-audit-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/audit/AuditingServiceJdo.java
index 13e12f7..54a0211 100644
--- a/core/module-audit-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/audit/AuditingServiceJdo.java
+++ b/core/module-audit-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/audit/AuditingServiceJdo.java
@@ -19,13 +19,14 @@
 package org.apache.isis.objectstore.jdo.applib.service.audit;
 
 import java.util.UUID;
-
-import org.apache.isis.applib.AbstractFactoryAndRepository;
+import org.apache.isis.applib.AbstractService;
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.audit.AuditingService3;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 
-public class AuditingServiceJdo extends AbstractFactoryAndRepository implements AuditingService3 {
+@DomainService
+public class AuditingServiceJdo extends AbstractService implements AuditingService3 {
 
     @Programmatic
     public void audit(

http://git-wip-us.apache.org/repos/asf/isis/blob/c0d3c41e/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/command/CommandServiceJdo.java
----------------------------------------------------------------------
diff --git a/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/command/CommandServiceJdo.java b/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/command/CommandServiceJdo.java
index 5e34831..45616c8 100644
--- a/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/command/CommandServiceJdo.java
+++ b/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/command/CommandServiceJdo.java
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.annotation.Command.ExecuteIn;
 import org.apache.isis.applib.annotation.Command.Persistence;
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.services.command.Command;
@@ -33,6 +34,7 @@ import org.apache.isis.applib.services.command.spi.CommandService;
 /**
  *
  */
+@DomainService
 public class CommandServiceJdo extends AbstractService implements CommandService {
 
     @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/isis/blob/c0d3c41e/core/module-publishing-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/publish/PublishingServiceJdo.java
----------------------------------------------------------------------
diff --git a/core/module-publishing-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/publish/PublishingServiceJdo.java b/core/module-publishing-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/publish/PublishingServiceJdo.java
index 52903c8..6611fb9 100644
--- a/core/module-publishing-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/publish/PublishingServiceJdo.java
+++ b/core/module-publishing-jdo/src/main/java/org/apache/isis/objectstore/jdo/applib/service/publish/PublishingServiceJdo.java
@@ -22,6 +22,7 @@ package org.apache.isis.objectstore.jdo.applib.service.publish;
 import java.util.Map;
 import javax.annotation.PostConstruct;
 import org.apache.isis.applib.AbstractService;
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.applib.services.publish.EventMetadata;
@@ -33,6 +34,7 @@ import org.apache.isis.applib.services.publish.PublishingService;
  * An implementation of {@link PublishingService} that persists events as
  * entities into a JDO-backed database.
  */
+@DomainService
 public class PublishingServiceJdo extends AbstractService implements PublishingService {
 
     private static final String SERIALIZED_FORM_LOCAL_KEY = "datanucleus.PublishingService.serializedForm";


[27/39] git commit: [maven-release-plugin] prepare release simpleapp-archetype-1.6.0-RC3

Posted by da...@apache.org.
[maven-release-plugin] prepare release simpleapp-archetype-1.6.0-RC3


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

Branch: refs/heads/master
Commit: 9b5f53c831a4f5e69d1de06bc8823a72c9e13504
Parents: b33b296
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 08:21:09 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:21:09 2014 +0100

----------------------------------------------------------------------
 example/archetype/simpleapp/pom.xml | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/9b5f53c8/example/archetype/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/pom.xml b/example/archetype/simpleapp/pom.xml
index cd61e80..8f9fe65 100644
--- a/example/archetype/simpleapp/pom.xml
+++ b/example/archetype/simpleapp/pom.xml
@@ -17,11 +17,11 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.isis.archetype</groupId>
   <artifactId>simpleapp-archetype</artifactId>
-  <version>1.6.0-SNAPSHOT</version>
+  <version>1.6.0</version>
   <packaging>maven-archetype</packaging>
   <name>simpleapp-archetype</name>
   <build>
@@ -47,4 +47,8 @@
     <version>1.6.0</version>
     <relativePath>../../../core/pom.xml</relativePath>
   </parent>
+
+  <scm>
+    <tag>simpleapp-archetype-1.6.0-RC3</tag>
+  </scm>
 </project>


[14/39] git commit: ISIS-843: fixing non-serializable stack trace for about page.

Posted by da...@apache.org.
ISIS-843: fixing non-serializable stack trace for about page.


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

Branch: refs/heads/master
Commit: f506213d712098a6d8427ae018c7ec69e098f66f
Parents: dec6705
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 17:24:39 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 17:24:39 2014 +0100

----------------------------------------------------------------------
 .../isis/viewer/wicket/ui/components/about/AboutPanel.java     | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f506213d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
index 9d3ac09..68f16fa 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
@@ -44,10 +44,14 @@ public class AboutPanel extends PanelAbstract<AboutModel> {
     
     /**
      * We take care to read this only once.
+     *
+     * <p>
+     *     Is <code>transient</code> because
+     * </p>
      */
     @Inject
     @Named("metaInfManifest")
-    private InputStream metaInfManifestIs;
+    private transient InputStream metaInfManifestIs;
     
     private JarManifestModel jarManifestModel;
     


[28/39] git commit: [maven-release-plugin] prepare for next development iteration

Posted by da...@apache.org.
[maven-release-plugin] prepare for next development iteration


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

Branch: refs/heads/master
Commit: cb33718fb4f3cc72a3a2ae963e99fe76fb519864
Parents: 9b5f53c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 08:21:12 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:21:12 2014 +0100

----------------------------------------------------------------------
 example/archetype/simpleapp/pom.xml | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/cb33718f/example/archetype/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/pom.xml b/example/archetype/simpleapp/pom.xml
index 8f9fe65..4eeade6 100644
--- a/example/archetype/simpleapp/pom.xml
+++ b/example/archetype/simpleapp/pom.xml
@@ -21,7 +21,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.isis.archetype</groupId>
   <artifactId>simpleapp-archetype</artifactId>
-  <version>1.6.0</version>
+  <version>1.7.0-SNAPSHOT</version>
   <packaging>maven-archetype</packaging>
   <name>simpleapp-archetype</name>
   <build>
@@ -47,8 +47,4 @@
     <version>1.6.0</version>
     <relativePath>../../../core/pom.xml</relativePath>
   </parent>
-
-  <scm>
-    <tag>simpleapp-archetype-1.6.0-RC3</tag>
-  </scm>
 </project>


[22/39] git commit: ISIS-839: updating pom.xml for Wicket viewer to reference non-SNAPSHOT parents.

Posted by da...@apache.org.
ISIS-839: updating pom.xml for Wicket viewer to reference non-SNAPSHOT parents.


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

Branch: refs/heads/master
Commit: 61434a53615032261ceb05ad7309c0e298338b4f
Parents: be6a424
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Jul 19 11:10:33 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 07:35:29 2014 +0100

----------------------------------------------------------------------
 component/viewer/wicket/pom.xml     | 2 +-
 component/viewer/wicket/tck/pom.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/61434a53/component/viewer/wicket/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/pom.xml b/component/viewer/wicket/pom.xml
index e8fbe9d..318aeb6 100644
--- a/component/viewer/wicket/pom.xml
+++ b/component/viewer/wicket/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 		<relativePath>../../../core/pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/61434a53/component/viewer/wicket/tck/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/tck/pom.xml b/component/viewer/wicket/tck/pom.xml
index 6614337..bf4b3f2 100644
--- a/component/viewer/wicket/tck/pom.xml
+++ b/component/viewer/wicket/tck/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis-core-tck</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
         <relativePath>../../../../core/tck/pom.xml</relativePath>
     </parent>
 


[12/39] ISIS-833: reverting isis-module-wrapper -> isis-core-wrapper.

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
deleted file mode 100644
index 5f942bc..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/ProxyContextHandler.java
+++ /dev/null
@@ -1,84 +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.wrapper.handlers;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.ensure.Ensure;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.wrapper.proxy.ProxyInstantiator;
-
-public class ProxyContextHandler {
-
-    private final ProxyInstantiator proxyInstantiator;
-    
-    public ProxyContextHandler(final ProxyInstantiator proxyInstantiator) {
-        this.proxyInstantiator = proxyInstantiator;
-    }
-    
-    public <T> T proxy(final T domainObject, final WrapperFactory wrapperFactory, final ExecutionMode mode, final AuthenticationSessionProvider authenticationSessionProvider, final SpecificationLoader specificationLookup, final AdapterManager adapterManager, final ObjectPersistor objectPersistor) {
-
-        Ensure.ensureThatArg(wrapperFactory, is(not(nullValue())));
-        Ensure.ensureThatArg(authenticationSessionProvider, is(not(nullValue())));
-        Ensure.ensureThatArg(specificationLookup, is(not(nullValue())));
-        Ensure.ensureThatArg(adapterManager, is(not(nullValue())));
-        Ensure.ensureThatArg(objectPersistor, is(not(nullValue())));
-
-        final DomainObjectInvocationHandler<T> invocationHandler = new DomainObjectInvocationHandler<T>(domainObject, wrapperFactory, mode, authenticationSessionProvider, specificationLookup, adapterManager, objectPersistor, this);
-
-        return proxyInstantiator.instantiateProxy(invocationHandler);
-    }
-
-    /**
-     * Whether to execute or not will be picked up from the supplied parent
-     * handler.
-     */
-    public <T, E> Collection<E> proxy(final Collection<E> collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
-
-        final CollectionInvocationHandler<T, Collection<E>> collectionInvocationHandler = new CollectionInvocationHandler<T, Collection<E>>(collectionToProxy, collectionName, handler, otma);
-        collectionInvocationHandler.setResolveObjectChangedEnabled(handler.isResolveObjectChangedEnabled());
-
-        return proxyInstantiator.instantiateProxy(collectionInvocationHandler);
-    }
-
-    /**
-     * Whether to execute or not will be picked up from the supplied parent
-     * handler.
-     */
-    public <T, P, Q> Map<P, Q> proxy(final Map<P, Q> collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
-
-        final MapInvocationHandler<T, Map<P, Q>> mapInvocationHandler = new MapInvocationHandler<T, Map<P, Q>>(collectionToProxy, collectionName, handler, otma);
-        mapInvocationHandler.setResolveObjectChangedEnabled(handler.isResolveObjectChangedEnabled());
-
-        return proxyInstantiator.instantiateProxy(mapInvocationHandler);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java
deleted file mode 100644
index 0021038..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Constants.java
+++ /dev/null
@@ -1,52 +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.wrapper.internal.util;
-
-public final class Constants {
-    private Constants() {
-    }
-
-    public static final String PREFIX_CHOICES = "choices";
-    public static final String PREFIX_DEFAULT = "default";
-    public static final String PREFIX_HIDE = "hide";
-    public static final String PREFIX_DISABLE = "disable";
-    public static final String PREFIX_VALIDATE_REMOVE_FROM = "validateRemoveFrom";
-    public static final String PREFIX_VALIDATE_ADD_TO = "validateAddTo";
-    public static final String PREFIX_VALIDATE = "validate";
-    public static final String PREFIX_REMOVE_FROM = "removeFrom";
-    public static final String PREFIX_ADD_TO = "addTo";
-    public static final String PREFIX_MODIFY = "modify";
-    public static final String PREFIX_CLEAR = "clear";
-    public static final String PREFIX_SET = "set";
-    public static final String PREFIX_GET = "get";
-
-    public final static String TITLE_METHOD_NAME = "title";
-    public final static String TO_STRING_METHOD_NAME = "toString";
-
-    /**
-     * Cannot invoke methods with these prefixes.
-     */
-    public final static String[] INVALID_PREFIXES = { PREFIX_MODIFY, PREFIX_CLEAR, PREFIX_DISABLE, PREFIX_VALIDATE, PREFIX_VALIDATE_ADD_TO, PREFIX_VALIDATE_REMOVE_FROM, PREFIX_HIDE, };
-
-    public final static String[] PROPERTY_PREFIXES = { PREFIX_GET, PREFIX_SET, PREFIX_MODIFY, PREFIX_CLEAR, PREFIX_DISABLE, PREFIX_VALIDATE, PREFIX_HIDE, PREFIX_DEFAULT, PREFIX_CHOICES };
-    public final static String[] COLLECTION_PREFIXES = { PREFIX_GET, PREFIX_SET, PREFIX_ADD_TO, PREFIX_REMOVE_FROM, PREFIX_DISABLE, PREFIX_VALIDATE_ADD_TO, PREFIX_VALIDATE_REMOVE_FROM, PREFIX_HIDE, PREFIX_DEFAULT, PREFIX_CHOICES };
-    public final static String[] ACTION_PREFIXES = { PREFIX_VALIDATE, PREFIX_DISABLE, PREFIX_HIDE, PREFIX_DEFAULT, PREFIX_CHOICES, };
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java
deleted file mode 100644
index dd78056..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/MethodPrefixFinder.java
+++ /dev/null
@@ -1,48 +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.wrapper.internal.util;
-
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-
-public final class MethodPrefixFinder {
-
-    // a Linked Hash Set is used to ensure that the ordering is preserved.
-    public final static LinkedHashSet<String> ALL_PREFIXES = new LinkedHashSet<String>() {
-        private static final long serialVersionUID = 1L;
-        {
-            // collection prefixes are added first because we want to
-            // test validateAddTo and validateRemoveFrom before validate
-            addAll(Arrays.asList(Constants.COLLECTION_PREFIXES));
-            addAll(Arrays.asList(Constants.PROPERTY_PREFIXES));
-            addAll(Arrays.asList(Constants.ACTION_PREFIXES));
-        }
-    };
-
-    public String findPrefix(final String methodName) {
-        for (final String prefix : ALL_PREFIXES) {
-            if (methodName.startsWith(prefix)) {
-                return prefix;
-            }
-        }
-        return "";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java
deleted file mode 100644
index 7cfecbd..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/internal/util/Util.java
+++ /dev/null
@@ -1,53 +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.wrapper.internal.util;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-
-import org.objenesis.ObjenesisHelper;
-
-public final class Util {
-
-    private Util(){}
-    
-    @SuppressWarnings("unchecked")
-    public static <T> T createInstance(final Class<T> toProxy, final InvocationHandler handler, final Class<?>... auxiliaryTypes) {
-        return (T) Proxy.newProxyInstance(toProxy.getClassLoader(), combine(toProxy, auxiliaryTypes) , handler);
-    }
- 
-    /**
-     * Return a new instance of the specified class. The recommended way is
-     * without calling any constructor. This is usually done by doing like
-     * <code>ObjectInputStream.readObject()</code> which is JVM specific.
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T createInstance(final Class<T> enhancedClass) {
-        return (T) ObjenesisHelper.newInstance(enhancedClass);
-    }
-    
-    private static Class<?>[] combine(Class<?> first, Class<?>... rest) {
-        Class<?>[] all = new Class<?>[rest.length+1];
-        all[0] = first;
-        System.arraycopy(rest, 0, all, 1, rest.length);
-        return all;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java
deleted file mode 100644
index 255cbfa..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiator.java
+++ /dev/null
@@ -1,26 +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.wrapper.proxy;
-
-import org.apache.isis.core.wrapper.handlers.DelegatingInvocationHandler;
-
-public interface ProxyInstantiator {
-    public <T> T instantiateProxy(final DelegatingInvocationHandler<T> invocationHandler);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java
deleted file mode 100644
index 65241e9..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForCglib.java
+++ /dev/null
@@ -1,101 +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.wrapper.proxy;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import net.sf.cglib.proxy.Callback;
-import net.sf.cglib.proxy.Enhancer;
-import net.sf.cglib.proxy.Factory;
-import net.sf.cglib.proxy.MethodInterceptor;
-import net.sf.cglib.proxy.MethodProxy;
-
-import org.apache.isis.applib.services.wrapper.WrapperObject;
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.CglibEnhanced;
-import org.apache.isis.core.wrapper.handlers.DelegatingInvocationHandler;
-import org.apache.isis.core.wrapper.internal.util.Util;
-
-public class ProxyInstantiatorForCglib implements ProxyInstantiator {
-
-    @SuppressWarnings("unchecked")
-    public <T> T instantiateProxy(final DelegatingInvocationHandler<T> handler) {
-
-        final T toProxy = handler.getDelegate();
-
-        // handle if already proxied using cglib
-        // (this is in case the CglibObjectFactory is configured, to handle lazy loading/object dirtying.  
-        // Have decided not to port this over to the Javassist version, in anticipation of the CglibObjectFactory being dropped from Isis in v2.0.0.
-        // (If that isn't the case, then this class is still available).
-        if (CglibEnhanced.class.isAssignableFrom(toProxy.getClass())) {
-
-            handler.setResolveObjectChangedEnabled(true);
-
-            final Class<? extends Object> enhancedClass = toProxy.getClass();
-            final Class<? extends Object> origSuperclass = toProxy.getClass().getSuperclass();
-
-            final List<Class<?>> interfaces = Lists.newArrayList();
-            interfaces.addAll(Arrays.asList(enhancedClass.getInterfaces()));
-            interfaces.remove(Factory.class); // if there.
-            interfaces.add(WrapperObject.class);
-
-            return (T) Enhancer.create(origSuperclass, interfaces.toArray(new Class[] {}), newMethodInterceptor(handler));
-        }
-
-        final Class<T> clazz = (Class<T>) toProxy.getClass();
-
-        if (clazz.isInterface()) {
-            return Util.createInstance(clazz, handler, WrapperObject.class);
-        } else {
-            final Class<T> enhancedClass = createEnhancedClass(clazz, handler, WrapperObject.class);
-            return Util.createInstance(enhancedClass);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private static <T> Class<T> createEnhancedClass(final Class<T> toProxyClass, final InvocationHandler handler, final Class<?>... auxiliaryTypes) {
-
-        // Create the proxy
-        final Enhancer enhancer = new Enhancer();
-        enhancer.setSuperclass(toProxyClass);
-        enhancer.setInterfaces(auxiliaryTypes);
-        enhancer.setCallbackType(newMethodInterceptor(handler).getClass());
-
-        final Class<?> enhancedClass = enhancer.createClass();
-
-        Enhancer.registerCallbacks(enhancedClass, new Callback[] { newMethodInterceptor(handler) });
-        return (Class<T>) enhancedClass;
-    }
-
-    private static <T> MethodInterceptor newMethodInterceptor(final InvocationHandler handler) {
-        return new MethodInterceptor() {
-            @Override
-            public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
-                return handler.invoke(obj, method, args);
-            }
-        };
-    }
-    
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java
deleted file mode 100644
index 3d2b838..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/proxy/ProxyInstantiatorForJavassist.java
+++ /dev/null
@@ -1,77 +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.wrapper.proxy;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-
-import javassist.util.proxy.MethodFilter;
-import javassist.util.proxy.MethodHandler;
-import javassist.util.proxy.ProxyFactory;
-import javassist.util.proxy.ProxyObject;
-
-import org.apache.isis.applib.services.wrapper.WrapperObject;
-import org.apache.isis.core.commons.lang.ArrayExtensions;
-import org.apache.isis.core.wrapper.handlers.DelegatingInvocationHandler;
-import org.apache.isis.core.wrapper.internal.util.Util;
-
-public class ProxyInstantiatorForJavassist implements ProxyInstantiator {
-
-    @SuppressWarnings("unchecked")
-    public <T> T instantiateProxy(final DelegatingInvocationHandler<T> handler) {
-
-        final T toProxy = handler.getDelegate();
-
-        final Class<T> clazz = (Class<T>) toProxy.getClass();
-
-        if (clazz.isInterface()) {
-            return Util.createInstance(clazz, handler, WrapperObject.class);
-        } else {
-            final Class<T> enhancedClass = createEnhancedClass(clazz, handler, WrapperObject.class);
-            ProxyObject proxyObject = (ProxyObject) Util.createInstance(enhancedClass);
-            proxyObject.setHandler(new MethodHandler() {
-                @Override
-                public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable {
-                    return handler.invoke(self, thisMethod, args);
-                }
-            });
-            return (T) proxyObject;
-        }
-    }
-    
-    @SuppressWarnings("unchecked")
-    private static <T> Class<T> createEnhancedClass(final Class<T> toProxyClass, final InvocationHandler handler, final Class<?>... auxiliaryTypes) {
-        
-        final ProxyFactory proxyFactory = new ProxyFactory();
-        proxyFactory.setSuperclass(toProxyClass);
-        proxyFactory.setInterfaces(ArrayExtensions.combine(toProxyClass.getInterfaces(), new Class<?>[]{org.apache.isis.core.metamodel.specloader.classsubstitutor.JavassistEnhanced.class}, auxiliaryTypes));
-
-        proxyFactory.setFilter(new MethodFilter() {
-            @Override
-            public boolean isHandled(final Method m) {
-                // ignore finalize()
-                return !m.getName().equals("finalize") || m.isBridge();
-            }
-        });
-        
-        return proxyFactory.createClass();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java b/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
deleted file mode 100644
index 6bc2e8e..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryAbstractTest.java
+++ /dev/null
@@ -1,127 +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.wrapper;
-
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.wrapper.WrappingObject;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.wrapper.proxy.ProxyInstantiator;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-public class WrapperFactoryAbstractTest {
-
-    private static class DomainObject {
-    }
-
-    private static class WrappedDomainObject extends DomainObject implements WrappingObject {
-
-        private final DomainObject wrappedObject;
-        private final WrapperFactory.ExecutionMode mode;
-
-        WrappedDomainObject(final DomainObject wrappedObject, WrapperFactory.ExecutionMode mode) {
-            this.wrappedObject = wrappedObject;
-            this.mode = mode;
-        }
-
-        @Override
-        public void __isis_save() {
-        }
-
-        @Override
-        public Object __isis_wrapped() {
-            return wrappedObject;
-        }
-
-        @Override
-        public WrapperFactory.ExecutionMode __isis_executionMode() {
-            return mode;
-        }
-    }
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
-
-    @Mock
-    private ProxyInstantiator mockProxyInstantiator;
-    private WrapperFactoryAbstract wrapperFactory;
-
-    private DomainObject createProxyCalledWithDomainObject;
-    private WrapperFactory.ExecutionMode createProxyCalledWithMode;
-
-    @Before
-    public void setUp() throws Exception {
-        wrapperFactory = new WrapperFactoryAbstract(mockProxyInstantiator) {
-
-            @Override
-            protected <T> T createProxy(T domainObject, ExecutionMode mode) {
-                WrapperFactoryAbstractTest.this.createProxyCalledWithMode = mode;
-                WrapperFactoryAbstractTest.this.createProxyCalledWithDomainObject = (DomainObject) domainObject;
-                return domainObject;
-            }
-        };
-    }
-
-    @Test
-    public void wrap_ofUnwrapped_delegates_to_createProxy() throws Exception {
-        final DomainObject domainObject = new DomainObject();
-        wrapperFactory.wrap(domainObject);
-
-        assertThat(createProxyCalledWithDomainObject, is(domainObject));
-        assertThat(createProxyCalledWithMode, is(WrapperFactory.ExecutionMode.EXECUTE));
-    }
-
-
-    @Test
-    public void wrap_ofWrapped_sameMode_returnsUnchanged() throws Exception {
-        // given
-        final DomainObject wrappedObject = new DomainObject();
-        final DomainObject domainObject = new WrappedDomainObject(wrappedObject, WrapperFactory.ExecutionMode.EXECUTE);
-
-        // when
-        final DomainObject wrappingObject = wrapperFactory.wrap(domainObject, WrapperFactory.ExecutionMode.EXECUTE);
-
-        // then
-        assertThat(wrappingObject, is(domainObject));
-        assertThat(createProxyCalledWithDomainObject, is(nullValue()));
-    }
-
-    @Test
-    public void wrap_ofWrapped_differentMode_delegates_to_createProxy() throws Exception {
-        // given
-        final DomainObject wrappedObject = new DomainObject();
-        final DomainObject domainObject = new WrappedDomainObject(wrappedObject, WrapperFactory.ExecutionMode.EXECUTE);
-
-        // when
-        final DomainObject wrappingObject = wrapperFactory.wrap(domainObject, WrapperFactory.ExecutionMode.SKIP_RULES);
-
-        // then
-        assertThat(wrappingObject, is(not(domainObject)));
-        assertThat(createProxyCalledWithDomainObject, is(wrappedObject));
-        assertThat(createProxyCalledWithMode, is(WrapperFactory.ExecutionMode.SKIP_RULES));
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java b/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
deleted file mode 100644
index a3609b8..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
+++ /dev/null
@@ -1,376 +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.progmodel.wrapper;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-import java.lang.reflect.Method;
-import java.util.Collections;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import org.apache.isis.applib.services.wrapper.DisabledException;
-import org.apache.isis.applib.services.wrapper.HiddenException;
-import org.apache.isis.applib.services.wrapper.InvalidException;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
-import org.apache.isis.core.metamodel.adapter.ServicesProvider;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
-import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl;
-import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod;
-import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethod;
-import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
-import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaClearMethod;
-import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacetViaSetterMethod;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaModifyMethod;
-import org.apache.isis.core.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethod;
-import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
-import org.apache.isis.core.tck.dom.claimapp.employees.Employee;
-import org.apache.isis.core.tck.dom.claimapp.employees.EmployeeRepository;
-import org.apache.isis.core.tck.dom.claimapp.employees.EmployeeRepositoryImpl;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
-
-public abstract class WrapperFactoryAbstractTest_wrappedObject {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    @Rule
-    public ExpectedException expectedException = ExpectedException.none();
-    
-    @Mock
-    private AdapterManager mockAdapterManager;
-    @Mock
-    private AuthenticationSessionProvider mockAuthenticationSessionProvider;
-    @Mock
-    private ObjectPersistor mockObjectPersistor;
-    @Mock
-    private QuerySubmitter mockQuerySubmitter;
-    @Mock
-    private ServicesProvider mockServicesProvider;
-    @Mock
-    private SpecificationLoader mockSpecificationLookup;
-
-    private ObjectMemberContext objectMemberContext;
-
-    @Mock
-    private ObjectSpecificationDefault mockEmployeeSpec;
-    private ObjectMember employeeNameMember;
-
-    @Mock
-    private ObjectSpecificationDefault mockStringSpec;
-
-    @Mock
-    private ObjectAdapter mockEmployeeAdapter;
-
-    @Mock
-    private ObjectAdapter mockAdapterForStringSmith;
-    @Mock
-    private ObjectAdapter mockAdapterForStringJones;
-
-    private final SimpleSession session = new SimpleSession("tester", Collections.<String>emptyList());
-
-    private EmployeeRepository employeeRepository;
-
-    private Employee employeeDO;
-    private Employee employeeWO;
-
-    private WrapperFactoryAbstract wrapperFactory;
-
-
-    @Before
-    public void setUp() {
-
-        objectMemberContext = new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, new CollectionTypeRegistryDefault(), mockServicesProvider);
-        
-        employeeRepository = new EmployeeRepositoryImpl();
-
-        employeeDO = new Employee();
-        employeeDO.setName("Smith");
-        employeeDO.setEmployeeRepository(employeeRepository); 
-
-        wrapperFactory = createWrapperFactory();
-        wrapperFactory.setAdapterManager(mockAdapterManager);
-        wrapperFactory.setAuthenticationSessionProvider(mockAuthenticationSessionProvider);
-        wrapperFactory.setObjectPersistor(mockObjectPersistor);
-        wrapperFactory.setSpecificationLookup(mockSpecificationLookup);
-
-        context.checking(new Expectations() {
-            {
-                allowing(mockSpecificationLookup).loadSpecification(String.class);
-                will(returnValue(mockStringSpec));
-
-                allowing(mockStringSpec).getShortIdentifier();
-                will(returnValue(String.class.getName()));
-            }
-        });
-        
-        
-        final Method employeeGetNameMethod = methodOf(Employee.class, "getName");
-        final Method employeeSetNameMethod = methodOf(Employee.class, "setName", String.class);
-        final Method employeeModifyNameMethod = methodOf(Employee.class, "modifyName", String.class);
-        final Method employeeHideNameMethod = methodOf(Employee.class, "hideName");
-        final Method employeeDisableNameMethod = methodOf(Employee.class, "disableName");
-        final Method employeeValidateNameMethod = methodOf(Employee.class, "validateName", String.class);
-        final Method employeeClearNameMethod = methodOf(Employee.class, "clearName");
-        employeeNameMember = new OneToOneAssociationImpl(
-                facetedMethodForProperty(
-                        employeeSetNameMethod, employeeGetNameMethod, employeeModifyNameMethod, employeeClearNameMethod, employeeHideNameMethod, employeeDisableNameMethod, employeeValidateNameMethod), objectMemberContext);
-        
-        context.checking(new Expectations() {
-            {
-                allowing(mockAuthenticationSessionProvider).getAuthenticationSession();
-                will(returnValue(session));
-
-                allowing(mockAdapterManager).getAdapterFor(employeeDO);
-                will(returnValue(mockEmployeeAdapter));
-
-                allowing(mockEmployeeAdapter).getSpecification();
-                will(returnValue(mockEmployeeSpec));
-
-                allowing(mockSpecificationLookup).loadSpecification(Employee.class);
-                will(returnValue(mockEmployeeSpec));
-
-                allowing(mockEmployeeSpec).getMember(methodOf(Employee.class, "getEmployeeRepository"));
-                will(returnValue(null));
-
-                allowing(mockEmployeeSpec).getMember(employeeGetNameMethod);
-                will(returnValue(employeeNameMember));
-
-                allowing(mockEmployeeSpec).getMember(employeeSetNameMethod);
-                will(returnValue(employeeNameMember));
-
-                allowing(mockEmployeeSpec).getMember(employeeModifyNameMethod);
-                will(returnValue(employeeNameMember));
-                
-                allowing(mockEmployeeSpec).getMember(employeeClearNameMethod);
-                will(returnValue(employeeNameMember));
-                
-                allowing(mockEmployeeAdapter).getObject();
-                will(returnValue(employeeDO));
-                
-                allowing(mockEmployeeAdapter).representsPersistent();
-                will(returnValue(true));
-            }
-        });
-
-
-        employeeWO = wrapperFactory.wrap(employeeDO);
-    }
-
-    /**
-     * Mandatory hook.
-     */
-    protected abstract WrapperFactoryAbstract createWrapperFactory();
-
-    @Test
-    public void shouldWrapDomainObject() {
-        // then
-        assertThat(employeeWO, is(notNullValue()));
-    }
-
-    @Test
-    public void shouldBeAbleToInjectIntoDomainObjects() {
-        assertThat(employeeDO.getEmployeeRepository(), is(notNullValue()));
-    }
-
-    @Test
-    public void cannotAccessMethodNotCorrespondingToMember() {
-
-        expectedException.expectMessage("Method 'getEmployeeRepository' being invoked does not correspond to any of the object's fields or actions.");
-        
-        // then
-        assertThat(employeeWO.getEmployeeRepository(), is(notNullValue()));
-    }
-    
-    @Test
-    public void shouldBeAbleToReadVisibleProperty() {
-
-        allowingEmployeeHasSmithAdapter();
-        
-
-        // then
-        assertThat(employeeWO.getName(), is(employeeDO.getName()));
-    }
-
-    @Test
-    public void shouldNotBeAbleToViewHiddenProperty() {
-
-        expectedException.expect(HiddenException.class);
-
-        allowingEmployeeHasSmithAdapter();
-
-        // given
-        employeeDO.whetherHideName = true;
-        // when
-        employeeWO.getName();
-        // then should throw exception
-    }
-
-    @Test
-    public void shouldBeAbleToModifyEnabledPropertyUsingSetter() {
-
-        allowingJonesStringValueAdapter();
-
-        context.checking(new Expectations() {
-            {
-
-                oneOf(mockAdapterManager).adapterFor("Jones", mockEmployeeAdapter);
-                will(returnValue(mockAdapterForStringJones));
-            }
-        });
-
-        // when
-        employeeWO.setName("Jones");
-        // then
-        assertThat(employeeDO.getName(), is("Jones"));
-        assertThat(employeeWO.getName(), is(employeeDO.getName()));
-    }
-
-    @Test
-    public void shouldNotBeAbleToModifyDisabledProperty() {
-
-        expectedException.expect(DisabledException.class);
-
-        // given
-        employeeDO.reasonDisableName = "sorry, no change allowed";
-        // when
-        employeeWO.setName("Jones");
-        // then should throw exception
-    }
-
-    @Test
-    public void shouldNotBeAbleToModifyPropertyUsingModify() {
-
-        allowingJonesStringValueAdapter();
-
-        expectedException.expect(UnsupportedOperationException.class);
-
-        // when
-        employeeWO.modifyName("Jones");
-        // then should throw exception
-    }
-
-    @Test
-    public void shouldNotBeAbleToModifyPropertyUsingClear() {
-
-        expectedException.expect(UnsupportedOperationException.class);
-
-        // when
-        employeeWO.clearName();
-        // then should throw exception
-    }
-
-    @Test
-    public void shouldNotBeAbleToModifyPropertyIfInvalid() {
-
-        allowingJonesStringValueAdapter();
-
-        expectedException.expect(InvalidException.class);
-
-        // given
-        employeeDO.reasonValidateName = "sorry, invalid data";
-        // when
-        employeeWO.setName("Jones");
-        // then should throw exception
-    }
-
-    
-    // //////////////////////////////////////
-
-    private static FacetedMethod facetedMethodForProperty(
-            Method init, Method accessor, Method modify, Method clear, Method hide, Method disable, Method validate) {
-        FacetedMethod facetedMethod = FacetedMethod.createForProperty(accessor.getDeclaringClass(), accessor);
-        FacetUtil.addFacet(new PropertyAccessorFacetViaAccessor(accessor, facetedMethod));
-        FacetUtil.addFacet(new PropertyInitializationFacetViaSetterMethod(init, facetedMethod));
-        FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modify, facetedMethod));
-        FacetUtil.addFacet(new PropertyClearFacetViaClearMethod(clear, facetedMethod));
-        FacetUtil.addFacet(new HideForContextFacetViaMethod(hide, facetedMethod));
-        FacetUtil.addFacet(new DisableForContextFacetViaMethod(disable, facetedMethod));
-        FacetUtil.addFacet(new PropertyValidateFacetViaMethod(validate, facetedMethod));
-        FacetUtil.addFacet(new NamedFacetInferred(accessor.getName(), facetedMethod));
-        return facetedMethod;
-    }
-
-    private static Method methodOf(Class<?> cls, String methodName) {
-        return methodOf(cls, methodName, new Class<?>[]{});
-    }
-
-    private static Method methodOf(Class<?> cls, String methodName, Class<?>... args) {
-        try {
-            return cls.getMethod(methodName, args);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    // //////////////////////////////////////
-    
-    private void allowingEmployeeHasSmithAdapter() {
-        context.checking(new Expectations() {
-            {
-                allowing(mockAdapterManager).adapterFor("Smith", mockEmployeeAdapter);
-                will(returnValue(mockAdapterForStringSmith));
-
-                allowing(mockAdapterForStringSmith).getObject();
-                will(returnValue("Smith"));
-            }
-        });
-    }
-
-    private void allowingJonesStringValueAdapter() {
-        context.checking(new Expectations() {
-            {
-                allowing(mockAdapterManager).adapterFor("Jones");
-                will(returnValue(mockAdapterForStringJones));
-                
-                allowing(mockAdapterForStringJones).getObject();
-                will(returnValue("Jones"));
-                
-                allowing(mockAdapterForStringJones).isTransient();
-                will(returnValue(ResolveState.VALUE.isTransient()));
-            }
-        });
-    }
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java b/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
deleted file mode 100644
index e9d1adb..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
+++ /dev/null
@@ -1,257 +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.progmodel.wrapper;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.events.PropertyModifyEvent;
-import org.apache.isis.applib.events.PropertyUsabilityEvent;
-import org.apache.isis.applib.events.PropertyVisibilityEvent;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.applib.services.wrapper.DisabledException;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.consent.Allow;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionResult;
-import org.apache.isis.core.metamodel.consent.Veto;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAlwaysEverywhere;
-import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod;
-import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
-import org.apache.isis.core.tck.dom.claimapp.employees.Employee;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
-
-/**
- * Contract test.
- */
-public abstract class WrapperFactoryAbstractTest_wrappedObject_transient {
-
-    @Rule
-    public final JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    @Mock
-    private AdapterManager mockAdapterManager;
-    @Mock
-    private AuthenticationSessionProvider mockAuthenticationSessionProvider;
-    @Mock
-    private ObjectPersistor mockObjectPersistor;
-    @Mock
-    private SpecificationLoader mockSpecificationLookup;
-
-    private Employee employeeDO;
-    @Mock
-    private ObjectAdapter mockEmployeeAdapter;
-    @Mock
-    private ObjectSpecificationDefault mockEmployeeSpec;
-    @Mock
-    private OneToOneAssociation mockPasswordMember;
-    @Mock
-    private Identifier mockPasswordIdentifier;
-
-    @Mock
-    protected ObjectAdapter mockPasswordAdapter;
-    
-    private final String passwordValue = "12345678";
-
-    private final SimpleSession session = new SimpleSession("tester", Collections.<String>emptyList());
-
-    private List<Facet> facets;
-    private Method getPasswordMethod;
-    private Method setPasswordMethod;
-
-    private WrapperFactoryAbstract wrapperFactory;
-    private Employee employeeWO;
-
-
-    @Before
-    public void setUp() throws Exception {
-
-        employeeDO = new Employee();
-        employeeDO.setName("Smith");
-        
-        getPasswordMethod = Employee.class.getMethod("getPassword");
-        setPasswordMethod = Employee.class.getMethod("setPassword", String.class);
-
-        wrapperFactory = createWrapperFactory();
-        wrapperFactory.setAdapterManager(mockAdapterManager);
-        wrapperFactory.setAuthenticationSessionProvider(mockAuthenticationSessionProvider);
-        wrapperFactory.setObjectPersistor(mockObjectPersistor);
-        wrapperFactory.setSpecificationLookup(mockSpecificationLookup);
-        
-        context.checking(new Expectations() {
-            {
-                allowing(mockAdapterManager).getAdapterFor(employeeDO);
-                will(returnValue(mockEmployeeAdapter));
-
-                allowing(mockAdapterManager).adapterFor(passwordValue);
-                will(returnValue(mockPasswordAdapter));
-
-                allowing(mockEmployeeAdapter).getSpecification();
-                will(returnValue(mockEmployeeSpec));
-
-                allowing(mockEmployeeAdapter).getObject();
-                will(returnValue(employeeDO));
-
-                allowing(mockPasswordAdapter).getObject();
-                will(returnValue(passwordValue));
-
-                allowing(mockPasswordMember).getIdentifier();
-                will(returnValue(mockPasswordIdentifier));
-
-                allowing(mockSpecificationLookup).loadSpecification(Employee.class);
-                will(returnValue(mockEmployeeSpec));
-                
-                allowing(mockEmployeeSpec).getMember(with(setPasswordMethod));
-                will(returnValue(mockPasswordMember));
-
-                allowing(mockEmployeeSpec).getMember(with(getPasswordMethod));
-                will(returnValue(mockPasswordMember));
-
-                allowing(mockPasswordMember).getName();
-                will(returnValue("password"));
-
-                allowing(mockAuthenticationSessionProvider).getAuthenticationSession();
-                will(returnValue(session));
-                
-                allowing(mockPasswordMember).isOneToOneAssociation();
-                will(returnValue(true));
-
-                allowing(mockPasswordMember).isOneToManyAssociation();
-                will(returnValue(false));
-            }
-        });
-
-        employeeWO = wrapperFactory.wrap(employeeDO);
-    }
-
-    /**
-     * Mandatory hook.
-     */
-    protected abstract WrapperFactoryAbstract createWrapperFactory();
-
-    @Test(expected = DisabledException.class)
-    public void shouldNotBeAbleToModifyProperty() {
-
-        // given
-        final DisabledFacet disabledFacet = new DisabledFacetAlwaysEverywhere(mockPasswordMember);
-        facets = Arrays.asList((Facet)disabledFacet, new PropertySetterFacetViaSetterMethod(setPasswordMethod, mockPasswordMember));
-
-        final Consent visibilityConsent = new Allow(new InteractionResult(new PropertyVisibilityEvent(employeeDO, null)));
-
-        final InteractionResult usabilityInteractionResult = new InteractionResult(new PropertyUsabilityEvent(employeeDO, null));
-        usabilityInteractionResult.advise("disabled", disabledFacet);
-        final Consent usabilityConsent = new Veto(usabilityInteractionResult);
-
-        context.checking(new Expectations() {
-            {
-                allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
-                will(returnValue(facets));
-                
-                allowing(mockPasswordMember).isVisible(session, mockEmployeeAdapter, Where.ANYWHERE);
-                will(returnValue(visibilityConsent));
-                
-                allowing(mockPasswordMember).isUsable(session, mockEmployeeAdapter, Where.ANYWHERE);
-                will(returnValue(usabilityConsent));
-            }
-        });
-        
-        // when
-        employeeWO.setPassword(passwordValue);
-        
-        // then should throw exception
-    }
-
-    @Ignore("TODO - reinstate or replace with integration tests")
-    @Test
-    public void canModifyProperty() {
-        // given
-
-        final Consent visibilityConsent = new Allow(new InteractionResult(new PropertyVisibilityEvent(employeeDO, mockPasswordIdentifier)));
-        final Consent usabilityConsent = new Allow(new InteractionResult(new PropertyUsabilityEvent(employeeDO, mockPasswordIdentifier)));
-        final Consent validityConsent = new Allow(new InteractionResult(new PropertyModifyEvent(employeeDO, mockPasswordIdentifier, passwordValue)));
-
-        context.checking(new Expectations() {
-            {
-                allowing(mockPasswordMember).isVisible(session, mockEmployeeAdapter, Where.ANYWHERE);
-                will(returnValue(visibilityConsent));
-                
-                allowing(mockPasswordMember).isUsable(session, mockEmployeeAdapter, Where.ANYWHERE);
-                will(returnValue(usabilityConsent));
-                
-                allowing(mockPasswordMember).isAssociationValid(mockEmployeeAdapter, mockPasswordAdapter);
-                will(returnValue(validityConsent));
-            }
-        });
-
-        facets = Arrays.asList((Facet)new PropertySetterFacetViaSetterMethod(setPasswordMethod, mockPasswordMember));
-        context.checking(new Expectations() {
-            {
-                allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
-                will(returnValue(facets));
-
-                oneOf(mockPasswordMember).set(mockEmployeeAdapter, mockPasswordAdapter);
-            }
-        });
-
-        // when
-        employeeWO.setPassword(passwordValue);
-
-
-        // and given
-        facets = Arrays.asList((Facet)new PropertyAccessorFacetViaAccessor(getPasswordMethod, mockPasswordMember));
-        context.checking(new Expectations() {
-            {
-                allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
-                will(returnValue(facets));
-                
-                oneOf(mockPasswordMember).get(mockEmployeeAdapter);
-                will(returnValue(mockPasswordAdapter));
-            }
-        });
-
-        // then be allowed
-        assertThat(employeeWO.getPassword(), is(passwordValue));
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java b/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java
deleted file mode 100644
index b867968..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.progmodel.wrapper;
-
-import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
-import org.apache.isis.core.wrapper.WrapperFactoryCglib;
-
-public class WrapperFactoryCglibTest_wrappedObject extends WrapperFactoryAbstractTest_wrappedObject {
-
-    @Override
-    protected WrapperFactoryAbstract createWrapperFactory() {
-        return new WrapperFactoryCglib();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java b/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java
deleted file mode 100644
index 05dfdec..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java
+++ /dev/null
@@ -1,34 +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.progmodel.wrapper;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
-import org.apache.isis.core.wrapper.WrapperFactoryCglib;
-
-public class WrapperFactoryCglibTest_wrappedObject_transient extends WrapperFactoryAbstractTest_wrappedObject_transient {
-
-    @Override
-    protected WrapperFactoryAbstract createWrapperFactory() {
-        return new WrapperFactoryCglib();
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java b/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java
deleted file mode 100644
index b7ce494..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.progmodel.wrapper;
-
-import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
-import org.apache.isis.core.wrapper.WrapperFactoryJavassist;
-
-public class WrapperFactoryJavassistTest_wrappedObject extends WrapperFactoryAbstractTest_wrappedObject {
-
-    @Override
-    protected WrapperFactoryAbstract createWrapperFactory() {
-        return new WrapperFactoryJavassist();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java b/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java
deleted file mode 100644
index c613348..0000000
--- a/core/module-wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.progmodel.wrapper;
-
-import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
-import org.apache.isis.core.wrapper.WrapperFactoryJavassist;
-
-public class WrapperFactoryJavassistTest_wrappedObject_transient extends WrapperFactoryAbstractTest_wrappedObject_transient {
-
-    @Override
-    protected WrapperFactoryAbstract createWrapperFactory() {
-        return new WrapperFactoryJavassist();
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index f013902..f806d8f 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -1095,6 +1095,11 @@ ${license.additional-notes}
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
+            <dependency>
+                <groupId>org.apache.isis.core</groupId>
+                <artifactId>isis-core-wrapper</artifactId>
+                <version>1.6.0-SNAPSHOT</version>
+            </dependency>
 
             <!-- bytecode components -->
             <dependency>
@@ -1388,11 +1393,6 @@ ${license.additional-notes}
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
-            <dependency>
-                <groupId>org.apache.isis.module</groupId>
-                <artifactId>isis-module-wrapper</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
-            </dependency>
 
 
             <!-- JodaTime -->
@@ -2074,6 +2074,7 @@ ${license.additional-notes}
         <module>log4j</module>
         <module>metamodel</module>
         <module>runtime</module>
+        <module>wrapper</module>
         <module>webserver</module>
 
         <module>bytecode-cglib</module>
@@ -2103,7 +2104,6 @@ ${license.additional-notes}
         <module>module-publishing-jdo</module>
         <module>module-publishingeventserializer-ro</module>
         <module>module-settings</module>
-        <module>module-wrapper</module>
 
         <module>tck</module>
     </modules>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/specsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/specsupport/pom.xml b/core/specsupport/pom.xml
index 50d6048..8d85116 100644
--- a/core/specsupport/pom.xml
+++ b/core/specsupport/pom.xml
@@ -64,8 +64,8 @@
             <artifactId>isis-core-applib</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.module</groupId>
-            <artifactId>isis-module-wrapper</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-wrapper</artifactId>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/pom.xml
----------------------------------------------------------------------
diff --git a/core/wrapper/pom.xml b/core/wrapper/pom.xml
new file mode 100644
index 0000000..c5a58b3
--- /dev/null
+++ b/core/wrapper/pom.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.isis.core</groupId>
+        <artifactId>isis</artifactId>
+        <version>1.6.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>isis-core-wrapper</artifactId>
+
+	<name>Isis Core Wrapper Service</name>
+	<description>Isis Core Wrapper Service</description>
+
+
+	<properties>
+        <siteBaseDir>..</siteBaseDir>
+		<relativeUrl>wrapper/</relativeUrl>
+	</properties>
+
+    <!-- used in Site generation for relative references. -->
+    <url>http://isis.apache.org/${relativeUrl}</url>
+
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <inherited>false</inherited>
+                <configuration>
+                	<dependencyLocationsEnabled>false</dependencyLocationsEnabled>
+                </configuration>
+                <reportSets>
+                    <reportSet>
+                        <inherited>false</inherited>
+                        <reports>
+                            <report>dependencies</report>
+                            <report>dependency-convergence</report>
+                            <report>plugins</report>
+                            <report>summary</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+        </plugins>
+    </reporting>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>asm</groupId>
+                <artifactId>asm</artifactId>
+                <version>3.3.1</version>
+            </dependency>
+            <dependency>
+                <groupId>cglib</groupId>
+                <artifactId>cglib-nodep</artifactId>
+                <version>2.2.2</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+	<dependencies>
+        <dependency>
+		    <groupId>org.apache.isis.core</groupId>
+		    <artifactId>isis-core-runtime</artifactId>
+        </dependency>
+
+		<dependency>
+		    <groupId>org.apache.isis.core</groupId>
+		    <artifactId>isis-core-metamodel</artifactId>
+		    <type>test-jar</type>
+		    <scope>test</scope>
+        </dependency>
+		<dependency>
+		    <groupId>org.apache.isis.core</groupId>
+		    <artifactId>isis-core-runtime</artifactId>
+		    <type>test-jar</type>
+		    <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-unittestsupport</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-tck-dom</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.objenesis</groupId>
+            <artifactId>objenesis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.javassist</groupId>
+            <artifactId>javassist</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>asm</groupId>
+            <artifactId>asm</artifactId>
+            <!-- explicitly include for use of WrapperFactoryCglib -->
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+            <!-- explicitly include for use of WrapperFactoryCglib -->
+            <optional>true</optional>
+        </dependency>
+
+	</dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
new file mode 100644
index 0000000..ceea4a5
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
@@ -0,0 +1,314 @@
+/*
+ *  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.wrapper;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.events.*;
+import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.applib.services.wrapper.WrappingObject;
+import org.apache.isis.applib.services.wrapper.listeners.InteractionListener;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
+import org.apache.isis.core.wrapper.dispatchers.InteractionEventDispatcher;
+import org.apache.isis.core.wrapper.dispatchers.InteractionEventDispatcherTypeSafe;
+import org.apache.isis.core.wrapper.handlers.ProxyContextHandler;
+import org.apache.isis.core.wrapper.proxy.ProxyInstantiator;
+
+public abstract class WrapperFactoryAbstract implements WrapperFactory, AuthenticationSessionProviderAware, SpecificationLoaderAware, AdapterManagerAware, ObjectPersistorAware {
+
+    private final List<InteractionListener> listeners = new ArrayList<InteractionListener>();
+    private final Map<Class<? extends InteractionEvent>, InteractionEventDispatcher> dispatchersByEventClass = new HashMap<Class<? extends InteractionEvent>, InteractionEventDispatcher>();
+
+    private AuthenticationSessionProvider authenticationSessionProvider;
+    private SpecificationLoader specificationLookup;
+    private AdapterManager adapterManager;
+    private ObjectPersistor objectPersistor;
+
+    private final ProxyContextHandler proxy;
+
+    public WrapperFactoryAbstract(final ProxyInstantiator proxyInstantiator) {
+        
+        proxy = new ProxyContextHandler(proxyInstantiator);
+        
+        dispatchersByEventClass.put(ObjectTitleEvent.class, new InteractionEventDispatcherTypeSafe<ObjectTitleEvent>() {
+            @Override
+            public void dispatchTypeSafe(final ObjectTitleEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.objectTitleRead(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(PropertyVisibilityEvent.class, new InteractionEventDispatcherTypeSafe<PropertyVisibilityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final PropertyVisibilityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.propertyVisible(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(PropertyUsabilityEvent.class, new InteractionEventDispatcherTypeSafe<PropertyUsabilityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final PropertyUsabilityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.propertyUsable(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(PropertyAccessEvent.class, new InteractionEventDispatcherTypeSafe<PropertyAccessEvent>() {
+            @Override
+            public void dispatchTypeSafe(final PropertyAccessEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.propertyAccessed(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(PropertyModifyEvent.class, new InteractionEventDispatcherTypeSafe<PropertyModifyEvent>() {
+            @Override
+            public void dispatchTypeSafe(final PropertyModifyEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.propertyModified(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(CollectionVisibilityEvent.class, new InteractionEventDispatcherTypeSafe<CollectionVisibilityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final CollectionVisibilityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.collectionVisible(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(CollectionUsabilityEvent.class, new InteractionEventDispatcherTypeSafe<CollectionUsabilityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final CollectionUsabilityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.collectionUsable(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(CollectionAccessEvent.class, new InteractionEventDispatcherTypeSafe<CollectionAccessEvent>() {
+            @Override
+            public void dispatchTypeSafe(final CollectionAccessEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.collectionAccessed(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(CollectionAddToEvent.class, new InteractionEventDispatcherTypeSafe<CollectionAddToEvent>() {
+            @Override
+            public void dispatchTypeSafe(final CollectionAddToEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.collectionAddedTo(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(CollectionRemoveFromEvent.class, new InteractionEventDispatcherTypeSafe<CollectionRemoveFromEvent>() {
+            @Override
+            public void dispatchTypeSafe(final CollectionRemoveFromEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.collectionRemovedFrom(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(ActionVisibilityEvent.class, new InteractionEventDispatcherTypeSafe<ActionVisibilityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final ActionVisibilityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.actionVisible(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(ActionUsabilityEvent.class, new InteractionEventDispatcherTypeSafe<ActionUsabilityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final ActionUsabilityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.actionUsable(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(ActionArgumentEvent.class, new InteractionEventDispatcherTypeSafe<ActionArgumentEvent>() {
+            @Override
+            public void dispatchTypeSafe(final ActionArgumentEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.actionArgument(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(ActionInvocationEvent.class, new InteractionEventDispatcherTypeSafe<ActionInvocationEvent>() {
+            @Override
+            public void dispatchTypeSafe(final ActionInvocationEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.actionInvoked(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(ObjectValidityEvent.class, new InteractionEventDispatcherTypeSafe<ObjectValidityEvent>() {
+            @Override
+            public void dispatchTypeSafe(final ObjectValidityEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.objectPersisted(interactionEvent);
+                }
+            }
+        });
+        dispatchersByEventClass.put(CollectionMethodEvent.class, new InteractionEventDispatcherTypeSafe<CollectionMethodEvent>() {
+            @Override
+            public void dispatchTypeSafe(final CollectionMethodEvent interactionEvent) {
+                for (final InteractionListener l : getListeners()) {
+                    l.collectionMethodInvoked(interactionEvent);
+                }
+            }
+        });
+    }
+
+    // /////////////////////////////////////////////////////////////
+    // wrap and unwrap
+    // /////////////////////////////////////////////////////////////
+
+    @Override
+    public <T> T wrap(final T domainObject) {
+        return wrap(domainObject, ExecutionMode.EXECUTE);
+    }
+
+    @Override
+    public <T> T wrapNoExecute(final T domainObject) {
+        return wrap(domainObject, ExecutionMode.NO_EXECUTE);
+    }
+    
+    @Override
+    public <T> T wrapSkipRules(final T domainObject) {
+        return wrap(domainObject, ExecutionMode.SKIP_RULES);
+    }
+    
+    @Override
+    public <T> T wrap(final T domainObject, final ExecutionMode mode) {
+        if (domainObject instanceof WrappingObject) {
+            final WrappingObject wrapperObject = (WrappingObject) domainObject;
+            final ExecutionMode wrapperMode = wrapperObject.__isis_executionMode();
+            if(wrapperMode != mode) {
+                final Object underlyingDomainObject = wrapperObject.__isis_wrapped();
+                return (T)createProxy(underlyingDomainObject, mode);
+            }
+            return domainObject;
+        }
+        return createProxy(domainObject, mode);
+    }
+
+    protected <T> T createProxy(final T domainObject, final ExecutionMode mode) {
+        return proxy.proxy(domainObject, this, mode, getAuthenticationSessionProvider(), getSpecificationLookup(), getAdapterManager(), getObjectPersistor());
+    }
+
+    @Override
+    public boolean isWrapper(final Object possibleWrappedDomainObject) {
+        return possibleWrappedDomainObject instanceof WrappingObject;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    @Programmatic
+    public <T> T unwrap(T possibleWrappedDomainObject) {
+        if(isWrapper(possibleWrappedDomainObject)) {
+            final WrappingObject wrappingObject = (WrappingObject) possibleWrappedDomainObject;
+            return (T) wrappingObject.__isis_wrapped();
+        } 
+        return possibleWrappedDomainObject;
+    }
+
+    // /////////////////////////////////////////////////////////////
+    // Listeners
+    // /////////////////////////////////////////////////////////////
+
+    @Override
+    public List<InteractionListener> getListeners() {
+        return listeners;
+    }
+
+    @Override
+    public boolean addInteractionListener(final InteractionListener listener) {
+        return listeners.add(listener);
+    }
+
+    @Override
+    public boolean removeInteractionListener(final InteractionListener listener) {
+        return listeners.remove(listener);
+    }
+
+    @Override
+    public void notifyListeners(final InteractionEvent interactionEvent) {
+        final InteractionEventDispatcher dispatcher = dispatchersByEventClass.get(interactionEvent.getClass());
+        if (dispatcher == null) {
+            throw new RuntimeException("Unknown InteractionEvent - register into dispatchers map");
+        }
+        dispatcher.dispatch(interactionEvent);
+    }
+
+    // /////////////////////////////////////////////////////////////
+    // Listeners
+    // /////////////////////////////////////////////////////////////
+
+    protected AuthenticationSessionProvider getAuthenticationSessionProvider() {
+        return authenticationSessionProvider;
+    }
+    @Programmatic
+    @Override
+    public void setAuthenticationSessionProvider(final AuthenticationSessionProvider authenticationSessionProvider) {
+        this.authenticationSessionProvider = authenticationSessionProvider;
+    }
+
+    protected AdapterManager getAdapterManager() {
+        return adapterManager;
+    }
+    @Programmatic
+    @Override
+    public void setAdapterManager(final AdapterManager adapterManager) {
+        this.adapterManager = adapterManager;
+    }
+
+    
+    protected SpecificationLoader getSpecificationLookup() {
+        return specificationLookup;
+    }
+    @Programmatic
+    @Override
+    public void setSpecificationLookup(final SpecificationLoader specificationLookup) {
+        this.specificationLookup = specificationLookup;
+    }
+
+    protected ObjectPersistor getObjectPersistor() {
+        return objectPersistor;
+    }
+    @Programmatic
+    @Override
+    public void setObjectPersistor(final ObjectPersistor objectPersistor) {
+        this.objectPersistor = objectPersistor;
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java
new file mode 100644
index 0000000..fd75b59
--- /dev/null
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java
@@ -0,0 +1,30 @@
+/*
+ *  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.wrapper;
+
+import org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForCglib;
+
+public class WrapperFactoryCglib extends WrapperFactoryAbstract  {
+
+    public WrapperFactoryCglib() {
+        super(new ProxyInstantiatorForCglib());
+    }
+
+}


[04/39] git commit: ISIS-839: fix Reflections discovery of @DomainService for jetty-console, remove "harmless" stack traces when running in jetty:run.

Posted by da...@apache.org.
ISIS-839: fix Reflections discovery of @DomainService for jetty-console, remove "harmless" stack traces when running in jetty:run.


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

Branch: refs/heads/master
Commit: 4e93d1b875caaa7de6102301bc4435e284e3b125
Parents: d2394b8
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 11:11:33 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 11:11:33 2014 +0100

----------------------------------------------------------------------
 .../ClassDiscoveryServiceUsingReflections.java  | 104 ++++++++++++++++++-
 .../ServicesInstallerFromAnnotation.java        |   3 +
 2 files changed, 102 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4e93d1b8/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java b/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
index a8b5df2..993319f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
@@ -18,12 +18,20 @@
  */
 package org.apache.isis.applib.services.classdiscovery;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
-
+import com.google.common.collect.Lists;
 import org.reflections.Reflections;
 import org.reflections.scanners.SubTypesScanner;
 import org.reflections.util.ClasspathHelper;
-
+import org.reflections.util.ConfigurationBuilder;
+import org.reflections.vfs.SystemDir;
+import org.reflections.vfs.Vfs;
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.annotation.DomainService;
 
@@ -42,13 +50,99 @@ public class ClassDiscoveryServiceUsingReflections
             extends AbstractService 
             implements ClassDiscoveryService {
 
+
     @Override
     public <T> Set<Class<? extends T>> findSubTypesOfClasses(Class<T> type) {
-        final Reflections reflections = new Reflections(
-                ClasspathHelper.forClassLoader(Thread.currentThread().getContextClassLoader()), 
-                ClasspathHelper.forClass(Object.class), 
+        List<Vfs.UrlType> urlTypes = getUrlTypes();
+        Vfs.setDefaultURLTypes(urlTypes);
+
+        ConfigurationBuilder configuration = ConfigurationBuilder.build(
+                ClasspathHelper.forClassLoader(Thread.currentThread().getContextClassLoader()),
+                ClasspathHelper.forClass(Object.class),
                 new SubTypesScanner(false));
+        // doesn't seem to do anything
+        // configuration = configuration.filterInputsBy(ignorePom());
+        final Reflections reflections = new Reflections(configuration);
         return reflections.getSubTypesOf(type);
     }
 
+    // //////////////////////////////////////
+
+    /**
+     * Has <tt>public</tt> visibility only so can be reused by other services (including Isis runtime itself).
+     */
+    public static List<Vfs.UrlType> getUrlTypes() {
+        final List<Vfs.UrlType> urlTypes = Lists.newArrayList();
+        urlTypes.add(new PomUrlType());
+        urlTypes.add(new JettyConsoleUrlType());
+        urlTypes.addAll(Arrays.asList(Vfs.DefaultUrlTypes.values()));
+        return urlTypes;
+    }
+
+    private static class PomUrlType implements Vfs.UrlType {
+        public boolean matches(URL url) {
+            final String protocol = url.getProtocol();
+            final String externalForm = url.toExternalForm();
+            return protocol.equals("file") && externalForm.endsWith(".pom");
+        }
+
+        public Vfs.Dir createDir(final URL url) throws Exception {
+            return null;
+        }
+    }
+
+    public static class JettyConsoleUrlType implements Vfs.UrlType {
+        public boolean matches(URL url) {
+            final String protocol = url.getProtocol();
+            final String externalForm = url.toExternalForm();
+            final boolean matches = protocol.equals("file") && externalForm.contains("jetty-console") && externalForm.contains("-any-") && externalForm.endsWith("webapp/WEB-INF/classes/");
+            return matches;
+        }
+
+        public Vfs.Dir createDir(final URL url) throws Exception {
+            return new SystemDir(getFile(url));
+        }
+    }
+
+    /**
+     * try to get {@link java.io.File} from url
+     *
+     * <p>
+     *     Copied from {@link org.reflections.vfs.Vfs} (not publicly accessible)
+     * </p>
+     */
+    static java.io.File getFile(URL url) {
+        java.io.File file;
+        String path;
+
+        try {
+            path = url.toURI().getSchemeSpecificPart();
+            if ((file = new java.io.File(path)).exists()) return file;
+        } catch (URISyntaxException e) {
+        }
+
+        try {
+            path = URLDecoder.decode(url.getPath(), "UTF-8");
+            if (path.contains(".jar!")) path = path.substring(0, path.lastIndexOf(".jar!") + ".jar".length());
+            if ((file = new java.io.File(path)).exists()) return file;
+
+        } catch (UnsupportedEncodingException e) {
+        }
+
+        try {
+            path = url.toExternalForm();
+            if (path.startsWith("jar:")) path = path.substring("jar:".length());
+            if (path.startsWith("file:")) path = path.substring("file:".length());
+            if (path.contains(".jar!")) path = path.substring(0, path.indexOf(".jar!") + ".jar".length());
+            if ((file = new java.io.File(path)).exists()) return file;
+
+            path = path.replace("%20", " ");
+            if ((file = new java.io.File(path)).exists()) return file;
+
+        } catch (Exception e) {
+        }
+
+        return null;
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/4e93d1b8/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
index 6e091f8..68c187b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
@@ -29,9 +29,11 @@ import com.google.common.base.*;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
 import org.reflections.Reflections;
+import org.reflections.vfs.Vfs;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
 import org.apache.isis.core.commons.config.InstallerAbstract;
 import org.apache.isis.core.runtime.system.DeploymentType;
 
@@ -182,6 +184,7 @@ public class ServicesInstallerFromAnnotation extends InstallerAbstract implement
         initIfRequired();
 
         for (final String packagePrefix : Iterables.transform(Splitter.on(",").split(packagePrefixes), trim())) {
+            Vfs.setDefaultURLTypes(ClassDiscoveryServiceUsingReflections.getUrlTypes());
             Reflections reflections = new Reflections(packagePrefix);
 
             final Iterable<Class<?>> classes = Iterables.filter(


[15/39] git commit: ISIS-825, ISIS-544: fix for auto-focus of BigDecimal, also for date fields.

Posted by da...@apache.org.
ISIS-825, ISIS-544: fix for auto-focus of BigDecimal, also for date fields.


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

Branch: refs/heads/master
Commit: 0e346e476294bc144d53525893bd89dc3577602b
Parents: f506213
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 06:24:44 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 18:18:15 2014 +0100

----------------------------------------------------------------------
 .../components/widgets/cssmenu/ActionLinkFactoryAbstract.java  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0e346e47/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
index 4b09951..945bd27 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
@@ -130,7 +130,11 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
                     final Component actionPanelFirstParam = actionPanel.visitChildren(new IVisitor<Component, Component>() {
                         @Override
                         public void component(Component object, IVisit<Component> visit) {
-                            if (object instanceof FormComponent) {
+                            if (object instanceof FormComponent &&
+                                !"scalarIfCompact".equals(object.getId()) &&
+                                object.getOutputMarkupId()) {
+                                // there are components for 'compact' and 'regular'; we want the 'regular' one
+                                // also double check that has outputMarkupId enabled (prereq for setting focus)
                                 visit.stop(object);
                             }
                         }


[21/39] git commit: [maven-release-plugin] prepare for next development iteration

Posted by da...@apache.org.
[maven-release-plugin] prepare for next development iteration


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

Branch: refs/heads/master
Commit: be6a42466c280f80d6d9026ab3ab8bc751ffbf39
Parents: 59f9b00
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 23:47:08 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 23:47:08 2014 +0100

----------------------------------------------------------------------
 core/applib/pom.xml                             |   2 +-
 core/bytecode-cglib/pom.xml                     |   2 +-
 core/bytecode-javassist/pom.xml                 |   4 +-
 core/integtestsupport/pom.xml                   |   2 +-
 core/log4j/pom.xml                              |   2 +-
 core/metamodel/pom.xml                          |   2 +-
 core/module-audit-jdo/pom.xml                   |   2 +-
 core/module-background/pom.xml                  |   2 +-
 core/module-command-jdo/pom.xml                 |   2 +-
 core/module-devutils/applib/pom.xml             |   2 +-
 core/module-devutils/impl/pom.xml               |   2 +-
 core/module-devutils/pom.xml                    |  10 +-
 core/module-publishing-jdo/pom.xml              |   2 +-
 .../module-publishingeventserializer-ro/pom.xml |   2 +-
 core/module-settings/applib/pom.xml             |   2 +-
 core/module-settings/impl-jdo/pom.xml           |   2 +-
 core/module-settings/pom.xml                    |  10 +-
 core/objectstore-inmemory/pom.xml               |   2 +-
 core/objectstore-jdo-datanucleus/pom.xml        |   2 +-
 core/objectstore-jdo-metamodel/pom.xml          |   2 +-
 core/pom.xml                                    | 114 +++++++++----------
 core/profilestore-inmemory/pom.xml              |   2 +-
 core/runtime/pom.xml                            |   2 +-
 core/security-noop/pom.xml                      |   2 +-
 core/security-shiro/pom.xml                     |   6 +-
 core/specsupport/pom.xml                        |   2 +-
 core/tck/pom.xml                                |   2 +-
 core/tck/tck-dom/pom.xml                        |   2 +-
 core/tck/tck-fixture/pom.xml                    |   2 +-
 core/tck/tck-viewer-restfulobjects/pom.xml      |   2 +-
 core/unittestsupport/pom.xml                    |   2 +-
 core/viewer-restfulobjects-applib/pom.xml       |   2 +-
 core/viewer-restfulobjects-rendering/pom.xml    |   2 +-
 core/viewer-restfulobjects-server/pom.xml       |   2 +-
 core/webserver/pom.xml                          |   2 +-
 core/wrapper/pom.xml                            |   2 +-
 36 files changed, 103 insertions(+), 103 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/applib/pom.xml b/core/applib/pom.xml
index 4e88b7d..fc1b23d 100644
--- a/core/applib/pom.xml
+++ b/core/applib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/bytecode-cglib/pom.xml
----------------------------------------------------------------------
diff --git a/core/bytecode-cglib/pom.xml b/core/bytecode-cglib/pom.xml
index dcca1bc..4c4eb6f 100644
--- a/core/bytecode-cglib/pom.xml
+++ b/core/bytecode-cglib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-		<version>1.6.0</version>
+		<version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-bytecode-cglib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/bytecode-javassist/pom.xml
----------------------------------------------------------------------
diff --git a/core/bytecode-javassist/pom.xml b/core/bytecode-javassist/pom.xml
index 4ed3221..9398006 100644
--- a/core/bytecode-javassist/pom.xml
+++ b/core/bytecode-javassist/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-bytecode-javassist</artifactId>
@@ -39,7 +39,7 @@
         <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/isis/trunk/runtimes/dflt/bytecode/javassist/</connection>
         <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/isis/trunk$/{relativeUrl}</developerConnection>
         <url>http://svn.apache.org/repos/asf/incubator/isis/trunk/runtimes/dflt/bytecode/javassist/</url>
-      <tag>isis-1.6.0-RC3</tag>
+      <tag>HEAD</tag>
   </scm>
 
     <!-- used in Site generation for relative references. -->

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/integtestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/integtestsupport/pom.xml b/core/integtestsupport/pom.xml
index 37f9397..943da21 100644
--- a/core/integtestsupport/pom.xml
+++ b/core/integtestsupport/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-integtestsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/log4j/pom.xml
----------------------------------------------------------------------
diff --git a/core/log4j/pom.xml b/core/log4j/pom.xml
index d32649e..ff14f31 100644
--- a/core/log4j/pom.xml
+++ b/core/log4j/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-log4j</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index c39e090..7d55d98 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-metamodel</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-audit-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-audit-jdo/pom.xml b/core/module-audit-jdo/pom.xml
index 1c00f3a..cebf10c 100644
--- a/core/module-audit-jdo/pom.xml
+++ b/core/module-audit-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-background/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-background/pom.xml b/core/module-background/pom.xml
index 45a9d7a..33ab617 100644
--- a/core/module-background/pom.xml
+++ b/core/module-background/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-command-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-command-jdo/pom.xml b/core/module-command-jdo/pom.xml
index 5b86151..199308b 100644
--- a/core/module-command-jdo/pom.xml
+++ b/core/module-command-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-devutils/applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-devutils/applib/pom.xml b/core/module-devutils/applib/pom.xml
index 825381b..4e8f8f4 100644
--- a/core/module-devutils/applib/pom.xml
+++ b/core/module-devutils/applib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-devutils</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-module-devutils-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-devutils/impl/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-devutils/impl/pom.xml b/core/module-devutils/impl/pom.xml
index badf0e9..6b3c460 100644
--- a/core/module-devutils/impl/pom.xml
+++ b/core/module-devutils/impl/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-devutils</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-module-devutils-impl</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-devutils/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-devutils/pom.xml b/core/module-devutils/pom.xml
index ad937cc..bae27b3 100644
--- a/core/module-devutils/pom.xml
+++ b/core/module-devutils/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>
@@ -48,12 +48,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -61,12 +61,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-publishing-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-publishing-jdo/pom.xml b/core/module-publishing-jdo/pom.xml
index da7f2d0..420125e 100644
--- a/core/module-publishing-jdo/pom.xml
+++ b/core/module-publishing-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-publishingeventserializer-ro/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-publishingeventserializer-ro/pom.xml b/core/module-publishingeventserializer-ro/pom.xml
index 7a209c8..b06d9ee 100644
--- a/core/module-publishingeventserializer-ro/pom.xml
+++ b/core/module-publishingeventserializer-ro/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-settings/applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-settings/applib/pom.xml b/core/module-settings/applib/pom.xml
index 805274d..9f586c5 100644
--- a/core/module-settings/applib/pom.xml
+++ b/core/module-settings/applib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-settings</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-module-settings-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-settings/impl-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-settings/impl-jdo/pom.xml b/core/module-settings/impl-jdo/pom.xml
index bbb4929..fbbb12a 100644
--- a/core/module-settings/impl-jdo/pom.xml
+++ b/core/module-settings/impl-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-settings</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-module-settings-impl-jdo</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/module-settings/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-settings/pom.xml b/core/module-settings/pom.xml
index 3d9416f..677f227 100644
--- a/core/module-settings/pom.xml
+++ b/core/module-settings/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>
@@ -48,12 +48,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -61,12 +61,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/objectstore-inmemory/pom.xml
----------------------------------------------------------------------
diff --git a/core/objectstore-inmemory/pom.xml b/core/objectstore-inmemory/pom.xml
index c27616d..be8f290 100644
--- a/core/objectstore-inmemory/pom.xml
+++ b/core/objectstore-inmemory/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-objectstore</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/objectstore-jdo-datanucleus/pom.xml
----------------------------------------------------------------------
diff --git a/core/objectstore-jdo-datanucleus/pom.xml b/core/objectstore-jdo-datanucleus/pom.xml
index e60dce2..651a221 100644
--- a/core/objectstore-jdo-datanucleus/pom.xml
+++ b/core/objectstore-jdo-datanucleus/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/objectstore-jdo-metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/core/objectstore-jdo-metamodel/pom.xml b/core/objectstore-jdo-metamodel/pom.xml
index 09bb762..0654bd5 100644
--- a/core/objectstore-jdo-metamodel/pom.xml
+++ b/core/objectstore-jdo-metamodel/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>isis-core-objectstore-jdo-metamodel</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index 44ed90e..eb9f5c4 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -21,7 +21,7 @@
 
     <groupId>org.apache.isis.core</groupId>
     <artifactId>isis</artifactId>
-    <version>1.6.0</version>
+    <version>1.7.0-SNAPSHOT</version>
     
     <packaging>pom</packaging>
 
@@ -153,7 +153,7 @@
         <connection>scm:git:http://git.apache.org/isis.git/core</connection>
         <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/isis.git/trunk/framework/</developerConnection>
         <url>git://git.apache.org/isis.git/core</url>
-      <tag>isis-1.6.0-RC3</tag>
+      <tag>HEAD</tag>
   </scm>
 
     <!-- used in Site generation for relative references. -->
@@ -1030,13 +1030,13 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-unittestsupport</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <!-- not scope=test, because referenced by some sql-tests-common under compile scope -->
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-unittestsupport</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1045,14 +1045,14 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>jar</type>
                 <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1061,7 +1061,7 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-log4j</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>jar</type>
                 <scope>compile</scope>
             </dependency>
@@ -1070,14 +1070,14 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-metamodel</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>jar</type>
                 <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-metamodel</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1086,52 +1086,52 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-runtime</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-runtime</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-wrapper</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
             <!-- bytecode components -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-bytecode-cglib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-bytecode-javassist</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
             <!-- webserver -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-webserver</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
             <!-- specsupport -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-specsupport</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
             <!-- integtestsupport -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-integtestsupport</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <!-- not scope=test, because referenced by some sql-tests-common under compile scope -->
             </dependency>
 
@@ -1139,36 +1139,36 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-metamodel</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-metamodel</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -1178,36 +1178,36 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-rendering</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-rendering</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-server</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-server</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1217,12 +1217,12 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-security</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-security-shiro</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
 
@@ -1230,7 +1230,7 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-profilestore</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
 
@@ -1238,22 +1238,22 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck-dom</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck-fixture</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck-viewer-restfulobjects</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
 
 
@@ -1262,48 +1262,48 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-audit-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-audit-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-background</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-background</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-command-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-command-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -1315,55 +1315,55 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishing-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishing-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishingeventserializer-ro</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishingeventserializer-ro</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <!--
             declared as a convenience; alternative is for the domain application to
@@ -1372,24 +1372,24 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/profilestore-inmemory/pom.xml
----------------------------------------------------------------------
diff --git a/core/profilestore-inmemory/pom.xml b/core/profilestore-inmemory/pom.xml
index dccba79..c152a57 100644
--- a/core/profilestore-inmemory/pom.xml
+++ b/core/profilestore-inmemory/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-profilestore</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/runtime/pom.xml
----------------------------------------------------------------------
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index 24a0a0d..62a7872 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-runtime</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/security-noop/pom.xml
----------------------------------------------------------------------
diff --git a/core/security-noop/pom.xml b/core/security-noop/pom.xml
index 9a3afa9..45e0963 100644
--- a/core/security-noop/pom.xml
+++ b/core/security-noop/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-security</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/security-shiro/pom.xml
----------------------------------------------------------------------
diff --git a/core/security-shiro/pom.xml b/core/security-shiro/pom.xml
index 90cdb60..fa25297 100644
--- a/core/security-shiro/pom.xml
+++ b/core/security-shiro/pom.xml
@@ -23,12 +23,12 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<groupId>org.apache.isis.core</groupId>
 	<artifactId>isis-core-security-shiro</artifactId>
-    <version>1.6.0</version>
+    <version>1.7.0-SNAPSHOT</version>
 
 	<name>Isis Shiro Security</name>
 
@@ -102,7 +102,7 @@
 			<dependency>
 			    <groupId>org.apache.isis.core</groupId>
 			    <artifactId>isis-core-security-shiro</artifactId>
-				<version>1.6.0</version>
+				<version>1.7.0-SNAPSHOT</version>
 			</dependency>
     	</dependencies>
     </dependencyManagement>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/specsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/specsupport/pom.xml b/core/specsupport/pom.xml
index 03d38b6..08c8577 100644
--- a/core/specsupport/pom.xml
+++ b/core/specsupport/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-specsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/tck/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/pom.xml b/core/tck/pom.xml
index 08e8f63..a0c97f1 100644
--- a/core/tck/pom.xml
+++ b/core/tck/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-tck</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/tck/tck-dom/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/tck-dom/pom.xml b/core/tck/tck-dom/pom.xml
index d5b49ac..9eda65d 100644
--- a/core/tck/tck-dom/pom.xml
+++ b/core/tck/tck-dom/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
     	<groupId>org.apache.isis.core</groupId>
     	<artifactId>isis-core-tck</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-tck-dom</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/tck/tck-fixture/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/tck-fixture/pom.xml b/core/tck/tck-fixture/pom.xml
index ed48392..1b07b55 100644
--- a/core/tck/tck-fixture/pom.xml
+++ b/core/tck/tck-fixture/pom.xml
@@ -22,7 +22,7 @@
     <parent>
     	<groupId>org.apache.isis.core</groupId>
         <artifactId>isis-core-tck</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>isis-core-tck-fixture</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/tck/tck-viewer-restfulobjects/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/pom.xml b/core/tck/tck-viewer-restfulobjects/pom.xml
index 3c8e182..2023b3b 100644
--- a/core/tck/tck-viewer-restfulobjects/pom.xml
+++ b/core/tck/tck-viewer-restfulobjects/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis-core-tck</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-tck-viewer-restfulobjects</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/unittestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/unittestsupport/pom.xml b/core/unittestsupport/pom.xml
index eedd5d2..d860a23 100644
--- a/core/unittestsupport/pom.xml
+++ b/core/unittestsupport/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-unittestsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/viewer-restfulobjects-applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/pom.xml b/core/viewer-restfulobjects-applib/pom.xml
index ff5d017..a8cd530 100644
--- a/core/viewer-restfulobjects-applib/pom.xml
+++ b/core/viewer-restfulobjects-applib/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>isis-core-viewer-restfulobjects-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/viewer-restfulobjects-rendering/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/pom.xml b/core/viewer-restfulobjects-rendering/pom.xml
index 0c072da..5b3449e 100644
--- a/core/viewer-restfulobjects-rendering/pom.xml
+++ b/core/viewer-restfulobjects-rendering/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-viewer-restfulobjects-rendering</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/viewer-restfulobjects-server/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/pom.xml b/core/viewer-restfulobjects-server/pom.xml
index 9e568e7..3d20560 100644
--- a/core/viewer-restfulobjects-server/pom.xml
+++ b/core/viewer-restfulobjects-server/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>isis-core-viewer-restfulobjects-server</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/webserver/pom.xml
----------------------------------------------------------------------
diff --git a/core/webserver/pom.xml b/core/webserver/pom.xml
index 726edb8..36b86c0 100644
--- a/core/webserver/pom.xml
+++ b/core/webserver/pom.xml
@@ -23,7 +23,7 @@
     <parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>isis-core-webserver</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/be6a4246/core/wrapper/pom.xml
----------------------------------------------------------------------
diff --git a/core/wrapper/pom.xml b/core/wrapper/pom.xml
index d3bfe3a..565b4d0 100644
--- a/core/wrapper/pom.xml
+++ b/core/wrapper/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-core-wrapper</artifactId>


[23/39] git commit: [maven-release-plugin] prepare release isis-viewer-wicket-1.6.0-RC3

Posted by da...@apache.org.
[maven-release-plugin] prepare release isis-viewer-wicket-1.6.0-RC3


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

Branch: refs/heads/master
Commit: 5a283301fd12ba712a956cb65bf23fb679d7507c
Parents: 61434a5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 07:44:14 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 07:44:14 2014 +0100

----------------------------------------------------------------------
 component/viewer/wicket/applib/pom.xml |  2 +-
 component/viewer/wicket/impl/pom.xml   |  2 +-
 component/viewer/wicket/model/pom.xml  |  2 +-
 component/viewer/wicket/pom.xml        | 20 ++++++++++++--------
 component/viewer/wicket/tck/pom.xml    |  8 ++++++--
 component/viewer/wicket/ui/pom.xml     |  2 +-
 6 files changed, 22 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/5a283301/component/viewer/wicket/applib/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/applib/pom.xml b/component/viewer/wicket/applib/pom.xml
index 3377218..abbaa67 100644
--- a/component/viewer/wicket/applib/pom.xml
+++ b/component/viewer/wicket/applib/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-viewer-wicket-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/5a283301/component/viewer/wicket/impl/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/pom.xml b/component/viewer/wicket/impl/pom.xml
index 1d4c073..1f4917f 100644
--- a/component/viewer/wicket/impl/pom.xml
+++ b/component/viewer/wicket/impl/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<name>Isis Wicket Viewer Implementation</name>

http://git-wip-us.apache.org/repos/asf/isis/blob/5a283301/component/viewer/wicket/model/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/pom.xml b/component/viewer/wicket/model/pom.xml
index 5203c95..0f896e3 100644
--- a/component/viewer/wicket/model/pom.xml
+++ b/component/viewer/wicket/model/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-viewer-wicket-model</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/5a283301/component/viewer/wicket/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/pom.xml b/component/viewer/wicket/pom.xml
index 318aeb6..4100b7f 100644
--- a/component/viewer/wicket/pom.xml
+++ b/component/viewer/wicket/pom.xml
@@ -30,7 +30,7 @@
 
 	<groupId>org.apache.isis.viewer</groupId>
 	<artifactId>isis-viewer-wicket</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.6.0</version>
 
 	<name>Isis Wicket Viewer</name>
 
@@ -101,41 +101,41 @@
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-model</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-model</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 				<scope>test</scope>
 				<type>test-jar</type>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-ui</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-ui</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 				<scope>test</scope>
 				<type>test-jar</type>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-impl</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-impl</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
 				<scope>test</scope>
 				<type>test-jar</type>
 			</dependency>
@@ -321,4 +321,8 @@
 
 		</dependencies>
 	</dependencyManagement>
+
+  <scm>
+    <tag>isis-viewer-wicket-1.6.0-RC3</tag>
+  </scm>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/5a283301/component/viewer/wicket/tck/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/tck/pom.xml b/component/viewer/wicket/tck/pom.xml
index bf4b3f2..3f58e01 100644
--- a/component/viewer/wicket/tck/pom.xml
+++ b/component/viewer/wicket/tck/pom.xml
@@ -29,13 +29,13 @@
 
     <groupId>org.apache.isis.viewer</groupId>
 	<artifactId>isis-viewer-wicket-tck</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.6.0</version>
 
 	<name>Isis Wicket Viewer TCK tests</name>
 
 
 	<properties>
-        <isis-viewer-wicket.version>1.6.0-SNAPSHOT</isis-viewer-wicket.version>
+        <isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
 		<siteBaseDir>..</siteBaseDir>
 		<relativeUrl>wicket-tck/</relativeUrl>
 		<!-- until someone comes up with a better solution -->
@@ -114,4 +114,8 @@
         </dependency>
 
 	</dependencies>
+
+  <scm>
+    <tag>isis-viewer-wicket-1.6.0-RC3</tag>
+  </scm>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/5a283301/component/viewer/wicket/ui/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/pom.xml b/component/viewer/wicket/ui/pom.xml
index b0d5c01..2e96c9c 100644
--- a/component/viewer/wicket/ui/pom.xml
+++ b/component/viewer/wicket/ui/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-viewer-wicket-ui</artifactId>


[10/39] ISIS-833: reverting isis-module-wrapper -> isis-core-wrapper.

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
new file mode 100644
index 0000000..a3609b8
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
@@ -0,0 +1,376 @@
+/*
+ *  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.progmodel.wrapper;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import org.apache.isis.applib.services.wrapper.DisabledException;
+import org.apache.isis.applib.services.wrapper.HiddenException;
+import org.apache.isis.applib.services.wrapper.InvalidException;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.adapter.ResolveState;
+import org.apache.isis.core.metamodel.adapter.ServicesProvider;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
+import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
+import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl;
+import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
+import org.apache.isis.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod;
+import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethod;
+import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaClearMethod;
+import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacetViaSetterMethod;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaModifyMethod;
+import org.apache.isis.core.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethod;
+import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
+import org.apache.isis.core.tck.dom.claimapp.employees.Employee;
+import org.apache.isis.core.tck.dom.claimapp.employees.EmployeeRepository;
+import org.apache.isis.core.tck.dom.claimapp.employees.EmployeeRepositoryImpl;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
+
+public abstract class WrapperFactoryAbstractTest_wrappedObject {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+    
+    @Mock
+    private AdapterManager mockAdapterManager;
+    @Mock
+    private AuthenticationSessionProvider mockAuthenticationSessionProvider;
+    @Mock
+    private ObjectPersistor mockObjectPersistor;
+    @Mock
+    private QuerySubmitter mockQuerySubmitter;
+    @Mock
+    private ServicesProvider mockServicesProvider;
+    @Mock
+    private SpecificationLoader mockSpecificationLookup;
+
+    private ObjectMemberContext objectMemberContext;
+
+    @Mock
+    private ObjectSpecificationDefault mockEmployeeSpec;
+    private ObjectMember employeeNameMember;
+
+    @Mock
+    private ObjectSpecificationDefault mockStringSpec;
+
+    @Mock
+    private ObjectAdapter mockEmployeeAdapter;
+
+    @Mock
+    private ObjectAdapter mockAdapterForStringSmith;
+    @Mock
+    private ObjectAdapter mockAdapterForStringJones;
+
+    private final SimpleSession session = new SimpleSession("tester", Collections.<String>emptyList());
+
+    private EmployeeRepository employeeRepository;
+
+    private Employee employeeDO;
+    private Employee employeeWO;
+
+    private WrapperFactoryAbstract wrapperFactory;
+
+
+    @Before
+    public void setUp() {
+
+        objectMemberContext = new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, new CollectionTypeRegistryDefault(), mockServicesProvider);
+        
+        employeeRepository = new EmployeeRepositoryImpl();
+
+        employeeDO = new Employee();
+        employeeDO.setName("Smith");
+        employeeDO.setEmployeeRepository(employeeRepository); 
+
+        wrapperFactory = createWrapperFactory();
+        wrapperFactory.setAdapterManager(mockAdapterManager);
+        wrapperFactory.setAuthenticationSessionProvider(mockAuthenticationSessionProvider);
+        wrapperFactory.setObjectPersistor(mockObjectPersistor);
+        wrapperFactory.setSpecificationLookup(mockSpecificationLookup);
+
+        context.checking(new Expectations() {
+            {
+                allowing(mockSpecificationLookup).loadSpecification(String.class);
+                will(returnValue(mockStringSpec));
+
+                allowing(mockStringSpec).getShortIdentifier();
+                will(returnValue(String.class.getName()));
+            }
+        });
+        
+        
+        final Method employeeGetNameMethod = methodOf(Employee.class, "getName");
+        final Method employeeSetNameMethod = methodOf(Employee.class, "setName", String.class);
+        final Method employeeModifyNameMethod = methodOf(Employee.class, "modifyName", String.class);
+        final Method employeeHideNameMethod = methodOf(Employee.class, "hideName");
+        final Method employeeDisableNameMethod = methodOf(Employee.class, "disableName");
+        final Method employeeValidateNameMethod = methodOf(Employee.class, "validateName", String.class);
+        final Method employeeClearNameMethod = methodOf(Employee.class, "clearName");
+        employeeNameMember = new OneToOneAssociationImpl(
+                facetedMethodForProperty(
+                        employeeSetNameMethod, employeeGetNameMethod, employeeModifyNameMethod, employeeClearNameMethod, employeeHideNameMethod, employeeDisableNameMethod, employeeValidateNameMethod), objectMemberContext);
+        
+        context.checking(new Expectations() {
+            {
+                allowing(mockAuthenticationSessionProvider).getAuthenticationSession();
+                will(returnValue(session));
+
+                allowing(mockAdapterManager).getAdapterFor(employeeDO);
+                will(returnValue(mockEmployeeAdapter));
+
+                allowing(mockEmployeeAdapter).getSpecification();
+                will(returnValue(mockEmployeeSpec));
+
+                allowing(mockSpecificationLookup).loadSpecification(Employee.class);
+                will(returnValue(mockEmployeeSpec));
+
+                allowing(mockEmployeeSpec).getMember(methodOf(Employee.class, "getEmployeeRepository"));
+                will(returnValue(null));
+
+                allowing(mockEmployeeSpec).getMember(employeeGetNameMethod);
+                will(returnValue(employeeNameMember));
+
+                allowing(mockEmployeeSpec).getMember(employeeSetNameMethod);
+                will(returnValue(employeeNameMember));
+
+                allowing(mockEmployeeSpec).getMember(employeeModifyNameMethod);
+                will(returnValue(employeeNameMember));
+                
+                allowing(mockEmployeeSpec).getMember(employeeClearNameMethod);
+                will(returnValue(employeeNameMember));
+                
+                allowing(mockEmployeeAdapter).getObject();
+                will(returnValue(employeeDO));
+                
+                allowing(mockEmployeeAdapter).representsPersistent();
+                will(returnValue(true));
+            }
+        });
+
+
+        employeeWO = wrapperFactory.wrap(employeeDO);
+    }
+
+    /**
+     * Mandatory hook.
+     */
+    protected abstract WrapperFactoryAbstract createWrapperFactory();
+
+    @Test
+    public void shouldWrapDomainObject() {
+        // then
+        assertThat(employeeWO, is(notNullValue()));
+    }
+
+    @Test
+    public void shouldBeAbleToInjectIntoDomainObjects() {
+        assertThat(employeeDO.getEmployeeRepository(), is(notNullValue()));
+    }
+
+    @Test
+    public void cannotAccessMethodNotCorrespondingToMember() {
+
+        expectedException.expectMessage("Method 'getEmployeeRepository' being invoked does not correspond to any of the object's fields or actions.");
+        
+        // then
+        assertThat(employeeWO.getEmployeeRepository(), is(notNullValue()));
+    }
+    
+    @Test
+    public void shouldBeAbleToReadVisibleProperty() {
+
+        allowingEmployeeHasSmithAdapter();
+        
+
+        // then
+        assertThat(employeeWO.getName(), is(employeeDO.getName()));
+    }
+
+    @Test
+    public void shouldNotBeAbleToViewHiddenProperty() {
+
+        expectedException.expect(HiddenException.class);
+
+        allowingEmployeeHasSmithAdapter();
+
+        // given
+        employeeDO.whetherHideName = true;
+        // when
+        employeeWO.getName();
+        // then should throw exception
+    }
+
+    @Test
+    public void shouldBeAbleToModifyEnabledPropertyUsingSetter() {
+
+        allowingJonesStringValueAdapter();
+
+        context.checking(new Expectations() {
+            {
+
+                oneOf(mockAdapterManager).adapterFor("Jones", mockEmployeeAdapter);
+                will(returnValue(mockAdapterForStringJones));
+            }
+        });
+
+        // when
+        employeeWO.setName("Jones");
+        // then
+        assertThat(employeeDO.getName(), is("Jones"));
+        assertThat(employeeWO.getName(), is(employeeDO.getName()));
+    }
+
+    @Test
+    public void shouldNotBeAbleToModifyDisabledProperty() {
+
+        expectedException.expect(DisabledException.class);
+
+        // given
+        employeeDO.reasonDisableName = "sorry, no change allowed";
+        // when
+        employeeWO.setName("Jones");
+        // then should throw exception
+    }
+
+    @Test
+    public void shouldNotBeAbleToModifyPropertyUsingModify() {
+
+        allowingJonesStringValueAdapter();
+
+        expectedException.expect(UnsupportedOperationException.class);
+
+        // when
+        employeeWO.modifyName("Jones");
+        // then should throw exception
+    }
+
+    @Test
+    public void shouldNotBeAbleToModifyPropertyUsingClear() {
+
+        expectedException.expect(UnsupportedOperationException.class);
+
+        // when
+        employeeWO.clearName();
+        // then should throw exception
+    }
+
+    @Test
+    public void shouldNotBeAbleToModifyPropertyIfInvalid() {
+
+        allowingJonesStringValueAdapter();
+
+        expectedException.expect(InvalidException.class);
+
+        // given
+        employeeDO.reasonValidateName = "sorry, invalid data";
+        // when
+        employeeWO.setName("Jones");
+        // then should throw exception
+    }
+
+    
+    // //////////////////////////////////////
+
+    private static FacetedMethod facetedMethodForProperty(
+            Method init, Method accessor, Method modify, Method clear, Method hide, Method disable, Method validate) {
+        FacetedMethod facetedMethod = FacetedMethod.createForProperty(accessor.getDeclaringClass(), accessor);
+        FacetUtil.addFacet(new PropertyAccessorFacetViaAccessor(accessor, facetedMethod));
+        FacetUtil.addFacet(new PropertyInitializationFacetViaSetterMethod(init, facetedMethod));
+        FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modify, facetedMethod));
+        FacetUtil.addFacet(new PropertyClearFacetViaClearMethod(clear, facetedMethod));
+        FacetUtil.addFacet(new HideForContextFacetViaMethod(hide, facetedMethod));
+        FacetUtil.addFacet(new DisableForContextFacetViaMethod(disable, facetedMethod));
+        FacetUtil.addFacet(new PropertyValidateFacetViaMethod(validate, facetedMethod));
+        FacetUtil.addFacet(new NamedFacetInferred(accessor.getName(), facetedMethod));
+        return facetedMethod;
+    }
+
+    private static Method methodOf(Class<?> cls, String methodName) {
+        return methodOf(cls, methodName, new Class<?>[]{});
+    }
+
+    private static Method methodOf(Class<?> cls, String methodName, Class<?>... args) {
+        try {
+            return cls.getMethod(methodName, args);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    // //////////////////////////////////////
+    
+    private void allowingEmployeeHasSmithAdapter() {
+        context.checking(new Expectations() {
+            {
+                allowing(mockAdapterManager).adapterFor("Smith", mockEmployeeAdapter);
+                will(returnValue(mockAdapterForStringSmith));
+
+                allowing(mockAdapterForStringSmith).getObject();
+                will(returnValue("Smith"));
+            }
+        });
+    }
+
+    private void allowingJonesStringValueAdapter() {
+        context.checking(new Expectations() {
+            {
+                allowing(mockAdapterManager).adapterFor("Jones");
+                will(returnValue(mockAdapterForStringJones));
+                
+                allowing(mockAdapterForStringJones).getObject();
+                will(returnValue("Jones"));
+                
+                allowing(mockAdapterForStringJones).isTransient();
+                will(returnValue(ResolveState.VALUE.isTransient()));
+            }
+        });
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
new file mode 100644
index 0000000..e9d1adb
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject_transient.java
@@ -0,0 +1,257 @@
+/*
+ *  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.progmodel.wrapper;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.events.PropertyModifyEvent;
+import org.apache.isis.applib.events.PropertyUsabilityEvent;
+import org.apache.isis.applib.events.PropertyVisibilityEvent;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.services.wrapper.DisabledException;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.Allow;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionResult;
+import org.apache.isis.core.metamodel.consent.Veto;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAlwaysEverywhere;
+import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod;
+import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
+import org.apache.isis.core.tck.dom.claimapp.employees.Employee;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
+
+/**
+ * Contract test.
+ */
+public abstract class WrapperFactoryAbstractTest_wrappedObject_transient {
+
+    @Rule
+    public final JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    private AdapterManager mockAdapterManager;
+    @Mock
+    private AuthenticationSessionProvider mockAuthenticationSessionProvider;
+    @Mock
+    private ObjectPersistor mockObjectPersistor;
+    @Mock
+    private SpecificationLoader mockSpecificationLookup;
+
+    private Employee employeeDO;
+    @Mock
+    private ObjectAdapter mockEmployeeAdapter;
+    @Mock
+    private ObjectSpecificationDefault mockEmployeeSpec;
+    @Mock
+    private OneToOneAssociation mockPasswordMember;
+    @Mock
+    private Identifier mockPasswordIdentifier;
+
+    @Mock
+    protected ObjectAdapter mockPasswordAdapter;
+    
+    private final String passwordValue = "12345678";
+
+    private final SimpleSession session = new SimpleSession("tester", Collections.<String>emptyList());
+
+    private List<Facet> facets;
+    private Method getPasswordMethod;
+    private Method setPasswordMethod;
+
+    private WrapperFactoryAbstract wrapperFactory;
+    private Employee employeeWO;
+
+
+    @Before
+    public void setUp() throws Exception {
+
+        employeeDO = new Employee();
+        employeeDO.setName("Smith");
+        
+        getPasswordMethod = Employee.class.getMethod("getPassword");
+        setPasswordMethod = Employee.class.getMethod("setPassword", String.class);
+
+        wrapperFactory = createWrapperFactory();
+        wrapperFactory.setAdapterManager(mockAdapterManager);
+        wrapperFactory.setAuthenticationSessionProvider(mockAuthenticationSessionProvider);
+        wrapperFactory.setObjectPersistor(mockObjectPersistor);
+        wrapperFactory.setSpecificationLookup(mockSpecificationLookup);
+        
+        context.checking(new Expectations() {
+            {
+                allowing(mockAdapterManager).getAdapterFor(employeeDO);
+                will(returnValue(mockEmployeeAdapter));
+
+                allowing(mockAdapterManager).adapterFor(passwordValue);
+                will(returnValue(mockPasswordAdapter));
+
+                allowing(mockEmployeeAdapter).getSpecification();
+                will(returnValue(mockEmployeeSpec));
+
+                allowing(mockEmployeeAdapter).getObject();
+                will(returnValue(employeeDO));
+
+                allowing(mockPasswordAdapter).getObject();
+                will(returnValue(passwordValue));
+
+                allowing(mockPasswordMember).getIdentifier();
+                will(returnValue(mockPasswordIdentifier));
+
+                allowing(mockSpecificationLookup).loadSpecification(Employee.class);
+                will(returnValue(mockEmployeeSpec));
+                
+                allowing(mockEmployeeSpec).getMember(with(setPasswordMethod));
+                will(returnValue(mockPasswordMember));
+
+                allowing(mockEmployeeSpec).getMember(with(getPasswordMethod));
+                will(returnValue(mockPasswordMember));
+
+                allowing(mockPasswordMember).getName();
+                will(returnValue("password"));
+
+                allowing(mockAuthenticationSessionProvider).getAuthenticationSession();
+                will(returnValue(session));
+                
+                allowing(mockPasswordMember).isOneToOneAssociation();
+                will(returnValue(true));
+
+                allowing(mockPasswordMember).isOneToManyAssociation();
+                will(returnValue(false));
+            }
+        });
+
+        employeeWO = wrapperFactory.wrap(employeeDO);
+    }
+
+    /**
+     * Mandatory hook.
+     */
+    protected abstract WrapperFactoryAbstract createWrapperFactory();
+
+    @Test(expected = DisabledException.class)
+    public void shouldNotBeAbleToModifyProperty() {
+
+        // given
+        final DisabledFacet disabledFacet = new DisabledFacetAlwaysEverywhere(mockPasswordMember);
+        facets = Arrays.asList((Facet)disabledFacet, new PropertySetterFacetViaSetterMethod(setPasswordMethod, mockPasswordMember));
+
+        final Consent visibilityConsent = new Allow(new InteractionResult(new PropertyVisibilityEvent(employeeDO, null)));
+
+        final InteractionResult usabilityInteractionResult = new InteractionResult(new PropertyUsabilityEvent(employeeDO, null));
+        usabilityInteractionResult.advise("disabled", disabledFacet);
+        final Consent usabilityConsent = new Veto(usabilityInteractionResult);
+
+        context.checking(new Expectations() {
+            {
+                allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
+                will(returnValue(facets));
+                
+                allowing(mockPasswordMember).isVisible(session, mockEmployeeAdapter, Where.ANYWHERE);
+                will(returnValue(visibilityConsent));
+                
+                allowing(mockPasswordMember).isUsable(session, mockEmployeeAdapter, Where.ANYWHERE);
+                will(returnValue(usabilityConsent));
+            }
+        });
+        
+        // when
+        employeeWO.setPassword(passwordValue);
+        
+        // then should throw exception
+    }
+
+    @Ignore("TODO - reinstate or replace with integration tests")
+    @Test
+    public void canModifyProperty() {
+        // given
+
+        final Consent visibilityConsent = new Allow(new InteractionResult(new PropertyVisibilityEvent(employeeDO, mockPasswordIdentifier)));
+        final Consent usabilityConsent = new Allow(new InteractionResult(new PropertyUsabilityEvent(employeeDO, mockPasswordIdentifier)));
+        final Consent validityConsent = new Allow(new InteractionResult(new PropertyModifyEvent(employeeDO, mockPasswordIdentifier, passwordValue)));
+
+        context.checking(new Expectations() {
+            {
+                allowing(mockPasswordMember).isVisible(session, mockEmployeeAdapter, Where.ANYWHERE);
+                will(returnValue(visibilityConsent));
+                
+                allowing(mockPasswordMember).isUsable(session, mockEmployeeAdapter, Where.ANYWHERE);
+                will(returnValue(usabilityConsent));
+                
+                allowing(mockPasswordMember).isAssociationValid(mockEmployeeAdapter, mockPasswordAdapter);
+                will(returnValue(validityConsent));
+            }
+        });
+
+        facets = Arrays.asList((Facet)new PropertySetterFacetViaSetterMethod(setPasswordMethod, mockPasswordMember));
+        context.checking(new Expectations() {
+            {
+                allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
+                will(returnValue(facets));
+
+                oneOf(mockPasswordMember).set(mockEmployeeAdapter, mockPasswordAdapter);
+            }
+        });
+
+        // when
+        employeeWO.setPassword(passwordValue);
+
+
+        // and given
+        facets = Arrays.asList((Facet)new PropertyAccessorFacetViaAccessor(getPasswordMethod, mockPasswordMember));
+        context.checking(new Expectations() {
+            {
+                allowing(mockPasswordMember).getFacets(with(any(Filter.class)));
+                will(returnValue(facets));
+                
+                oneOf(mockPasswordMember).get(mockEmployeeAdapter);
+                will(returnValue(mockPasswordAdapter));
+            }
+        });
+
+        // then be allowed
+        assertThat(employeeWO.getPassword(), is(passwordValue));
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java
new file mode 100644
index 0000000..b867968
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.progmodel.wrapper;
+
+import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
+import org.apache.isis.core.wrapper.WrapperFactoryCglib;
+
+public class WrapperFactoryCglibTest_wrappedObject extends WrapperFactoryAbstractTest_wrappedObject {
+
+    @Override
+    protected WrapperFactoryAbstract createWrapperFactory() {
+        return new WrapperFactoryCglib();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java
new file mode 100644
index 0000000..05dfdec
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryCglibTest_wrappedObject_transient.java
@@ -0,0 +1,34 @@
+/*
+ *  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.progmodel.wrapper;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
+import org.apache.isis.core.wrapper.WrapperFactoryCglib;
+
+public class WrapperFactoryCglibTest_wrappedObject_transient extends WrapperFactoryAbstractTest_wrappedObject_transient {
+
+    @Override
+    protected WrapperFactoryAbstract createWrapperFactory() {
+        return new WrapperFactoryCglib();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java
new file mode 100644
index 0000000..b7ce494
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.progmodel.wrapper;
+
+import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
+import org.apache.isis.core.wrapper.WrapperFactoryJavassist;
+
+public class WrapperFactoryJavassistTest_wrappedObject extends WrapperFactoryAbstractTest_wrappedObject {
+
+    @Override
+    protected WrapperFactoryAbstract createWrapperFactory() {
+        return new WrapperFactoryJavassist();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java
new file mode 100644
index 0000000..c613348
--- /dev/null
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryJavassistTest_wrappedObject_transient.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.progmodel.wrapper;
+
+import org.apache.isis.core.wrapper.WrapperFactoryAbstract;
+import org.apache.isis.core.wrapper.WrapperFactoryJavassist;
+
+public class WrapperFactoryJavassistTest_wrappedObject_transient extends WrapperFactoryAbstractTest_wrappedObject_transient {
+
+    @Override
+    protected WrapperFactoryAbstract createWrapperFactory() {
+        return new WrapperFactoryJavassist();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/example/application/simpleapp/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/pom.xml b/example/application/simpleapp/integtests/pom.xml
index 4ca6936..d5d4978 100644
--- a/example/application/simpleapp/integtests/pom.xml
+++ b/example/application/simpleapp/integtests/pom.xml
@@ -108,8 +108,8 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.isis.module</groupId>
-            <artifactId>isis-module-wrapper</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-wrapper</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.isis.core</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/example/application/simpleapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/pom.xml b/example/application/simpleapp/webapp/pom.xml
index 7ec84d5..22c8442 100644
--- a/example/application/simpleapp/webapp/pom.xml
+++ b/example/application/simpleapp/webapp/pom.xml
@@ -185,8 +185,8 @@
             <artifactId>isis-core-runtime</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.module</groupId>
-            <artifactId>isis-module-wrapper</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-wrapper</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.isis.core</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/example/application/todoapp/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/integtests/pom.xml b/example/application/todoapp/integtests/pom.xml
index 909d022..fd2284b 100644
--- a/example/application/todoapp/integtests/pom.xml
+++ b/example/application/todoapp/integtests/pom.xml
@@ -108,8 +108,8 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.isis.module</groupId>
-            <artifactId>isis-module-wrapper</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-wrapper</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.isis.core</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/example/application/todoapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/pom.xml b/example/application/todoapp/webapp/pom.xml
index b217a23..1230973 100644
--- a/example/application/todoapp/webapp/pom.xml
+++ b/example/application/todoapp/webapp/pom.xml
@@ -185,8 +185,8 @@
             <artifactId>isis-core-runtime</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.module</groupId>
-            <artifactId>isis-module-wrapper</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-wrapper</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.isis.core</groupId>


[18/39] git commit: ISIS-839: reinstating some material that was pruned from the about/index.html

Posted by da...@apache.org.
ISIS-839: reinstating some material that was pruned from the about/index.html

... specifically the links to navigate to the app itself (!).

Also using HTML encoded chars to avoid accidental replacement when archetype is created from this project.


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

Branch: refs/heads/master
Commit: 24aeeba4ef29a1b72633e53f3ba796b611593547
Parents: a2c8b57
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 08:25:46 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 18:21:39 2014 +0100

----------------------------------------------------------------------
 .../src/main/resources/webapp/welcome.html      |  6 +-
 .../webapp/src/main/webapp/about/index.html     | 41 ++++++++---
 .../src/main/resources/webapp/welcome.html      |  4 +-
 .../webapp/src/main/webapp/about/index.html     | 76 +++++++++++++-------
 4 files changed, 87 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/24aeeba4/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html b/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
index fdfd6dd..49cfbcd 100644
--- a/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
+++ b/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
@@ -23,12 +23,12 @@
     <br/>
     <br/>
     This app has been generated using Isis' 
-    <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype,
+    <a href="http://isis.apache.org/intro/getting-started/simple%61pp-archetype.html" target="_blank">SimpleApp</a> archetype,
     which configures Isis' most commonly used components as part of a very simple and purposefully minimal application.
     <br/>
     <br/>
-    The app itself consists of a single domain class, <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank">SimpleObject</a>,
-    along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank">SimpleObjects</a>.
+    The app itself consists of a single domain class, <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank">SimpleObject</a>,
+    along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank">SimpleObjects</a>.
     <br/>
     <br/>
     For more details, see the <a href="http://isis.apache.org/documentation.html" target="_blank">Isis website</a>.

http://git-wip-us.apache.org/repos/asf/isis/blob/24aeeba4/example/application/simpleapp/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/about/index.html b/example/application/simpleapp/webapp/src/main/webapp/about/index.html
index 3b9ef8f..8d32f47 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/about/index.html
+++ b/example/application/simpleapp/webapp/src/main/webapp/about/index.html
@@ -59,23 +59,44 @@ th, td {
             <p>
             <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a framework to let you rapidly develop
             domain-driven apps in Java.  This app has been generated using Isis' 
-            <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype,
+            <a href="http://isis.apache.org/intro/getting-started/simple%61pp-archetype.html" target="_blank">SimpleApp</a> archetype,
             which configures Isis to run a very simple and purposefully minimal application.
             
             <p>
             The app itself consists of a single domain class, 
-            <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank"><tt>SimpleObject</tt></a>,
-            along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java" target="_blank"><tt>SimpleObjects</tt></a>.
+            <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank"><tt>SimpleObject</tt></a>,
+            along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObjects.java" target="_blank"><tt>SimpleObjects</tt></a>.
             </p>
-            
-            <p>
-            Alternatively, if you'd like to start from a richer starting point, you might want to use the
-            <a href="http://isis.apache.org/intro/getting-started/todoapp-archetype.html" target="_blank">TodoApp</a> archetype.
-            </p>
-            
+
+            <p>To access the app:</p>
+            <ul>
+                <li>
+                    <p>
+                        <b><a href="wicket/">wicket/</a></b>
+                    </p>
+                    <p>
+                        provides accesses to a generic UI for end-users,
+                        Isis' <a href="http://isis.apache.org/components/viewers/wicket/about.html" target="_blank">Wicket Viewer</a>.
+                        As its name suggests, this viewer is built on top of <a href="http://wicket.apache.org" target="_blank">Apache Wicket</a>&trade;.
+                    </p>
+                </li>
+                <li>
+                    <p>
+                        <b>
+                            <a href="restful/">restful/</a>
+                        </b>
+                    </p>
+                    <p>
+                        provides access to a RESTful API conformant with the
+                        <a href="http://restfulobjects.org">Restful Objects</a> spec</td>.  This is part of Isis Core.  The
+                        implementation technology is JBoss RestEasy.
+                    </p>
+                </li>
+            </ul>
+
             <p>
             The default user/password is <b><i>sven/pass</i></b> (as configured in the
-            <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
+            <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
             </p>
             
         </div>

http://git-wip-us.apache.org/repos/asf/isis/blob/24aeeba4/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html b/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
index 1dbee0b..97b389c 100644
--- a/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
+++ b/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
@@ -23,12 +23,12 @@
     <br/>
     <br/>
     This app has been generated using Isis' 
-    <a href="http://isis.apache.org/intro/getting-started/todoapp-archetype.html" target="_blank">TodoApp</a> archetype,
+    <a href="http://isis.apache.org/intro/getting-started/todo%61pp-archetype.html" target="_blank">TodoApp</a> archetype,
     which configures Isis' most commonly used components in a straightforward &quot;todo&quot; app.
     <br/>
     <br/>
     The core functionality of the app is provided by the
-    <a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank">ToDoItem</a> domain class.
+    <a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank">ToDoItem</a> domain class.
     Supporting services provide additional capabilities.
     <br/>
     <br/>

http://git-wip-us.apache.org/repos/asf/isis/blob/24aeeba4/example/application/todoapp/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/about/index.html b/example/application/todoapp/webapp/src/main/webapp/about/index.html
index f248f38..a4bb026 100644
--- a/example/application/todoapp/webapp/src/main/webapp/about/index.html
+++ b/example/application/todoapp/webapp/src/main/webapp/about/index.html
@@ -59,62 +59,88 @@ th, td {
             <p>
             <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a framework to let you rapidly develop
             domain-driven apps in Java.  This app has been generated using Isis' 
-            <a href="http://isis.apache.org/intro/getting-started/todoapp-archetype.html" target="_blank">TodoApp</a> archetype,
+            <a href="http://isis.apache.org/intro/getting-started/todo%61pp-archetype.html" target="_blank">TodoApp</a> archetype,
             which configures Isis to run a (quite feature rich) &quot;todo&quot; app.
             
             <p>
             The app itself consists of a single domain class, <tt>ToDoItem</tt>, along with a number of supporting 
             services.
             </p>
-            
+
+            <p>To access the app:</p>
+            <ul>
+                <li>
+                    <p>
+                        <b><a href="wicket/">wicket/</a></b>
+                    </p>
+                    <p>
+                        provides accesses to a generic UI for end-users,
+                        Isis' <a href="http://isis.apache.org/components/viewers/wicket/about.html" target="_blank">Wicket Viewer</a>.
+                        As its name suggests, this viewer is built on top of <a href="http://wicket.apache.org" target="_blank">Apache Wicket</a>&trade;.
+                    </p>
+                </li>
+                <li>
+                    <p>
+                        <b>
+                            <a href="restful/">restful/</a>
+                        </b>
+                    </p>
+                    <p>
+                        provides access to a RESTful API conformant with the
+                        <a href="http://restfulobjects.org">Restful Objects</a> spec</td>.  This is part of Isis Core.  The
+                        implementation technology is JBoss RestEasy.
+                    </p>
+                </li>
+            </ul>
+
             <p>
-            To build your own app, while you could start with this todo app and remove/rename as required, you are
-            probably better off using the extremely minimal
-            <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype.
+                The default user/password is <b><i>sven/pass</i></b> (as configured in the
+                <a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
             </p>
 
             <p>
-            The default user/password is <b><i>sven/pass</i></b> (as configured in the
-            <a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
+                To build your own app, while you could start with this todo app and remove/rename as required, you are
+                probably better off using the extremely minimal
+                <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype.
             </p>
-    
-            <h2>App contents</h2>
+
+                <h2>App contents</h2>
             <p>The key files in this &quot;todo&quot; app are:</p>
             <!-- the hrefs below are partially URL encoded to prevent them from being modified when the archetype is created -->
             <ul>
               <li>Domain classes (todo functionality) (in <tt>dom</tt> module)
                   <ul>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank"><tt>ToDoItem</tt></a> domain entity
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank"><tt>ToDoItem</tt></a> domain entity
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItems.java" target="_blank"><tt>ToDoItems</tt></a> domain service (repository/factory)
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/dom/todo/ToDoItems.java" target="_blank"><tt>ToDoItems</tt></a> domain service (repository/factory)
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java" target="_blank"><tt>ToDoItemAnalysis</tt></a> application service analysing todo items
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/app/ToDoItemAnalysis.java" target="_blank"><tt>ToDoItemAnalysis</tt></a> application service analysing todo items
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java" target="_blank"><tt>ToDoAppDashboard</tt></a> dashboard application service
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/app/ToDoAppDashboard.java" target="_blank"><tt>ToDoAppDashboard</tt></a> dashboard application service
                   </li>
                   </ul>
               </li>
               <li>Fixture scripts (in <tt>fixture</tt> module)
                 <ul>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java" target="_blank"><tt>ToDoItemsFixtureService</tt></a> domain service to install fixtures at run-time
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java" target="_blank"><tt>ToDoItemsFixtureService</tt></a> domain service to install fixtures at run-time
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml" target="_blank">WEB-INF/web.xml</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml" target="_blank">WEB-INF/web.xml</a></tt> (in <tt>webapp</tt> module)
                 <ul>
-                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L98" target="_blank">ResourceCachingFilter</a></tt> and <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L134" target="_blank">ResourceServlet</a></tt> - filter and servlet for serving up static resources.
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml#L98" target="_blank">ResourceCachingFilter</a></tt> and <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L134" target="_blank">ResourceServlet</a></tt> - filter and servlet for serving up static resources.
                   </li>
-                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L174" target="_blank">WicketFilter</a></tt> - filter for the wicket application, mapped to <tt>/wicket/*</tt>
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml#L174" target="_blank">WicketFilter</a></tt> - filter for the wicket application, mapped to <tt>/wicket/*</tt>
                   </li>
-                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L223" target="_blank">ResteasyBootstrap</a></tt>,
-                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L240" target="_blank">IsisSessionFilterForRestfulObjects</a></tt>,
-                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L271" target="_blank">RestfulObjectsRestEasyDispatcher</a></tt> - listeners, filters and servlets to bootstrap and map restful objects viewer to <tt>/restful/*</tt>.
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml#L223" target="_blank">ResteasyBootstrap</a></tt>,
+                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml#L240" target="_blank">IsisSessionFilterForRestfulObjects</a></tt>,
+                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml#L271" target="_blank">RestfulObjectsRestEasyDispatcher</a></tt> - listeners, filters and servlets to bootstrap and map restful objects viewer to <tt>/restful/*</tt>.
                   </li>
-                  <li>commented out <tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L208" target="_blank">IsisWebAppBootstrapper</a></tt> listener; this is NOT required unless wicket viewer config is removed
+                  <li>commented out <tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml#L208" target="_blank">IsisWebAppBootstrapper</a></tt> listener; this is NOT required unless wicket viewer config is removed
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties" target="_blank">WEB-INF/isis.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/isis.properties" target="_blank">WEB-INF/isis.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li><tt>isis.services</tt> - specifies the two domain services described above (<tt>ToDoItems</tt> and <tt>ToDoItemsFixtureService</tt>), appearing on the menu bar in the Wicket viewer, 
                   along with a number of hidden framework-provided domain services demonstrating Isis' support for publishing, auditing and customizable error handling 
@@ -125,19 +151,19 @@ th, td {
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties" target="_blank">WEB-INF/persistor_datanucleus.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties" target="_blank">WEB-INF/persistor_datanucleus.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>configuration for JDO object store 
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/persistor.properties" target="_blank">WEB-INF/persistor.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/persistor.properties" target="_blank">WEB-INF/persistor.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>JDBC URL for JDO object store 
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">WEB-INF/shiro.ini</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">WEB-INF/shiro.ini</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>configuration for Shiro security
                   </li>


[17/39] git commit: ISIS-839: adding IntelliJ launch configurations to example apps

Posted by da...@apache.org.
ISIS-839: adding IntelliJ launch configurations to example apps


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

Branch: refs/heads/master
Commit: a2c8b574df9fc61c580d83f3f53bcc9c4ebcae66
Parents: 3fca999
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jul 23 22:50:48 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 18:20:21 2014 +0100

----------------------------------------------------------------------
 .../webapp/ide/intellij/launch/README.txt       |  2 ++
 .../ide/intellij/launch/SimpleApp_PROTOTYPE.xml | 29 ++++++++++++++++++++
 .../launch/SimpleApp__enhance_only_.xml         | 23 ++++++++++++++++
 .../webapp/ide/intellij/launch/README.txt       |  3 ++
 .../ide/intellij/launch/TodoApp_PROTOTYPE.xml   | 29 ++++++++++++++++++++
 .../intellij/launch/TodoApp__enhance_only_.xml  | 23 ++++++++++++++++
 6 files changed, 109 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a2c8b574/example/application/simpleapp/webapp/ide/intellij/launch/README.txt
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/intellij/launch/README.txt b/example/application/simpleapp/webapp/ide/intellij/launch/README.txt
new file mode 100644
index 0000000..5f8e5ab
--- /dev/null
+++ b/example/application/simpleapp/webapp/ide/intellij/launch/README.txt
@@ -0,0 +1,2 @@
+Copy into workspace\.idea\runConfigurations directory, and adjust file paths for Maven tasks.
+

http://git-wip-us.apache.org/repos/asf/isis/blob/a2c8b574/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml b/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml
new file mode 100644
index 0000000..4d77092
--- /dev/null
+++ b/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml
@@ -0,0 +1,29 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="SimpleApp-PROTOTYPE" type="Application" factoryName="Application" singleton="true">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.WebServer" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="--type SERVER_PROTOTYPE --port 8080" />
+    <option name="WORKING_DIRECTORY" value="file://$MODULE_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="simpleapp-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Debug" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/simpleapp/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a2c8b574/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml b/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml
new file mode 100644
index 0000000..daa30cf
--- /dev/null
+++ b/example/application/simpleapp/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml
@@ -0,0 +1,23 @@
+<component name="ProjectRunConfigurationManager">
+s  <configuration default="false" name="SimpleApp (enhance only)" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.Dummy" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$MODULE_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="simpleapp-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/simpleapp/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a2c8b574/example/application/todoapp/webapp/ide/intellij/launch/README.txt
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/intellij/launch/README.txt b/example/application/todoapp/webapp/ide/intellij/launch/README.txt
new file mode 100644
index 0000000..16391ab
--- /dev/null
+++ b/example/application/todoapp/webapp/ide/intellij/launch/README.txt
@@ -0,0 +1,3 @@
+Copy into workspace\.idea\runConfigurations directory, and adjust file paths for Maven tasks.
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/a2c8b574/example/application/todoapp/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml b/example/application/todoapp/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml
new file mode 100644
index 0000000..d6d7e5f
--- /dev/null
+++ b/example/application/todoapp/webapp/ide/intellij/launch/TodoApp_PROTOTYPE.xml
@@ -0,0 +1,29 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="TodoApp-PROTOTYPE" type="Application" factoryName="Application" singleton="true">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.WebServer" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="--type SERVER_PROTOTYPE --port 8080" />
+    <option name="WORKING_DIRECTORY" value="file://$MODULE_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="todoapp-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Debug" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/todoapp/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a2c8b574/example/application/todoapp/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml b/example/application/todoapp/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml
new file mode 100644
index 0000000..e74845c
--- /dev/null
+++ b/example/application/todoapp/webapp/ide/intellij/launch/TodoApp__enhance_only_.xml
@@ -0,0 +1,23 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="TodoApp (enhance only)" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.Dummy" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$MODULE_DIR$" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="todoapp-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/todoapp/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file


[08/39] git commit: ISIS-839: updating simpleapp order of @DomainService's

Posted by da...@apache.org.
ISIS-839: updating simpleapp order of @DomainService's

so that "Simple Objects" comes before "Prototyping" in menu.


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

Branch: refs/heads/master
Commit: 98071b9e03aae2b27ed7a2cedd2f89808e05e16a
Parents: eb75a8c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 11:34:06 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 12:34:49 2014 +0100

----------------------------------------------------------------------
 .../simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java      | 2 +-
 .../src/main/java/fixture/simple/SimpleObjectsFixturesService.java | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/98071b9e/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 0df6bd2..f7e9038 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
@@ -23,7 +23,7 @@ import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
 
-@DomainService(menuOrder = "2", repositoryFor = SimpleObject.class)
+@DomainService(menuOrder = "10", repositoryFor = SimpleObject.class)
 public class SimpleObjects {
 
     //region > identification in the UI

http://git-wip-us.apache.org/repos/asf/isis/blob/98071b9e/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 12a9e2b..fcb6c49 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
@@ -32,7 +32,7 @@ import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
  * Enables fixtures to be installed from the application.
  */
 @Named("Prototyping")
-@DomainService(menuOrder = "1")
+@DomainService(menuOrder = "20")
 public class SimpleObjectsFixturesService extends FixtureScripts {
 
     public SimpleObjectsFixturesService() {


[20/39] git commit: [maven-release-plugin] prepare release isis-1.6.0-RC3

Posted by da...@apache.org.
[maven-release-plugin] prepare release isis-1.6.0-RC3


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

Branch: refs/heads/master
Commit: 59f9b00eb29e920c309ca30ddd85bd220ad68e9b
Parents: 1a459a5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 23:47:03 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 23:47:03 2014 +0100

----------------------------------------------------------------------
 core/applib/pom.xml                             |   2 +-
 core/bytecode-cglib/pom.xml                     |   2 +-
 core/bytecode-javassist/pom.xml                 |   4 +-
 core/integtestsupport/pom.xml                   |   2 +-
 core/log4j/pom.xml                              |   2 +-
 core/metamodel/pom.xml                          |   2 +-
 core/module-audit-jdo/pom.xml                   |   2 +-
 core/module-background/pom.xml                  |   2 +-
 core/module-command-jdo/pom.xml                 |   2 +-
 core/module-devutils/applib/pom.xml             |   2 +-
 core/module-devutils/impl/pom.xml               |   2 +-
 core/module-devutils/pom.xml                    |  10 +-
 core/module-publishing-jdo/pom.xml              |   2 +-
 .../module-publishingeventserializer-ro/pom.xml |   2 +-
 core/module-settings/applib/pom.xml             |   2 +-
 core/module-settings/impl-jdo/pom.xml           |   2 +-
 core/module-settings/pom.xml                    |  10 +-
 core/objectstore-inmemory/pom.xml               |   2 +-
 core/objectstore-jdo-datanucleus/pom.xml        |   2 +-
 core/objectstore-jdo-metamodel/pom.xml          |   2 +-
 core/pom.xml                                    | 114 +++++++++----------
 core/profilestore-inmemory/pom.xml              |   2 +-
 core/runtime/pom.xml                            |   2 +-
 core/security-noop/pom.xml                      |   2 +-
 core/security-shiro/pom.xml                     |   6 +-
 core/specsupport/pom.xml                        |   2 +-
 core/tck/pom.xml                                |   5 +-
 core/tck/tck-dom/pom.xml                        |   2 +-
 core/tck/tck-fixture/pom.xml                    |   2 +-
 core/tck/tck-viewer-restfulobjects/pom.xml      |   5 +-
 core/unittestsupport/pom.xml                    |   2 +-
 core/viewer-restfulobjects-applib/pom.xml       |   2 +-
 core/viewer-restfulobjects-rendering/pom.xml    |   2 +-
 core/viewer-restfulobjects-server/pom.xml       |   2 +-
 core/webserver/pom.xml                          |   2 +-
 core/wrapper/pom.xml                            |   2 +-
 36 files changed, 105 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/applib/pom.xml b/core/applib/pom.xml
index e3375af..4e88b7d 100644
--- a/core/applib/pom.xml
+++ b/core/applib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/bytecode-cglib/pom.xml
----------------------------------------------------------------------
diff --git a/core/bytecode-cglib/pom.xml b/core/bytecode-cglib/pom.xml
index ec6d745..dcca1bc 100644
--- a/core/bytecode-cglib/pom.xml
+++ b/core/bytecode-cglib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-		<version>1.6.0-SNAPSHOT</version>
+		<version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-bytecode-cglib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/bytecode-javassist/pom.xml
----------------------------------------------------------------------
diff --git a/core/bytecode-javassist/pom.xml b/core/bytecode-javassist/pom.xml
index daa7306..4ed3221 100644
--- a/core/bytecode-javassist/pom.xml
+++ b/core/bytecode-javassist/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-bytecode-javassist</artifactId>
@@ -39,7 +39,7 @@
         <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/isis/trunk/runtimes/dflt/bytecode/javassist/</connection>
         <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/isis/trunk$/{relativeUrl}</developerConnection>
         <url>http://svn.apache.org/repos/asf/incubator/isis/trunk/runtimes/dflt/bytecode/javassist/</url>
-      <tag>HEAD</tag>
+      <tag>isis-1.6.0-RC3</tag>
   </scm>
 
     <!-- used in Site generation for relative references. -->

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/integtestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/integtestsupport/pom.xml b/core/integtestsupport/pom.xml
index 48bc875..37f9397 100644
--- a/core/integtestsupport/pom.xml
+++ b/core/integtestsupport/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-integtestsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/log4j/pom.xml
----------------------------------------------------------------------
diff --git a/core/log4j/pom.xml b/core/log4j/pom.xml
index 084ec87..d32649e 100644
--- a/core/log4j/pom.xml
+++ b/core/log4j/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-log4j</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index 12f79e5..c39e090 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-metamodel</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-audit-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-audit-jdo/pom.xml b/core/module-audit-jdo/pom.xml
index bf23a69..1c00f3a 100644
--- a/core/module-audit-jdo/pom.xml
+++ b/core/module-audit-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-background/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-background/pom.xml b/core/module-background/pom.xml
index 0a18d07..45a9d7a 100644
--- a/core/module-background/pom.xml
+++ b/core/module-background/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-command-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-command-jdo/pom.xml b/core/module-command-jdo/pom.xml
index 7fa3db8..5b86151 100644
--- a/core/module-command-jdo/pom.xml
+++ b/core/module-command-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-devutils/applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-devutils/applib/pom.xml b/core/module-devutils/applib/pom.xml
index 5df558c..825381b 100644
--- a/core/module-devutils/applib/pom.xml
+++ b/core/module-devutils/applib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-devutils</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-module-devutils-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-devutils/impl/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-devutils/impl/pom.xml b/core/module-devutils/impl/pom.xml
index da20f0f..badf0e9 100644
--- a/core/module-devutils/impl/pom.xml
+++ b/core/module-devutils/impl/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-devutils</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-module-devutils-impl</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-devutils/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-devutils/pom.xml b/core/module-devutils/pom.xml
index 7b0df81..ad937cc 100644
--- a/core/module-devutils/pom.xml
+++ b/core/module-devutils/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>
@@ -48,12 +48,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -61,12 +61,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-publishing-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-publishing-jdo/pom.xml b/core/module-publishing-jdo/pom.xml
index 58bb8ac..da7f2d0 100644
--- a/core/module-publishing-jdo/pom.xml
+++ b/core/module-publishing-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-publishingeventserializer-ro/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-publishingeventserializer-ro/pom.xml b/core/module-publishingeventserializer-ro/pom.xml
index 3feadb5..7a209c8 100644
--- a/core/module-publishingeventserializer-ro/pom.xml
+++ b/core/module-publishingeventserializer-ro/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-settings/applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-settings/applib/pom.xml b/core/module-settings/applib/pom.xml
index cf236ac..805274d 100644
--- a/core/module-settings/applib/pom.xml
+++ b/core/module-settings/applib/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-settings</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-module-settings-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-settings/impl-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-settings/impl-jdo/pom.xml b/core/module-settings/impl-jdo/pom.xml
index 3840664..bbb4929 100644
--- a/core/module-settings/impl-jdo/pom.xml
+++ b/core/module-settings/impl-jdo/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.module</groupId>
 		<artifactId>isis-module-settings</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-module-settings-impl-jdo</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/module-settings/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-settings/pom.xml b/core/module-settings/pom.xml
index 4c4cd00..3d9416f 100644
--- a/core/module-settings/pom.xml
+++ b/core/module-settings/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
     <groupId>org.apache.isis.module</groupId>
@@ -48,12 +48,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -61,12 +61,12 @@
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/objectstore-inmemory/pom.xml
----------------------------------------------------------------------
diff --git a/core/objectstore-inmemory/pom.xml b/core/objectstore-inmemory/pom.xml
index bc43c29..c27616d 100644
--- a/core/objectstore-inmemory/pom.xml
+++ b/core/objectstore-inmemory/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-objectstore</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/objectstore-jdo-datanucleus/pom.xml
----------------------------------------------------------------------
diff --git a/core/objectstore-jdo-datanucleus/pom.xml b/core/objectstore-jdo-datanucleus/pom.xml
index b7cfa9c..e60dce2 100644
--- a/core/objectstore-jdo-datanucleus/pom.xml
+++ b/core/objectstore-jdo-datanucleus/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
 	<artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/objectstore-jdo-metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/core/objectstore-jdo-metamodel/pom.xml b/core/objectstore-jdo-metamodel/pom.xml
index 4c4ca9d..09bb762 100644
--- a/core/objectstore-jdo-metamodel/pom.xml
+++ b/core/objectstore-jdo-metamodel/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
 	<artifactId>isis-core-objectstore-jdo-metamodel</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index f806d8f..44ed90e 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -21,7 +21,7 @@
 
     <groupId>org.apache.isis.core</groupId>
     <artifactId>isis</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.6.0</version>
     
     <packaging>pom</packaging>
 
@@ -153,7 +153,7 @@
         <connection>scm:git:http://git.apache.org/isis.git/core</connection>
         <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/isis.git/trunk/framework/</developerConnection>
         <url>git://git.apache.org/isis.git/core</url>
-      <tag>HEAD</tag>
+      <tag>isis-1.6.0-RC3</tag>
   </scm>
 
     <!-- used in Site generation for relative references. -->
@@ -1030,13 +1030,13 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-unittestsupport</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <!-- not scope=test, because referenced by some sql-tests-common under compile scope -->
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-unittestsupport</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1045,14 +1045,14 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>jar</type>
                 <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1061,7 +1061,7 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-log4j</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>jar</type>
                 <scope>compile</scope>
             </dependency>
@@ -1070,14 +1070,14 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-metamodel</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>jar</type>
                 <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-metamodel</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1086,52 +1086,52 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-runtime</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-runtime</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-wrapper</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
             <!-- bytecode components -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-bytecode-cglib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-bytecode-javassist</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
             <!-- webserver -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-webserver</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
             <!-- specsupport -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-specsupport</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
             <!-- integtestsupport -->
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-integtestsupport</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <!-- not scope=test, because referenced by some sql-tests-common under compile scope -->
             </dependency>
 
@@ -1139,36 +1139,36 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-metamodel</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-metamodel</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -1178,36 +1178,36 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-rendering</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-rendering</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-server</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-viewer-restfulobjects-server</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -1217,12 +1217,12 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-security</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-security-shiro</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
 
@@ -1230,7 +1230,7 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-profilestore</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
 
@@ -1238,22 +1238,22 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck-dom</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck-fixture</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.core</groupId>
                 <artifactId>isis-core-tck-viewer-restfulobjects</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
 
 
@@ -1262,48 +1262,48 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-audit-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-audit-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-background</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-background</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-command-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-command-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
@@ -1315,55 +1315,55 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-devutils-impl</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishing-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishing-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishingeventserializer-ro</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-publishingeventserializer-ro</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <!--
             declared as a convenience; alternative is for the domain application to
@@ -1372,24 +1372,24 @@ ${license.additional-notes}
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-applib</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.module</groupId>
                 <artifactId>isis-module-settings-impl-jdo</artifactId>
-                <version>1.6.0-SNAPSHOT</version>
+                <version>1.6.0</version>
                 <scope>test</scope>
                 <type>test-jar</type>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/profilestore-inmemory/pom.xml
----------------------------------------------------------------------
diff --git a/core/profilestore-inmemory/pom.xml b/core/profilestore-inmemory/pom.xml
index e1f84f6..dccba79 100644
--- a/core/profilestore-inmemory/pom.xml
+++ b/core/profilestore-inmemory/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-profilestore</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/runtime/pom.xml
----------------------------------------------------------------------
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index 2563d6c..24a0a0d 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-runtime</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/security-noop/pom.xml
----------------------------------------------------------------------
diff --git a/core/security-noop/pom.xml b/core/security-noop/pom.xml
index dc715ea..9a3afa9 100644
--- a/core/security-noop/pom.xml
+++ b/core/security-noop/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-security</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/security-shiro/pom.xml
----------------------------------------------------------------------
diff --git a/core/security-shiro/pom.xml b/core/security-shiro/pom.xml
index b9d9fe6..90cdb60 100644
--- a/core/security-shiro/pom.xml
+++ b/core/security-shiro/pom.xml
@@ -23,12 +23,12 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<groupId>org.apache.isis.core</groupId>
 	<artifactId>isis-core-security-shiro</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.6.0</version>
 
 	<name>Isis Shiro Security</name>
 
@@ -102,7 +102,7 @@
 			<dependency>
 			    <groupId>org.apache.isis.core</groupId>
 			    <artifactId>isis-core-security-shiro</artifactId>
-				<version>1.6.0-SNAPSHOT</version>
+				<version>1.6.0</version>
 			</dependency>
     	</dependencies>
     </dependencyManagement>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/specsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/specsupport/pom.xml b/core/specsupport/pom.xml
index 8d85116..03d38b6 100644
--- a/core/specsupport/pom.xml
+++ b/core/specsupport/pom.xml
@@ -15,7 +15,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-specsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/tck/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/pom.xml b/core/tck/pom.xml
index 6b6c233..08e8f63 100644
--- a/core/tck/pom.xml
+++ b/core/tck/pom.xml
@@ -17,14 +17,13 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-tck</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/tck/tck-dom/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/tck-dom/pom.xml b/core/tck/tck-dom/pom.xml
index b6528c0..d5b49ac 100644
--- a/core/tck/tck-dom/pom.xml
+++ b/core/tck/tck-dom/pom.xml
@@ -22,7 +22,7 @@
 	<parent>
     	<groupId>org.apache.isis.core</groupId>
     	<artifactId>isis-core-tck</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-tck-dom</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/tck/tck-fixture/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/tck-fixture/pom.xml b/core/tck/tck-fixture/pom.xml
index 89d7059..ed48392 100644
--- a/core/tck/tck-fixture/pom.xml
+++ b/core/tck/tck-fixture/pom.xml
@@ -22,7 +22,7 @@
     <parent>
     	<groupId>org.apache.isis.core</groupId>
         <artifactId>isis-core-tck</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
 	<artifactId>isis-core-tck-fixture</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/tck/tck-viewer-restfulobjects/pom.xml
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/pom.xml b/core/tck/tck-viewer-restfulobjects/pom.xml
index c83bad5..3c8e182 100644
--- a/core/tck/tck-viewer-restfulobjects/pom.xml
+++ b/core/tck/tck-viewer-restfulobjects/pom.xml
@@ -17,14 +17,13 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis-core-tck</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-tck-viewer-restfulobjects</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/unittestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/unittestsupport/pom.xml b/core/unittestsupport/pom.xml
index 4dc33f9..eedd5d2 100644
--- a/core/unittestsupport/pom.xml
+++ b/core/unittestsupport/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-unittestsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/viewer-restfulobjects-applib/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/pom.xml b/core/viewer-restfulobjects-applib/pom.xml
index 7f80fd8..ff5d017 100644
--- a/core/viewer-restfulobjects-applib/pom.xml
+++ b/core/viewer-restfulobjects-applib/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
 	<artifactId>isis-core-viewer-restfulobjects-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/viewer-restfulobjects-rendering/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/pom.xml b/core/viewer-restfulobjects-rendering/pom.xml
index e7bcab3..0c072da 100644
--- a/core/viewer-restfulobjects-rendering/pom.xml
+++ b/core/viewer-restfulobjects-rendering/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-viewer-restfulobjects-rendering</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/viewer-restfulobjects-server/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/pom.xml b/core/viewer-restfulobjects-server/pom.xml
index 2762c74..9e568e7 100644
--- a/core/viewer-restfulobjects-server/pom.xml
+++ b/core/viewer-restfulobjects-server/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
     <artifactId>isis-core-viewer-restfulobjects-server</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/webserver/pom.xml
----------------------------------------------------------------------
diff --git a/core/webserver/pom.xml b/core/webserver/pom.xml
index b6bdd54..726edb8 100644
--- a/core/webserver/pom.xml
+++ b/core/webserver/pom.xml
@@ -23,7 +23,7 @@
     <parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
     </parent>
 
 	<artifactId>isis-core-webserver</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/59f9b00e/core/wrapper/pom.xml
----------------------------------------------------------------------
diff --git a/core/wrapper/pom.xml b/core/wrapper/pom.xml
index c5a58b3..d3bfe3a 100644
--- a/core/wrapper/pom.xml
+++ b/core/wrapper/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.isis.core</groupId>
         <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.6.0</version>
 	</parent>
 
 	<artifactId>isis-core-wrapper</artifactId>


[26/39] git commit: ISIS-839: recreating simpleapp archetype

Posted by da...@apache.org.
ISIS-839: recreating simpleapp archetype


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

Branch: refs/heads/master
Commit: b33b2960a87096b24da06af22490c03509aa6599
Parents: 8afcd99
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 08:15:12 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:15:12 2014 +0100

----------------------------------------------------------------------
 example/archetype/simpleapp/pom.xml             |  8 +-
 .../META-INF/maven/archetype-metadata.xml       |  9 +-
 .../resources/archetype-resources/dom/pom.xml   | 23 +++--
 .../src/main/java/dom/simple/SimpleObjects.java |  6 +-
 .../archetype-resources/fixture/pom.xml         |  2 +-
 .../fixture/simple/SimpleObjectsFixture.java    | 14 ++--
 .../simple/SimpleObjectsFixturesService.java    | 70 ++++++++++++++++
 .../archetype-resources/integtests/pom.xml      |  6 +-
 .../integration/SimpleAppSystemInitializer.java | 22 ++---
 .../main/resources/archetype-resources/pom.xml  | 33 +-------
 .../webapp/ide/intellij/launch/README.txt       |  5 ++
 .../ide/intellij/launch/SimpleApp_PROTOTYPE.xml | 32 +++++++
 .../launch/SimpleApp__enhance_only_.xml         | 26 ++++++
 .../archetype-resources/webapp/pom.xml          | 83 ++++++++++++++++--
 .../webapp/prototyping/DeveloperUtilities.java  |  4 +-
 .../SimpleObjectsFixturesService.java           | 71 ----------------
 .../src/main/resources/webapp/welcome.html      |  8 +-
 .../src/main/webapp/WEB-INF/isis.properties     | 65 ++++-----------
 .../webapp/src/main/webapp/about/index.html     | 88 ++++++++------------
 .../projects/basic/archetype.properties         |  2 +-
 20 files changed, 325 insertions(+), 252 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/pom.xml b/example/archetype/simpleapp/pom.xml
index 47267fa..cd61e80 100644
--- a/example/archetype/simpleapp/pom.xml
+++ b/example/archetype/simpleapp/pom.xml
@@ -17,13 +17,13 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.isis.archetype</groupId>
-  <artifactId>simple_wicket_restful_jdo-archetype</artifactId>
+  <artifactId>simpleapp-archetype</artifactId>
   <version>1.6.0-SNAPSHOT</version>
   <packaging>maven-archetype</packaging>
-  <name>simple_wicket_restful_jdo-archetype</name>
+  <name>simpleapp-archetype</name>
   <build>
     <extensions>
       <extension>
@@ -44,7 +44,7 @@
   <parent>
     <groupId>org.apache.isis.core</groupId>
     <artifactId>isis</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.6.0</version>
     <relativePath>../../../core/pom.xml</relativePath>
   </parent>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml b/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
index 59a6ecc..5f880e1 100644
--- a/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/example/archetype/simpleapp/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -17,7 +17,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="simple_wicket_restful_jdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="simpleapp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modules>
     <module id="${rootArtifactId}-dom" dir="dom" name="${rootArtifactId}-dom">
       <fileSets>
@@ -139,6 +139,13 @@
             <include>**/*.css</include>
           </includes>
         </fileSet>
+        <fileSet filtered="true" encoding="UTF-8">
+          <directory>ide/intellij</directory>
+          <includes>
+            <include>**/*.xml</include>
+            <include>**/*.txt</include>
+          </includes>
+        </fileSet>
         <fileSet encoding="UTF-8">
           <directory>lib</directory>
           <includes>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/pom.xml
index ecbd6a7..87f8214 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/pom.xml
@@ -26,7 +26,7 @@
 	</parent>
 
 	<artifactId>${artifactId}</artifactId>
-	<name>Simple Wicket/Restful/JDO DOM</name>
+	<name>Simple App DOM</name>
 
 	<build>
         <resources>
@@ -101,11 +101,22 @@
 			<artifactId>isis-core-applib</artifactId>
 		</dependency>
 
-		<dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-			<artifactId>isis-objectstore-jdo-applib</artifactId>
-		</dependency>
-        
+        <!--
+        uncomment to use the AppSettings or UserSettings services
+        (also uncomment corresponding dependency in webapp module)
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-settings-applib</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-devutils-applib</artifactId>
+        </dependency>
+        -->
+
+
 		<dependency>
             <groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-unittestsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/dom/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/dom/simple/SimpleObjects.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/dom/simple/SimpleObjects.java
index 40bdc5a..c5ec526 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/dom/simple/SimpleObjects.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/dom/src/main/java/dom/simple/SimpleObjects.java
@@ -23,12 +23,10 @@ package dom.simple;
 
 import java.util.List;
 import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
-import org.apache.isis.applib.annotation.Bookmarkable;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.Named;
 
+@DomainService(menuOrder = "10", repositoryFor = SimpleObject.class)
 public class SimpleObjects {
 
     //region > identification in the UI

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/pom.xml
index 204bc79..eae6a5f 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/pom.xml
@@ -26,7 +26,7 @@
     </parent>
 
 	<artifactId>${artifactId}</artifactId>
-	<name>Simple Wicket/Restful/JDO Fixtures</name>
+	<name>Simple App Fixtures</name>
 
 	<dependencies>
 		<dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixture.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixture.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixture.java
index 4b03a11..139ad01 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixture.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixture.java
@@ -29,6 +29,10 @@ import org.apache.isis.applib.fixturescripts.FixtureScript;
 
 public class SimpleObjectsFixture extends FixtureScript {
 
+    public SimpleObjectsFixture() {
+        withDiscoverability(Discoverability.DISCOVERABLE);
+    }
+
     @Override
     protected void execute(ExecutionContext executionContext) {
 
@@ -36,15 +40,15 @@ public class SimpleObjectsFixture extends FixtureScript {
         execute(new SimpleObjectsTearDownFixture(), executionContext);
 
         // create
-        create("Foo");
-        create("Bar");
-        create("Baz");
+        create("Foo", executionContext);
+        create("Bar", executionContext);
+        create("Baz", executionContext);
     }
 
     // //////////////////////////////////////
 
-    private SimpleObject create(final String name) {
-        return simpleObjects.create(name);
+    private SimpleObject create(final String name, ExecutionContext executionContext) {
+        return executionContext.add(this, simpleObjects.create(name));
     }
 
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
new file mode 100644
index 0000000..fb69258
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/fixture/src/main/java/fixture/simple/SimpleObjectsFixturesService.java
@@ -0,0 +1,70 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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 fixture.simple;
+
+import java.util.List;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.applib.annotation.Prototype;
+import org.apache.isis.applib.fixturescripts.FixtureResult;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScripts;
+import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
+
+/**
+ * Enables fixtures to be installed from the application.
+ */
+@Named("Prototyping")
+@DomainService(menuOrder = "20")
+public class SimpleObjectsFixturesService extends FixtureScripts {
+
+    public SimpleObjectsFixturesService() {
+        super("fixture.simple");
+    }
+
+    //@Override // compatibility with core 1.5.0
+    public FixtureScript default0RunFixtureScript() {
+        return findFixtureScriptFor(SimpleFixtureScript.class);
+    }
+
+    /**
+     * Raising visibility to <tt>public</tt> so that choices are available for first param
+     * of {@link ${symbol_pound}runFixtureScript(FixtureScript, String)}.
+     */
+    @Override
+    public List<FixtureScript> choices0RunFixtureScript() {
+        return super.choices0RunFixtureScript();
+    }
+
+
+    // //////////////////////////////////////
+
+    @Prototype
+    @MemberOrder(sequence="20")
+    public Object installFixturesAndReturnFirst() {
+        final List<FixtureResult> run = findFixtureScriptFor(SimpleObjectsFixture.class).run(null);
+        return run.get(0).getObject();
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/pom.xml
index 4b47301..568cc80 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/pom.xml
@@ -26,7 +26,7 @@
     </parent>
 
 	<artifactId>${artifactId}</artifactId>
-	<name>Simple Wicket/Restful/JDO Integration Tests</name>
+	<name>Simple App Integration Tests</name>
 
     <build>
         <testResources>
@@ -76,8 +76,8 @@
             <artifactId>isis-core-wrapper</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-            <artifactId>isis-objectstore-jdo-datanucleus</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/SimpleAppSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/SimpleAppSystemInitializer.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/SimpleAppSystemInitializer.java
index 5bfef2b..7e5384e 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/SimpleAppSystemInitializer.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/integtests/src/test/java/integration/SimpleAppSystemInitializer.java
@@ -19,14 +19,10 @@
  */
 package integration;
 
-import dom.simple.SimpleObjects;
-
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.integtestsupport.IsisSystemForTest;
-import org.apache.isis.core.wrapper.WrapperFactoryDefault;
 import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller;
 import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests;
-import org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl;
 
 /**
  * Holds an instance of an {@link IsisSystemForTest} as a {@link ThreadLocal} on the current thread,
@@ -48,16 +44,20 @@ public class SimpleAppSystemInitializer {
     private static class SimpleAppSystemBuilder extends IsisSystemForTest.Builder {
 
         public SimpleAppSystemBuilder() {
-            //withFixtures( ... reference data fixtures ...); // if we had any...
             withLoggingAt(org.apache.log4j.Level.INFO);
             with(testConfiguration());
             with(new DataNucleusPersistenceMechanismInstaller());
-            
-            withServices(
-                    new SimpleObjects(),
-                    new WrapperFactoryDefault(),
-                    new IsisJdoSupportImpl()
-                    );
+
+            // services annotated with @DomainService
+            withServicesIn( "dom.simple"
+                            ,"fixture.simple"
+                            ,"org.apache.isis.core.wrapper"
+                            ,"org.apache.isis.applib"
+                            ,"org.apache.isis.core.metamodel.services"
+                            ,"org.apache.isis.core.runtime.services"
+                            ,"org.apache.isis.objectstore.jdo.datanucleus.service.support" // IsisJdoSupportImpl
+                            ,"org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" // EventBusServiceJdo
+                            );
         }
 
         private static IsisConfiguration testConfiguration() {

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
index a19912a..97d3406 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/pom.xml
@@ -23,7 +23,7 @@
     <artifactId>${artifactId}</artifactId>
     <version>${version}</version>
 
-    <name>Simple Wicket/Restful/JDO App</name>
+    <name>Simple App</name>
 
     <packaging>pom</packaging>
 
@@ -32,11 +32,8 @@
     </prerequisites>
 
 	<properties>
-        <isis.version>1.5.0</isis.version>
-        <isis-objectstore-jdo.version>1.5.0</isis-objectstore-jdo.version>
-        <isis-viewer-wicket.version>1.5.0</isis-viewer-wicket.version>
-        <isis-viewer-restfulobjects.version>2.3.0</isis-viewer-restfulobjects.version>
-        <isis-security-shiro.version>1.5.0</isis-security-shiro.version>
+        <isis.version>1.6.0</isis.version>
+        <isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
 
         <!-- must be consistent with the versions defined by the JDO Objectstore -->
         <datanucleus-accessplatform-jdo-rdbms.version>3.3.6</datanucleus-accessplatform-jdo-rdbms.version>
@@ -308,14 +305,6 @@
 			</dependency>
 
 			<dependency>
-				<groupId>org.apache.isis.objectstore</groupId>
-				<artifactId>isis-objectstore-jdo</artifactId>
-				<version>${isis-objectstore-jdo.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
-			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket</artifactId>
 				<version>${isis-viewer-wicket.version}</version>
@@ -323,22 +312,6 @@
 				<scope>import</scope>
 			</dependency>
 
-			<dependency>
-				<groupId>org.apache.isis.viewer</groupId>
-				<artifactId>isis-viewer-restfulobjects</artifactId>
-				<version>${isis-viewer-restfulobjects.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.isis.security</groupId>
-				<artifactId>isis-security-shiro</artifactId>
-				<version>${isis-security-shiro.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
 
             <!-- this project's own modules -->
             <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt
new file mode 100644
index 0000000..ed2b998
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/README.txt
@@ -0,0 +1,5 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Copy into workspace${symbol_escape}.idea${symbol_escape}runConfigurations directory, and adjust file paths for Maven tasks.
+

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml
new file mode 100644
index 0000000..75369db
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml
@@ -0,0 +1,32 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="SimpleApp-PROTOTYPE" type="Application" factoryName="Application" singleton="true">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.WebServer" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="--type SERVER_PROTOTYPE --port 8080" />
+    <option name="WORKING_DIRECTORY" value="file://${symbol_dollar}MODULE_DIR${symbol_dollar}" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="${parentArtifactId}-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Debug" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/${parentArtifactId}/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml
new file mode 100644
index 0000000..e38ac40
--- /dev/null
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml
@@ -0,0 +1,26 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<component name="ProjectRunConfigurationManager">
+s  <configuration default="false" name="SimpleApp (enhance only)" type="Application" factoryName="Application">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.Dummy" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PROGRAM_PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://${symbol_dollar}MODULE_DIR${symbol_dollar}" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="${parentArtifactId}-webapp" />
+    <envs />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="Make" enabled="false" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/core/pom.xml" goal="-f pom-jdo-enhance-all.xml datanucleus:enhance -o" />
+      <option name="Maven.BeforeRunTask" enabled="true" file="C:/Apache/Isis/example/application/${parentArtifactId}/dom/pom.xml" goal="datanucleus:enhance -o" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
index ee58552..9ec04b5 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/pom.xml
@@ -26,7 +26,7 @@
     </parent>
 
     <artifactId>${artifactId}</artifactId>
-    <name>Simple Wicket/Restful/JDO Webapp</name>
+    <name>Simple App Webapp</name>
 
     <description>This module runs both the Wicket viewer and the Restfulobjects viewer in a single webapp configured to run using the datanucleus object store.</description>
 
@@ -156,20 +156,20 @@
         
         <!-- other isis components -->
         <dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-            <artifactId>isis-objectstore-jdo-datanucleus</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.isis.viewer</groupId>
             <artifactId>isis-viewer-wicket-impl</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.viewer</groupId>
-            <artifactId>isis-viewer-restfulobjects-server</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-viewer-restfulobjects-server</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.isis.security</groupId>
-            <artifactId>isis-security-shiro</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-security-shiro</artifactId>
         </dependency>
 
 
@@ -190,7 +190,74 @@
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-security</artifactId>
         </dependency>
-        
+
+
+        <!-- isis modules -->
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-devutils-impl</artifactId>
+        </dependency>
+        <!--
+        uncomment to enable auditing (@Audited),
+        persisted to database
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-audit-jdo</artifactId>
+        </dependency>
+        -->
+
+        <!--
+        uncomment to enable BackgroundService;
+        depends on: an implementation of BackgroundCommandService to persist commands
+        (see isis-module-command-jdo)
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-background</artifactId>
+        </dependency>
+        -->
+        <!--
+        uncomment to enable commands (@Command annotation)
+        persisted to database, also enabling the ability to run commands in the background
+        (eg using the Quartz scheduler)
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-command-jdo</artifactId>
+        </dependency>
+        -->
+
+        <!--
+        uncomment to enable publishing (@PublishedObject, @PublishedAction annotations)
+        persisted to database, and using the Restful Objects (JSON) serialization of the event.
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-publishing-jdo</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-publishingeventserializer-ro</artifactId>
+        </dependency>
+        -->
+
+        <!--
+        uncomment to use the AppSettings or UserSettings services
+        (see also declaration of its applib in dom module)
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-settings-impl-jdo</artifactId>
+        </dependency>
+        -->
+
+
         <!-- to run using WebServer (optional) -->
         <dependency>
             <groupId>org.apache.isis.core</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
index 21bdcdb..39d2485 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/DeveloperUtilities.java
@@ -19,6 +19,7 @@
  */
 package webapp.prototyping;
 
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
@@ -26,8 +27,9 @@ import org.apache.isis.core.metamodel.services.devutils.DeveloperUtilitiesServic
 
 /**
  * These overrides are simply to 'move' the action underneath the 
- * {@link SimpleObjectsFixturesService prototyping} menu.
+ * {@link fixture.simple.SimpleObjectsFixturesService prototyping} menu.
  */
+@DomainService(menuOrder = "20")
 public class DeveloperUtilities extends DeveloperUtilitiesServiceDefault {
 
     @MemberOrder(name="Prototyping", sequence="90")

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/SimpleObjectsFixturesService.java
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/SimpleObjectsFixturesService.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/SimpleObjectsFixturesService.java
deleted file mode 100644
index e58a077..0000000
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/prototyping/SimpleObjectsFixturesService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/*
- *  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 webapp.prototyping;
-
-import dom.simple.SimpleObject;
-import dom.simple.SimpleObjects;
-import fixture.simple.SimpleObjectsFixture;
-
-import java.util.List;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.Named;
-import org.apache.isis.applib.annotation.Prototype;
-import org.apache.isis.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate;
-
-/**
- * Enables fixtures to be installed from the application.
- */
-@DomainService(20)
-@Named("Prototyping")
-public class SimpleObjectsFixturesService extends FixtureScripts {
-
-    public SimpleObjectsFixturesService() {
-        super("fixture.simple");
-    }
-
-    @Prototype
-    public String installFixtures() {
-        final FixturesInstallerDelegate installer = new FixturesInstallerDelegate().withOverride();
-        installer.addFixture(new SimpleObjectsFixture());
-        installer.installFixtures();
-        return "Example fixtures installed";
-    }
-
-    // //////////////////////////////////////
-
-    @Prototype
-    public SimpleObject installFixturesAndReturnFirst() {
-        installFixtures();
-        List<SimpleObject> all = simpleObjects.listAll();
-        return !all.isEmpty() ? all.get(0) : null;
-    }
-
-    
-    // //////////////////////////////////////
-
-    private SimpleObjects simpleObjects;
-    public void injectSimpleObjects(SimpleObjects simpleObjects) {
-        this.simpleObjects = simpleObjects;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
index ec316a9..4661b68 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/resources/webapp/welcome.html
@@ -21,17 +21,17 @@
   under the License.
 -->
 <p class="intro">
-    <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+    <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a platform to let you rapidly develop
     domain-driven apps in Java.
     <br/>
     <br/>
     This app has been generated using Isis' 
-    <a href="http://isis.apache.org/getting-started/simple-archetype.html">simple</a> archetype, 
+    <a href="http://isis.apache.org/intro/getting-started/simple%61pp-archetype.html" target="_blank">SimpleApp</a> archetype,
     which configures Isis' most commonly used components as part of a very simple and purposefully minimal application.
     <br/>
     <br/>
-    The app itself consists of a single domain class, <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank">SimpleObject</a>, 
-    along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank">SimpleObjects</a>.
+    The app itself consists of a single domain class, <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank">SimpleObject</a>,
+    along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank">SimpleObjects</a>.
     <br/>
     <br/>
     For more details, see the <a href="http://isis.apache.org/documentation.html" target="_blank">Isis website</a>.

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
index 5e0186c..d98d7ee 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -140,7 +140,7 @@ ${symbol_pound}
 ${symbol_pound} Providing such capabilities as i18n
 ${symbol_pound}
 
-isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i18n.resourcebundle.I18nDecoratorUsingResourceBundleInstaller
+isis.reflector.facet-decorators=org.apache.isis.core.metamodel.facetdecorator.i18n.resourcebundle.I18nDecoratorUsingResourceBundleInstaller
 
 
 ${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
@@ -157,69 +157,36 @@ ${symbol_pound} the set of the classes for Isis to instantiate as domain service
 ${symbol_pound} From these domain service instances the rest of the metamodel is discovered, while the 
 ${symbol_pound} end-user gains access to other domain objects by invoking the actions of the domain services.
 ${symbol_pound}
-
+isis.services-installer=configuration-and-annotation
+isis.services.ServicesInstallerFromAnnotation.packagePrefix=dom.simple,${symbol_escape}
+                                                            fixture.simple,${symbol_escape}
+                                                            webapp.prototyping
 
 ${symbol_pound}isis.services.prefix = 
 isis.services = ${symbol_escape}
-                10:dom.simple.SimpleObjects,${symbol_escape}
-                ${symbol_escape}
-                20:webapp.prototyping.SimpleObjectsFixturesService,${symbol_escape}
-                20:webapp.prototyping.DeveloperUtilities,${symbol_escape}
+                org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} supporting services if using JDO objectstore, ${symbol_escape}
+                ${symbol_pound} customizable exception handling, ${symbol_escape}
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,${symbol_escape}
-                org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of the various bookmark/memento services, ${symbol_escape}
-                org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault,${symbol_escape}
-                org.apache.isis.core.runtime.services.memento.MementoServiceDefault,${symbol_escape}
-                org.apache.isis.core.runtime.services.xmlsnapshot.XmlSnapshotServiceDefault,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of a clock service, ${symbol_escape}
-                org.apache.isis.applib.services.clock.ClockService,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of the various (inter)action services, ${symbol_escape}
-                org.apache.isis.applib.services.command.CommandContext,${symbol_escape}
-                org.apache.isis.applib.annotation.Bulk${symbol_dollar}InteractionContext,${symbol_escape}
-                org.apache.isis.applib.services.scratchpad.Scratchpad,${symbol_escape}
-                org.apache.isis.applib.services.queryresultscache.QueryResultsCache,${symbol_escape}
-                org.apache.isis.core.wrapper.WrapperFactoryDefault,${symbol_escape}
-                org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} JDO implementation of the EventBusService, ${symbol_escape}
-                org.apache.isis.objectstore.jdo.datanucleus.service.eventbus.EventBusServiceJdo,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} JDO implementation of the CommandService, ${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdo,${symbol_escape}
+                ${symbol_pound} isis-module-command-jdo services, ${symbol_escape}
                 ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoContributions,${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoRepository,${symbol_escape}
+                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoContributions,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} JDO implementation of the AuditingService, ${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdo,${symbol_escape}
+                ${symbol_pound} isis-module-audit-jdo services, ${symbol_escape}
                 ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdoContributions,${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdoRepository,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of BackgroundService (depends on: MementoService & BackgroundCommandService & CommandContext service), ${symbol_escape}
-                ${symbol_pound} org.apache.isis.core.runtime.services.background.BackgroundServiceDefault,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} JDO implementation of the BackgroundCommandService (depends on: CommandContext service), ${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdo,${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoContributions,${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoRepository,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} JDO implementation of the PublishingService (depends on: CommandContext service), ${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdo,${symbol_escape}
+                ${symbol_pound} isis-module-publishing-jdo services, ${symbol_escape}
                 ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoContributions,${symbol_escape}
-                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoRepository,${symbol_escape}
-                ${symbol_pound} org.apache.isis.viewer.restfulobjects.rendering.eventserializer.RestfulObjectsSpecEventSerializer,${symbol_escape}
                 ${symbol_escape}
                 ${symbol_pound} JDO implementation of the two SettingsServices, ${symbol_escape}
-                ${symbol_pound}org.apache.isis.objectstore.jdo.applib.service.settings.ApplicationSettingsServiceJdo,${symbol_escape}
-                ${symbol_pound}org.apache.isis.objectstore.jdo.applib.service.settings.UserSettingsServiceJdo,${symbol_escape}
+                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.settings.ApplicationSettingsServiceJdo,${symbol_escape}
+                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.settings.UserSettingsServiceJdo,${symbol_escape}
                 ${symbol_escape}
                 ${symbol_pound} Core (example) implementations of auditing and publishing services, ${symbol_escape}
-                ${symbol_pound}org.apache.isis.applib.services.audit.AuditingService3${symbol_dollar}Stderr,${symbol_escape}
-                ${symbol_pound}org.apache.isis.applib.services.publish.PublishingService${symbol_dollar}Stderr,${symbol_escape}
+                ${symbol_pound} org.apache.isis.applib.services.audit.AuditingService3${symbol_dollar}Stderr,${symbol_escape}
+                ${symbol_pound} org.apache.isis.applib.services.publish.PublishingService${symbol_dollar}Stderr,${symbol_escape}
+                ${symbol_pound}
 
 
 ${symbol_pound} Specify the (optional) test fixtures

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
index a14497c..6a9ba8c 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
@@ -23,7 +23,7 @@
 <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-        <title>Apache Isis&trade; Simple (Wicket/Restful/JDO/Shiro) App</title>
+        <title>Apache Isis&trade; SimpleApp</title>
         
         <style type="text/css">
 body {
@@ -60,64 +60,46 @@ ${symbol_pound}wrapper {
             <img alt="Isis Logo" src="about/images/isis-logo.png" />
              
             <p>
-            <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+            <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a framework to let you rapidly develop
             domain-driven apps in Java.  This app has been generated using Isis' 
-            <a href="http://isis.apache.org/getting-started/simple-archetype.html">simple</a> archetype, 
-            which configures Isis' most commonly used components as part of a very simple and purposefully minimal 
-            application.
+            <a href="http://isis.apache.org/intro/getting-started/simple%61pp-archetype.html" target="_blank">SimpleApp</a> archetype,
+            which configures Isis to run a very simple and purposefully minimal application.
             
             <p>
             The app itself consists of a single domain class, 
-            <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank"><tt>SimpleObject</tt></a>, 
-            along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank"><tt>SimpleObjects</tt></a>.
+            <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank"><tt>SimpleObject</tt></a>,
+            along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/dom/src/main/java/dom/simple/SimpleObjects.java" target="_blank"><tt>SimpleObjects</tt></a>.
             </p>
-            
-            <p>
-            Alternatively, if you'd like to start from a richer starting point, you might want to use the
-            <a href="http://isis.apache.org/getting-started/quickstart-archetype.html">quickstart</a> archetype, which
-            generates a straightforward &quot;todo&quot; app.
-            </p>
-            
-            <p>
-            The Isis components that are configured in this app are:
-            </p>
-            
-            <table>
-                <tr>
-                    <th>Component</th>
-                    <th>Access URL</th>
-                    <th>Description</th>
-                    <th>Further info on the Isis website</th>
-                </tr>
-                <tr>
-                    <td>Wicket Viewer</td>
-                    <td><a href="wicket/">wicket/</a></td>
-                    <td>Provides a generic UI for end-users, built with <a href="http://wicket.apache.org">Apache Wicket</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/viewers/wicket/about.html">wicket viewer</a></td>
-                </tr>
-                <tr>
-                    <td>RestfulObjects Viewer</td>
-                    <td><a href="restful/">restful/</a></td>
-                    <td>Provides a RESTful API conformant with the <a href="http://restfulobjects.org">Restful Objects</a> spec</td>
-                    <td><a href="http://isis.apache.org/components/viewers/restfulobjects/about.html">restfulobjects viewer</a></td>
-                </tr>
-                <tr>
-                    <td>JDO Object&nbsp;Store</td>
-                    <td>n/a</td>
-                    <td>Persists objects using JDO/DataNucleus; configured to use HSQLDB in-memory database</td>
-                    <td><a href="http://isis.apache.org/components/objectstores/jdo/about.html">jdo&nbsp;objectstore</a></td>
-                </tr>
-                <tr>
-                    <td>Shiro Security</td>
-                    <td>n/a</td>
-                    <td>Provides authentication and authorization, using <a href="http://shiro.apache.org">Apache Shiro</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/security/shiro/about.html">shiro security</a></td>
-                </tr>
-            </table>
-            
+
+            <p>To access the app:</p>
+            <ul>
+                <li>
+                    <p>
+                        <b><a href="wicket/">wicket/</a></b>
+                    </p>
+                    <p>
+                        provides accesses to a generic UI for end-users,
+                        Isis' <a href="http://isis.apache.org/components/viewers/wicket/about.html" target="_blank">Wicket Viewer</a>.
+                        As its name suggests, this viewer is built on top of <a href="http://wicket.apache.org" target="_blank">Apache Wicket</a>&trade;.
+                    </p>
+                </li>
+                <li>
+                    <p>
+                        <b>
+                            <a href="restful/">restful/</a>
+                        </b>
+                    </p>
+                    <p>
+                        provides access to a RESTful API conformant with the
+                        <a href="http://restfulobjects.org">Restful Objects</a> spec</td>.  This is part of Isis Core.  The
+                        implementation technology is JBoss RestEasy.
+                    </p>
+                </li>
+            </ul>
+
             <p>
-            The default user/password is <i>sven/pass</i> (as configured in the 
-            <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/shiro.ini">shiro.ini</a> file).
+            The default user/password is <b><i>sven/pass</i></b> (as configured in the
+            <a href="https://github.com/apache/isis/blob/master/example/application/simple%61pp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
             </p>
             
         </div>

http://git-wip-us.apache.org/repos/asf/isis/blob/b33b2960/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
index 4a7b33c..e213c98 100644
--- a/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
+++ b/example/archetype/simpleapp/src/test/resources/projects/basic/archetype.properties
@@ -1,4 +1,4 @@
-#Mon Jun 02 14:06:09 BST 2014
+#Fri Jul 25 08:15:06 BST 2014
 package=it.pkg
 version=0.1-SNAPSHOT
 groupId=archetype.it


[29/39] ISIS-839: recreating todoapp archetype

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
index 49f9ff2..e6c49a1 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -140,7 +140,7 @@ ${symbol_pound}
 ${symbol_pound} Providing such capabilities as i18n
 ${symbol_pound}
 
-isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i18n.resourcebundle.I18nDecoratorUsingResourceBundleInstaller
+isis.reflector.facet-decorators=org.apache.isis.core.metamodel.facetdecorator.i18n.resourcebundle.I18nDecoratorUsingResourceBundleInstaller
 
 
 ${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbo
 l_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}
@@ -157,78 +157,38 @@ ${symbol_pound} the set of the classes for Isis to instantiate as domain service
 ${symbol_pound} From these domain service instances the rest of the metamodel is discovered, while the 
 ${symbol_pound} end-user gains access to other domain objects by invoking the actions of the domain services.
 ${symbol_pound}
-
+isis.services-installer=configuration-and-annotation
+isis.services.ServicesInstallerFromAnnotation.packagePrefix=app,${symbol_escape}
+                                                            dom.todo,${symbol_escape}
+                                                            fixture.todo,${symbol_escape}
+                                                            webapp.admin,${symbol_escape}
+                                                            webapp.prototyping
 
 ${symbol_pound}isis.services.prefix = 
 isis.services = ${symbol_escape}
-                10:dom.todo.ToDoItems,${symbol_escape}
-                20:app.ToDoItemAnalysis,${symbol_escape}
-                30:webapp.admin.Admin,${symbol_escape}
-                30:webapp.admin.AdminContributions,${symbol_escape}
-                ${symbol_escape}
-                40:fixture.todo.ToDoItemsFixturesService,${symbol_escape}
-                40:webapp.prototyping.DeveloperUtilities,${symbol_escape}
-                40:webapp.prototyping.ExternalLinksService,${symbol_escape}
-                ${symbol_escape}
-                app.ToDoAppDashboardService,${symbol_escape}
-                app.ToDoItemAnalysisContributions,${symbol_escape}
-                dom.todo.ToDoItemContributions,${symbol_escape}
-                dom.todo.ToDoItemSubscriptions,${symbol_escape}
+                org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} supporting services if using JDO objectstore, ${symbol_escape}
+                ${symbol_pound} customizable exception handling, ${symbol_escape}
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,${symbol_escape}
-                org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of the various bookmark/memento services, ${symbol_escape}
-                org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault,${symbol_escape}
-                org.apache.isis.core.runtime.services.memento.MementoServiceDefault,${symbol_escape}
-                org.apache.isis.core.runtime.services.xmlsnapshot.XmlSnapshotServiceDefault,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of a clock service, ${symbol_escape}
-                org.apache.isis.applib.services.clock.ClockService,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of the various (inter)action services, ${symbol_escape}
-                org.apache.isis.applib.services.command.CommandContext,${symbol_escape}
-                org.apache.isis.applib.annotation.Bulk${symbol_dollar}InteractionContext,${symbol_escape}
-                org.apache.isis.applib.services.scratchpad.Scratchpad,${symbol_escape}
-                org.apache.isis.applib.services.queryresultscache.QueryResultsCache,${symbol_escape}
-                org.apache.isis.core.wrapper.WrapperFactoryDefault,${symbol_escape}
-                org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} JDO implementation of the EventBusService, ${symbol_escape}
-                org.apache.isis.objectstore.jdo.datanucleus.service.eventbus.EventBusServiceJdo,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} JDO implementation of the CommandService, ${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdo,${symbol_escape}
+                ${symbol_pound} isis-module-command-jdo services, ${symbol_escape}
                 org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoContributions,${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoRepository,${symbol_escape}
+                org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoContributions,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} JDO implementation of the AuditingService, ${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdo,${symbol_escape}
+                ${symbol_pound} isis-module-audit-jdo services, ${symbol_escape}
                 org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdoContributions,${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdoRepository,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} Core implementation of BackgroundService (depends on: MementoService & BackgroundCommandService & CommandContext service), ${symbol_escape}
-                org.apache.isis.core.runtime.services.background.BackgroundServiceDefault,${symbol_escape}
-                ${symbol_escape}
-                ${symbol_pound} JDO implementation of the BackgroundCommandService (depends on: CommandContext service), ${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdo,${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoContributions,${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoRepository,${symbol_escape}
                 ${symbol_escape}
-                ${symbol_pound} JDO implementation of the PublishingService (depends on: CommandContext service), ${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdo,${symbol_escape}
+                ${symbol_pound} isis-module-publishing-jdo services, ${symbol_escape}
                 org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoContributions,${symbol_escape}
-                org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoRepository,${symbol_escape}
-                org.apache.isis.viewer.restfulobjects.rendering.eventserializer.RestfulObjectsSpecEventSerializer,${symbol_escape}
                 ${symbol_escape}
                 ${symbol_pound} JDO implementation of the two SettingsServices, ${symbol_escape}
-                ${symbol_pound}org.apache.isis.objectstore.jdo.applib.service.settings.ApplicationSettingsServiceJdo,${symbol_escape}
-                ${symbol_pound}org.apache.isis.objectstore.jdo.applib.service.settings.UserSettingsServiceJdo,${symbol_escape}
+                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.settings.ApplicationSettingsServiceJdo,${symbol_escape}
+                ${symbol_pound} org.apache.isis.objectstore.jdo.applib.service.settings.UserSettingsServiceJdo,${symbol_escape}
                 ${symbol_escape}
                 ${symbol_pound} Core (example) implementations of auditing and publishing services, ${symbol_escape}
-                ${symbol_pound}org.apache.isis.applib.services.audit.AuditingService3${symbol_dollar}Stderr,${symbol_escape}
-                ${symbol_pound}org.apache.isis.applib.services.publish.PublishingService${symbol_dollar}Stderr,${symbol_escape}
+                ${symbol_pound} org.apache.isis.applib.services.audit.AuditingService3${symbol_dollar}Stderr,${symbol_escape}
+                ${symbol_pound} org.apache.isis.applib.services.publish.PublishingService${symbol_dollar}Stderr,${symbol_escape}
+                ${symbol_pound}
 
 
 ${symbol_pound} Specify the (optional) test fixtures

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/logging.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/logging.properties b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/logging.properties
index 0b6d023..9720880 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/logging.properties
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/logging.properties
@@ -71,6 +71,12 @@ log4j.appender.connection.Append=false
 log4j.appender.connection.layout=org.apache.log4j.PatternLayout
 log4j.appender.connection.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
 
+log4j.appender.wicket.i18n=org.apache.log4j.RollingFileAppender
+log4j.appender.wicket.i18n.file=./logs/wicket-i18n.log
+log4j.appender.wicket.i18n.append=false
+log4j.appender.wicket.i18n.layout=org.apache.log4j.PatternLayout
+log4j.appender.wicket.i18n.layout.ConversionPattern=%d [%-20c{1} %-10t %-5p]  %m%n
+
 
 
 
@@ -163,6 +169,32 @@ ${symbol_pound}log4j.additivity.org.apache.isis.viewer.wicket.viewer.integration
 
 
 
+${symbol_pound} to track Wicket i18n
+log4j.logger.org.apache.wicket.Localizer=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.Localizer=false
+
+log4j.logger.org.apache.wicket.resource.loader.ClassStringResourceLoader=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.resource.loader.ClassStringResourceLoader=false
+
+log4j.logger.org.apache.wicket.resource.loader.ComponentStringResourceLoader=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.resource.loader.ComponentStringResourceLoader=false
+
+log4j.logger.org.apache.wicket.resource.loader.PackageStringResourceLoader=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.resource.loader.PackageStringResourceLoader=false
+
+log4j.logger.org.apache.wicket.resource.loader.BundleStringResourceLoader=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.resource.loader.BundleStringResourceLoader=false
+
+log4j.logger.org.apache.wicket.resource.loader.InitializerStringResourceLoader=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.resource.loader.InitializerStringResourceLoader=false
+
+log4j.logger.org.apache.wicket.resource.loader.ValidatorStringResourceLoader=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.resource.loader.ValidatorStringResourceLoader=false
+
+log4j.logger.org.apache.wicket.core.util.resource.locator.ExtensionResourceNameIterator=WARN,Console,wicket.i18n
+log4j.additivity.org.apache.wicket.core.util.resource.locator.ExtensionResourceNameIterator=false
+
+
 
 ${symbol_pound} quieten some of the noisier classes in Isis' bootstrapping
 log4j.logger.org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder=WARN,Console

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/persistor.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/persistor.properties b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/persistor.properties
index 6c96534..fe47df4 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/persistor.properties
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/persistor.properties
@@ -94,14 +94,14 @@ ${symbol_pound}
 ${symbol_pound} MS SQL Server
 ${symbol_pound}
 ${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName=com.microsoft.sqlserver.jdbc.SQLServerDriver
-${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:sqlserver://127.0.0.1:1433;instance=.;databaseName=quickstart
-${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=sa
-${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=p4ssword
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:sqlserver://127.0.0.1:1433;instance=.;databaseName=isis
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=isis
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=isis
 
 ${symbol_pound}
 ${symbol_pound} MS SQL Server (using log4jdbc-remix)
 ${symbol_pound}
 ${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName=net.sf.log4jdbc.DriverSpy
-${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:log4jdbc:sqlserver://127.0.0.1:1433;instance=SQLEXPRESS;databaseName=jdo
-${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=jdo
-${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=jdopass
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:log4jdbc:sqlserver://127.0.0.1:1433;instance=.;databaseName=isis
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=isis
+${symbol_pound}isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=isis

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/shiro.ini
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/shiro.ini b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/shiro.ini
index 2263069..8c5f7d3 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/shiro.ini
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/shiro.ini
@@ -84,6 +84,16 @@ securityManager.realms = $realm1,$realm2
 
 
 
+#######
+# optional, configure realm(s) to use Isis' extended permission syntax
+# (see webapp/realm1.ini for usage)
+#######
+
+# permissionResolver = org.apache.isis.security.shiro.authorization.IsisPermissionResolver
+# realm1.permissionResolver = $permissionResolver
+# realm2.permissionResolver = $permissionResolver
+
+
 # -----------------------------------------------------------------------------
 # Users and their assigned roles
 # -----------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
index e461216..1200900 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/about/index.html
@@ -23,7 +23,7 @@
 <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-        <title>Apache Isis&trade; QuickStart (Wicket/Restful/JDO/Shiro) App</title>
+        <title>Apache Isis&trade; TodoApp</title>
         
         <style type="text/css">
 body {
@@ -60,104 +60,90 @@ ${symbol_pound}wrapper {
             <img alt="Isis Logo" src="about/images/isis-logo.png" />
              
             <p>
-            <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+            <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a framework to let you rapidly develop
             domain-driven apps in Java.  This app has been generated using Isis' 
-            <a href="http://isis.apache.org/getting-started/quickstart-archetype.html">quickstart</a> archetype, 
-            which configures Isis' most commonly used components as part of a straightforward
-            &quot;todo&quot; app.  
+            <a href="http://isis.apache.org/intro/getting-started/todo%61pp-archetype.html" target="_blank">TodoApp</a> archetype,
+            which configures Isis to run a (quite feature rich) &quot;todo&quot; app.
             
             <p>
             The app itself consists of a single domain class, <tt>ToDoItem</tt>, along with a number of supporting 
-            services.  You are free to strip it back and reuse for your own purposes.
+            services.
             </p>
-            
-            <p>
-            Alternatively, if stripping back this app is too much work, you might want to start with the even simpler 
-            <a href="http://isis.apache.org/getting-started/simple-archetype.html">simple</a> archetype, and use this
-            app by way of reference.
-            </p>
-            
+
+            <p>To access the app:</p>
+            <ul>
+                <li>
+                    <p>
+                        <b><a href="wicket/">wicket/</a></b>
+                    </p>
+                    <p>
+                        provides accesses to a generic UI for end-users,
+                        Isis' <a href="http://isis.apache.org/components/viewers/wicket/about.html" target="_blank">Wicket Viewer</a>.
+                        As its name suggests, this viewer is built on top of <a href="http://wicket.apache.org" target="_blank">Apache Wicket</a>&trade;.
+                    </p>
+                </li>
+                <li>
+                    <p>
+                        <b>
+                            <a href="restful/">restful/</a>
+                        </b>
+                    </p>
+                    <p>
+                        provides access to a RESTful API conformant with the
+                        <a href="http://restfulobjects.org">Restful Objects</a> spec</td>.  This is part of Isis Core.  The
+                        implementation technology is JBoss RestEasy.
+                    </p>
+                </li>
+            </ul>
+
             <p>
-            The Isis components that are configured in this app are:
+                The default user/password is <b><i>sven/pass</i></b> (as configured in the
+                <a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
             </p>
-            
-            <table>
-                <tr>
-                    <th>Component</th>
-                    <th>Access URL</th>
-                    <th>Description</th>
-                    <th>Further info on the Isis website</th>
-                </tr>
-                <tr>
-                    <td>Wicket Viewer</td>
-                    <td><a href="wicket/">wicket/</a></td>
-                    <td>Provides a generic UI for end-users, built with <a href="http://wicket.apache.org">Apache Wicket</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/viewers/wicket/about.html">wicket viewer</a></td>
-                </tr>
-                <tr>
-                    <td>RestfulObjects Viewer</td>
-                    <td><a href="restful/">restful/</a></td>
-                    <td>Provides a RESTful API conformant with the <a href="http://restfulobjects.org">Restful Objects</a> spec</td>
-                    <td><a href="http://isis.apache.org/components/viewers/restfulobjects/about.html">restfulobjects viewer</a></td>
-                </tr>
-                <tr>
-                    <td>JDO Object&nbsp;Store</td>
-                    <td>n/a</td>
-                    <td>Persists objects using JDO/DataNucleus; configured to use HSQLDB in-memory database</td>
-                    <td><a href="http://isis.apache.org/components/objectstores/jdo/about.html">jdo&nbsp;objectstore</a></td>
-                </tr>
-                <tr>
-                    <td>Shiro Security</td>
-                    <td>n/a</td>
-                    <td>Provides authentication and authorization, using <a href="http://shiro.apache.org">Apache Shiro</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/security/shiro/about.html">shiro security</a></td>
-                </tr>
-            </table>
 
             <p>
-            The default user/password is <i>sven/pass</i> (as configured in the 
-            <a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/shiro.ini">shiro.ini</a> file).
+                To build your own app, while you could start with this todo app and remove/rename as required, you are
+                probably better off using the extremely minimal
+                <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype.
             </p>
-    
-            <h2>App contents</h2>
+
+                <h2>App contents</h2>
             <p>The key files in this &quot;todo&quot; app are:</p>
             <!-- the hrefs below are partially URL encoded to prevent them from being modified when the archetype is created -->
             <ul>
               <li>Domain classes (todo functionality) (in <tt>dom</tt> module)
                   <ul>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java"><tt>ToDoItem</tt></a> domain entity
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank"><tt>ToDoItem</tt></a> domain entity
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java"><tt>ToDoItems</tt></a> domain service (repository/factory)
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/dom/todo/ToDoItems.java" target="_blank"><tt>ToDoItems</tt></a> domain service (repository/factory)
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/app/ToDoItemAnalysis.java"><tt>ToDoItemAnalysis</tt></a> application service analysing todo items
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/app/ToDoItemAnalysis.java" target="_blank"><tt>ToDoItemAnalysis</tt></a> application service analysing todo items
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/app/ToDoAppDashboard.java"><tt>ToDoAppDashboard</tt></a> dashboard application service
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/dom/src/main/java/app/ToDoAppDashboard.java" target="_blank"><tt>ToDoAppDashboard</tt></a> dashboard application service
                   </li>
                   </ul>
               </li>
-              <li>Fixture classes (in <tt>fixture</tt> module and <tt>webapp</tt> module)
+              <li>Fixture scripts (in <tt>fixture</tt> module)
                 <ul>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java"><tt>ToDoItemsFixture</tt></a> example fixture data (since configured for in-memory HSQLDB)
-                  </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/java/webapp/prototyping/ToDoItemsFixturesService.java"><tt>ToDoItemsFixtureService</tt></a> domain service to install fixtures at run-time
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java" target="_blank"><tt>ToDoItemsFixtureService</tt></a> domain service to install fixtures at run-time
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml">WEB-INF/web.xml</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml" target="_blank">WEB-INF/web.xml</a></tt> (in <tt>webapp</tt> module)
                 <ul>
-                  <li><tt>AboutPageFilter</tt> - filter that redirects to this page 
-                  </li>
-                  <li><tt>ResourceCachingFilter</tt> and <tt>ResourceServlet</tt> - filter and servlet for serving up static resources. 
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L98" target="_blank">ResourceCachingFilter</a></tt> and <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L134" target="_blank">ResourceServlet</a></tt> - filter and servlet for serving up static resources.
                   </li>
-                  <li><tt>WicketFilter</tt> - filter for the wicket application, mapped to <tt>/wicket/*</tt> 
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L174" target="_blank">WicketFilter</a></tt> - filter for the wicket application, mapped to <tt>/wicket/*</tt>
                   </li>
-                  <li><tt>ResteasyBootstrap</tt>, <tt>IsisSessionFilterForRestfulObjects</tt>, <tt>RestfulObjectsRestEasyDispatcher</tt> - listeners, filters and servlets to bootstrap and map restful objects viewer to <tt>/restful/*</tt>. 
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L223" target="_blank">ResteasyBootstrap</a></tt>,
+                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L240" target="_blank">IsisSessionFilterForRestfulObjects</a></tt>,
+                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L271" target="_blank">RestfulObjectsRestEasyDispatcher</a></tt> - listeners, filters and servlets to bootstrap and map restful objects viewer to <tt>/restful/*</tt>.
                   </li>
-                  <li>commented out <tt>IsisWebAppBootstrapper</tt> listener; this is NOT required unless wicket viewer config is removed 
+                  <li>commented out <tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/web.xml${symbol_pound}L208" target="_blank">IsisWebAppBootstrapper</a></tt> listener; this is NOT required unless wicket viewer config is removed
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties">WEB-INF/isis.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/isis.properties" target="_blank">WEB-INF/isis.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li><tt>isis.services</tt> - specifies the two domain services described above (<tt>ToDoItems</tt> and <tt>ToDoItemsFixtureService</tt>), appearing on the menu bar in the Wicket viewer, 
                   along with a number of hidden framework-provided domain services demonstrating Isis' support for publishing, auditing and customizable error handling 
@@ -168,48 +154,25 @@ ${symbol_pound}wrapper {
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties">WEB-INF/persistor_datanucleus.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties" target="_blank">WEB-INF/persistor_datanucleus.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>configuration for JDO object store 
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties">WEB-INF/persistor.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/persistor.properties" target="_blank">WEB-INF/persistor.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>JDBC URL for JDO object store 
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/shiro.ini">WEB-INF/shiro.ini</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todo%61pp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">WEB-INF/shiro.ini</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>configuration for Shiro security
                   </li>
                 </ul>
               </li>
             </ul>
-    
-            <h2>Next steps</h2>
-            <p>Use the following as a check-list for refactoring towards your own application:
-            <ul>
-              <li>Experiment with users, roles and permissions (in <tt>shiro.ini</tt>)
-              </li>
-              <li>Refactor the <tt>ToDoItem</tt>, <tt>ToDoItems</tt> and <tt>ToDoItemsJdo</tt> towards your own application's functionality; obviously you are likely to introduce many more classes and services
-              </li>
-              <li>Reconfigure <tt>persistor.properties</tt> to specify the JDBC URL to the database you wish to work with; if necessary also update the <tt>pom.xml</tt> in the <tt>webapp</tt> module to add the JDBC driver to the classpath
-              </li>
-              <li>Fine-tune other RDBMS settings in <tt>persistor_datanucleus.properties</tt>
-              </li>
-              <li>Assuming you are using a persistent data store, then remove the <tt>ToDoItemsFixtureService</tt> from the <tt>isis.properties</tt> file (<tt>isis.services</tt> key).  Alternatively you could keep but refactor to provide a similar service for your own application's domain.    
-              </li>
-              <li>Replace (or remove) the publishing and auditing service implementations.
-              </li>
-              <li>If you want the wicket viewer but NOT the restful objects viewer, then remove/comment out the <tt>ResteasyBootstrap</tt>, <tt>IsisSessionFilterForRestfulObjects</tt>, <tt>RestfulObjectsRestEasyDispatcher</tt> from <tt>web.xml</tt>
-              </li>
-              <li>If you want the restful objects viewer but NOT the wicket viewer, then remove/comment out the <tt>WicketFilter</tt> filter and uncomment the <tt>IsisWebAppBootstrapper</tt> listener in <tt>web.xml</tt>
-              </li>
-              <li>Update this page (<tt>about/index.html</tt>) as required for your application, and/or remove the <tt>welcome-file-list</tt> from <tt>web.xml</tt>
-              </li>
-            </ul>
         </div>
     </body>
 </html>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/css/application.css
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/css/application.css b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/css/application.css
index 639d1c3..ac67314 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/css/application.css
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/css/application.css
@@ -77,4 +77,4 @@ li.x-highlight a {
 div.x-key span.scalarName {
 	color: red;
 }
-}
\ No newline at end of file
+

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/test/resources/projects/basic/archetype.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/test/resources/projects/basic/archetype.properties b/example/archetype/todoapp/src/test/resources/projects/basic/archetype.properties
index 89bcac7..10828aa 100644
--- a/example/archetype/todoapp/src/test/resources/projects/basic/archetype.properties
+++ b/example/archetype/todoapp/src/test/resources/projects/basic/archetype.properties
@@ -1,4 +1,4 @@
-#Mon Jun 02 13:50:06 BST 2014
+#Fri Jul 25 08:24:30 BST 2014
 package=it.pkg
 version=0.1-SNAPSHOT
 groupId=archetype.it


[36/39] git commit: ISIS-839: bump wicket viewer's parent pom (ie isis core) from 1.6.0 to 1.7.0-SNAPSHOT.

Posted by da...@apache.org.
ISIS-839: bump wicket viewer's parent pom (ie isis core) from 1.6.0 to 1.7.0-SNAPSHOT.


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

Branch: refs/heads/master
Commit: e6863211ffcd2a88cd179f49828a43d63a49d457
Parents: 4431855
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 06:27:24 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:35:48 2014 +0100

----------------------------------------------------------------------
 component/viewer/wicket/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e6863211/component/viewer/wicket/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/pom.xml b/component/viewer/wicket/pom.xml
index b3d60d0..f4a1e3f 100644
--- a/component/viewer/wicket/pom.xml
+++ b/component/viewer/wicket/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 		<relativePath>../../../core/pom.xml</relativePath>
 	</parent>
 


[35/39] git commit: ISIS-839: bump up non-released poms to 1.7.0-SNAPSHOT

Posted by da...@apache.org.
ISIS-839: bump up non-released poms to 1.7.0-SNAPSHOT

... namely scimpi, maven plugin, and also the submodules of the example apps.


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

Branch: refs/heads/master
Commit: 44318559057f067c00e54a7a99f2d365f8b0f5e9
Parents: e35f974
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 06:26:33 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:35:36 2014 +0100

----------------------------------------------------------------------
 component/viewer/scimpi/pom.xml                  | 2 +-
 example/application/simpleapp/dom/pom.xml        | 2 +-
 example/application/simpleapp/fixture/pom.xml    | 2 +-
 example/application/simpleapp/integtests/pom.xml | 2 +-
 example/application/simpleapp/pom.xml            | 6 +++---
 example/application/simpleapp/webapp/pom.xml     | 2 +-
 example/application/todoapp/dom/pom.xml          | 2 +-
 example/application/todoapp/fixture/pom.xml      | 2 +-
 example/application/todoapp/integtests/pom.xml   | 2 +-
 example/application/todoapp/pom.xml              | 6 +++---
 example/application/todoapp/webapp/pom.xml       | 2 +-
 tool/maven-plugin/pom.xml                        | 2 +-
 12 files changed, 16 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/component/viewer/scimpi/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/pom.xml b/component/viewer/scimpi/pom.xml
index a118d79..40f49be 100644
--- a/component/viewer/scimpi/pom.xml
+++ b/component/viewer/scimpi/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
 		<relativePath>../../../core/pom.xml</relativePath>
 	</parent>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/simpleapp/dom/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/pom.xml b/example/application/simpleapp/dom/pom.xml
index c8e8682..ee0b9f7 100644
--- a/example/application/simpleapp/dom/pom.xml
+++ b/example/application/simpleapp/dom/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
     	<groupId>org.apache.isis.example.application</groupId>
     	<artifactId>simpleapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>simpleapp-dom</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/simpleapp/fixture/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/fixture/pom.xml b/example/application/simpleapp/fixture/pom.xml
index 1df5113..697da6a 100644
--- a/example/application/simpleapp/fixture/pom.xml
+++ b/example/application/simpleapp/fixture/pom.xml
@@ -23,7 +23,7 @@
     <parent>
     	<groupId>org.apache.isis.example.application</groupId>
         <artifactId>simpleapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>simpleapp-fixture</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/simpleapp/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/integtests/pom.xml b/example/application/simpleapp/integtests/pom.xml
index d5d4978..e8cd887 100644
--- a/example/application/simpleapp/integtests/pom.xml
+++ b/example/application/simpleapp/integtests/pom.xml
@@ -23,7 +23,7 @@
     <parent>
     	<groupId>org.apache.isis.example.application</groupId>
         <artifactId>simpleapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>simpleapp-integtests</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml
index 91f5399..831b201 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -23,7 +23,7 @@
 
     <groupId>org.apache.isis.example.application</groupId>
     <artifactId>simpleapp</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.7.0-SNAPSHOT</version>
 
     <name>Simple App</name>
 
@@ -34,8 +34,8 @@
     </prerequisites>
 
 	<properties>
-        <isis.version>1.6.0</isis.version>
-        <isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
+        <isis.version>1.7.0-SNAPSHOT</isis.version>
+        <isis-viewer-wicket.version>1.7.0-SNAPSHOT</isis-viewer-wicket.version>
 
         <!-- must be consistent with the versions defined by the JDO Objectstore -->
         <datanucleus-accessplatform-jdo-rdbms.version>3.3.6</datanucleus-accessplatform-jdo-rdbms.version>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/simpleapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/pom.xml b/example/application/simpleapp/webapp/pom.xml
index 22c8442..51b12b5 100644
--- a/example/application/simpleapp/webapp/pom.xml
+++ b/example/application/simpleapp/webapp/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.isis.example.application</groupId>
         <artifactId>simpleapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>simpleapp-webapp</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/todoapp/dom/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/pom.xml b/example/application/todoapp/dom/pom.xml
index 0ced3c1..2837f99 100644
--- a/example/application/todoapp/dom/pom.xml
+++ b/example/application/todoapp/dom/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
     	<groupId>org.apache.isis.example.application</groupId>
     	<artifactId>todoapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>todoapp-dom</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/todoapp/fixture/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/fixture/pom.xml b/example/application/todoapp/fixture/pom.xml
index 2447d4e..96fe6dc 100644
--- a/example/application/todoapp/fixture/pom.xml
+++ b/example/application/todoapp/fixture/pom.xml
@@ -23,7 +23,7 @@
     <parent>
     	<groupId>org.apache.isis.example.application</groupId>
         <artifactId>todoapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>todoapp-fixture</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/todoapp/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/integtests/pom.xml b/example/application/todoapp/integtests/pom.xml
index fd2284b..1b6ff93 100644
--- a/example/application/todoapp/integtests/pom.xml
+++ b/example/application/todoapp/integtests/pom.xml
@@ -23,7 +23,7 @@
     <parent>
     	<groupId>org.apache.isis.example.application</groupId>
         <artifactId>todoapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
 	<artifactId>todoapp-integtests</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/pom.xml b/example/application/todoapp/pom.xml
index 1d40e99..c45cbe2 100644
--- a/example/application/todoapp/pom.xml
+++ b/example/application/todoapp/pom.xml
@@ -23,7 +23,7 @@
 
     <groupId>org.apache.isis.example.application</groupId>
     <artifactId>todoapp</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.7.0-SNAPSHOT</version>
 
     <name>ToDo App</name>
 
@@ -34,8 +34,8 @@
     </prerequisites>
 
 	<properties>
-        <isis.version>1.6.0</isis.version>
-		<isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
+        <isis.version>1.7.0-SNAPSHOT</isis.version>
+		<isis-viewer-wicket.version>1.7.0-SNAPSHOT</isis-viewer-wicket.version>
 
         <!-- must be consistent with the versions defined by the JDO Objectstore -->
         <datanucleus-accessplatform-jdo-rdbms.version>3.3.6</datanucleus-accessplatform-jdo-rdbms.version>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/example/application/todoapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/pom.xml b/example/application/todoapp/webapp/pom.xml
index 1230973..a7de70a 100644
--- a/example/application/todoapp/webapp/pom.xml
+++ b/example/application/todoapp/webapp/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.isis.example.application</groupId>
         <artifactId>todoapp</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>todoapp-webapp</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/44318559/tool/maven-plugin/pom.xml
----------------------------------------------------------------------
diff --git a/tool/maven-plugin/pom.xml b/tool/maven-plugin/pom.xml
index bf5932c..8428378 100644
--- a/tool/maven-plugin/pom.xml
+++ b/tool/maven-plugin/pom.xml
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.apache.isis.core</groupId>
 		<artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
+        <version>1.7.0-SNAPSHOT</version>
 		<relativePath>../../core/pom.xml</relativePath>
 	</parent>
 


[39/39] git commit: ISIS-839: updating STATUS

Posted by da...@apache.org.
ISIS-839: updating STATUS


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

Branch: refs/heads/master
Commit: 090e491ccbafcd208722762213de7aa72db4426f
Parents: fee6d39
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 28 14:28:03 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 28 14:28:03 2014 +0100

----------------------------------------------------------------------
 STATUS | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/090e491c/STATUS
----------------------------------------------------------------------
diff --git a/STATUS b/STATUS
index aa4eea7..1adc756 100644
--- a/STATUS
+++ b/STATUS
@@ -21,10 +21,10 @@ Description
 
 TLP releases:
 
-  * isis-1.6.0                                     : 25 Jul 2014
-  * isis-viewer-wicket-1.6.0                       : 25 Jul 2014
-  * todoapp-archetype-1.6.0                        : 25 Jul 2014
-  * simpleapp-archetype-1.6.0                      : 25 Jul 2014
+  * isis-1.6.0                                     : 28 Jul 2014
+  * isis-viewer-wicket-1.6.0                       : 28 Jul 2014
+  * todoapp-archetype-1.6.0                        : 28 Jul 2014
+  * simpleapp-archetype-1.6.0                      : 28 Jul 2014
 
   * isis-1.5.0                                     : 08 Jun 2014
   * isis-objectstore-jdo-1.5.0                     : 08 Jun 2014


[24/39] git commit: [maven-release-plugin] prepare for next development iteration

Posted by da...@apache.org.
[maven-release-plugin] prepare for next development iteration


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

Branch: refs/heads/master
Commit: 49512f7eca3287e3236c3a285d23bd82d1897bd5
Parents: 5a28330
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 07:44:17 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 07:44:17 2014 +0100

----------------------------------------------------------------------
 component/viewer/wicket/applib/pom.xml |  2 +-
 component/viewer/wicket/impl/pom.xml   |  2 +-
 component/viewer/wicket/model/pom.xml  |  2 +-
 component/viewer/wicket/pom.xml        | 20 ++++++++------------
 component/viewer/wicket/tck/pom.xml    |  8 ++------
 component/viewer/wicket/ui/pom.xml     |  2 +-
 6 files changed, 14 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/49512f7e/component/viewer/wicket/applib/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/applib/pom.xml b/component/viewer/wicket/applib/pom.xml
index abbaa67..6c079f6 100644
--- a/component/viewer/wicket/applib/pom.xml
+++ b/component/viewer/wicket/applib/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-viewer-wicket-applib</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/49512f7e/component/viewer/wicket/impl/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/pom.xml b/component/viewer/wicket/impl/pom.xml
index 1f4917f..7e98dff 100644
--- a/component/viewer/wicket/impl/pom.xml
+++ b/component/viewer/wicket/impl/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<name>Isis Wicket Viewer Implementation</name>

http://git-wip-us.apache.org/repos/asf/isis/blob/49512f7e/component/viewer/wicket/model/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/pom.xml b/component/viewer/wicket/model/pom.xml
index 0f896e3..9093154 100644
--- a/component/viewer/wicket/model/pom.xml
+++ b/component/viewer/wicket/model/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-viewer-wicket-model</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/49512f7e/component/viewer/wicket/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/pom.xml b/component/viewer/wicket/pom.xml
index 4100b7f..b3d60d0 100644
--- a/component/viewer/wicket/pom.xml
+++ b/component/viewer/wicket/pom.xml
@@ -30,7 +30,7 @@
 
 	<groupId>org.apache.isis.viewer</groupId>
 	<artifactId>isis-viewer-wicket</artifactId>
-    <version>1.6.0</version>
+    <version>1.7.0-SNAPSHOT</version>
 
 	<name>Isis Wicket Viewer</name>
 
@@ -101,41 +101,41 @@
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-applib</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-model</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-model</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 				<scope>test</scope>
 				<type>test-jar</type>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-ui</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-ui</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 				<scope>test</scope>
 				<type>test-jar</type>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-impl</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.isis.viewer</groupId>
 				<artifactId>isis-viewer-wicket-impl</artifactId>
-                <version>1.6.0</version>
+                <version>1.7.0-SNAPSHOT</version>
 				<scope>test</scope>
 				<type>test-jar</type>
 			</dependency>
@@ -321,8 +321,4 @@
 
 		</dependencies>
 	</dependencyManagement>
-
-  <scm>
-    <tag>isis-viewer-wicket-1.6.0-RC3</tag>
-  </scm>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/49512f7e/component/viewer/wicket/tck/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/tck/pom.xml b/component/viewer/wicket/tck/pom.xml
index 3f58e01..6d9eb7a 100644
--- a/component/viewer/wicket/tck/pom.xml
+++ b/component/viewer/wicket/tck/pom.xml
@@ -29,13 +29,13 @@
 
     <groupId>org.apache.isis.viewer</groupId>
 	<artifactId>isis-viewer-wicket-tck</artifactId>
-    <version>1.6.0</version>
+    <version>1.7.0-SNAPSHOT</version>
 
 	<name>Isis Wicket Viewer TCK tests</name>
 
 
 	<properties>
-        <isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
+        <isis-viewer-wicket.version>1.7.0-SNAPSHOT</isis-viewer-wicket.version>
 		<siteBaseDir>..</siteBaseDir>
 		<relativeUrl>wicket-tck/</relativeUrl>
 		<!-- until someone comes up with a better solution -->
@@ -114,8 +114,4 @@
         </dependency>
 
 	</dependencies>
-
-  <scm>
-    <tag>isis-viewer-wicket-1.6.0-RC3</tag>
-  </scm>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/49512f7e/component/viewer/wicket/ui/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/pom.xml b/component/viewer/wicket/ui/pom.xml
index 2e96c9c..f783d98 100644
--- a/component/viewer/wicket/ui/pom.xml
+++ b/component/viewer/wicket/ui/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.isis.viewer</groupId>
 		<artifactId>isis-viewer-wicket</artifactId>
-        <version>1.6.0</version>
+        <version>1.7.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-viewer-wicket-ui</artifactId>


[16/39] git commit: ISIS-839: updating example app .launch files and out-of-date welcome.html and the about/index.html files.

Posted by da...@apache.org.
ISIS-839: updating example app .launch files and out-of-date welcome.html and the about/index.html files.

Also new recreate-archetype.sh script.


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

Branch: refs/heads/master
Commit: 3fca9990d03c970e5b17f2af8464d80e54cdc526
Parents: 0e346e4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jul 23 22:29:55 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 18:19:58 2014 +0100

----------------------------------------------------------------------
 .../launch/SimpleApp-PROTOTYPE-jrebel.launch    |  2 +-
 .../SimpleApp-PROTOTYPE-no-fixtures.launch      |  2 +-
 .../SimpleApp-PROTOTYPE-with-fixtures.launch    |  2 +-
 .../launch/SimpleApp-SERVER-no-fixtures.launch  |  2 +-
 .../src/main/resources/webapp/welcome.html      |  8 +-
 .../webapp/src/main/webapp/about/index.html     | 55 ++-----------
 .../launch/ToDoApp-PROTOTYPE-jrebel.launch      |  2 +-
 .../ToDoApp-PROTOTYPE-with-fixtures.launch      |  2 +-
 .../ide/eclipse/launch/ToDoApp-PROTOTYPE.launch |  2 +-
 .../ide/eclipse/launch/ToDoApp-SERVER.launch    |  2 +-
 .../src/main/resources/webapp/welcome.html      |  7 +-
 .../webapp/src/main/webapp/about/index.html     | 81 ++++++--------------
 scripts/recreate-archetype.sh                   | 70 +++++++++++++++++
 13 files changed, 116 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
index 698333c..e45f7f0 100644
--- a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
+++ b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
@@ -25,7 +25,7 @@
 <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type PROTOTYPE"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simple_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simpleapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="${jrebel_args} -Drebel.log=false -Drebel.check_class_hash=true -Drebel.packages_exclude=org.apache.isis -Dproject.root=${project_loc}/.. -Dtarget.dir=target-ide -Drebel.plugins=C:/github/danhaywood/isis-jrebel-plugin/target/danhaywood-isis-jrebel-plugin-1.0.0-SNAPSHOT.jar -Disis-jrebel-plugin.packagePrefix=dom.simple,org.apache.isis.objectstore.jdo.applib -Disis-jrebel-plugin.loggingLevel=warn -XX:MaxPermSize=128m"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-no-fixtures.launch
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-no-fixtures.launch b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-no-fixtures.launch
index 346fe3c..96a9a54 100644
--- a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-no-fixtures.launch
+++ b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-no-fixtures.launch
@@ -18,6 +18,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type SERVER_PROTOTYPE"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simple_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simpleapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-with-fixtures.launch
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-with-fixtures.launch b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-with-fixtures.launch
index 8bf2091..dbfb2b3 100644
--- a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-with-fixtures.launch
+++ b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-with-fixtures.launch
@@ -15,6 +15,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 -D isis.persistor.datanucleus.install-fixtures=true --type SERVER_PROTOTYPE"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simple_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simpleapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-SERVER-no-fixtures.launch
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-SERVER-no-fixtures.launch b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-SERVER-no-fixtures.launch
index e09fdbb..238b5a6 100644
--- a/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-SERVER-no-fixtures.launch
+++ b/example/application/simpleapp/webapp/ide/eclipse/launch/SimpleApp-SERVER-no-fixtures.launch
@@ -18,6 +18,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type SERVER"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simple_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simpleapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html b/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
index b25e363..fdfd6dd 100644
--- a/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
+++ b/example/application/simpleapp/webapp/src/main/resources/webapp/welcome.html
@@ -18,17 +18,17 @@
   under the License.
 -->
 <p class="intro">
-    <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+    <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a platform to let you rapidly develop
     domain-driven apps in Java.
     <br/>
     <br/>
     This app has been generated using Isis' 
-    <a href="http://isis.apache.org/getting-started/simple-archetype.html">simple</a> archetype, 
+    <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype,
     which configures Isis' most commonly used components as part of a very simple and purposefully minimal application.
     <br/>
     <br/>
-    The app itself consists of a single domain class, <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank">SimpleObject</a>, 
-    along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank">SimpleObjects</a>.
+    The app itself consists of a single domain class, <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank">SimpleObject</a>,
+    along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank">SimpleObjects</a>.
     <br/>
     <br/>
     For more details, see the <a href="http://isis.apache.org/documentation.html" target="_blank">Isis website</a>.

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/simpleapp/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/about/index.html b/example/application/simpleapp/webapp/src/main/webapp/about/index.html
index f5d88ac..3b9ef8f 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/about/index.html
+++ b/example/application/simpleapp/webapp/src/main/webapp/about/index.html
@@ -20,7 +20,7 @@
 <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-        <title>Apache Isis&trade; Simple (Wicket/Restful/JDO/Shiro) App</title>
+        <title>Apache Isis&trade; SimpleApp</title>
         
         <style type="text/css">
 body {
@@ -57,64 +57,25 @@ th, td {
             <img alt="Isis Logo" src="about/images/isis-logo.png" />
              
             <p>
-            <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+            <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a framework to let you rapidly develop
             domain-driven apps in Java.  This app has been generated using Isis' 
-            <a href="http://isis.apache.org/getting-started/simple-archetype.html">simple</a> archetype, 
-            which configures Isis' most commonly used components as part of a very simple and purposefully minimal 
-            application.
+            <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype,
+            which configures Isis to run a very simple and purposefully minimal application.
             
             <p>
             The app itself consists of a single domain class, 
-            <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank"><tt>SimpleObject</tt></a>, 
-            along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java"  target="_blank"><tt>SimpleObjects</tt></a>.
+            <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java"  target="_blank"><tt>SimpleObject</tt></a>,
+            along with an equally simple (factory/repository) domain service, <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObjects.java" target="_blank"><tt>SimpleObjects</tt></a>.
             </p>
             
             <p>
             Alternatively, if you'd like to start from a richer starting point, you might want to use the
-            <a href="http://isis.apache.org/getting-started/quickstart-archetype.html">quickstart</a> archetype, which
-            generates a straightforward &quot;todo&quot; app.
+            <a href="http://isis.apache.org/intro/getting-started/todoapp-archetype.html" target="_blank">TodoApp</a> archetype.
             </p>
             
             <p>
-            The Isis components that are configured in this app are:
-            </p>
-            
-            <table>
-                <tr>
-                    <th>Component</th>
-                    <th>Access URL</th>
-                    <th>Description</th>
-                    <th>Further info on the Isis website</th>
-                </tr>
-                <tr>
-                    <td>Wicket Viewer</td>
-                    <td><a href="wicket/">wicket/</a></td>
-                    <td>Provides a generic UI for end-users, built with <a href="http://wicket.apache.org">Apache Wicket</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/viewers/wicket/about.html">wicket viewer</a></td>
-                </tr>
-                <tr>
-                    <td>RestfulObjects Viewer</td>
-                    <td><a href="restful/">restful/</a></td>
-                    <td>Provides a RESTful API conformant with the <a href="http://restfulobjects.org">Restful Objects</a> spec</td>
-                    <td><a href="http://isis.apache.org/components/viewers/restfulobjects/about.html">restfulobjects viewer</a></td>
-                </tr>
-                <tr>
-                    <td>JDO Object&nbsp;Store</td>
-                    <td>n/a</td>
-                    <td>Persists objects using JDO/DataNucleus; configured to use HSQLDB in-memory database</td>
-                    <td><a href="http://isis.apache.org/components/objectstores/jdo/about.html">jdo&nbsp;objectstore</a></td>
-                </tr>
-                <tr>
-                    <td>Shiro Security</td>
-                    <td>n/a</td>
-                    <td>Provides authentication and authorization, using <a href="http://shiro.apache.org">Apache Shiro</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/security/shiro/about.html">shiro security</a></td>
-                </tr>
-            </table>
-            
-            <p>
             The default user/password is <b><i>sven/pass</i></b> (as configured in the
-            <a href="https://github.com/apache/isis/blob/master/example/application/simple%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/shiro.ini">shiro.ini</a> file).
+            <a href="https://github.com/apache/isis/blob/master/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
             </p>
             
         </div>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-jrebel.launch
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-jrebel.launch b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-jrebel.launch
index 39cabb7..14ac1bf 100644
--- a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-jrebel.launch
+++ b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-jrebel.launch
@@ -18,7 +18,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type SERVER_PROTOTYPE"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quickstart_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="todoapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="${jrebel_args} -Drebel.log=false -Drebel.check_class_hash=true -Drebel.packages_exclude=org.apache.isis -Dproject.root=${project_loc}/.. -Dtarget.dir=target-ide -Drebel.plugins=C:/github/danhaywood/isis-jrebel-plugin/target/danhaywood-isis-jrebel-plugin-1.0.0-SNAPSHOT.jar -Disis-jrebel-plugin.packagePrefix=dom.todo,org.apache.isis.objectstore.jdo.applib -Disis-jrebel-plugin.loggingLevel=warn -XX:MaxPermSize=128m"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-with-fixtures.launch
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-with-fixtures.launch b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-with-fixtures.launch
index f46805b..2e272aa 100644
--- a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-with-fixtures.launch
+++ b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE-with-fixtures.launch
@@ -15,6 +15,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 -D isis.persistor.datanucleus.install-fixtures=true --type SERVER_PROTOTYPE"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quickstart_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="todoapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE.launch
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE.launch b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE.launch
index bc280d9..5870cb4 100644
--- a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE.launch
+++ b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-PROTOTYPE.launch
@@ -18,6 +18,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type SERVER_PROTOTYPE"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quickstart_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="todoapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-SERVER.launch
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-SERVER.launch b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-SERVER.launch
index 721d7b7..a4ad877 100644
--- a/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-SERVER.launch
+++ b/example/application/todoapp/webapp/ide/eclipse/launch/ToDoApp-SERVER.launch
@@ -18,6 +18,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type SERVER"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quickstart_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="todoapp-webapp"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 </launchConfiguration>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html b/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
index 8cd6f04..1dbee0b 100644
--- a/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
+++ b/example/application/todoapp/webapp/src/main/resources/webapp/welcome.html
@@ -18,16 +18,17 @@
   under the License.
 -->
 <p class="intro">
-    <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+    <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a platform to let you rapidly develop
     domain-driven apps in Java.
     <br/>
     <br/>
     This app has been generated using Isis' 
-    <a href="http://isis.apache.org/getting-started/quickstart-archetype.html">quickstart</a> archetype, 
+    <a href="http://isis.apache.org/intro/getting-started/todoapp-archetype.html" target="_blank">TodoApp</a> archetype,
     which configures Isis' most commonly used components in a straightforward &quot;todo&quot; app.
     <br/>
     <br/>
-    The core domain functionality class is provided by the <a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java"  target="_blank">ToDoItem</a> domain class.  
+    The core functionality of the app is provided by the
+    <a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank">ToDoItem</a> domain class.
     Supporting services provide additional capabilities.
     <br/>
     <br/>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/example/application/todoapp/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/about/index.html b/example/application/todoapp/webapp/src/main/webapp/about/index.html
index 6322108..f248f38 100644
--- a/example/application/todoapp/webapp/src/main/webapp/about/index.html
+++ b/example/application/todoapp/webapp/src/main/webapp/about/index.html
@@ -20,7 +20,7 @@
 <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-        <title>Apache Isis&trade; QuickStart (Wicket/Restful/JDO/Shiro) App</title>
+        <title>Apache Isis&trade; TodoApp</title>
         
         <style type="text/css">
 body {
@@ -57,10 +57,10 @@ th, td {
             <img alt="Isis Logo" src="about/images/isis-logo.png" />
              
             <p>
-            <a href="http://isis.apache.org">Apache Isis</a>&trade; is a framework to let you rapidly develop 
+            <a href="http://isis.apache.org" target="_blank">Apache Isis</a>&trade; is a framework to let you rapidly develop
             domain-driven apps in Java.  This app has been generated using Isis' 
-            <a href="http://isis.apache.org/getting-started/quickstart-archetype.html">quickstart</a> archetype, 
-            which configures Isis' most commonly used components as part of a (quite feature rich) &quot;todo&quot; app.
+            <a href="http://isis.apache.org/intro/getting-started/todoapp-archetype.html" target="_blank">TodoApp</a> archetype,
+            which configures Isis to run a (quite feature rich) &quot;todo&quot; app.
             
             <p>
             The app itself consists of a single domain class, <tt>ToDoItem</tt>, along with a number of supporting 
@@ -70,49 +70,12 @@ th, td {
             <p>
             To build your own app, while you could start with this todo app and remove/rename as required, you are
             probably better off using the extremely minimal
-            <a href="http://isis.apache.org/getting-started/simple-archetype.html">simple</a> archetype.
+            <a href="http://isis.apache.org/intro/getting-started/simpleapp-archetype.html" target="_blank">SimpleApp</a> archetype.
             </p>
-            
-            <p>
-            The Isis components that are configured in this app are:
-            </p>
-            
-            <table>
-                <tr>
-                    <th>Component</th>
-                    <th>Access URL</th>
-                    <th>Description</th>
-                    <th>Further info on the Isis website</th>
-                </tr>
-                <tr>
-                    <td>Wicket Viewer</td>
-                    <td><a href="wicket/">wicket/</a></td>
-                    <td>Provides a generic UI for end-users, built with <a href="http://wicket.apache.org">Apache Wicket</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/viewers/wicket/about.html">wicket viewer</a></td>
-                </tr>
-                <tr>
-                    <td>RestfulObjects Viewer</td>
-                    <td><a href="restful/">restful/</a></td>
-                    <td>Provides a RESTful API conformant with the <a href="http://restfulobjects.org">Restful Objects</a> spec</td>
-                    <td><a href="http://isis.apache.org/components/viewers/restfulobjects/about.html">restfulobjects viewer</a></td>
-                </tr>
-                <tr>
-                    <td>JDO Object&nbsp;Store</td>
-                    <td>n/a</td>
-                    <td>Persists objects using JDO/DataNucleus; configured to use HSQLDB in-memory database</td>
-                    <td><a href="http://isis.apache.org/components/objectstores/jdo/about.html">jdo&nbsp;objectstore</a></td>
-                </tr>
-                <tr>
-                    <td>Shiro Security</td>
-                    <td>n/a</td>
-                    <td>Provides authentication and authorization, using <a href="http://shiro.apache.org">Apache Shiro</a>&trade;</td>
-                    <td><a href="http://isis.apache.org/components/security/shiro/about.html">shiro security</a></td>
-                </tr>
-            </table>
 
             <p>
             The default user/password is <b><i>sven/pass</i></b> (as configured in the
-            <a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/shiro.ini">shiro.ini</a> file).
+            <a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">shiro.ini</a> file).
             </p>
     
             <h2>App contents</h2>
@@ -121,37 +84,37 @@ th, td {
             <ul>
               <li>Domain classes (todo functionality) (in <tt>dom</tt> module)
                   <ul>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java"><tt>ToDoItem</tt></a> domain entity
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java" target="_blank"><tt>ToDoItem</tt></a> domain entity
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java"><tt>ToDoItems</tt></a> domain service (repository/factory)
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItems.java" target="_blank"><tt>ToDoItems</tt></a> domain service (repository/factory)
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/app/ToDoItemAnalysis.java"><tt>ToDoItemAnalysis</tt></a> application service analysing todo items
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/app/ToDoItemAnalysis.java" target="_blank"><tt>ToDoItemAnalysis</tt></a> application service analysing todo items
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/app/ToDoAppDashboard.java"><tt>ToDoAppDashboard</tt></a> dashboard application service
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboard.java" target="_blank"><tt>ToDoAppDashboard</tt></a> dashboard application service
                   </li>
                   </ul>
               </li>
               <li>Fixture scripts (in <tt>fixture</tt> module)
                 <ul>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java"><tt>ToDoItemsFixtureService</tt></a> domain service to install fixtures at run-time
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java" target="_blank"><tt>ToDoItemsFixtureService</tt></a> domain service to install fixtures at run-time
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml">WEB-INF/web.xml</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml" target="_blank">WEB-INF/web.xml</a></tt> (in <tt>webapp</tt> module)
                 <ul>
-                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L98">ResourceCachingFilter</a></tt> and <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L134">ResourceServlet</a></tt> - filter and servlet for serving up static resources.
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L98" target="_blank">ResourceCachingFilter</a></tt> and <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L134" target="_blank">ResourceServlet</a></tt> - filter and servlet for serving up static resources.
                   </li>
-                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L174">WicketFilter</a></tt> - filter for the wicket application, mapped to <tt>/wicket/*</tt>
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L174" target="_blank">WicketFilter</a></tt> - filter for the wicket application, mapped to <tt>/wicket/*</tt>
                   </li>
-                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L223">ResteasyBootstrap</a></tt>,
-                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L240">IsisSessionFilterForRestfulObjects</a></tt>,
-                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L271">RestfulObjectsRestEasyDispatcher</a></tt> - listeners, filters and servlets to bootstrap and map restful objects viewer to <tt>/restful/*</tt>.
+                  <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L223" target="_blank">ResteasyBootstrap</a></tt>,
+                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L240" target="_blank">IsisSessionFilterForRestfulObjects</a></tt>,
+                      <tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L271" target="_blank">RestfulObjectsRestEasyDispatcher</a></tt> - listeners, filters and servlets to bootstrap and map restful objects viewer to <tt>/restful/*</tt>.
                   </li>
-                  <li>commented out <tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/web.xml#L208">IsisWebAppBootstrapper</a></tt> listener; this is NOT required unless wicket viewer config is removed
+                  <li>commented out <tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml#L208" target="_blank">IsisWebAppBootstrapper</a></tt> listener; this is NOT required unless wicket viewer config is removed
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties">WEB-INF/isis.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties" target="_blank">WEB-INF/isis.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li><tt>isis.services</tt> - specifies the two domain services described above (<tt>ToDoItems</tt> and <tt>ToDoItemsFixtureService</tt>), appearing on the menu bar in the Wicket viewer, 
                   along with a number of hidden framework-provided domain services demonstrating Isis' support for publishing, auditing and customizable error handling 
@@ -162,19 +125,19 @@ th, td {
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties">WEB-INF/persistor_datanucleus.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties" target="_blank">WEB-INF/persistor_datanucleus.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>configuration for JDO object store 
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/persistor.properties">WEB-INF/persistor.properties</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/persistor.properties" target="_blank">WEB-INF/persistor.properties</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>JDBC URL for JDO object store 
                   </li>
                 </ul>
               </li>
-              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/webapp/src/main/webapp/WEB-INF/shiro.ini">WEB-INF/shiro.ini</a></tt> (in <tt>webapp</tt> module)
+              <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/todoapp/webapp/src/main/webapp/WEB-INF/shiro.ini" target="_blank">WEB-INF/shiro.ini</a></tt> (in <tt>webapp</tt> module)
                 <ul>
                   <li>configuration for Shiro security
                   </li>

http://git-wip-us.apache.org/repos/asf/isis/blob/3fca9990/scripts/recreate-archetype.sh
----------------------------------------------------------------------
diff --git a/scripts/recreate-archetype.sh b/scripts/recreate-archetype.sh
new file mode 100644
index 0000000..5538198
--- /dev/null
+++ b/scripts/recreate-archetype.sh
@@ -0,0 +1,70 @@
+export ISISART=$(basename $(pwd))-archetype
+
+TOFIX=""
+
+env | grep ISISTMP >/dev/null
+if [ $? -ne 0 ]; then
+    echo "\$ISISTMP not set!"
+    TOFIX="$TOFIX\nexport ISISTMP=/c/tmp"
+fi
+
+env | grep ISISDEV >/dev/null
+if [ $? -ne 0 ]; then
+    echo "\$ISISDEV not set!"
+    TOFIX="$TOFIX\nexport ISISDEV=1.7.0-SNAPSHOT"
+fi
+
+env | grep ISISREL >/dev/null
+if [ $? -ne 0 ]; then
+    echo "\$ISISREL not set!"
+    TOFIX="$TOFIX\nexport ISISDEV=1.6.0"
+fi
+
+env | grep ISISRC >/dev/null
+if [ $? -ne 0 ]; then
+    echo "\$ISISRC  not set!"
+    TOFIX="$TOFIX\nexport ISISRC=RC1"
+fi
+
+env | grep ISISPAR >/dev/null
+if [ $? -ne 0 ]; then
+    echo "\$ISISPAR not set! (Isis parent release, usually same as ISISREL)"
+    TOFIX="$TOFIX\nexport ISISPAR=$ISISREL"
+fi
+
+if [ "$TOFIX" != "" ]; then
+    echo -e $TOFIX
+    exit 1
+fi
+
+export ISISCPT=$(echo $ISISART | cut -d- -f2)
+export ISISCPN=$(echo $ISISART | cut -d- -f1)
+
+#
+#
+#
+env | grep ISIS | sort
+
+
+echo "mvn clean ..."
+mvn clean
+
+echo "removing other non-source files ..."
+for a in .project .classpath .settings bin .idea target-ide; do /bin/find . -name $a -exec rm -r {} \;; done
+/bin/find . -name "*.iml" -exec rm {} \;
+/bin/find . -name "*.log" -exec rm {} \;
+/bin/find . -name "pom.xml.*" -exec rm {} \;
+
+echo "mvn archetype:create-from-project ..."
+mvn archetype:create-from-project
+
+echo "groovy script to update archetypes ..."
+groovy ../../../scripts/updateGeneratedArchetypeSources.groovy -n $ISISCPN -v $ISISPAR
+
+echo "deleting old archetype ..."
+git rm -rf ../../archetype/$ISISCPN
+rm -rf ../../archetype/$ISISCPN
+
+echo "adding new archetype ..."
+mv target/generated-sources/archetype ../../archetype/$ISISCPN
+git add ../../archetype/$ISISCPN


[02/39] git commit: ISIS-839: core updates, moving BackgroundServiceDefault from isis-core-runtime to isis-module-background

Posted by da...@apache.org.
ISIS-839: core updates, moving BackgroundServiceDefault from isis-core-runtime to isis-module-background


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

Branch: refs/heads/master
Commit: 0ddb462cf8c8fb55000577d6604e8365af5414bf
Parents: 38f69b8
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 11:08:43 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 11:08:43 2014 +0100

----------------------------------------------------------------------
 core/module-background/pom.xml                  |   6 +
 .../background/BackgroundCommandExecution.java  | 171 +++++++++++
 .../background/BackgroundServiceDefault.java    | 287 +++++++++++++++++++
 core/module-command-jdo/pom.xml                 |  10 +-
 ...xecutionFromBackgroundCommandServiceJdo.java |   3 +
 .../background/BackgroundCommandExecution.java  | 171 -----------
 .../background/BackgroundServiceDefault.java    | 286 ------------------
 7 files changed, 476 insertions(+), 458 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/module-background/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-background/pom.xml b/core/module-background/pom.xml
index 2e3d055..0a18d07 100644
--- a/core/module-background/pom.xml
+++ b/core/module-background/pom.xml
@@ -52,6 +52,12 @@
             <artifactId>isis-core-unittestsupport</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-runtime</artifactId>
+        </dependency>
+
    </dependencies>
 
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
new file mode 100644
index 0000000..e2d30c8
--- /dev/null
+++ b/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
@@ -0,0 +1,171 @@
+/**
+ *  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.runtime.services.background;
+
+import java.util.List;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Lists;
+import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.applib.services.background.ActionInvocationMemento;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.Command.Executor;
+import org.apache.isis.applib.services.command.CommandContext;
+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.RootOidDefault;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.facets.actions.interaction.CommandUtil;
+import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
+import org.apache.isis.core.runtime.sessiontemplate.AbstractIsisSessionTemplate;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.core.runtime.system.transaction.TransactionalClosureAbstract;
+
+/**
+ * Intended to be used as a base class for executing queued up {@link Command background action}s.
+ * 
+ * <p>
+ * This implementation uses the {@link #findBackgroundCommandsToExecute() hook method} so that it is
+ * independent of the location where the actions have actually been persisted to.
+ */
+public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemplate {
+
+    private final MementoServiceDefault mementoService;
+
+    public BackgroundCommandExecution() {
+        // same as configured by BackgroundServiceDefault
+        mementoService = new MementoServiceDefault().withNoEncoding();
+    }
+    
+    // //////////////////////////////////////
+
+    
+    protected void doExecute(Object context) {
+
+        final PersistenceSession persistenceSession = getPersistenceSession();
+        final IsisTransactionManager transactionManager = getTransactionManager(persistenceSession);
+        final List<Command> commands = Lists.newArrayList();
+        transactionManager.executeWithinTransaction(new TransactionalClosureAbstract() {
+            @Override
+            public void execute() {
+                commands.addAll(findBackgroundCommandsToExecute());
+            }
+        });
+
+        for (final Command command : commands) {
+            execute(transactionManager, command);
+        }
+    }
+
+    /**
+     * Mandatory hook method
+     */
+    protected abstract List<? extends Command> findBackgroundCommandsToExecute();
+
+    // //////////////////////////////////////
+
+    
+    private void execute(final IsisTransactionManager transactionManager, final Command command) {
+        transactionManager.executeWithinTransaction(new TransactionalClosureAbstract() {
+            @Override
+            public void execute() {
+                commandContext.setCommand(command);
+                try {
+
+                    command.setStartedAt(Clock.getTimeAsJavaSqlTimestamp());
+                    command.setExecutor(Executor.BACKGROUND);
+
+                    final String memento = command.getMemento();
+                    final ActionInvocationMemento aim = new ActionInvocationMemento(mementoService, memento);
+
+                    final String actionId = aim.getActionId();
+
+                    final Bookmark targetBookmark = aim.getTarget();
+                    final Object targetObject = bookmarkService.lookup(targetBookmark);
+
+                    final ObjectAdapter targetAdapter = adapterFor(targetObject);
+                    final ObjectSpecification specification = targetAdapter.getSpecification();
+
+                    final ObjectAction objectAction = findAction(specification, actionId);
+                    if(objectAction == null) {
+                        throw new Exception("Unknown action '" + actionId + "'");
+                    }
+
+                    final ObjectAdapter[] argAdapters = argAdaptersFor(aim);
+                    final ObjectAdapter resultAdapter = objectAction.execute(targetAdapter, argAdapters);
+                    if(resultAdapter != null) {
+                        Bookmark resultBookmark = CommandUtil.bookmarkFor(resultAdapter);
+                        command.setResult(resultBookmark);
+                    }
+
+                } catch (Exception e) {
+                    command.setException(Throwables.getStackTraceAsString(e));
+                } finally {
+                    command.setCompletedAt(Clock.getTimeAsJavaSqlTimestamp());
+                }
+            }
+        });
+    }
+
+    private ObjectAction findAction(final ObjectSpecification specification, final String actionId) {
+        final List<ObjectAction> objectActions = specification.getObjectActions(Contributed.INCLUDED);
+        for (final ObjectAction objectAction : objectActions) {
+            if(objectAction.getIdentifier().toClassAndNameIdentityString().equals(actionId)) {
+                return objectAction;
+            }
+        }
+        return null;
+    }
+
+    private ObjectAdapter[] argAdaptersFor(final ActionInvocationMemento aim) throws ClassNotFoundException {
+        final int numArgs = aim.getNumArgs();
+        final List<ObjectAdapter> argumentAdapters = Lists.newArrayList();
+        for(int i=0; i<numArgs; i++) {
+            final ObjectAdapter argAdapter = argAdapterFor(aim, i);
+            argumentAdapters.add(argAdapter);
+        }
+        return argumentAdapters.toArray(new ObjectAdapter[]{});
+    }
+
+    private ObjectAdapter argAdapterFor(final ActionInvocationMemento aim, int num) throws ClassNotFoundException {
+        final Class<?> argType = aim.getArgType(num);
+        final Object arg = aim.getArg(num, argType);
+        if(arg == null) {
+            return null;
+        }
+        if(Bookmark.class != argType) {
+            return adapterFor(arg);
+        } else {
+            final Bookmark argBookmark = (Bookmark)arg;
+            final RootOid rootOid = RootOidDefault.create(argBookmark);
+            return adapterFor(rootOid);
+        }
+    }
+
+    
+    // //////////////////////////////////////
+
+    @javax.inject.Inject
+    private BookmarkService bookmarkService;
+
+    @javax.inject.Inject
+    private CommandContext commandContext;
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java b/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
new file mode 100644
index 0000000..01bc347
--- /dev/null
+++ b/core/module-background/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
@@ -0,0 +1,287 @@
+/**
+ *  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.runtime.services.background;
+
+import javassist.util.proxy.MethodFilter;
+import javassist.util.proxy.MethodHandler;
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.PostConstruct;
+import com.google.common.collect.Lists;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.background.ActionInvocationMemento;
+import org.apache.isis.applib.services.background.BackgroundCommandService;
+import org.apache.isis.applib.services.background.BackgroundService;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.core.commons.ensure.Ensure;
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.lang.ArrayExtensions;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.JavassistEnhanced;
+import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
+import org.apache.isis.core.metamodel.facets.actions.interaction.CommandUtil;
+import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+
+import static org.hamcrest.CoreMatchers.*;
+
+/**
+ * Depends on an implementation of {@link org.apache.isis.applib.services.background.BackgroundCommandService} to
+ * be configured.
+ */
+@DomainService
+public class BackgroundServiceDefault implements BackgroundService {
+
+    private final MementoServiceDefault mementoService;
+    
+    public BackgroundServiceDefault() {
+        this(new MementoServiceDefault());
+    }
+    
+    BackgroundServiceDefault(MementoServiceDefault mementoService) {
+        this.mementoService = mementoService.withNoEncoding();
+    }
+    
+    // //////////////////////////////////////
+
+    
+    @Programmatic
+    @PostConstruct
+    public void init(Map<String,String> props) {
+        ensureDependenciesInjected();
+    }
+    
+    private void ensureDependenciesInjected() {
+        Ensure.ensureThatState(this.bookmarkService, is(not(nullValue())), "BookmarkService domain service must be configured");
+        Ensure.ensureThatState(this.backgroundCommandService, is(not(nullValue())), "BackgroundCommandService domain service must be configured");
+        Ensure.ensureThatState(this.commandContext, is(not(nullValue())), "CommandContext domain service must be configured");
+    }
+
+
+    private ObjectSpecificationDefault getJavaSpecificationOfOwningClass(final Method method) {
+        return getJavaSpecification(method.getDeclaringClass());
+    }
+
+    private ObjectSpecificationDefault getJavaSpecification(final Class<?> cls) {
+        final ObjectSpecification objectSpec = getSpecification(cls);
+        if (!(objectSpec instanceof ObjectSpecificationDefault)) {
+            throw new UnsupportedOperationException(
+                "Only Java is supported "
+                + "(specification is '" + objectSpec.getClass().getCanonicalName() + "')");
+        }
+        return (ObjectSpecificationDefault) objectSpec;
+    }
+
+    private ObjectSpecification getSpecification(final Class<?> type) {
+        return getSpecificationLoader().loadSpecification(type);
+    }
+
+
+    // //////////////////////////////////////
+
+    @Programmatic
+    @Override
+    public <T> T execute(final T domainObject) {
+        final Class<? extends Object> cls = domainObject.getClass();
+        final MethodHandler methodHandler = newMethodHandler(domainObject);
+        return newProxy(cls, methodHandler);
+    }
+
+    @SuppressWarnings("unchecked")
+    private <T> T newProxy(Class<? extends Object> cls, MethodHandler methodHandler) {
+        final ProxyFactory proxyFactory = new ProxyFactory();
+        proxyFactory.setSuperclass(cls);
+        proxyFactory.setInterfaces(ArrayExtensions.combine(cls.getInterfaces(), new Class<?>[] { JavassistEnhanced.class }));
+
+        proxyFactory.setFilter(new MethodFilter() {
+            @Override
+            public boolean isHandled(final Method m) {
+                // ignore finalize()
+                return !m.getName().equals("finalize");
+            }
+        });
+
+        final Class<T> proxySubclass = proxyFactory.createClass();
+        try {
+            final T newInstance = proxySubclass.newInstance();
+            final ProxyObject proxyObject = (ProxyObject) newInstance;
+            proxyObject.setHandler(methodHandler);
+
+            return newInstance;
+        } catch (final InstantiationException e) {
+            throw new IsisException(e);
+        } catch (final IllegalAccessException e) {
+            throw new IsisException(e);
+        }
+    }
+
+    private <T> MethodHandler newMethodHandler(final T domainObject) {
+        return new MethodHandler() {
+            @Override
+            public Object invoke(final Object proxied, final Method proxyMethod, final Method proxiedMethod, final Object[] args) throws Throwable {
+
+                final boolean inheritedFromObject = proxyMethod.getDeclaringClass().equals(Object.class);
+                if(inheritedFromObject) {
+                    return proxyMethod.invoke(domainObject, args);
+                }
+
+                final ObjectAdapter targetAdapter = getAdapterManager().adapterFor(domainObject);
+                final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(proxyMethod);
+                final ObjectMember member = targetObjSpec.getMember(proxyMethod);
+
+                if(member == null) {
+                    return proxyMethod.invoke(domainObject, args);
+                }
+
+                if(!(member instanceof ObjectAction)) {
+                    throw new UnsupportedOperationException(
+                            "Only actions can be executed in the background "
+                                    + "(method " + proxiedMethod.getName() + " represents a " + member.getFeatureType().name() + "')");
+                }
+
+                final ObjectAction action = (ObjectAction) member;
+
+                final String actionIdentifier = CommandUtil.actionIdentifierFor(action);
+                final String targetClassName = CommandUtil.targetClassNameFor(targetAdapter);
+                final String targetActionName = CommandUtil.targetActionNameFor(action);
+                final String targetArgs = CommandUtil.argDescriptionFor(action, adaptersFor(args));
+                
+                final Bookmark domainObjectBookmark = bookmarkService.bookmarkFor(domainObject);
+
+                final List<Class<?>> argTypes = Lists.newArrayList();
+                final List<Object> argObjs = Lists.newArrayList();
+                CommandUtil.buildMementoArgLists(mementoService, bookmarkService, proxiedMethod, args, argTypes, argObjs);
+
+                final Command command = commandContext.getCommand();
+                
+                final ActionInvocationMemento aim = 
+                        new ActionInvocationMemento(mementoService, 
+                                actionIdentifier, 
+                                domainObjectBookmark,
+                                argTypes,
+                                argObjs);
+               
+                backgroundCommandService.schedule(aim, command, targetClassName, targetActionName, targetArgs);
+                
+                return null;
+            }
+
+            ObjectAdapter[] adaptersFor(final Object[] args) {
+                final AdapterManager adapterManager = getAdapterManager();
+                return CommandUtil.adaptersFor(args, adapterManager);
+            }
+
+        };
+    }
+
+    @Override
+    public ActionInvocationMemento asActionInvocationMemento(Method method, Object domainObject, Object[] args) {
+        
+        final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(method);
+        final ObjectMember member = targetObjSpec.getMember(method);
+        if(member == null) {
+            return null;
+        }
+        if(!(member instanceof ObjectAction)) {
+            return null;
+        }
+
+        final ObjectAction action = (ObjectAction) member;
+        final String actionIdentifier = CommandUtil.actionIdentifierFor(action);
+        
+        final Bookmark domainObjectBookmark = bookmarkService.bookmarkFor(domainObject);
+
+        final List<Class<?>> argTypes = Lists.newArrayList();
+        final List<Object> argObjs = Lists.newArrayList();
+        CommandUtil.buildMementoArgLists(mementoService, bookmarkService, method, args, argTypes, argObjs);
+
+        final ActionInvocationMemento aim = 
+                new ActionInvocationMemento(mementoService, 
+                        actionIdentifier, 
+                        domainObjectBookmark,
+                        argTypes,
+                        argObjs);
+       
+        return aim;
+    }
+
+
+    /**
+     * Not API
+     */
+    ActionInvocationMemento newActionInvocationMemento(String mementoStr) {
+        return new ActionInvocationMemento(mementoService, mementoStr);
+    }
+
+    
+    // //////////////////////////////////////
+
+    private BackgroundCommandService backgroundCommandService;
+    /**
+     * Mandatory service; must be configured.
+     */
+    public void injectBackgroundCommandService(final BackgroundCommandService backgroundCommandService) {
+        this.backgroundCommandService = backgroundCommandService;
+    }
+
+    private BookmarkService bookmarkService;
+    /**
+     * Mandatory service (but {@link org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault}
+     * implementation is part of core and annotated with {@link org.apache.isis.applib.annotation.DomainService},
+     * so guaranteed to be available).
+     */
+    public void injectBookmarkService(BookmarkService bookmarkService) {
+        this.bookmarkService = bookmarkService;
+    }
+
+    private CommandContext commandContext;
+    /**
+     * Mandatory service (but {@link org.apache.isis.applib.services.command.CommandContext} implementation is part of
+     * core and annotated with {@link org.apache.isis.applib.annotation.DomainService}, so guaranteed to be available).
+     */
+    public void injectCommandContext(final CommandContext commandContext) {
+        this.commandContext = commandContext;
+    }
+    
+
+    
+    // //////////////////////////////////////
+
+    protected SpecificationLoaderSpi getSpecificationLoader() {
+        return IsisContext.getSpecificationLoader();
+    }
+
+    protected AdapterManager getAdapterManager() {
+        return IsisContext.getPersistenceSession().getAdapterManager();
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/module-command-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-command-jdo/pom.xml b/core/module-command-jdo/pom.xml
index 5a1db97..7fa3db8 100644
--- a/core/module-command-jdo/pom.xml
+++ b/core/module-command-jdo/pom.xml
@@ -149,6 +149,14 @@
             <artifactId>datanucleus-jodatime</artifactId>
         </dependency>
 
-   </dependencies>
+
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-background</artifactId>
+            <!-- optional because may not want to use BackgroundCommandExecutionFromBackgroundCommandServiceJdo -->
+            <optional>true</optional>
+        </dependency>
+
+    </dependencies>
 
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/service/BackgroundCommandExecutionFromBackgroundCommandServiceJdo.java
----------------------------------------------------------------------
diff --git a/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/service/BackgroundCommandExecutionFromBackgroundCommandServiceJdo.java b/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/service/BackgroundCommandExecutionFromBackgroundCommandServiceJdo.java
index 0e1e42c..9c22561 100644
--- a/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/service/BackgroundCommandExecutionFromBackgroundCommandServiceJdo.java
+++ b/core/module-command-jdo/src/main/java/org/apache/isis/objectstore/jdo/service/BackgroundCommandExecutionFromBackgroundCommandServiceJdo.java
@@ -28,6 +28,9 @@ import org.apache.isis.core.runtime.services.background.BackgroundCommandExecuti
 import org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoRepository;
 import org.apache.isis.objectstore.jdo.applib.service.command.CommandJdo;
 
+/**
+ * If used, ensure that <code>org.apache.isis.module:isis-module-background</code> is also included on classpath.
+ */
 public final class BackgroundCommandExecutionFromBackgroundCommandServiceJdo extends BackgroundCommandExecution {
 
     @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
deleted file mode 100644
index e2d30c8..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
+++ /dev/null
@@ -1,171 +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.runtime.services.background;
-
-import java.util.List;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Lists;
-import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.applib.services.background.ActionInvocationMemento;
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.Command.Executor;
-import org.apache.isis.applib.services.command.CommandContext;
-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.RootOidDefault;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.facets.actions.interaction.CommandUtil;
-import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
-import org.apache.isis.core.runtime.sessiontemplate.AbstractIsisSessionTemplate;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
-import org.apache.isis.core.runtime.system.transaction.TransactionalClosureAbstract;
-
-/**
- * Intended to be used as a base class for executing queued up {@link Command background action}s.
- * 
- * <p>
- * This implementation uses the {@link #findBackgroundCommandsToExecute() hook method} so that it is
- * independent of the location where the actions have actually been persisted to.
- */
-public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemplate {
-
-    private final MementoServiceDefault mementoService;
-
-    public BackgroundCommandExecution() {
-        // same as configured by BackgroundServiceDefault
-        mementoService = new MementoServiceDefault().withNoEncoding();
-    }
-    
-    // //////////////////////////////////////
-
-    
-    protected void doExecute(Object context) {
-
-        final PersistenceSession persistenceSession = getPersistenceSession();
-        final IsisTransactionManager transactionManager = getTransactionManager(persistenceSession);
-        final List<Command> commands = Lists.newArrayList();
-        transactionManager.executeWithinTransaction(new TransactionalClosureAbstract() {
-            @Override
-            public void execute() {
-                commands.addAll(findBackgroundCommandsToExecute());
-            }
-        });
-
-        for (final Command command : commands) {
-            execute(transactionManager, command);
-        }
-    }
-
-    /**
-     * Mandatory hook method
-     */
-    protected abstract List<? extends Command> findBackgroundCommandsToExecute();
-
-    // //////////////////////////////////////
-
-    
-    private void execute(final IsisTransactionManager transactionManager, final Command command) {
-        transactionManager.executeWithinTransaction(new TransactionalClosureAbstract() {
-            @Override
-            public void execute() {
-                commandContext.setCommand(command);
-                try {
-
-                    command.setStartedAt(Clock.getTimeAsJavaSqlTimestamp());
-                    command.setExecutor(Executor.BACKGROUND);
-
-                    final String memento = command.getMemento();
-                    final ActionInvocationMemento aim = new ActionInvocationMemento(mementoService, memento);
-
-                    final String actionId = aim.getActionId();
-
-                    final Bookmark targetBookmark = aim.getTarget();
-                    final Object targetObject = bookmarkService.lookup(targetBookmark);
-
-                    final ObjectAdapter targetAdapter = adapterFor(targetObject);
-                    final ObjectSpecification specification = targetAdapter.getSpecification();
-
-                    final ObjectAction objectAction = findAction(specification, actionId);
-                    if(objectAction == null) {
-                        throw new Exception("Unknown action '" + actionId + "'");
-                    }
-
-                    final ObjectAdapter[] argAdapters = argAdaptersFor(aim);
-                    final ObjectAdapter resultAdapter = objectAction.execute(targetAdapter, argAdapters);
-                    if(resultAdapter != null) {
-                        Bookmark resultBookmark = CommandUtil.bookmarkFor(resultAdapter);
-                        command.setResult(resultBookmark);
-                    }
-
-                } catch (Exception e) {
-                    command.setException(Throwables.getStackTraceAsString(e));
-                } finally {
-                    command.setCompletedAt(Clock.getTimeAsJavaSqlTimestamp());
-                }
-            }
-        });
-    }
-
-    private ObjectAction findAction(final ObjectSpecification specification, final String actionId) {
-        final List<ObjectAction> objectActions = specification.getObjectActions(Contributed.INCLUDED);
-        for (final ObjectAction objectAction : objectActions) {
-            if(objectAction.getIdentifier().toClassAndNameIdentityString().equals(actionId)) {
-                return objectAction;
-            }
-        }
-        return null;
-    }
-
-    private ObjectAdapter[] argAdaptersFor(final ActionInvocationMemento aim) throws ClassNotFoundException {
-        final int numArgs = aim.getNumArgs();
-        final List<ObjectAdapter> argumentAdapters = Lists.newArrayList();
-        for(int i=0; i<numArgs; i++) {
-            final ObjectAdapter argAdapter = argAdapterFor(aim, i);
-            argumentAdapters.add(argAdapter);
-        }
-        return argumentAdapters.toArray(new ObjectAdapter[]{});
-    }
-
-    private ObjectAdapter argAdapterFor(final ActionInvocationMemento aim, int num) throws ClassNotFoundException {
-        final Class<?> argType = aim.getArgType(num);
-        final Object arg = aim.getArg(num, argType);
-        if(arg == null) {
-            return null;
-        }
-        if(Bookmark.class != argType) {
-            return adapterFor(arg);
-        } else {
-            final Bookmark argBookmark = (Bookmark)arg;
-            final RootOid rootOid = RootOidDefault.create(argBookmark);
-            return adapterFor(rootOid);
-        }
-    }
-
-    
-    // //////////////////////////////////////
-
-    @javax.inject.Inject
-    private BookmarkService bookmarkService;
-
-    @javax.inject.Inject
-    private CommandContext commandContext;
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/0ddb462c/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
deleted file mode 100644
index d206410..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundServiceDefault.java
+++ /dev/null
@@ -1,286 +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.runtime.services.background;
-
-import javassist.util.proxy.MethodFilter;
-import javassist.util.proxy.MethodHandler;
-import javassist.util.proxy.ProxyFactory;
-import javassist.util.proxy.ProxyObject;
-
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.PostConstruct;
-import com.google.common.collect.Lists;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.background.ActionInvocationMemento;
-import org.apache.isis.applib.services.background.BackgroundCommandService;
-import org.apache.isis.applib.services.background.BackgroundService;
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.core.commons.ensure.Ensure;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.lang.ArrayExtensions;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.JavassistEnhanced;
-import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.metamodel.facets.actions.interaction.CommandUtil;
-import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-
-import static org.hamcrest.CoreMatchers.*;
-
-/**
- * This is <i>not</i> annotated as an auto-discoverable {@link org.apache.isis.applib.annotation.DomainService} because
- * it has mandatory dependencies; specifically, an implementation of
- * {@link org.apache.isis.applib.services.background.BackgroundCommandService} must be configured.
- */
-public class BackgroundServiceDefault implements BackgroundService {
-
-    private final MementoServiceDefault mementoService;
-    
-    public BackgroundServiceDefault() {
-        this(new MementoServiceDefault());
-    }
-    
-    BackgroundServiceDefault(MementoServiceDefault mementoService) {
-        this.mementoService = mementoService.withNoEncoding();
-    }
-    
-    // //////////////////////////////////////
-
-    
-    @Programmatic
-    @PostConstruct
-    public void init(Map<String,String> props) {
-        ensureDependenciesInjected();
-    }
-    
-    private void ensureDependenciesInjected() {
-        Ensure.ensureThatState(this.bookmarkService, is(not(nullValue())), "BookmarkService domain service must be configured");
-        Ensure.ensureThatState(this.backgroundCommandService, is(not(nullValue())), "BackgroundCommandService domain service must be configured");
-        Ensure.ensureThatState(this.commandContext, is(not(nullValue())), "CommandContext domain service must be configured");
-    }
-
-
-    private ObjectSpecificationDefault getJavaSpecificationOfOwningClass(final Method method) {
-        return getJavaSpecification(method.getDeclaringClass());
-    }
-
-    private ObjectSpecificationDefault getJavaSpecification(final Class<?> cls) {
-        final ObjectSpecification objectSpec = getSpecification(cls);
-        if (!(objectSpec instanceof ObjectSpecificationDefault)) {
-            throw new UnsupportedOperationException(
-                "Only Java is supported "
-                + "(specification is '" + objectSpec.getClass().getCanonicalName() + "')");
-        }
-        return (ObjectSpecificationDefault) objectSpec;
-    }
-
-    private ObjectSpecification getSpecification(final Class<?> type) {
-        return getSpecificationLoader().loadSpecification(type);
-    }
-
-
-    // //////////////////////////////////////
-
-    @Programmatic
-    @Override
-    public <T> T execute(final T domainObject) {
-        final Class<? extends Object> cls = domainObject.getClass();
-        final MethodHandler methodHandler = newMethodHandler(domainObject);
-        return newProxy(cls, methodHandler);
-    }
-
-    @SuppressWarnings("unchecked")
-    private <T> T newProxy(Class<? extends Object> cls, MethodHandler methodHandler) {
-        final ProxyFactory proxyFactory = new ProxyFactory();
-        proxyFactory.setSuperclass(cls);
-        proxyFactory.setInterfaces(ArrayExtensions.combine(cls.getInterfaces(), new Class<?>[] { JavassistEnhanced.class }));
-
-        proxyFactory.setFilter(new MethodFilter() {
-            @Override
-            public boolean isHandled(final Method m) {
-                // ignore finalize()
-                return !m.getName().equals("finalize");
-            }
-        });
-
-        final Class<T> proxySubclass = proxyFactory.createClass();
-        try {
-            final T newInstance = proxySubclass.newInstance();
-            final ProxyObject proxyObject = (ProxyObject) newInstance;
-            proxyObject.setHandler(methodHandler);
-
-            return newInstance;
-        } catch (final InstantiationException e) {
-            throw new IsisException(e);
-        } catch (final IllegalAccessException e) {
-            throw new IsisException(e);
-        }
-    }
-
-    private <T> MethodHandler newMethodHandler(final T domainObject) {
-        return new MethodHandler() {
-            @Override
-            public Object invoke(final Object proxied, final Method proxyMethod, final Method proxiedMethod, final Object[] args) throws Throwable {
-
-                final boolean inheritedFromObject = proxyMethod.getDeclaringClass().equals(Object.class);
-                if(inheritedFromObject) {
-                    return proxyMethod.invoke(domainObject, args);
-                }
-
-                final ObjectAdapter targetAdapter = getAdapterManager().adapterFor(domainObject);
-                final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(proxyMethod);
-                final ObjectMember member = targetObjSpec.getMember(proxyMethod);
-
-                if(member == null) {
-                    return proxyMethod.invoke(domainObject, args);
-                }
-
-                if(!(member instanceof ObjectAction)) {
-                    throw new UnsupportedOperationException(
-                            "Only actions can be executed in the background "
-                                    + "(method " + proxiedMethod.getName() + " represents a " + member.getFeatureType().name() + "')");
-                }
-
-                final ObjectAction action = (ObjectAction) member;
-
-                final String actionIdentifier = CommandUtil.actionIdentifierFor(action);
-                final String targetClassName = CommandUtil.targetClassNameFor(targetAdapter);
-                final String targetActionName = CommandUtil.targetActionNameFor(action);
-                final String targetArgs = CommandUtil.argDescriptionFor(action, adaptersFor(args));
-                
-                final Bookmark domainObjectBookmark = bookmarkService.bookmarkFor(domainObject);
-
-                final List<Class<?>> argTypes = Lists.newArrayList();
-                final List<Object> argObjs = Lists.newArrayList();
-                CommandUtil.buildMementoArgLists(mementoService, bookmarkService, proxiedMethod, args, argTypes, argObjs);
-
-                final Command command = commandContext.getCommand();
-                
-                final ActionInvocationMemento aim = 
-                        new ActionInvocationMemento(mementoService, 
-                                actionIdentifier, 
-                                domainObjectBookmark,
-                                argTypes,
-                                argObjs);
-               
-                backgroundCommandService.schedule(aim, command, targetClassName, targetActionName, targetArgs);
-                
-                return null;
-            }
-
-            ObjectAdapter[] adaptersFor(final Object[] args) {
-                final AdapterManager adapterManager = getAdapterManager();
-                return CommandUtil.adaptersFor(args, adapterManager);
-            }
-
-        };
-    }
-
-    @Override
-    public ActionInvocationMemento asActionInvocationMemento(Method method, Object domainObject, Object[] args) {
-        
-        final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(method);
-        final ObjectMember member = targetObjSpec.getMember(method);
-        if(member == null) {
-            return null;
-        }
-        if(!(member instanceof ObjectAction)) {
-            return null;
-        }
-
-        final ObjectAction action = (ObjectAction) member;
-        final String actionIdentifier = CommandUtil.actionIdentifierFor(action);
-        
-        final Bookmark domainObjectBookmark = bookmarkService.bookmarkFor(domainObject);
-
-        final List<Class<?>> argTypes = Lists.newArrayList();
-        final List<Object> argObjs = Lists.newArrayList();
-        CommandUtil.buildMementoArgLists(mementoService, bookmarkService, method, args, argTypes, argObjs);
-
-        final ActionInvocationMemento aim = 
-                new ActionInvocationMemento(mementoService, 
-                        actionIdentifier, 
-                        domainObjectBookmark,
-                        argTypes,
-                        argObjs);
-       
-        return aim;
-    }
-
-
-    /**
-     * Not API
-     */
-    ActionInvocationMemento newActionInvocationMemento(String mementoStr) {
-        return new ActionInvocationMemento(mementoService, mementoStr);
-    }
-
-    
-    // //////////////////////////////////////
-
-    private BackgroundCommandService backgroundCommandService;
-    /**
-     * Mandatory service; must be configured.
-     */
-    public void injectBackgroundCommandService(final BackgroundCommandService backgroundCommandService) {
-        this.backgroundCommandService = backgroundCommandService;
-    }
-
-    private BookmarkService bookmarkService;
-    /**
-     * Mandatory service (but {@link org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault}
-     * implementation is part of core and annotated with {@link org.apache.isis.applib.annotation.DomainService},
-     * so guaranteed to be available).
-     */
-    public void injectBookmarkService(BookmarkService bookmarkService) {
-        this.bookmarkService = bookmarkService;
-    }
-
-    private CommandContext commandContext;
-    /**
-     * Mandatory service (but {@link org.apache.isis.applib.services.command.CommandContext} implementation is part of
-     * core and annotated with {@link org.apache.isis.applib.annotation.DomainService}, so guaranteed to be available).
-     */
-    public void injectCommandContext(final CommandContext commandContext) {
-        this.commandContext = commandContext;
-    }
-    
-
-    
-    // //////////////////////////////////////
-
-    protected SpecificationLoaderSpi getSpecificationLoader() {
-        return IsisContext.getSpecificationLoader();
-    }
-
-    protected AdapterManager getAdapterManager() {
-        return IsisContext.getPersistenceSession().getAdapterManager();
-    }
-
-
-
-}


[37/39] git commit: ISIS-839: updating STATUS for 1.6.0 release

Posted by da...@apache.org.
ISIS-839: updating STATUS for 1.6.0 release


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

Branch: refs/heads/master
Commit: 15e4c14b17fd633305878633152659c1a7a1701d
Parents: e686321
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Jul 20 15:35:24 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:35:58 2014 +0100

----------------------------------------------------------------------
 STATUS | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/15e4c14b/STATUS
----------------------------------------------------------------------
diff --git a/STATUS b/STATUS
index 37b135e..aa4eea7 100644
--- a/STATUS
+++ b/STATUS
@@ -21,6 +21,11 @@ Description
 
 TLP releases:
 
+  * isis-1.6.0                                     : 25 Jul 2014
+  * isis-viewer-wicket-1.6.0                       : 25 Jul 2014
+  * todoapp-archetype-1.6.0                        : 25 Jul 2014
+  * simpleapp-archetype-1.6.0                      : 25 Jul 2014
+
   * isis-1.5.0                                     : 08 Jun 2014
   * isis-objectstore-jdo-1.5.0                     : 08 Jun 2014
   * isis-security-shiro-1.5.0                      : 08 Jun 2014


[19/39] git commit: ISIS-839: recreate-archetype.sh script should automatically commit changes.

Posted by da...@apache.org.
ISIS-839: recreate-archetype.sh script should automatically commit changes.


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

Branch: refs/heads/master
Commit: 1a459a584e8f16503add8352d07ee8328d6a3256
Parents: 24aeeba
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 16:04:14 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 18:22:02 2014 +0100

----------------------------------------------------------------------
 scripts/recreate-archetype.sh | 9 +++++++++
 1 file changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1a459a58/scripts/recreate-archetype.sh
----------------------------------------------------------------------
diff --git a/scripts/recreate-archetype.sh b/scripts/recreate-archetype.sh
index 5538198..ea97270 100644
--- a/scripts/recreate-archetype.sh
+++ b/scripts/recreate-archetype.sh
@@ -1,3 +1,10 @@
+JIRA=$1
+
+if [ ! "$JIRA" ]; then
+    echo "usage: $(basename $0) ISIS-nnn"
+    exit 1
+fi
+
 export ISISART=$(basename $(pwd))-archetype
 
 TOFIX=""
@@ -68,3 +75,5 @@ rm -rf ../../archetype/$ISISCPN
 echo "adding new archetype ..."
 mv target/generated-sources/archetype ../../archetype/$ISISCPN
 git add ../../archetype/$ISISCPN
+git commit -m "$JIRA: recreating $ISISCPN archetype"
+


[13/39] git commit: ISIS-833: reverting isis-module-wrapper -> isis-core-wrapper.

Posted by da...@apache.org.
ISIS-833: reverting isis-module-wrapper -> isis-core-wrapper.


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

Branch: refs/heads/master
Commit: dec670567ce96fa96fe89c8111c6dbca35b3ed3b
Parents: 172d56a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 24 17:23:03 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 24 17:23:03 2014 +0100

----------------------------------------------------------------------
 .../applib/services/wrapper/WrapperFactory.java |   2 +-
 core/integtestsupport/pom.xml                   |   4 +-
 core/module-wrapper/pom.xml                     | 139 ----
 .../core/wrapper/WrapperFactoryAbstract.java    | 314 --------
 .../isis/core/wrapper/WrapperFactoryCglib.java  |  30 -
 .../core/wrapper/WrapperFactoryDefault.java     |  39 -
 .../core/wrapper/WrapperFactoryJavassist.java   |  30 -
 .../dispatchers/InteractionEventDispatcher.java |  28 -
 .../InteractionEventDispatcherTypeSafe.java     |  34 -
 .../AbstractCollectionInvocationHandler.java    |  92 ---
 .../handlers/CollectionInvocationHandler.java   |  53 --
 .../handlers/DelegatingInvocationHandler.java   |  32 -
 .../DelegatingInvocationHandlerDefault.java     | 131 ----
 .../handlers/DomainObjectInvocationHandler.java | 720 -------------------
 .../wrapper/handlers/MapInvocationHandler.java  |  48 --
 .../wrapper/handlers/ProxyContextHandler.java   |  84 ---
 .../core/wrapper/internal/util/Constants.java   |  52 --
 .../internal/util/MethodPrefixFinder.java       |  48 --
 .../isis/core/wrapper/internal/util/Util.java   |  53 --
 .../core/wrapper/proxy/ProxyInstantiator.java   |  26 -
 .../proxy/ProxyInstantiatorForCglib.java        | 101 ---
 .../proxy/ProxyInstantiatorForJavassist.java    |  77 --
 .../wrapper/WrapperFactoryAbstractTest.java     | 127 ----
 ...rapperFactoryAbstractTest_wrappedObject.java | 376 ----------
 ...oryAbstractTest_wrappedObject_transient.java | 257 -------
 .../WrapperFactoryCglibTest_wrappedObject.java  |  32 -
 ...actoryCglibTest_wrappedObject_transient.java |  34 -
 ...apperFactoryJavassistTest_wrappedObject.java |  32 -
 ...ryJavassistTest_wrappedObject_transient.java |  31 -
 core/pom.xml                                    |  12 +-
 core/specsupport/pom.xml                        |   4 +-
 core/wrapper/pom.xml                            | 138 ++++
 .../core/wrapper/WrapperFactoryAbstract.java    | 314 ++++++++
 .../isis/core/wrapper/WrapperFactoryCglib.java  |  30 +
 .../core/wrapper/WrapperFactoryDefault.java     |  39 +
 .../core/wrapper/WrapperFactoryJavassist.java   |  30 +
 .../dispatchers/InteractionEventDispatcher.java |  28 +
 .../InteractionEventDispatcherTypeSafe.java     |  34 +
 .../AbstractCollectionInvocationHandler.java    |  92 +++
 .../handlers/CollectionInvocationHandler.java   |  53 ++
 .../handlers/DelegatingInvocationHandler.java   |  32 +
 .../DelegatingInvocationHandlerDefault.java     | 131 ++++
 .../handlers/DomainObjectInvocationHandler.java | 720 +++++++++++++++++++
 .../wrapper/handlers/MapInvocationHandler.java  |  48 ++
 .../wrapper/handlers/ProxyContextHandler.java   |  84 +++
 .../core/wrapper/internal/util/Constants.java   |  52 ++
 .../internal/util/MethodPrefixFinder.java       |  48 ++
 .../isis/core/wrapper/internal/util/Util.java   |  53 ++
 .../core/wrapper/proxy/ProxyInstantiator.java   |  26 +
 .../proxy/ProxyInstantiatorForCglib.java        | 101 +++
 .../proxy/ProxyInstantiatorForJavassist.java    |  77 ++
 .../wrapper/WrapperFactoryAbstractTest.java     | 127 ++++
 ...rapperFactoryAbstractTest_wrappedObject.java | 376 ++++++++++
 ...oryAbstractTest_wrappedObject_transient.java | 257 +++++++
 .../WrapperFactoryCglibTest_wrappedObject.java  |  32 +
 ...actoryCglibTest_wrappedObject_transient.java |  34 +
 ...apperFactoryJavassistTest_wrappedObject.java |  32 +
 ...ryJavassistTest_wrappedObject_transient.java |  31 +
 .../application/simpleapp/integtests/pom.xml    |   4 +-
 example/application/simpleapp/webapp/pom.xml    |   4 +-
 example/application/todoapp/integtests/pom.xml  |   4 +-
 example/application/todoapp/webapp/pom.xml      |   4 +-
 62 files changed, 3038 insertions(+), 3039 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
index 31f5420..4a1a6de 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
@@ -62,7 +62,7 @@ import org.apache.isis.applib.services.wrapper.listeners.InteractionListener;
  *
  * <p>
  * An implementation of this service (<tt>WrapperFactoryDefault</tt>) can be registered by including
- * <tt>o.a.i.module:isis-module-wrapper</tt> on the classpath; no further configuration is required.
+ * <tt>o.a.i.core:isis-core-wrapper</tt> on the classpath; no further configuration is required.
  * </p>
  */
 @Hidden

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/integtestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/integtestsupport/pom.xml b/core/integtestsupport/pom.xml
index 708e65d..48bc875 100644
--- a/core/integtestsupport/pom.xml
+++ b/core/integtestsupport/pom.xml
@@ -118,8 +118,8 @@
 		</dependency>
 
         <dependency>
-            <groupId>org.apache.isis.module</groupId>
-            <artifactId>isis-module-wrapper</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-wrapper</artifactId>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/pom.xml
----------------------------------------------------------------------
diff --git a/core/module-wrapper/pom.xml b/core/module-wrapper/pom.xml
deleted file mode 100644
index b15c9b7..0000000
--- a/core/module-wrapper/pom.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.isis.core</groupId>
-        <artifactId>isis</artifactId>
-        <version>1.6.0-SNAPSHOT</version>
-	</parent>
-
-    <groupId>org.apache.isis.module</groupId>
-	<artifactId>isis-module-wrapper</artifactId>
-
-	<name>Isis Core Wrapper Service</name>
-	<description>Isis Core Wrapper Service</description>
-
-
-	<properties>
-        <siteBaseDir>..</siteBaseDir>
-		<relativeUrl>wrapper/</relativeUrl>
-	</properties>
-
-    <!-- used in Site generation for relative references. -->
-    <url>http://isis.apache.org/${relativeUrl}</url>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-project-info-reports-plugin</artifactId>
-                <inherited>false</inherited>
-                <configuration>
-                	<dependencyLocationsEnabled>false</dependencyLocationsEnabled>
-                </configuration>
-                <reportSets>
-                    <reportSet>
-                        <inherited>false</inherited>
-                        <reports>
-                            <report>dependencies</report>
-                            <report>dependency-convergence</report>
-                            <report>plugins</report>
-                            <report>summary</report>
-                        </reports>
-                    </reportSet>
-                </reportSets>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>asm</groupId>
-                <artifactId>asm</artifactId>
-                <version>3.3.1</version>
-            </dependency>
-            <dependency>
-                <groupId>cglib</groupId>
-                <artifactId>cglib-nodep</artifactId>
-                <version>2.2.2</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-	<dependencies>
-        <dependency>
-		    <groupId>org.apache.isis.core</groupId>
-		    <artifactId>isis-core-runtime</artifactId>
-        </dependency>
-
-		<dependency>
-		    <groupId>org.apache.isis.core</groupId>
-		    <artifactId>isis-core-metamodel</artifactId>
-		    <type>test-jar</type>
-		    <scope>test</scope>
-        </dependency>
-		<dependency>
-		    <groupId>org.apache.isis.core</groupId>
-		    <artifactId>isis-core-runtime</artifactId>
-		    <type>test-jar</type>
-		    <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-unittestsupport</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-tck-dom</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.objenesis</groupId>
-            <artifactId>objenesis</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.javassist</groupId>
-            <artifactId>javassist</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>asm</groupId>
-            <artifactId>asm</artifactId>
-            <!-- explicitly include for use of WrapperFactoryCglib -->
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>cglib</groupId>
-            <artifactId>cglib-nodep</artifactId>
-            <!-- explicitly include for use of WrapperFactoryCglib -->
-            <optional>true</optional>
-        </dependency>
-
-	</dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
deleted file mode 100644
index ceea4a5..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
+++ /dev/null
@@ -1,314 +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.wrapper;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.events.*;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.wrapper.WrappingObject;
-import org.apache.isis.applib.services.wrapper.listeners.InteractionListener;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
-import org.apache.isis.core.wrapper.dispatchers.InteractionEventDispatcher;
-import org.apache.isis.core.wrapper.dispatchers.InteractionEventDispatcherTypeSafe;
-import org.apache.isis.core.wrapper.handlers.ProxyContextHandler;
-import org.apache.isis.core.wrapper.proxy.ProxyInstantiator;
-
-public abstract class WrapperFactoryAbstract implements WrapperFactory, AuthenticationSessionProviderAware, SpecificationLoaderAware, AdapterManagerAware, ObjectPersistorAware {
-
-    private final List<InteractionListener> listeners = new ArrayList<InteractionListener>();
-    private final Map<Class<? extends InteractionEvent>, InteractionEventDispatcher> dispatchersByEventClass = new HashMap<Class<? extends InteractionEvent>, InteractionEventDispatcher>();
-
-    private AuthenticationSessionProvider authenticationSessionProvider;
-    private SpecificationLoader specificationLookup;
-    private AdapterManager adapterManager;
-    private ObjectPersistor objectPersistor;
-
-    private final ProxyContextHandler proxy;
-
-    public WrapperFactoryAbstract(final ProxyInstantiator proxyInstantiator) {
-        
-        proxy = new ProxyContextHandler(proxyInstantiator);
-        
-        dispatchersByEventClass.put(ObjectTitleEvent.class, new InteractionEventDispatcherTypeSafe<ObjectTitleEvent>() {
-            @Override
-            public void dispatchTypeSafe(final ObjectTitleEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.objectTitleRead(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(PropertyVisibilityEvent.class, new InteractionEventDispatcherTypeSafe<PropertyVisibilityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final PropertyVisibilityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.propertyVisible(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(PropertyUsabilityEvent.class, new InteractionEventDispatcherTypeSafe<PropertyUsabilityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final PropertyUsabilityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.propertyUsable(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(PropertyAccessEvent.class, new InteractionEventDispatcherTypeSafe<PropertyAccessEvent>() {
-            @Override
-            public void dispatchTypeSafe(final PropertyAccessEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.propertyAccessed(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(PropertyModifyEvent.class, new InteractionEventDispatcherTypeSafe<PropertyModifyEvent>() {
-            @Override
-            public void dispatchTypeSafe(final PropertyModifyEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.propertyModified(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(CollectionVisibilityEvent.class, new InteractionEventDispatcherTypeSafe<CollectionVisibilityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final CollectionVisibilityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.collectionVisible(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(CollectionUsabilityEvent.class, new InteractionEventDispatcherTypeSafe<CollectionUsabilityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final CollectionUsabilityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.collectionUsable(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(CollectionAccessEvent.class, new InteractionEventDispatcherTypeSafe<CollectionAccessEvent>() {
-            @Override
-            public void dispatchTypeSafe(final CollectionAccessEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.collectionAccessed(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(CollectionAddToEvent.class, new InteractionEventDispatcherTypeSafe<CollectionAddToEvent>() {
-            @Override
-            public void dispatchTypeSafe(final CollectionAddToEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.collectionAddedTo(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(CollectionRemoveFromEvent.class, new InteractionEventDispatcherTypeSafe<CollectionRemoveFromEvent>() {
-            @Override
-            public void dispatchTypeSafe(final CollectionRemoveFromEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.collectionRemovedFrom(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(ActionVisibilityEvent.class, new InteractionEventDispatcherTypeSafe<ActionVisibilityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final ActionVisibilityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.actionVisible(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(ActionUsabilityEvent.class, new InteractionEventDispatcherTypeSafe<ActionUsabilityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final ActionUsabilityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.actionUsable(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(ActionArgumentEvent.class, new InteractionEventDispatcherTypeSafe<ActionArgumentEvent>() {
-            @Override
-            public void dispatchTypeSafe(final ActionArgumentEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.actionArgument(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(ActionInvocationEvent.class, new InteractionEventDispatcherTypeSafe<ActionInvocationEvent>() {
-            @Override
-            public void dispatchTypeSafe(final ActionInvocationEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.actionInvoked(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(ObjectValidityEvent.class, new InteractionEventDispatcherTypeSafe<ObjectValidityEvent>() {
-            @Override
-            public void dispatchTypeSafe(final ObjectValidityEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.objectPersisted(interactionEvent);
-                }
-            }
-        });
-        dispatchersByEventClass.put(CollectionMethodEvent.class, new InteractionEventDispatcherTypeSafe<CollectionMethodEvent>() {
-            @Override
-            public void dispatchTypeSafe(final CollectionMethodEvent interactionEvent) {
-                for (final InteractionListener l : getListeners()) {
-                    l.collectionMethodInvoked(interactionEvent);
-                }
-            }
-        });
-    }
-
-    // /////////////////////////////////////////////////////////////
-    // wrap and unwrap
-    // /////////////////////////////////////////////////////////////
-
-    @Override
-    public <T> T wrap(final T domainObject) {
-        return wrap(domainObject, ExecutionMode.EXECUTE);
-    }
-
-    @Override
-    public <T> T wrapNoExecute(final T domainObject) {
-        return wrap(domainObject, ExecutionMode.NO_EXECUTE);
-    }
-    
-    @Override
-    public <T> T wrapSkipRules(final T domainObject) {
-        return wrap(domainObject, ExecutionMode.SKIP_RULES);
-    }
-    
-    @Override
-    public <T> T wrap(final T domainObject, final ExecutionMode mode) {
-        if (domainObject instanceof WrappingObject) {
-            final WrappingObject wrapperObject = (WrappingObject) domainObject;
-            final ExecutionMode wrapperMode = wrapperObject.__isis_executionMode();
-            if(wrapperMode != mode) {
-                final Object underlyingDomainObject = wrapperObject.__isis_wrapped();
-                return (T)createProxy(underlyingDomainObject, mode);
-            }
-            return domainObject;
-        }
-        return createProxy(domainObject, mode);
-    }
-
-    protected <T> T createProxy(final T domainObject, final ExecutionMode mode) {
-        return proxy.proxy(domainObject, this, mode, getAuthenticationSessionProvider(), getSpecificationLookup(), getAdapterManager(), getObjectPersistor());
-    }
-
-    @Override
-    public boolean isWrapper(final Object possibleWrappedDomainObject) {
-        return possibleWrappedDomainObject instanceof WrappingObject;
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    @Programmatic
-    public <T> T unwrap(T possibleWrappedDomainObject) {
-        if(isWrapper(possibleWrappedDomainObject)) {
-            final WrappingObject wrappingObject = (WrappingObject) possibleWrappedDomainObject;
-            return (T) wrappingObject.__isis_wrapped();
-        } 
-        return possibleWrappedDomainObject;
-    }
-
-    // /////////////////////////////////////////////////////////////
-    // Listeners
-    // /////////////////////////////////////////////////////////////
-
-    @Override
-    public List<InteractionListener> getListeners() {
-        return listeners;
-    }
-
-    @Override
-    public boolean addInteractionListener(final InteractionListener listener) {
-        return listeners.add(listener);
-    }
-
-    @Override
-    public boolean removeInteractionListener(final InteractionListener listener) {
-        return listeners.remove(listener);
-    }
-
-    @Override
-    public void notifyListeners(final InteractionEvent interactionEvent) {
-        final InteractionEventDispatcher dispatcher = dispatchersByEventClass.get(interactionEvent.getClass());
-        if (dispatcher == null) {
-            throw new RuntimeException("Unknown InteractionEvent - register into dispatchers map");
-        }
-        dispatcher.dispatch(interactionEvent);
-    }
-
-    // /////////////////////////////////////////////////////////////
-    // Listeners
-    // /////////////////////////////////////////////////////////////
-
-    protected AuthenticationSessionProvider getAuthenticationSessionProvider() {
-        return authenticationSessionProvider;
-    }
-    @Programmatic
-    @Override
-    public void setAuthenticationSessionProvider(final AuthenticationSessionProvider authenticationSessionProvider) {
-        this.authenticationSessionProvider = authenticationSessionProvider;
-    }
-
-    protected AdapterManager getAdapterManager() {
-        return adapterManager;
-    }
-    @Programmatic
-    @Override
-    public void setAdapterManager(final AdapterManager adapterManager) {
-        this.adapterManager = adapterManager;
-    }
-
-    
-    protected SpecificationLoader getSpecificationLookup() {
-        return specificationLookup;
-    }
-    @Programmatic
-    @Override
-    public void setSpecificationLookup(final SpecificationLoader specificationLookup) {
-        this.specificationLookup = specificationLookup;
-    }
-
-    protected ObjectPersistor getObjectPersistor() {
-        return objectPersistor;
-    }
-    @Programmatic
-    @Override
-    public void setObjectPersistor(final ObjectPersistor objectPersistor) {
-        this.objectPersistor = objectPersistor;
-    }
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java
deleted file mode 100644
index fd75b59..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryCglib.java
+++ /dev/null
@@ -1,30 +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.wrapper;
-
-import org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForCglib;
-
-public class WrapperFactoryCglib extends WrapperFactoryAbstract  {
-
-    public WrapperFactoryCglib() {
-        super(new ProxyInstantiatorForCglib());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
deleted file mode 100644
index c72eca8..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryDefault.java
+++ /dev/null
@@ -1,39 +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.wrapper;
-
-
-import org.apache.isis.applib.annotation.DomainService;
-
-/**
- * This service provides the ability to &quot;wrap&quot; of a domain object such that it can
- * be interacted with while enforcing the hide/disable/validate rules implies by
- * the Isis programming model.
- *
- * <p>
- * This implementation has no UI-visible actions and is the supported implementation, so it is annotated with
- * {@link org.apache.isis.applib.annotation.DomainService}.   This means that by including
- * <tt>o.a.i.module:isis-module-wrapper</tt> on the classpath, the service is automatically registered; no further
- * configuration is required.
- */
-@DomainService
-public class WrapperFactoryDefault extends WrapperFactoryJavassist {
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java
deleted file mode 100644
index e71580f..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryJavassist.java
+++ /dev/null
@@ -1,30 +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.wrapper;
-
-import org.apache.isis.core.wrapper.proxy.ProxyInstantiatorForJavassist;
-
-public class WrapperFactoryJavassist extends WrapperFactoryAbstract  {
-
-    public WrapperFactoryJavassist() {
-        super(new ProxyInstantiatorForJavassist());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java
deleted file mode 100644
index 2dfa70c..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcher.java
+++ /dev/null
@@ -1,28 +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.wrapper.dispatchers;
-
-import org.apache.isis.applib.events.InteractionEvent;
-
-public interface InteractionEventDispatcher {
-
-    void dispatch(InteractionEvent interactionEvent);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java
deleted file mode 100644
index c568633..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/dispatchers/InteractionEventDispatcherTypeSafe.java
+++ /dev/null
@@ -1,34 +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.wrapper.dispatchers;
-
-import org.apache.isis.applib.events.InteractionEvent;
-
-public abstract class InteractionEventDispatcherTypeSafe<T extends InteractionEvent> implements InteractionEventDispatcher {
-
-    public abstract void dispatchTypeSafe(T interactionEvent);
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public void dispatch(final InteractionEvent interactionEvent) {
-        dispatchTypeSafe((T) interactionEvent);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java
deleted file mode 100644
index b8a4464..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/AbstractCollectionInvocationHandler.java
+++ /dev/null
@@ -1,92 +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.wrapper.handlers;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.events.CollectionMethodEvent;
-import org.apache.isis.applib.events.InteractionEvent;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-abstract class AbstractCollectionInvocationHandler<T, C> extends DelegatingInvocationHandlerDefault<C> {
-
-    private final List<Method> interceptedMethods = Lists.newArrayList();
-    private final List<Method> vetoedMethods = Lists.newArrayList();
-
-    private final String collectionName;
-    private final OneToManyAssociation oneToManyAssociation;
-    private final T domainObject;
-
-    public AbstractCollectionInvocationHandler(final C collectionOrMapToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
-        super(collectionOrMapToProxy, handler.getHeadlessViewer(), handler.getExecutionMode());
-        this.collectionName = collectionName;
-        this.oneToManyAssociation = otma;
-        this.domainObject = handler.getDelegate();
-    }
-
-    protected Method intercept(final Method method) {
-        this.interceptedMethods.add(method);
-        return method;
-    }
-
-    protected Method veto(final Method method) {
-        this.vetoedMethods.add(method);
-        return method;
-    }
-
-    public String getCollectionName() {
-        return collectionName;
-    }
-
-    public OneToManyAssociation getCollection() {
-        return oneToManyAssociation;
-    }
-
-    public T getDomainObject() {
-        return domainObject;
-    }
-
-    @Override
-    public Object invoke(final Object collectionObject, final Method method, final Object[] args) throws Throwable {
-
-        // delegate
-        final Object returnValueObj = delegate(method, args);
-
-        if (interceptedMethods.contains(method)) {
-
-            resolveIfRequired(domainObject);
-
-            final InteractionEvent ev = new CollectionMethodEvent(getDelegate(), getCollection().getIdentifier(), getDomainObject(), method.getName(), args, returnValueObj);
-            notifyListeners(ev);
-            return returnValueObj;
-        }
-
-        if (vetoedMethods.contains(method)) {
-            throw new UnsupportedOperationException(String.format("Method '%s' may not be called directly.", method.getName()));
-        }
-
-        return returnValueObj;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java
deleted file mode 100644
index bcf2973..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/CollectionInvocationHandler.java
+++ /dev/null
@@ -1,53 +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.wrapper.handlers;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.isis.core.commons.lang.ObjectExtensions;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-class CollectionInvocationHandler<T, R> extends AbstractCollectionInvocationHandler<T, R> {
-
-    public CollectionInvocationHandler(final R collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
-        super(collectionToProxy, collectionName, handler, otma);
-
-        try {
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "contains", Object.class));
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "size"));
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "isEmpty"));
-            if (collectionToProxy instanceof List) {
-                intercept(ObjectExtensions.getMethod(collectionToProxy, "get", int.class));
-            }
-            veto(ObjectExtensions.getMethod(collectionToProxy, "add", Object.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "remove", Object.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "addAll", Collection.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "removeAll", Collection.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "retainAll", Collection.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "clear"));
-        } catch (final NoSuchMethodException e) {
-            // ///CLOVER:OFF
-            throw new RuntimeException("A Collection method could not be found: " + e.getMessage());
-            // ///CLOVER:ON
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java
deleted file mode 100644
index d424f64..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandler.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.wrapper.handlers;
-
-import java.lang.reflect.InvocationHandler;
-
-public interface DelegatingInvocationHandler<T> extends InvocationHandler {
-
-    T getDelegate();
-
-    public boolean isResolveObjectChangedEnabled();
-
-    public void setResolveObjectChangedEnabled(boolean resolveObjectChangedEnabled);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java
deleted file mode 100644
index e1b7cdd..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DelegatingInvocationHandlerDefault.java
+++ /dev/null
@@ -1,131 +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.wrapper.handlers;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.apache.isis.applib.events.InteractionEvent;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerObjectChanged;
-import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerResolve;
-
-public class DelegatingInvocationHandlerDefault<T> implements DelegatingInvocationHandler<T> {
-
-    private final T delegate;
-    protected final WrapperFactory wrapperFactory;
-    private final ExecutionMode executionMode;
-
-    protected final Method equalsMethod;
-    protected final Method hashCodeMethod;
-    protected final Method toStringMethod;
-
-    private final DomainObjectContainerObjectChanged domainObjectContainerObjectChanged;
-    private final DomainObjectContainerResolve domainObjectContainerResolve;
-
-    private boolean resolveObjectChangedEnabled;
-
-    public DelegatingInvocationHandlerDefault(final T delegate, final WrapperFactory headlessViewer, final ExecutionMode executionMode) {
-        if (delegate == null) {
-            throw new IllegalArgumentException("delegate must not be null");
-        }
-        this.delegate = delegate;
-        this.wrapperFactory = headlessViewer;
-        this.executionMode = executionMode;
-
-        this.domainObjectContainerResolve = new DomainObjectContainerResolve();
-        this.domainObjectContainerObjectChanged = new DomainObjectContainerObjectChanged();
-
-        try {
-            equalsMethod = delegate.getClass().getMethod("equals", new Class[] { Object.class });
-            hashCodeMethod = delegate.getClass().getMethod("hashCode", new Class[] {});
-            toStringMethod = delegate.getClass().getMethod("toString", new Class[] {});
-        } catch (final NoSuchMethodException e) {
-            // ///CLOVER:OFF
-            throw new RuntimeException("An Object method could not be found: " + e.getMessage());
-            // ///CLOVER:ON
-        }
-    }
-
-    @Override
-    public boolean isResolveObjectChangedEnabled() {
-        return resolveObjectChangedEnabled;
-    }
-
-    @Override
-    public void setResolveObjectChangedEnabled(final boolean resolveObjectChangedEnabled) {
-        this.resolveObjectChangedEnabled = resolveObjectChangedEnabled;
-    }
-
-    protected void resolveIfRequired(final ObjectAdapter targetAdapter) {
-        resolveIfRequired(targetAdapter.getObject());
-    }
-
-    protected void resolveIfRequired(final Object domainObject) {
-        if (resolveObjectChangedEnabled) {
-            domainObjectContainerResolve.resolve(domainObject);
-        }
-    }
-
-    protected void objectChangedIfRequired(final ObjectAdapter targetAdapter) {
-        objectChangedIfRequired(targetAdapter.getObject());
-    }
-
-    protected void objectChangedIfRequired(final Object domainObject) {
-        if (resolveObjectChangedEnabled) {
-            domainObjectContainerObjectChanged.objectChanged(domainObject);
-        }
-    }
-
-    public WrapperFactory getHeadlessViewer() {
-        return wrapperFactory;
-    }
-
-    @Override
-    public T getDelegate() {
-        return delegate;
-    }
-
-    public ExecutionMode getExecutionMode() {
-        return executionMode;
-    }
-
-    protected Object delegate(final Method method, final Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
-
-        return method.invoke(getDelegate(), args);
-    }
-
-    protected boolean isObjectMethod(final Method method) {
-        return toStringMethod.equals(method) || hashCodeMethod.equals(method) || equalsMethod.equals(method);
-    }
-
-    @Override
-    public Object invoke(final Object object, final Method method, final Object[] args) throws Throwable {
-        return method.invoke(object, args);
-    }
-
-    protected InteractionEvent notifyListeners(final InteractionEvent interactionEvent) {
-        wrapperFactory.notifyListeners(interactionEvent);
-        return interactionEvent;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
deleted file mode 100644
index d505add..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
+++ /dev/null
@@ -1,720 +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.wrapper.handlers;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.events.*;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.applib.services.wrapper.*;
-import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
-import org.apache.isis.core.metamodel.consent.InteractionResult;
-import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
-import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-
-public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandlerDefault<T> {
-
-    private final Map<Method, Collection<?>> collectionViewObjectsByMethod = new HashMap<Method, Collection<?>>();
-    private final Map<Method, Map<?, ?>> mapViewObjectsByMethod = new HashMap<Method, Map<?, ?>>();
-
-    private final AuthenticationSessionProvider authenticationSessionProvider;
-    private final SpecificationLoader specificationLookup;
-    private final AdapterManager adapterManager;
-    private final ObjectPersistor objectPersistor;
-
-    private final ProxyContextHandler proxy;
-    private final ExecutionMode executionMode;
-
-    /**
-     * The <tt>title()</tt> method; may be <tt>null</tt>.
-     */
-    protected Method titleMethod;
-
-    /**
-     * The <tt>__isis_save()</tt> method from {@link WrapperObject#__isis_save()}.
-     */
-    protected Method __isis_saveMethod;
-
-    /**
-     * The <tt>save()</tt> method from {@link WrapperObject#save()}.
-     */
-    @Deprecated
-    protected Method saveMethod;
-
-    /**
-     * The <tt>__isis_wrapped()</tt> method from {@link WrapperObject#__isis_wrapped()}.
-     */
-    protected Method __isis_wrappedMethod;
-
-    /**
-     * The <tt>wrapped()</tt> method from {@link WrapperObject#wrapped()}.
-     */
-    @Deprecated
-    protected Method wrappedMethod;
-
-    /**
-     * The <tt>__isis_executionMode()</tt> method from {@link WrapperObject#__isis_executionMode()}.
-     */
-    protected Method __isis_executionMode;
-
-    public DomainObjectInvocationHandler(
-            final T delegate,
-            final WrapperFactory wrapperFactory,
-            final ExecutionMode mode,
-            final AuthenticationSessionProvider authenticationSessionProvider,
-            final SpecificationLoader specificationLookup,
-            final AdapterManager adapterManager,
-            final ObjectPersistor objectPersistor,
-            final ProxyContextHandler proxy) {
-        super(delegate, wrapperFactory, mode);
-
-        this.proxy = proxy;
-        this.authenticationSessionProvider = authenticationSessionProvider;
-        this.specificationLookup = specificationLookup;
-        this.adapterManager = adapterManager;
-        this.objectPersistor = objectPersistor;
-        this.executionMode = mode;
-
-        try {
-            titleMethod = delegate.getClass().getMethod("title", new Class[]{});
-            __isis_saveMethod = WrapperObject.class.getMethod("__isis_save", new Class[]{});
-            __isis_wrappedMethod = WrapperObject.class.getMethod("__isis_wrapped", new Class[]{});
-            __isis_executionMode = WrapperObject.class.getMethod("__isis_executionMode", new Class[]{});
-            saveMethod = WrapperObject.class.getMethod("save", new Class[] {});
-            wrappedMethod = WrapperObject.class.getMethod("wrapped", new Class[] {});
-        } catch (final NoSuchMethodException e) {
-        }
-    }
-
-    @Override
-    public Object invoke(final Object proxyObject, final Method method, final Object[] args) throws Throwable {
-
-        if (isObjectMethod(method)) {
-            return delegate(method, args);
-        }
-
-        // workaround for JDO-enhanced..
-        if(isJdoMethod(method)) {
-            return delegate(method, args);
-        }
-
-        if(isInjectMethod(method)) {
-            return delegate(method, args);
-        }
-
-        final ObjectAdapter targetAdapter = getAdapterManager().adapterFor(getDelegate());
-
-        if (isTitleMethod(method)) {
-            return handleTitleMethod(method, args, targetAdapter);
-        }
-
-
-        final ObjectSpecification targetNoSpec = targetAdapter.getSpecification();
-
-        // save method, through the proxy
-        if (isSaveMethod(method)) {
-            return handleSaveMethod(getAuthenticationSession(), targetAdapter, targetNoSpec);
-        }
-
-        if (isWrappedMethod(method)) {
-            return getDelegate();
-        }
-
-        if (isExecutionModeMethod(method)) {
-            return executionMode;
-        }
-
-        final ObjectMember objectMember = locateAndCheckMember(method);
-
-        final String memberName = objectMember.getName();
-
-        final Intent intent = ImperativeFacet.Util.getIntent(objectMember, method);
-        if(intent == Intent.CHECK_IF_HIDDEN || intent == Intent.CHECK_IF_DISABLED) {
-            throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'", memberName));
-        }
-
-        final String methodName = method.getName();
-
-        if (intent == Intent.DEFAULTS || intent == Intent.CHOICES_OR_AUTOCOMPLETE) {
-            return method.invoke(getDelegate(), args);
-        }
-
-        if (objectMember.isOneToOneAssociation()) {
-
-            if (intent == Intent.CHECK_IF_VALID || intent == Intent.MODIFY_PROPERTY_SUPPORTING) {
-                throw new UnsupportedOperationException(String.format("Cannot invoke supporting method for '%s'; use only property accessor/mutator", memberName));
-            }
-
-            final OneToOneAssociation otoa = (OneToOneAssociation) objectMember;
-            
-            if (intent == Intent.ACCESSOR) {
-                return handleGetterMethodOnProperty(args, targetAdapter, otoa, methodName);
-            }
-            
-            if (intent == Intent.MODIFY_PROPERTY || intent == Intent.INITIALIZATION) {
-                return handleSetterMethodOnProperty(args, getAuthenticationSession(), targetAdapter, otoa, methodName);
-            }
-        }
-        if (objectMember.isOneToManyAssociation()) {
-
-            if (intent == Intent.CHECK_IF_VALID) {
-                throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only collection accessor/mutator", memberName));
-            }
-
-            final OneToManyAssociation otma = (OneToManyAssociation) objectMember;
-            if (intent == Intent.ACCESSOR) {
-                return handleGetterMethodOnCollection(method, args, targetAdapter, otma, memberName);
-            }
-            if (intent == Intent.MODIFY_COLLECTION_ADD) {
-                return handleCollectionAddToMethod(args, targetAdapter, otma, methodName);
-            }
-            if (intent == Intent.MODIFY_COLLECTION_REMOVE) {
-                return handleCollectionRemoveFromMethod(args, targetAdapter, otma, methodName);
-            }
-        }
-
-        if (objectMember instanceof ObjectAction) {
-
-            if (intent == Intent.CHECK_IF_VALID) {
-                throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only the 'invoke' method", memberName));
-            }
-
-            final ObjectAction noa = (ObjectAction) objectMember;
-            return handleActionMethod(args, getAuthenticationSession(), targetAdapter, noa, memberName);
-        }
-
-        throw new UnsupportedOperationException(String.format("Unknown member type '%s'", objectMember));
-    }
-
-    private boolean isJdoMethod(final Method method) {
-        return methodStartsWith(method, "jdo");
-    }
-
-    private boolean isInjectMethod(final Method method) {
-        return methodStartsWith(method, "inject");
-    }
-
-    private boolean methodStartsWith(final Method method, final String prefix) {
-        return method.getName().startsWith(prefix);
-    }
-    
-    public List<Facet> getImperativeFacets(final ObjectMember objectMember, final Method method) {
-        final List<Facet> imperativeFacets = objectMember.getFacets(new Filter<Facet>() {
-            @Override
-            public boolean accept(final Facet facet) {
-                final ImperativeFacet imperativeFacet = asImperativeFacet(facet);
-                if (imperativeFacet == null) {
-                    return false;
-                }
-                return imperativeFacet.getMethods().contains(method);
-            }
-
-            private ImperativeFacet asImperativeFacet(final Facet facet) {
-                if (facet == null) {
-                    return null;
-                }
-                if (facet instanceof ImperativeFacet) {
-                    return (ImperativeFacet) facet;
-                }
-                Facet underlyingFacet = facet.getUnderlyingFacet();
-                return asImperativeFacet(underlyingFacet);
-            }
-        });
-
-        // there will be at least one
-        if (imperativeFacets.isEmpty()) {
-            throw new IllegalStateException("should be at least one imperative facet");
-        }
-        return imperativeFacets;
-    }
-
-    private static boolean instanceOf(final List<?> objects, final Class<?>... superTypes) {
-        for (final Class<?> superType : superTypes) {
-            // REVIEW: this is all a bit hacky...
-            for (Object obj : objects) {
-                // handle the *decorators
-                if(obj instanceof DecoratingFacet) {
-                    DecoratingFacet<?> decoratingFacet = (DecoratingFacet<?>) obj;
-                    obj = ((DecoratingFacet<?>) obj).getDecoratedFacet();
-                }
-                if (superType.isAssignableFrom(obj.getClass())) {
-                    return true;
-                }
-                if(obj instanceof Facet) {
-                    Facet facet = (Facet) obj;
-                    // handle any wrapping (eg PostPropertyChangedSetterEventFacet)
-                    Facet underlyingFacet = facet.getUnderlyingFacet();
-                    if(underlyingFacet != null && superType.isAssignableFrom(obj.getClass())) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // title
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleTitleMethod(final Method method, final Object[] args, final ObjectAdapter targetAdapter) throws IllegalAccessException, InvocationTargetException {
-
-        resolveIfRequired(targetAdapter);
-
-        final ObjectSpecification targetNoSpec = targetAdapter.getSpecification();
-        final ObjectTitleContext titleContext = targetNoSpec.createTitleInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, targetAdapter);
-        final ObjectTitleEvent titleEvent = titleContext.createInteractionEvent();
-        notifyListeners(titleEvent);
-        return titleEvent.getTitle();
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // save
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleSaveMethod(final AuthenticationSession session, final ObjectAdapter targetAdapter, final ObjectSpecification targetNoSpec) {
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            final InteractionResult interactionResult = targetNoSpec.isValidResult(targetAdapter);
-            notifyListenersAndVetoIfRequired(interactionResult);
-        }
-
-        if (getExecutionMode().shouldExecute()) {
-            if (targetAdapter.isTransient()) {
-                getObjectPersistor().makePersistent(targetAdapter);
-            }
-        }
-        return null;
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // property - access
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleGetterMethodOnProperty(final Object[] args, final ObjectAdapter targetAdapter, final OneToOneAssociation otoa, final String methodName) {
-
-        if (args.length != 0) {
-            throw new IllegalArgumentException("Invoking a 'get' should have no arguments");
-        }
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            checkVisibility(getAuthenticationSession(), targetAdapter, otoa);
-        }
-
-        resolveIfRequired(targetAdapter);
-
-        final ObjectAdapter currentReferencedAdapter = otoa.get(targetAdapter);
-        final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter);
-
-        final PropertyAccessEvent ev = new PropertyAccessEvent(getDelegate(), otoa.getIdentifier(), currentReferencedObj);
-        notifyListeners(ev);
-        return currentReferencedObj;
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // property - modify
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleSetterMethodOnProperty(final Object[] args, final AuthenticationSession session, final ObjectAdapter targetAdapter, final OneToOneAssociation otoa, final String methodName) {
-        if (args.length != 1) {
-            throw new IllegalArgumentException("Invoking a setter should only have a single argument");
-        }
-
-        final Object argumentObj = underlying(args[0]);
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            checkVisibility(getAuthenticationSession(), targetAdapter, otoa);
-            checkUsability(getAuthenticationSession(), targetAdapter, otoa);
-        }
-
-        final ObjectAdapter argumentAdapter = argumentObj != null ? getAdapterManager().adapterFor(argumentObj) : null;
-
-        resolveIfRequired(targetAdapter);
-
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentAdapter).getInteractionResult();
-            notifyListenersAndVetoIfRequired(interactionResult);
-        }
-
-        if (getExecutionMode().shouldExecute()) {
-            otoa.set(targetAdapter, argumentAdapter);
-        }
-
-        objectChangedIfRequired(targetAdapter);
-
-        return null;
-    }
-
-
-    // /////////////////////////////////////////////////////////////////
-    // collection - access
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleGetterMethodOnCollection(final Method method, final Object[] args, final ObjectAdapter targetAdapter, final OneToManyAssociation otma, final String memberName) {
-
-
-        if (args.length != 0) {
-            throw new IllegalArgumentException("Invoking a 'get' should have no arguments");
-        }
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            checkVisibility(getAuthenticationSession(), targetAdapter, otma);
-        }
-
-        resolveIfRequired(targetAdapter);
-
-        final ObjectAdapter currentReferencedAdapter = otma.get(targetAdapter);
-        final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter);
-
-        final CollectionAccessEvent ev = new CollectionAccessEvent(getDelegate(), otma.getIdentifier());
-
-        if (currentReferencedObj instanceof Collection) {
-            final Collection<?> collectionViewObject = lookupViewObject(method, memberName, (Collection<?>) currentReferencedObj, otma);
-            notifyListeners(ev);
-            return collectionViewObject;
-        } else if (currentReferencedObj instanceof Map) {
-            final Map<?, ?> mapViewObject = lookupViewObject(method, memberName, (Map<?, ?>) currentReferencedObj, otma);
-            notifyListeners(ev);
-            return mapViewObject;
-        }
-        throw new IllegalArgumentException(String.format("Collection type '%s' not supported by framework", currentReferencedObj.getClass().getName()));
-    }
-
-    /**
-     * Looks up (or creates) a proxy for this object.
-     */
-    private Collection<?> lookupViewObject(final Method method, final String memberName, final Collection<?> collectionToLookup, final OneToManyAssociation otma) {
-        Collection<?> collectionViewObject = collectionViewObjectsByMethod.get(method);
-        if (collectionViewObject == null) {
-            if (collectionToLookup instanceof WrapperObject) {
-                collectionViewObject = collectionToLookup;
-            } else {
-                collectionViewObject = proxy.proxy(collectionToLookup, memberName, this, otma);
-            }
-            collectionViewObjectsByMethod.put(method, collectionViewObject);
-        }
-        return collectionViewObject;
-    }
-
-    private Map<?, ?> lookupViewObject(final Method method, final String memberName, final Map<?, ?> mapToLookup, final OneToManyAssociation otma) {
-        Map<?, ?> mapViewObject = mapViewObjectsByMethod.get(method);
-        if (mapViewObject == null) {
-            if (mapToLookup instanceof WrapperObject) {
-                mapViewObject = mapToLookup;
-            } else {
-                mapViewObject = proxy.proxy(mapToLookup, memberName, this, otma);
-            }
-            mapViewObjectsByMethod.put(method, mapViewObject);
-        }
-        return mapViewObject;
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // collection - add to
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleCollectionAddToMethod(final Object[] args, final ObjectAdapter targetAdapter, final OneToManyAssociation otma, final String methodName) {
-
-        if (args.length != 1) {
-            throw new IllegalArgumentException("Invoking a addTo should only have a single argument");
-        }
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            checkVisibility(getAuthenticationSession(), targetAdapter, otma);
-            checkUsability(getAuthenticationSession(), targetAdapter, otma);
-        }
-
-        resolveIfRequired(targetAdapter);
-
-        final Object argumentObj = underlying(args[0]);
-        if (argumentObj == null) {
-            throw new IllegalArgumentException("Must provide a non-null object to add");
-        }
-        final ObjectAdapter argumentNO = getAdapterManager().adapterFor(argumentObj);
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            final InteractionResult interactionResult = otma.isValidToAdd(targetAdapter, argumentNO).getInteractionResult();
-            notifyListenersAndVetoIfRequired(interactionResult);
-        }
-
-        if (getExecutionMode().shouldExecute()) {
-            otma.addElement(targetAdapter, argumentNO);
-        }
-
-        objectChangedIfRequired(targetAdapter);
-
-        return null;
-    }
-
-
-    // /////////////////////////////////////////////////////////////////
-    // collection - remove from
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleCollectionRemoveFromMethod(final Object[] args, final ObjectAdapter targetAdapter, final OneToManyAssociation otma, final String methodName) {
-        if (args.length != 1) {
-            throw new IllegalArgumentException("Invoking a removeFrom should only have a single argument");
-        }
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            checkVisibility(getAuthenticationSession(), targetAdapter, otma);
-            checkUsability(getAuthenticationSession(), targetAdapter, otma);
-        }
-
-
-        resolveIfRequired(targetAdapter);
-
-        final Object argumentObj = underlying(args[0]);
-        if (argumentObj == null) {
-            throw new IllegalArgumentException("Must provide a non-null object to remove");
-        }
-        final ObjectAdapter argumentAdapter = getAdapterManager().adapterFor(argumentObj);
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            final InteractionResult interactionResult = otma.isValidToRemove(targetAdapter, argumentAdapter).getInteractionResult();
-            notifyListenersAndVetoIfRequired(interactionResult);
-        }
-
-        if (getExecutionMode().shouldExecute()) {
-            otma.removeElement(targetAdapter, argumentAdapter);
-        }
-
-        objectChangedIfRequired(targetAdapter);
-
-        return null;
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // action
-    // /////////////////////////////////////////////////////////////////
-
-    private Object handleActionMethod(final Object[] args, final AuthenticationSession session, final ObjectAdapter targetAdapter, final ObjectAction noa, final String memberName) {
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            checkVisibility(getAuthenticationSession(), targetAdapter, noa);
-            checkUsability(getAuthenticationSession(), targetAdapter, noa);
-        }
-
-        final Object[] underlyingArgs = new Object[args.length];
-        int i = 0;
-        for (final Object arg : args) {
-            underlyingArgs[i++] = underlying(arg);
-        }
-
-        final ObjectAdapter[] argAdapters = new ObjectAdapter[underlyingArgs.length];
-        int j = 0;
-        for (final Object underlyingArg : underlyingArgs) {
-            argAdapters[j++] = underlyingArg != null ? getAdapterManager().adapterFor(underlyingArg) : null;
-        }
-
-        if(getExecutionMode().shouldEnforceRules()) {
-            final InteractionResult interactionResult = noa.isProposedArgumentSetValid(targetAdapter, argAdapters).getInteractionResult();
-            notifyListenersAndVetoIfRequired(interactionResult);
-        }
-
-        if (getExecutionMode().shouldExecute()) {
-            final ObjectAdapter actionReturnNO = noa.execute(targetAdapter, argAdapters);
-            return ObjectAdapter.Util.unwrap(actionReturnNO);
-        }
-
-        objectChangedIfRequired(targetAdapter);
-
-        return null;
-    }
-
-    private Object underlying(final Object arg) {
-        if (arg instanceof WrapperObject) {
-            final WrapperObject argViewObject = (WrapperObject) arg;
-            return argViewObject.wrapped();
-        } else {
-            return arg;
-        }
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // visibility and usability checks (common to all members)
-    // /////////////////////////////////////////////////////////////////
-
-    /**
-     * REVIEW: ideally should provide some way to allow to caller to indicate the 'where' context.  Having
-     * a hard-coded value like this is an approximation. 
-     */
-    private final Where where = Where.ANYWHERE;
-
-    private void checkVisibility(final AuthenticationSession session, final ObjectAdapter targetObjectAdapter, final ObjectMember objectMember) {
-        final Consent visibleConsent = objectMember.isVisible(getAuthenticationSession(), targetObjectAdapter, where);
-        final InteractionResult interactionResult = visibleConsent.getInteractionResult();
-        notifyListenersAndVetoIfRequired(interactionResult);
-    }
-
-    private void checkUsability(final AuthenticationSession session, final ObjectAdapter targetObjectAdapter, final ObjectMember objectMember) {
-        final InteractionResult interactionResult = objectMember.isUsable(getAuthenticationSession(), targetObjectAdapter, where).getInteractionResult();
-        notifyListenersAndVetoIfRequired(interactionResult);
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // notify listeners
-    // /////////////////////////////////////////////////////////////////
-
-    private void notifyListenersAndVetoIfRequired(final InteractionResult interactionResult) {
-        final InteractionEvent interactionEvent = interactionResult.getInteractionEvent();
-        notifyListeners(interactionEvent);
-        if (interactionEvent.isVeto()) {
-            throw toException(interactionEvent);
-        }
-    }
-
-    private String decode(final ObjectMember objectMember) {
-        if (objectMember instanceof OneToOneAssociation) {
-            return "a property";
-        }
-        if (objectMember instanceof OneToManyAssociation) {
-            return "a collection";
-        }
-        if (objectMember instanceof ObjectAction) {
-            return "an action";
-        }
-        return "an UNKNOWN member type";
-    }
-
-    /**
-     * Wraps a {@link InteractionEvent#isVeto() vetoing}
-     * {@link InteractionEvent} in a corresponding {@link InteractionException},
-     * and returns it.
-     */
-    private InteractionException toException(final InteractionEvent interactionEvent) {
-        if (!interactionEvent.isVeto()) {
-            throw new IllegalArgumentException("Provided interactionEvent must be a veto");
-        }
-        if (interactionEvent instanceof ValidityEvent) {
-            final ValidityEvent validityEvent = (ValidityEvent) interactionEvent;
-            return new InvalidException(validityEvent);
-        }
-        if (interactionEvent instanceof VisibilityEvent) {
-            final VisibilityEvent visibilityEvent = (VisibilityEvent) interactionEvent;
-            return new HiddenException(visibilityEvent);
-        }
-        if (interactionEvent instanceof UsabilityEvent) {
-            final UsabilityEvent usabilityEvent = (UsabilityEvent) interactionEvent;
-            return new DisabledException(usabilityEvent);
-        }
-        throw new IllegalArgumentException("Provided interactionEvent must be a VisibilityEvent, UsabilityEvent or a ValidityEvent");
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // switching
-    // /////////////////////////////////////////////////////////////////
-
-    private ObjectMember locateAndCheckMember(final Method method) {
-        final ObjectSpecificationDefault objectSpecificationDefault = getJavaSpecificationOfOwningClass(method);
-        final ObjectMember member = objectSpecificationDefault.getMember(method);
-        
-        if (member == null) {
-            final String methodName = method.getName();
-            throw new UnsupportedOperationException("Method '" + methodName + "' being invoked does not correspond to any of the object's fields or actions.");
-        }
-        return member;
-    }
-
-    protected boolean isTitleMethod(final Method method) {
-        return method.equals(titleMethod);
-    }
-
-    protected boolean isSaveMethod(final Method method) {
-        return method.equals(saveMethod) || method.equals(__isis_saveMethod);
-    }
-
-    protected boolean isWrappedMethod(final Method method) {
-        return method.equals(wrappedMethod) || method.equals(__isis_wrappedMethod);
-    }
-
-    protected boolean isExecutionModeMethod(final Method method) {
-        return method.equals(__isis_executionMode);
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // Specification lookup
-    // /////////////////////////////////////////////////////////////////
-
-    private ObjectSpecificationDefault getJavaSpecificationOfOwningClass(final Method method) {
-        return getJavaSpecification(method.getDeclaringClass());
-    }
-
-    private ObjectSpecificationDefault getJavaSpecification(final Class<?> clazz) {
-        final ObjectSpecification nos = getSpecification(clazz);
-        if (!(nos instanceof ObjectSpecificationDefault)) {
-            throw new UnsupportedOperationException("Only Java is supported (specification is '" + nos.getClass().getCanonicalName() + "')");
-        }
-        return (ObjectSpecificationDefault) nos;
-    }
-
-    private ObjectSpecification getSpecification(final Class<?> type) {
-        final ObjectSpecification nos = getSpecificationLookup().loadSpecification(type);
-        return nos;
-    }
-
-    // /////////////////////////////////////////////////////////////////
-    // Dependencies
-    // /////////////////////////////////////////////////////////////////
-
-    protected SpecificationLoader getSpecificationLookup() {
-        return specificationLookup;
-    }
-
-    public AuthenticationSessionProvider getAuthenticationSessionProvider() {
-        return authenticationSessionProvider;
-    }
-
-    protected AuthenticationSession getAuthenticationSession() {
-        return getAuthenticationSessionProvider().getAuthenticationSession();
-    }
-
-    protected AdapterManager getAdapterManager() {
-        return adapterManager;
-    }
-
-    protected ObjectPersistor getObjectPersistor() {
-        return objectPersistor;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/dec67056/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java b/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java
deleted file mode 100644
index ed6cbc1..0000000
--- a/core/module-wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/MapInvocationHandler.java
+++ /dev/null
@@ -1,48 +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.wrapper.handlers;
-
-import java.util.Map;
-
-import org.apache.isis.core.commons.lang.ObjectExtensions;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-class MapInvocationHandler<T, C> extends AbstractCollectionInvocationHandler<T, C> {
-
-    public MapInvocationHandler(final C collectionToProxy, final String collectionName, final DomainObjectInvocationHandler<T> handler, final OneToManyAssociation otma) {
-        super(collectionToProxy, collectionName, handler, otma);
-
-        try {
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "containsKey", Object.class));
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "containsValue", Object.class));
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "size"));
-            intercept(ObjectExtensions.getMethod(collectionToProxy, "isEmpty"));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "put", Object.class, Object.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "remove", Object.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "putAll", Map.class));
-            veto(ObjectExtensions.getMethod(collectionToProxy, "clear"));
-        } catch (final NoSuchMethodException e) {
-            // ///CLOVER:OFF
-            throw new RuntimeException("A Collection method could not be found: " + e.getMessage());
-            // ///CLOVER:ON
-        }
-    }
-
-}


[32/39] git commit: ISIS-839: recreating todoapp archetype

Posted by da...@apache.org.
ISIS-839: recreating todoapp archetype


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

Branch: refs/heads/master
Commit: 95b3e9ecd71b72c0529d15f2c738eba4c50af1f3
Parents: cb33718
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 08:24:37 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:24:37 2014 +0100

----------------------------------------------------------------------
 example/archetype/todoapp/pom.xml               |    8 +-
 .../META-INF/maven/archetype-metadata.xml       |    9 +-
 .../resources/archetype-resources/dom/pom.xml   |   16 +-
 .../dom/src/main/java/app/ToDoAppDashboard.java |    9 -
 .../main/java/app/ToDoAppDashboardService.java  |   41 +-
 .../dom/src/main/java/app/ToDoItemAnalysis.java |   13 +-
 .../java/app/ToDoItemAnalysisContributions.java |   10 +-
 .../java/app/ToDoItemsByCategoryViewModel.java  |   15 -
 .../java/app/ToDoItemsByDateRangeViewModel.java |   16 -
 .../dom/src/main/java/dom/todo/Categorized.java |   35 +
 .../dom/src/main/java/dom/todo/ToDoItem.java    |  126 ++-
 .../src/main/java/dom/todo/ToDoItem.layout.json |  192 ++--
 .../dom/todo/ToDoItemChangedPayloadFactory.java |    1 +
 .../java/dom/todo/ToDoItemContributions.java    |   27 +-
 .../java/dom/todo/ToDoItemSubscriptions.java    |  248 ++++-
 .../dom/src/main/java/dom/todo/ToDoItems.java   |   41 +-
 .../src/test/java/dom/todo/ToDoItemTest.java    |   94 ++
 .../test/java/dom/todo/ToDoTest_completed.java  |   71 --
 .../java/dom/todo/ToDoTest_notYetCompleted.java |   71 --
 .../archetype-resources/fixture/pom.xml         |    2 +-
 .../fixture/todo/ToDoItemsFixturesService.java  |   10 +
 .../archetype-resources/integtests/pom.xml      |    6 +-
 .../java/integration/ToDoSystemInitializer.java |   47 +-
 .../tests/AbstractToDoIntegTest.java            |   41 +
 .../java/integration/tests/ToDoIntegTest.java   |   41 -
 .../tests/ToDoItemContributionsIntegTest.java   |  152 +++
 .../integration/tests/ToDoItemIntegTest.java    | 1040 ++++++++++++++++++
 .../integration/tests/ToDoItemsIntegTest.java   |  116 ++
 ...oDoItemContributionsTest_updateCategory.java |  106 --
 .../tests/actions/ToDoItemTest_completed.java   |  174 ---
 .../tests/actions/ToDoItemTest_duplicate.java   |   83 --
 .../actions/ToDoItemTest_notYetCompleted.java   |   79 --
 .../ToDoItemContributionsTest_similarTo.java    |   71 --
 .../colls/ToDoItemTest_dependencies_add.java    |  181 ---
 .../colls/ToDoItemTest_dependencies_remove.java |  176 ---
 .../ToDoItemContributionsTest_priority.java     |   75 --
 .../tests/props/ToDoItemTest_attachment.java    |   82 --
 .../tests/props/ToDoItemTest_category.java      |   62 --
 .../tests/props/ToDoItemTest_cost.java          |  100 --
 .../tests/props/ToDoItemTest_description.java   |  220 ----
 .../tests/props/ToDoItemTest_dueBy.java         |  106 --
 .../tests/props/ToDoItemTest_notes.java         |   90 --
 .../tests/props/ToDoItemTest_ownedBy.java       |   61 -
 .../tests/props/ToDoItemTest_subcategory.java   |   62 --
 .../tests/repo/ToDoItemsTest_finders.java       |   84 --
 .../repo/ToDoItemsTest_newToDo_and_delete.java  |   68 --
 .../tests/smoke/ToDoItemTest_title.java         |  116 --
 .../main/resources/archetype-resources/pom.xml  |   40 +-
 .../webapp/ide/intellij/launch/README.txt       |    6 +
 .../ide/intellij/launch/TodoApp_PROTOTYPE.xml   |   32 +
 .../intellij/launch/TodoApp__enhance_only_.xml  |   26 +
 .../archetype-resources/webapp/pom.xml          |   48 +-
 .../src/main/java/webapp/admin/Admin.java       |    1 +
 .../java/webapp/admin/AdminContributions.java   |    7 +-
 .../webapp/prototyping/DeveloperUtilities.java  |    6 +-
 .../prototyping/ExternalLinksService.java       |    8 +-
 .../prototyping/WicketDeveloperUtilities.java   |   42 +
 .../webapp/ToDoApplication_en.properties        |   54 +
 .../webapp/src/main/resources/webapp/realm1.ini |   26 +
 .../src/main/resources/webapp/welcome.html      |    7 +-
 .../src/main/webapp/WEB-INF/isis.properties     |   76 +-
 .../src/main/webapp/WEB-INF/logging.properties  |   32 +
 .../main/webapp/WEB-INF/persistor.properties    |   12 +-
 .../webapp/src/main/webapp/WEB-INF/shiro.ini    |   10 +
 .../webapp/src/main/webapp/about/index.html     |  149 +--
 .../webapp/src/main/webapp/css/application.css  |    2 +-
 .../projects/basic/archetype.properties         |    2 +-
 67 files changed, 2285 insertions(+), 2795 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/pom.xml b/example/archetype/todoapp/pom.xml
index 90d7b9c..19c35fe 100644
--- a/example/archetype/todoapp/pom.xml
+++ b/example/archetype/todoapp/pom.xml
@@ -17,13 +17,13 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.isis.archetype</groupId>
-  <artifactId>quickstart_wicket_restful_jdo-archetype</artifactId>
+  <artifactId>todoapp-archetype</artifactId>
   <version>1.6.0-SNAPSHOT</version>
   <packaging>maven-archetype</packaging>
-  <name>quickstart_wicket_restful_jdo-archetype</name>
+  <name>todoapp-archetype</name>
   <build>
     <extensions>
       <extension>
@@ -44,7 +44,7 @@
   <parent>
     <groupId>org.apache.isis.core</groupId>
     <artifactId>isis</artifactId>
-    <version>1.6.0-SNAPSHOT</version>
+    <version>1.6.0</version>
     <relativePath>../../../core/pom.xml</relativePath>
   </parent>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml b/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
index 6e02d99..a87e7ef 100644
--- a/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -17,7 +17,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="quickstart_wicket_restful_jdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="todoapp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modules>
     <module id="${rootArtifactId}-dom" dir="dom" name="${rootArtifactId}-dom">
       <fileSets>
@@ -147,6 +147,13 @@
             <include>**/*.ini</include>
           </includes>
         </fileSet>
+        <fileSet filtered="true" encoding="UTF-8">
+          <directory>ide/intellij</directory>
+          <includes>
+            <include>**/*.xml</include>
+            <include>**/*.txt</include>
+          </includes>
+        </fileSet>
         <fileSet encoding="UTF-8">
           <directory>lib</directory>
           <includes>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
index d8ad66c..4b60832 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
@@ -26,7 +26,7 @@
 	</parent>
 
 	<artifactId>${artifactId}</artifactId>
-	<name>Quickstart Wicket/Restful/JDO DOM</name>
+	<name>ToDo App DOM</name>
 
 	<build>
         <resources>
@@ -101,11 +101,15 @@
 			<artifactId>isis-core-applib</artifactId>
 		</dependency>
 
-		<dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-			<artifactId>isis-objectstore-jdo-applib</artifactId>
-		</dependency>
-        
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-settings-applib</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-devutils-applib</artifactId>
+        </dependency>
+
 		<dependency>
             <groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-unittestsupport</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
index bf007d5..c63b566 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.annotation.Render.Type;
 public class ToDoAppDashboard extends AbstractViewModel {
 
     //region > identification in the UI
-    // //////////////////////////////////////
     public String title() {
         return "Dashboard";
     }
@@ -43,8 +42,6 @@ public class ToDoAppDashboard extends AbstractViewModel {
     //endregion
 
     //region > ViewModel contract
-    // //////////////////////////////////////
-
     private String memento;
     
     @Override
@@ -60,8 +57,6 @@ public class ToDoAppDashboard extends AbstractViewModel {
     //endregion
 
     //region > getAnalysisByCategory (collection)
-    // //////////////////////////////////////
-
     @Named("By Category")
     @Render(Type.EAGERLY)
     @Disabled
@@ -71,8 +66,6 @@ public class ToDoAppDashboard extends AbstractViewModel {
     //endregion
 
     //region > getAnalysisByDateRange (collection)
-    // //////////////////////////////////////
-    
     @Named("By Date Range")
     @Render(Type.EAGERLY)
     @Disabled
@@ -82,8 +75,6 @@ public class ToDoAppDashboard extends AbstractViewModel {
     //endregion
 
     //region > injected services
-    // //////////////////////////////////////
-    
     @javax.inject.Inject
     private ToDoItemAnalysis toDoItemAnalysis;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
index abd6268..0062a3e 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
@@ -21,45 +21,16 @@
  */
 package app;
 
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.ActionSemantics.Of;
+import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.Hidden;
-import org.apache.isis.applib.annotation.HomePage;
+import org.apache.isis.applib.services.homepage.AbstractHomePageDashboardService;
 
+@DomainService
 @Hidden
-public class ToDoAppDashboardService  {
+public class ToDoAppDashboardService extends AbstractHomePageDashboardService<ToDoAppDashboard> {
 
-    //region > identification in the UI
-    // //////////////////////////////////////
-
-    private static final String ID = "dashboard";
-
-    public String getId() {
-        return ID;
-    }
-
-    public String iconName() {
-        return ID;
-    }
-    //endregion
-
-    //region > lookup (action)
-    // //////////////////////////////////////
-    @ActionSemantics(Of.SAFE)
-    @HomePage
-    public ToDoAppDashboard lookup() {
-        return container.newViewModelInstance(ToDoAppDashboard.class, ID);
+    public ToDoAppDashboardService() {
+        super(ToDoAppDashboard.class);
     }
 
-    //endregion
-
-    //region > injected services
-    // //////////////////////////////////////
-
-    @javax.inject.Inject
-    private DomainObjectContainer container;
-
-    //endregion
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
index 1d4c73b..9609164 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
@@ -33,12 +33,11 @@ import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
 
 @Named("Analysis")
+@DomainService(menuOrder = "20")
 public class ToDoItemAnalysis {
 
 
     //region > identification in the UI
-    // //////////////////////////////////////
-
     public String getId() {
         return "analysis";
     }
@@ -49,8 +48,6 @@ public class ToDoItemAnalysis {
     //endregion
 
     //region > byCategory (action)
-    // //////////////////////////////////////
-
     @Named("By Category")
     @Bookmarkable
     @ActionSemantics(Of.SAFE)
@@ -71,12 +68,10 @@ public class ToDoItemAnalysis {
              }
          };
     }
-
     //endregion
 
     //region > byDateRange (action)
-    // //////////////////////////////////////
-    
+
     public enum DateRange {
         OverDue,
         Today,
@@ -109,8 +104,6 @@ public class ToDoItemAnalysis {
     //endregion
 
     //region > forCategory (programmatic)
-    // //////////////////////////////////////
-
     @Programmatic
     public ToDoItemsByCategoryViewModel toDoItemsForCategory(Category category) {
         return byCategory().apply(category);
@@ -119,8 +112,6 @@ public class ToDoItemAnalysis {
     //endregion
 
     //region > injected services
-    // //////////////////////////////////////
-
     @javax.inject.Inject
     private DomainObjectContainer container;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
index ead5e79..21ed821 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
@@ -23,20 +23,16 @@ package app;
 
 import dom.todo.ToDoItem;
 
-import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
-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;
 
+@DomainService
 @Hidden
 public class ToDoItemAnalysisContributions {
 
 
     //region > analyseCategory (action)
-    // //////////////////////////////////////
-
     @NotInServiceMenu
     @NotContributed(As.ASSOCIATION)
     @ActionSemantics(Of.SAFE)
@@ -46,8 +42,6 @@ public class ToDoItemAnalysisContributions {
     //endregion
 
     //region > injected services
-    // //////////////////////////////////////
-
     @javax.inject.Inject
     private ToDoItemAnalysis toDoAppAnalysis;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
index 68f23b0..f92cbac 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
@@ -44,8 +44,6 @@ public class ToDoItemsByCategoryViewModel
         implements Comparable<ToDoItemsByCategoryViewModel> {
 
     //region > viewModel implementation
-    // //////////////////////////////////////
-
     @Override
     public String viewModelMemento() {
         return getCategory().name();
@@ -55,12 +53,9 @@ public class ToDoItemsByCategoryViewModel
     public void viewModelInit(String memento) {
         setCategory(Category.valueOf(memento));
     }
-
     //endregion
 
     //region > category (property)
-    // //////////////////////////////////////
-
     private Category category;
 
     /**
@@ -77,8 +72,6 @@ public class ToDoItemsByCategoryViewModel
     //endregion
 
     //region > notYetComplete (property), complete (property)
-    // //////////////////////////////////////
-
     @MultiLine(numberOfLines=5)
     public String getNotYetComplete() {
         final List<ToDoItem> notYetComplete = getItemsNotYetComplete();
@@ -115,8 +108,6 @@ public class ToDoItemsByCategoryViewModel
     //endregion
 
     //region > getItemsNotYetComplete (collection), getItemsComplete (collection)
-    // //////////////////////////////////////
-
     /**
      * All those items {@link ToDoItems${symbol_pound}notYetComplete() not yet complete}, for this {@link ${symbol_pound}getCategory() category}.
      */
@@ -138,8 +129,6 @@ public class ToDoItemsByCategoryViewModel
     //endregion
 
     //region > deleteCompleted (action)
-    // //////////////////////////////////////
-
     @Named("Delete")
     public ToDoItemsByCategoryViewModel deleteCompleted() {
         for (ToDoItem item : getItemsComplete()) {
@@ -152,8 +141,6 @@ public class ToDoItemsByCategoryViewModel
     //endregion
 
     //region > compareTo
-    // //////////////////////////////////////
-
     @Override
     public int compareTo(ToDoItemsByCategoryViewModel other) {
         return ObjectContracts.compare(this, other, "category");
@@ -161,8 +148,6 @@ public class ToDoItemsByCategoryViewModel
     //endregion
 
     //region > injected services
-    // //////////////////////////////////////
-
     @javax.inject.Inject
     private ToDoItems toDoItems;
     //endregion

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
index ecd2f45..5d2b118 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByDateRangeViewModel.java
@@ -51,8 +51,6 @@ public class ToDoItemsByDateRangeViewModel
         implements Comparable<ToDoItemsByDateRangeViewModel> {
 
     //region > viewModel implementation
-    // //////////////////////////////////////
-
     @Override
     public String viewModelMemento() {
         return getDateRange().name();
@@ -66,10 +64,6 @@ public class ToDoItemsByDateRangeViewModel
     //endregion
 
     //region > dateRange (property)
-    // //////////////////////////////////////
-    //
-    // //////////////////////////////////////
-
     private DateRange dateRange;
 
     /**
@@ -86,17 +80,12 @@ public class ToDoItemsByDateRangeViewModel
     //endregion
 
     //region > count (derived property)
-    // //////////////////////////////////////
-
     public int getCount() {
         return getItemsNotYetComplete().size();
     }
-
     //endregion
 
     //region > getItemsNotYetComplete (collection)
-    // //////////////////////////////////////
-
     /**
      * All those items {@link ToDoItems${symbol_pound}notYetComplete() not yet complete}, for this {@link ${symbol_pound}getCategory() category}.
      */
@@ -139,8 +128,6 @@ public class ToDoItemsByDateRangeViewModel
     //endregion
 
     //region > compareTo
-    // //////////////////////////////////////
-
     @Override
     public int compareTo(ToDoItemsByDateRangeViewModel other) {
         return ObjectContracts.compare(this, other, "dateRange");
@@ -148,14 +135,11 @@ public class ToDoItemsByDateRangeViewModel
     //endregion
 
     //region > injected services
-    // //////////////////////////////////////
-    
     @javax.inject.Inject
     private ToDoItems toDoItems;
 
     @javax.inject.Inject
     private ClockService clockService;
-
     //endregion
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/Categorized.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/Categorized.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/Categorized.java
new file mode 100644
index 0000000..9bb6bad
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/Categorized.java
@@ -0,0 +1,35 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ *  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 dom.todo;
+
+/**
+ * Enables {@link dom.todo.ToDoItemContributions${symbol_pound}updateCategory(dom.todo.Categorized, dom.todo.ToDoItem.Category, dom.todo.ToDoItem.Subcategory)} to be contributed to
+ * both the {@link dom.todo.ToDoItem} (entity) and also the {@link app.ToDoItemWizard} (wizard).
+ */
+public interface Categorized {
+
+    ToDoItem.Category getCategory();
+    void setCategory(ToDoItem.Category category);
+
+    ToDoItem.Subcategory getSubcategory();
+    void setSubcategory(ToDoItem.Subcategory subcategory);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.java
index 13672f8..4ddc10d 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.java
@@ -42,11 +42,10 @@ import org.apache.isis.applib.annotation.Bulk.AppliesTo;
 import org.apache.isis.applib.annotation.Bulk.InteractionContext.InvokedAs;
 import org.apache.isis.applib.annotation.Command.ExecuteIn;
 import org.apache.isis.applib.annotation.Optional;
-import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.services.background.BackgroundService;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
+import org.apache.isis.applib.services.eventbus.ActionInteractionEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.scratchpad.Scratchpad;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
@@ -104,7 +103,7 @@ import org.apache.isis.applib.value.Clob;
 @AutoComplete(repository=ToDoItems.class, action="autoComplete") // default unless overridden by autoCompleteNXxx() method
 //@Bounded - if there were a small number of instances only (overrides autoComplete functionality)
 @Bookmarkable
-public class ToDoItem implements Comparable<ToDoItem> {
+public class ToDoItem implements Categorized, Comparable<ToDoItem> {
 
     //region > LOG
     /**
@@ -115,7 +114,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     // region > title, icon
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public String title() {
         final TitleBuffer buf = new TitleBuffer();
         buf.append(getDescription());
@@ -135,13 +133,11 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > description (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private String description;
 
     @javax.jdo.annotations.Column(allowsNull="false", length=100)
-    @PostsPropertyChangedEvent()
+    @PropertyInteraction()
     @RegEx(validation = "${symbol_escape}${symbol_escape}w[@&:${symbol_escape}${symbol_escape}-${symbol_escape}${symbol_escape},${symbol_escape}${symbol_escape}.${symbol_escape}${symbol_escape}+ ${symbol_escape}${symbol_escape}w]*") 
-    @TypicalLength(50)
     public String getDescription() {
         return description;
     }
@@ -158,7 +154,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > dueBy (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     @javax.jdo.annotations.Persistent(defaultFetchGroup="true")
     private LocalDate dueBy;
 
@@ -178,13 +173,12 @@ public class ToDoItem implements Comparable<ToDoItem> {
         if (dueBy == null) {
             return null;
         }
-        return isMoreThanOneWeekInPast(dueBy) ? "Due by date cannot be more than one week old" : null;
+        return toDoItems.validateDueBy(dueBy);
     }
     //endregion
 
     //region > category and subcategory (property)
 
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static enum Category {
         Professional {
             @Override
@@ -243,6 +237,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     private Category category;
 
     @javax.jdo.annotations.Column(allowsNull="false")
+    @Disabled(reason="Use action to update both category and subcategory")
     public Category getCategory() {
         return category;
     }
@@ -256,6 +251,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     private Subcategory subcategory;
 
     @javax.jdo.annotations.Column(allowsNull="true")
+    @Disabled(reason="Use action to update both category and subcategory")
     public Subcategory getSubcategory() {
         return subcategory;
     }
@@ -265,7 +261,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > ownedBy (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
     private String ownedBy;
 
     @javax.jdo.annotations.Column(allowsNull="false")
@@ -279,7 +275,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > complete (property), completed (action), notYetCompleted (action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
     private boolean complete;
 
     @Disabled
@@ -291,7 +287,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
         this.complete = complete;
     }
 
-    @PostsActionInvokedEvent(CompletedEvent.class)
+    @ActionInteraction(CompletedEvent.class)
     @Command
     @PublishedAction
     @Bulk
@@ -319,7 +315,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
         return isComplete() ? "Already completed" : null;
     }
 
-    @PostsActionInvokedEvent(NoLongerCompletedEvent.class)
+    @ActionInteraction(NoLongerCompletedEvent.class)
     @Command
     @PublishedAction
     @Bulk
@@ -349,7 +345,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > cost (property), updateCost (action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private BigDecimal cost;
 
     @javax.jdo.annotations.Column(allowsNull="true", scale=2)
@@ -362,7 +357,8 @@ public class ToDoItem implements Comparable<ToDoItem> {
     public void setCost(final BigDecimal cost) {
         this.cost = cost!=null?cost.setScale(2):null;
     }
-    
+
+    @ActionSemantics(Of.IDEMPOTENT)
     public ToDoItem updateCost(
             @Named("New cost") 
             @javax.validation.constraints.Digits(integer=10, fraction=2) 
@@ -393,7 +389,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > notes (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private String notes;
 
     @javax.jdo.annotations.Column(allowsNull="true", length=400)
@@ -407,7 +402,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > attachment (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private Blob attachment;
     @javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
             @javax.jdo.annotations.Column(name = "attachment_name"),
@@ -425,7 +419,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > doc (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private Clob doc;
     @javax.jdo.annotations.Persistent(defaultFetchGroup="false", columns = {
             @javax.jdo.annotations.Column(name = "doc_name"),
@@ -443,7 +436,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > version (derived property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public Long getVersionSequence() {
         if(!(this instanceof javax.jdo.spi.PersistenceCapable)) {
             return null;
@@ -459,7 +451,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > dependencies (property), add (action), remove (action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     // overrides the natural ordering
     public static class DependenciesComparator implements Comparator<ToDoItem> {
@@ -481,8 +472,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     @javax.jdo.annotations.Element(column="dependentId")
     private SortedSet<ToDoItem> dependencies = new TreeSet<ToDoItem>();
 
-    @PostsCollectionAddedToEvent
-    @PostsCollectionRemovedFromEvent
+    @CollectionInteraction
     @SortedBy(DependenciesComparator.class)
     public SortedSet<ToDoItem> getDependencies() {
         return dependencies;
@@ -491,7 +481,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     public void setDependencies(final SortedSet<ToDoItem> dependencies) {
         this.dependencies = dependencies;
     }
-    
+
     public void addToDependencies(final ToDoItem toDoItem) {
         getDependencies().add(toDoItem);
     }
@@ -504,7 +494,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
             @TypicalLength(20)
             final ToDoItem toDoItem) {
     	// By wrapping the call, Isis will detect that the collection is modified 
-    	// and it will automatically send a CollectionAddedToEvent to the Event Bus.
+    	// and it will automatically send CollectionInteractionEvents to the Event Bus.
     	// ToDoItemSubscriptions is a demo subscriber to this event
         wrapperFactory.wrapSkipRules(this).addToDependencies(toDoItem);
         return this;
@@ -537,7 +527,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
             @TypicalLength(20)
             final ToDoItem toDoItem) {
     	// By wrapping the call, Isis will detect that the collection is modified 
-    	// and it will automatically send a CollectionRemovedFromEvent to the Event Bus.
+    	// and it will automatically send a CollectionInteractionEvent to the Event Bus.
         // ToDoItemSubscriptions is a demo subscriber to this event
         wrapperFactory.wrapSkipRules(this).removeFromDependencies(toDoItem);
         return this;
@@ -563,7 +553,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > clone (action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     // the name of the action in the UI
     // nb: method is not called "clone()" is inherited by java.lang.Object and
@@ -602,8 +591,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > delete (action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    @PostsActionInvokedEvent(DeletedEvent.class)
+    @ActionInteraction(DeletedEvent.class)
     @Bulk
     public List<ToDoItem> delete() {
         
@@ -617,7 +605,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > totalCost (property)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     @ActionSemantics(Of.SAFE)
     @Bulk(AppliesTo.BULK_ONLY)
     public BigDecimal totalCost() {
@@ -631,7 +618,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > scheduleExplicitly (action), scheduleImplicitly (background action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     @ActionSemantics(Of.IDEMPOTENT)
     @Prototype
     public ToDoItem scheduleExplicitly() {
@@ -640,8 +626,6 @@ public class ToDoItem implements Comparable<ToDoItem> {
         return this;
     }
     
-    // //////////////////////////////////////
-
     @ActionSemantics(Of.IDEMPOTENT)
     @Command(executeIn=ExecuteIn.BACKGROUND)
     @Prototype
@@ -652,17 +636,15 @@ public class ToDoItem implements Comparable<ToDoItem> {
     //endregion
 
     //region > openSourceCodeOnGithub (action)
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     @Prototype
     @ActionSemantics(Of.SAFE)
     public URL openSourceCodeOnGithub() throws MalformedURLException {
-        return new URL("https://github.com/apache/isis/tree/master/example/application/${parentArtifactId}/dom/src/main/java/dom/todo/ToDoItem.java");
+        return new URL("https://github.com/apache/isis/tree/master/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java");
     }
     //endregion
 
     //region > demoException (action)
 
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     static enum DemoExceptionType {
         RecoverableException,
         RecoverableExceptionAutoEscalated,
@@ -691,8 +673,41 @@ public class ToDoItem implements Comparable<ToDoItem> {
     }
     //endregion
 
+    //region > lifecycle callbacks
+
+    public void created() {
+        LOG.debug("lifecycle callback: created: " + container.titleOf(this));
+    }
+
+    public void loaded() {
+        LOG.debug("lifecycle callback: loaded: " + container.titleOf(this));
+    }
+
+    public void persisting() {
+        LOG.debug("lifecycle callback: persisting: " + container.titleOf(this));
+    }
+
+    public void persisted() {
+        LOG.debug("lifecycle callback: persisted: " + container.titleOf(this));
+    }
+
+    public void updating() {
+        LOG.debug("lifecycle callback: updating: " + container.titleOf(this));
+    }
+    public void updated() {
+        LOG.debug("lifecycle callback: updated: " + container.titleOf(this));
+    }
+
+    public void removing() {
+        LOG.debug("lifecycle callback: removing: " + container.titleOf(this));
+    }
+
+    public void removed() {
+        LOG.debug("lifecycle callback: removed: " + container.titleOf(this));
+    }
+    //endregion
+
     //region > object-level validation
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     /**
      * In a real app, if this were actually a rule, then we'd expect that
@@ -705,36 +720,27 @@ public class ToDoItem implements Comparable<ToDoItem> {
         }
         return null;
     }
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //endregion
 
     //region > programmatic helpers
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 * 1000L;
-
     @Programmatic // excluded from the framework's metamodel
     public boolean isDue() {
         if (getDueBy() == null) {
             return false;
         }
-        return !isMoreThanOneWeekInPast(getDueBy());
-    }
-
-    private static boolean isMoreThanOneWeekInPast(final LocalDate dueBy) {
-        return dueBy.toDateTimeAtStartOfDay().getMillis() < Clock.getTime() - ONE_WEEK_IN_MILLIS;
+        return !toDoItems.isMoreThanOneWeekInPast(getDueBy());
     }
     //endregion
 
     //region > events
 
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    public static abstract class AbstractActionInvokedEvent extends ActionInvokedEvent<ToDoItem> {
+    public static abstract class AbstractActionInteractionEvent extends ActionInteractionEvent<ToDoItem> {
         private static final long serialVersionUID = 1L;
         private final String description;
-        public AbstractActionInvokedEvent(
-                final String description, 
-                final ToDoItem source, 
-                final Identifier identifier, 
+        public AbstractActionInteractionEvent(
+                final String description,
+                final ToDoItem source,
+                final Identifier identifier,
                 final Object... arguments) {
             super(source, identifier, arguments);
             this.description = description;
@@ -744,7 +750,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
         }
     }
 
-    public static class CompletedEvent extends AbstractActionInvokedEvent {
+    public static class CompletedEvent extends AbstractActionInteractionEvent {
         private static final long serialVersionUID = 1L;
         public CompletedEvent(
                 final ToDoItem source, 
@@ -754,7 +760,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
         }
     }
 
-    public static class NoLongerCompletedEvent extends AbstractActionInvokedEvent {
+    public static class NoLongerCompletedEvent extends AbstractActionInteractionEvent {
         private static final long serialVersionUID = 1L;
         public NoLongerCompletedEvent(
                 final ToDoItem source, 
@@ -764,7 +770,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
         }
     }
 
-    public static class DeletedEvent extends AbstractActionInvokedEvent {
+    public static class DeletedEvent extends AbstractActionInteractionEvent {
         private static final long serialVersionUID = 1L;
         public DeletedEvent(
                 final ToDoItem source, 
@@ -773,12 +779,11 @@ public class ToDoItem implements Comparable<ToDoItem> {
             super("deleted", source, identifier, arguments);
         }
     }
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
     //endregion
 
     //region > predicates
 
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static class Predicates {
         
         public static Predicate<ToDoItem> thoseOwnedBy(final String currentUser) {
@@ -853,7 +858,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
         }
 
     }
-    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
     //endregion
 
     //region > toString, compareTo
@@ -884,12 +889,12 @@ public class ToDoItem implements Comparable<ToDoItem> {
     @javax.inject.Inject
     @SuppressWarnings("unused")
     private ClockService clockService;
-    
+
     Bulk.InteractionContext bulkInteractionContext;
     public void injectBulkInteractionContext(Bulk.InteractionContext bulkInteractionContext) {
         this.bulkInteractionContext = bulkInteractionContext;
     }
-    
+
     @SuppressWarnings("unused")
     @javax.inject.Inject
     private CommandContext commandContext;
@@ -907,6 +912,7 @@ public class ToDoItem implements Comparable<ToDoItem> {
 
     @javax.inject.Inject
     private WrapperFactory wrapperFactory;
+
     // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //endregion
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.layout.json
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.layout.json b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.layout.json
index db9e7d2..f15424d 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.layout.json
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItem.layout.json
@@ -15,68 +15,62 @@
  *  limitations under the License.
  */
 {
-    columns: [
+    "columns": [
     {
-        span: 6,
-        memberGroups: {
-            General: {
-                members: {
-                    description: {
-                        typicalLength: { value: 50 }
+        "span": 6,
+        "memberGroups": {
+            "General": {
+                "members": {
+                    "description": {
+                        "typicalLength": { "value": 50 }
                     },
-                    category: {
-                        disabled: {
-                            reason: "Use action to update both category and subcategory"
-                        }
+                    "category": {
                     },
-                    subcategory: {
-                        disabled: {
-                            reason: "Use action to update both category and subcategory"
-                        },
-                        actions: {
-                            updateCategory: {
-                                named: {
-                                    value: "Update"
+                    "subcategory": {
+                        "actions": {
+                            "updateCategory": {
+                                "named": {
+                                    "value": "Update"
                                 }
                             },
-                            analyseCategory: {}
+                            "analyseCategory": {}
                         }
                     },
-                    ownedBy: {
-                        hidden: {}
+                    "ownedBy": {
+                        "hidden": {}
                     },
-                    complete: {
-                        actions: {
-                            completed: {
-                                named: { value: "Done" },
-                                describedAs: {
-                                    value: "Mark this todo item as having been completed"
+                    "complete": {
+                        "actions": {
+                            "completed": {
+                                "named": { "value": "Done" },
+                                "describedAs": {
+                                    "value": "Mark this todo item as having been completed"
                                 },
-                                cssClass: { value: "x-highlight" }
+                                "cssClass": { "value": "x-highlight" }
                             },
-                            notYetCompleted: {
-                                named: { value: "Not done" }
+                            "notYetCompleted": {
+                                "named": { "value": "Not done" }
                             },
-                            scheduleExplicitly: {
+                            "scheduleExplicitly": {
                             },
-                            scheduleImplicitly: {
+                            "scheduleImplicitly": {
                             }
                         },
-                        describedAs: {
-                            value: "Whether this todo item has been completed"
+                        "describedAs": {
+                            "value": "Whether this todo item has been completed"
                         }
                     }
                 }
             },
-            Misc: {
-                members: {
-                    versionSequence: {
-                        named: { 
-                            value: "Version" 
+            "Misc": {
+                "members": {
+                    "versionSequence": {
+                        "named": {
+                            "value": "Version"
                         },
-                        disabled: {},
-                        hidden: {
-                            where: ALL_TABLES
+                        "disabled": {},
+                        "hidden": {
+                            "where": "ALL_TABLES"
                         }
                     }
                 }
@@ -84,48 +78,48 @@
         }
     },
     {
-        span: 6,
-        memberGroups: {
-            Priority: {
-                members: {
-                     relativePriority: {
-                        actions: {
-                            previous: {},
-                            next: {}
+        "span": 6,
+        "memberGroups": {
+            "Priority": {
+                "members": {
+                     "relativePriority": {
+                        "actions": {
+                            "previous": {},
+                            "next": {}
                         }
                     },
-                    dueBy: {
-                        cssClass: { value: "x-key" }
+                    "dueBy": {
+                        "cssClass": { "value": "x-key" }
                     }
                 }
             },
-            Other: {
-                members: {
-                    cost: {
-                        actions: {
-                            updateCost:{
-                                named: {
-                                    value: "Update"
+            "Other": {
+                "members": {
+                    "cost": {
+                        "actions": {
+                            "updateCost":{
+                                "named": {
+                                    "value": "Update"
                                 }
                             }
                         }
                     },
-                    notes: {
-                        multiLine: {
-                            numberOfLines: 5
+                    "notes": {
+                        "multiLine": {
+                            "numberOfLines": 5
                         },
-                        hidden: {
-                            where: ALL_TABLES
+                        "hidden": {
+                            "where": "ALL_TABLES"
                         }
                     },
-                    attachment: {
-                        hidden: {
-                            where: STANDALONE_TABLES
+                    "attachment": {
+                        "hidden": {
+                            "where": "STANDALONE_TABLES"
                         }
                     },
-                    doc: {
-                        hidden: {
-                            where: STANDALONE_TABLES
+                    "doc": {
+                        "hidden": {
+                            "where": "STANDALONE_TABLES"
                         }
                     }
                 }
@@ -133,49 +127,49 @@
         }
     },
     {
-        span: 0
+        "span": 0
     },
     {
-        span: 6,
-        collections: {
-            dependencies: {
-                disabled: {},
-                actions: {
-                    add:{},
-                    remove: {
-                        cssClass: { value: "x-caution" }
+        "span": 6,
+        "collections": {
+            "dependencies": {
+                "disabled": {},
+                "actions": {
+                    "add":{},
+                    "remove": {
+                        "cssClass": { "value": "x-caution" }
                     }
                 },
-                paged: {
-                    value: 5
+                "paged": {
+                    "value": 5
                 },
-                render: {
-                    value: EAGERLY
+                "render": {
+                    "value": "EAGERLY"
                 }
             },
-            similarTo: {
-                disabled: {},
-                paged: {
-                    value: 3
+            "similarTo": {
+                "disabled": {},
+                "paged": {
+                    "value": 3
                 },
-                render: {
-                    value: LAZILY
+                "render": {
+                    "value": "LAZILY"
                 }
             }
         }
     }
     ],
-    actions: {
-        totalCost: {},
-        delete: {
-            cssClass: { value: "x-caution" }
+    "actions": {
+        "totalCost": {},
+        "delete": {
+            "cssClass": { "value": "x-caution" }
         },
-        duplicate: {
-	        named: {
-	            value: "Clone"
+        "duplicate": {
+	        "named": {
+	            "value": "Clone"
 	        },
-            describedAs: {
-                value: "Create a new todo item from this one"
+            "describedAs": {
+                "value": "Create a new todo item from this one"
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemChangedPayloadFactory.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemChangedPayloadFactory.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemChangedPayloadFactory.java
index 7c03f19..f88ec1c 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemChangedPayloadFactory.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemChangedPayloadFactory.java
@@ -42,6 +42,7 @@ public class ToDoItemChangedPayloadFactory implements PayloadFactory{
             return getChanged().getDescription();
         }
     }
+
     @Override
     public EventPayload payloadFor(Object changedObject, ChangeKind changeKind) {
         return new ToDoItemPayload((ToDoItem) changedObject);

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemContributions.java
index eb7c606..789796d 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -39,11 +39,10 @@ import org.apache.isis.applib.annotation.NotContributed.As;
 import org.apache.isis.applib.query.QueryDefault;
 import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
 
+@DomainService
 public class ToDoItemContributions extends AbstractFactoryAndRepository {
 
     //region > priority (contributed property)
-    // //////////////////////////////////////
-    
     @DescribedAs("The relative priority of this item compared to others not yet complete (using 'due by' date)")
     @NotInServiceMenu
     @ActionSemantics(Of.SAFE)
@@ -70,7 +69,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
             }}, ToDoItemContributions.class, "relativePriority", toDoItem);
     }
 
-
     private List<ToDoItem> sortedNotYetComplete() {
         return ORDERING_DUE_BY
         .compound(ORDERING_DESCRIPTION)
@@ -97,8 +95,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     //endregion
 
     //region >  next, previous (contributed actions)
-    // //////////////////////////////////////
-
     @DescribedAs("The next item not yet completed")
     @NotInServiceMenu
     @ActionSemantics(Of.SAFE)
@@ -163,8 +159,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     //endregion
 
     //region > similarTo (contributed collection)
-    // //////////////////////////////////////
-    
     @NotInServiceMenu
     @ActionSemantics(Of.SAFE)
     @NotContributed(As.ACTION)
@@ -189,52 +183,45 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     //endregion
 
     //region > updateCategory (contributed action)
-    // //////////////////////////////////////
 
     @DescribedAs("Update category and subcategory")
     @NotInServiceMenu
     @ActionSemantics(Of.IDEMPOTENT)
-    public ToDoItem updateCategory(
-            final ToDoItem item, 
+    public Categorized updateCategory(
+            final Categorized item,
             final @Named("Category") Category category,
             final @Optional @Named("Subcategory") Subcategory subcategory) {
         item.setCategory(category);
         item.setSubcategory(subcategory);
         return item;
     }
-
     public Category default1UpdateCategory(
-            final ToDoItem item) {
+            final Categorized item) {
         return item != null? item.getCategory(): null;
     }
     public Subcategory default2UpdateCategory(
-            final ToDoItem item) {
+            final Categorized item) {
         return item != null? item.getSubcategory(): null;
     }
 
     public List<Subcategory> choices2UpdateCategory(
-            final ToDoItem item, final Category category) {
+            final Categorized item, final Category category) {
         return Subcategory.listFor(category);
     }
     
     public String validateUpdateCategory(
-            final ToDoItem item, final Category category, final Subcategory subcategory) {
+            final Categorized item, final Category category, final Subcategory subcategory) {
         return Subcategory.validate(category, subcategory);
     }
     //endregion
 
     //region > helpers
-    // //////////////////////////////////////
-    
     protected String currentUserName() {
         return getContainer().getUser().getName();
     }
-
     //endregion
 
     //region > injected services
-    // //////////////////////////////////////
-
     @javax.inject.Inject
     private ToDoItems toDoItems;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
index 1ee6d98..dab085e 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
@@ -23,33 +23,52 @@ package dom.todo;
 
 import java.util.EventObject;
 import java.util.List;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
 import com.google.common.collect.Lists;
 import com.google.common.eventbus.Subscribe;
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.NonRecoverableException;
 import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.annotation.*;
-import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
-import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
+import org.apache.isis.applib.services.eventbus.ActionInteractionEvent;
+import org.apache.isis.applib.services.eventbus.CollectionInteractionEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
 
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Lists.newArrayList;
+
+@DomainService
 public class ToDoItemSubscriptions {
 
     //region > LOG
     private final static org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(ToDoItemSubscriptions.class);
     //endregion
 
-
     //region > on(Event)...
-    // //////////////////////////////////////
+
     public static enum Behaviour {
-        AcceptEvents,
-        RejectEventsWithRecoverableException,
-        RejectEventsWithNonRecoverableException,
-        ThrowOtherException
+        AnyExecuteAccept,
+        AnyExecuteVetoWithRecoverableException,
+        AnyExecuteVetoWithNonRecoverableException,
+        AnyExecuteVetoWithOtherException,
+        UpdateCostActionHide,
+        UpdateCostActionDisable,
+        UpdateCostActionInvalidate,
+        DescriptionPropertyHide,
+        DescriptionPropertyDisable,
+        DescriptionPropertyInvalidate,
+        DependenciesCollectionHide,
+        // not implemented in Wicket viewer, but supported in wrapped objects
+        DependenciesCollectionDisable,
+        // not implemented in Wicket viewer, but supported in wrapped objects
+        DependenciesCollectionInvalidateAdd,
+        DependenciesCollectionInvalidateRemove,
+        SimilarToCollectionHide
     }
-    private Behaviour behaviour = Behaviour.AcceptEvents;
+    private Behaviour behaviour = Behaviour.AnyExecuteAccept;
 
     /**
      * To demo/test what occurs if a subscriber that might veto an event.
@@ -58,77 +77,177 @@ public class ToDoItemSubscriptions {
     @MemberOrder(name = "Prototyping", sequence = "80")
     @Named("Set subscriber behaviour")
     @ActionSemantics(ActionSemantics.Of.IDEMPOTENT)
-    public String subscriberBehaviour(@Named("Behaviour") Behaviour behaviour) {
+    public ToDoItem subscriberBehaviour(ToDoItem toDoItem, @Named("Behaviour") Behaviour behaviour) {
         this.behaviour = behaviour;
-        return "Subscriber behaviour set to: " + behaviour;
+        container.informUser("Subscriber behaviour set to: " + behaviour);
+        return toDoItem;
     }
-    public Behaviour default0SubscriberBehaviour() {
+    public Behaviour default1SubscriberBehaviour() {
         return this.behaviour;
     }
+
     @Programmatic
     public Behaviour getSubscriberBehaviour() {
         return behaviour;
     }
-    private void rejectIfRequired() {
-        if(behaviour == Behaviour.RejectEventsWithRecoverableException) {
+    private void onExecutedVetoIfRequired() {
+        if(behaviour == Behaviour.AnyExecuteVetoWithRecoverableException) {
             throw new RecoverableException("Rejecting event (recoverable exception thrown)");
         }
-        if(behaviour == Behaviour.RejectEventsWithNonRecoverableException) {
+        if(behaviour == Behaviour.AnyExecuteVetoWithNonRecoverableException) {
             throw new NonRecoverableException("Rejecting event (recoverable exception thrown)");
         }
-        if(behaviour == Behaviour.ThrowOtherException) {
+        if(behaviour == Behaviour.AnyExecuteVetoWithOtherException) {
             throw new RuntimeException("Throwing some other exception");
         }
     }
     //endregion
 
-    //region > on(Event)...
-    // //////////////////////////////////////
-
+    //region > on(Event) for ToDoItem-specific events
     @Programmatic
     @Subscribe
-    public void on(ToDoItem.AbstractActionInvokedEvent ev) {
-        rejectIfRequired();
+    public void on(final ToDoItem.CompletedEvent ev) {
         recordEvent(ev);
-        LOG.info(ev.getEventDescription() + ": " + container.titleOf(ev.getSource()));
+        switch(ev.getPhase()) {
+            case HIDE:
+                break;
+            case DISABLE:
+                break;
+            case VALIDATE:
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                LOG.info("Received ToDoItem.CompletedEvent for : " + container.titleOf(ev.getSource()));
+                break;
+        }
     }
+    //endregion
 
+    //region > on(Event) ... general purpose
 
     @Programmatic
     @Subscribe
-    public void on(PropertyChangedEvent<?,?> ev) {
-        rejectIfRequired();
+    public void on(final ActionInteractionEvent<?> ev) {
         recordEvent(ev);
-        if(ev.getIdentifier().getMemberName().contains("description")) {
-            String newValue = (String) ev.getNewValue();
-            if(newValue.matches(".*demo veto.*")) {
-                throw new RecoverableException("oh no you don't! " + ev.getNewValue());
-            }
+        switch(ev.getPhase()) {
+            case HIDE:
+                if(getSubscriberBehaviour() == Behaviour.UpdateCostActionHide) {
+                    if(ev.getIdentifier().getMemberName().equals("updateCost")) {
+                        ev.hide();
+                    }
+                }
+                break;
+            case DISABLE:
+                if(getSubscriberBehaviour() == Behaviour.UpdateCostActionDisable) {
+                    if(ev.getIdentifier().getMemberName().equals("updateCost")) {
+                        ev.disable("ToDoItemSubscriptions says: updateCost action disabled!");
+                    }
+                }
+                break;
+            case VALIDATE:
+                if(getSubscriberBehaviour() == Behaviour.UpdateCostActionInvalidate &&
+                        ev.getIdentifier().getMemberName().equals("updateCost")) {
+                    ev.disable("ToDoItemSubscriptions says: can't invoke updateCostaction with these args!");
+                }
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                LOG.info("Received ActionInteractionEvent, " + container.titleOf(ev.getSource()) + ", invoked " + ev.getIdentifier().getMemberName());
+                onExecutedVetoIfRequired();
+                break;
         }
-        LOG.info(container.titleOf(ev.getSource()) + ", changed " + ev.getIdentifier().getMemberName() + " : " + ev.getOldValue() + " -> " + ev.getNewValue());
     }
-    
+
     @Programmatic
     @Subscribe
-    public void on(CollectionAddedToEvent<?,?> ev) {
-        rejectIfRequired();
+    public void on(PropertyInteractionEvent<?,?> ev) {
         recordEvent(ev);
-        LOG.info(container.titleOf(ev.getSource()) + ", added to " + ev.getIdentifier().getMemberName() + " : " + ev.getValue());
+        switch(ev.getPhase()) {
+            case HIDE:
+                if(getSubscriberBehaviour() == Behaviour.DescriptionPropertyHide &&
+                    ev.getIdentifier().getMemberName().equals("description")) {
+                    ev.hide();
+                }
+                break;
+            case DISABLE:
+                if(getSubscriberBehaviour() == Behaviour.DescriptionPropertyDisable &&
+                    ev.getIdentifier().getMemberName().equals("description")) {
+                    ev.disable("ToDoItemSubscriptions says: description property disabled!");
+                }
+                break;
+            case VALIDATE:
+                if(getSubscriberBehaviour() == Behaviour.DescriptionPropertyInvalidate &&
+                    ev.getIdentifier().getMemberName().equals("description")) {
+                    ev.disable("ToDoItemSubscriptions says: can't change description property to this value!");
+                }
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                LOG.info("Received PropertyInteractionEvent, " + container.titleOf(ev.getSource()) + ", changed " + ev.getIdentifier().getMemberName() + " : " + ev.getOldValue() + " -> " + ev.getNewValue());
+                onExecutedVetoIfRequired();
+
+                if(ev.getIdentifier().getMemberName().contains("description")) {
+                    String newValue = (String) ev.getNewValue();
+                    if(newValue.matches(".*demo veto.*")) {
+                        throw new RecoverableException("oh no you don't! " + ev.getNewValue());
+                    }
+                }
+                break;
+        }
     }
     
     @Programmatic
     @Subscribe
-    public void on(CollectionRemovedFromEvent<?,?> ev) {
-        rejectIfRequired();
+    public void on(CollectionInteractionEvent<?,?> ev) {
         recordEvent(ev);
-        LOG.info(container.titleOf(ev.getSource()) + ", removed from " + ev.getIdentifier().getMemberName() + " : " + ev.getValue());
-    }
+        switch (ev.getPhase()) {
+            case HIDE:
+                if(getSubscriberBehaviour() == Behaviour.DependenciesCollectionHide &&
+                    ev.getIdentifier().getMemberName().equals("dependencies")) {
+                    ev.hide();
+                }
+                if (getSubscriberBehaviour() == Behaviour.SimilarToCollectionHide &&
+                    ev.getIdentifier().getMemberName().equals("similarTo")) {
+                    ev.hide();
+                }
+                break;
+            case DISABLE:
+                if (getSubscriberBehaviour() == Behaviour.DependenciesCollectionDisable &&
+                    ev.getIdentifier().getMemberName().equals("dependencies")) {
+                    ev.disable("ToDoItemSubscriptions says: dependencies collection disabled!");
+                }
+                break;
+            case VALIDATE:
+                if(getSubscriberBehaviour() == Behaviour.DependenciesCollectionInvalidateAdd &&
+                    ev.getIdentifier().getMemberName().equals("dependencies") &&
+                    ev.getOf() == CollectionInteractionEvent.Of.ADD_TO ) {
+                    ev.invalidate("ToDoItemSubscriptions says: can't add this object to dependencies collection!");
+                }
+                if(getSubscriberBehaviour() == Behaviour.DependenciesCollectionInvalidateRemove &&
+                    ev.getIdentifier().getMemberName().equals("dependencies") &&
+                    ev.getOf() == CollectionInteractionEvent.Of.REMOVE_FROM ) {
+                    ev.invalidate("ToDoItemSubscriptions says: can't remove this object from dependencies collection!");
+                }
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                if(ev.getOf() == CollectionInteractionEvent.Of.ADD_TO) {
+                    LOG.info("Received CollectionInteractionEvent, " + container.titleOf(ev.getSource()) + ", added to " + ev.getIdentifier().getMemberName() + " : " + ev.getValue());
+                } else {
+                    LOG.info("Received CollectionInteractionEvent, " + container.titleOf(ev.getSource()) + ", removed from " + ev.getIdentifier().getMemberName() + " : " + ev.getValue());
+                }
+                onExecutedVetoIfRequired();
+                break;
+        }
 
+    }
     //endregion
 
     //region > receivedEvents
-    // //////////////////////////////////////
-    
     private final List<java.util.EventObject> receivedEvents = Lists.newLinkedList();
 
     /**
@@ -138,19 +257,43 @@ public class ToDoItemSubscriptions {
     public List<java.util.EventObject> receivedEvents() {
         return receivedEvents;
     }
+
+    /**
+     * Used in integration tests.
+     */
+    @Programmatic
+    public <T extends java.util.EventObject> List<T> receivedEvents(final Class<T> expectedType) {
+        return newArrayList(
+                    transform(
+                        filter(receivedEvents, instanceOf(expectedType)),
+                        castTo(expectedType)));
+    }
+
+    private static <T extends EventObject> Function<EventObject, T> castTo(Class<T> expectedType) {
+        return new Function<EventObject, T>() {
+                    @Override
+                    public T apply(EventObject input) {
+                        return (T) input;
+                    }
+                };
+    }
+
+    private static <T extends EventObject> Predicate<EventObject> instanceOf(final Class<T> expectedType) {
+        return new Predicate<EventObject>() {
+            @Override
+            public boolean apply(EventObject input) {
+                return expectedType.isInstance(input);
+            }
+        };
+    }
+
     /**
      * Used in integration tests.
      */
     @Programmatic
     public <T extends java.util.EventObject> T mostRecentlyReceivedEvent(Class<T> expectedType) {
-        if (receivedEvents.isEmpty()) {
-            return null;
-        } 
-        final EventObject ev = receivedEvents.get(0);
-        if(!expectedType.isAssignableFrom(ev.getClass())) {
-            return null;
-        } 
-        return expectedType.cast(ev);
+        final List<T> receivedEvents = receivedEvents(expectedType);
+        return !receivedEvents.isEmpty() ? receivedEvents.get(0) : null;
     }
     private void recordEvent(final java.util.EventObject ev) {
         receivedEvents.add(0, ev);
@@ -161,20 +304,17 @@ public class ToDoItemSubscriptions {
     @Programmatic
     public void reset() {
         receivedEvents.clear();
-        subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AcceptEvents);
+        subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteAccept);
     }
-
     //endregion
 
-
     //region > injected services
-    // //////////////////////////////////////
-    
     @javax.inject.Inject
     private DomainObjectContainer container;
 
     @SuppressWarnings("unused")
     private EventBusService eventBusService;
+    @Programmatic
     public final void injectEventBusService(EventBusService eventBusService) {
         eventBusService.register(this);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItems.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItems.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItems.java
index 7c58d7c..bee7631 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItems.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/dom/todo/ToDoItems.java
@@ -35,11 +35,10 @@ import org.apache.isis.applib.query.QueryDefault;
 import org.apache.isis.applib.services.clock.ClockService;
 
 @Named("ToDos")
+@DomainService(menuOrder = "10", repositoryFor = ToDoItem.class)
 public class ToDoItems {
 
     //region > identification in the UI
-    // //////////////////////////////////////
-
     public String getId() {
         return "toDoItems";
     }
@@ -50,11 +49,9 @@ public class ToDoItems {
     //endregion
 
     //region > notYetComplete (action)
-    // //////////////////////////////////////
-
     @Bookmarkable
     @ActionSemantics(Of.SAFE)
-    @MemberOrder(sequence = "1")
+    @MemberOrder(sequence = "10")
     public List<ToDoItem> notYetComplete() {
         final List<ToDoItem> items = notYetCompleteNoUi();
         if(items.isEmpty()) {
@@ -73,10 +70,8 @@ public class ToDoItems {
     //endregion
 
     //region > complete (action)
-    // //////////////////////////////////////
-    
     @ActionSemantics(Of.SAFE)
-    @MemberOrder(sequence = "3")
+    @MemberOrder(sequence = "20")
     public List<ToDoItem> complete() {
         final List<ToDoItem> items = completeNoUi();
         if(items.isEmpty()) {
@@ -95,12 +90,10 @@ public class ToDoItems {
     //endregion
 
     //region > categorized (action)
-    // //////////////////////////////////////
-
 	@SuppressWarnings("unchecked")
 	@Bookmarkable
     @ActionSemantics(Of.SAFE)
-    @MemberOrder(sequence = "30")
+    @MemberOrder(sequence = "40")
     public List<ToDoItem> categorized(
     		@Named("Category") final Category category,
     		@Named("Subcategory") final Subcategory subcategory,
@@ -134,9 +127,7 @@ public class ToDoItems {
     //endregion
 
     //region > newToDo (action)
-    // //////////////////////////////////////
-
-    @MemberOrder(sequence = "40")
+    @MemberOrder(sequence = "5")
     public ToDoItem newToDo(
             final @RegEx(validation = "${symbol_escape}${symbol_escape}w[@&:${symbol_escape}${symbol_escape}-${symbol_escape}${symbol_escape},${symbol_escape}${symbol_escape}.${symbol_escape}${symbol_escape}+ ${symbol_escape}${symbol_escape}w]*") @Named("Description") String description, 
             final @Named("Category") Category category,
@@ -167,8 +158,7 @@ public class ToDoItems {
     //endregion
 
     //region > allToDos (action)
-    // //////////////////////////////////////
-
+    @Prototype
     @ActionSemantics(Of.SAFE)
     @MemberOrder(sequence = "50")
     public List<ToDoItem> allToDos() {
@@ -184,8 +174,6 @@ public class ToDoItems {
     //endregion
 
     //region > autoComplete (programmatic)
-    // //////////////////////////////////////
-
     @Programmatic // not part of metamodel
     public List<ToDoItem> autoComplete(final String description) {
         return container.allMatches(
@@ -197,8 +185,6 @@ public class ToDoItems {
     //endregion
 
     //region > helpers
-    // //////////////////////////////////////
-
     @Programmatic // for use by fixtures
     public ToDoItem newToDo(
             final String description, 
@@ -226,9 +212,20 @@ public class ToDoItems {
 
     //endregion
 
+    //region > common validation
+    private static final long ONE_WEEK_IN_MILLIS = 7 * 24 * 60 * 60 * 1000L;
+
+    @Programmatic
+    public String validateDueBy(LocalDate dueBy) {
+        return isMoreThanOneWeekInPast(dueBy) ? "Due by date cannot be more than one week old" : null;
+    }
+    @Programmatic
+    boolean isMoreThanOneWeekInPast(final LocalDate dueBy) {
+        return dueBy.toDateTimeAtStartOfDay().getMillis() < clockService.nowAsMillis() - ONE_WEEK_IN_MILLIS;
+    }
+    //endregion
+
     //region > injected services
-    // //////////////////////////////////////
-    
     @javax.inject.Inject
     private DomainObjectContainer container;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoItemTest.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoItemTest.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoItemTest.java
new file mode 100644
index 0000000..5020190
--- /dev/null
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoItemTest.java
@@ -0,0 +1,94 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/**
+ *  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 dom.todo;
+
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.apache.isis.applib.annotation.Bulk;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
+public abstract class ToDoItemTest {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    EventBusService eventBusService;
+
+    ToDoItem toDoItem;
+
+    @Before
+    public void setUp() throws Exception {
+        toDoItem = new ToDoItem();
+
+        toDoItem.bulkInteractionContext = Bulk.InteractionContext.regularAction(toDoItem);
+        toDoItem.eventBusService = eventBusService;
+
+        context.ignoring(eventBusService);
+    }
+
+    public static class Actions {
+
+        public static class Completed extends ToDoItemTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // given
+                toDoItem.setComplete(false);
+                assertThat(toDoItem.disableCompleted(), is(nullValue()));
+
+                // when
+                toDoItem.completed();
+
+                // then
+                assertThat(toDoItem.isComplete(), is(true));
+                assertThat(toDoItem.disableCompleted(), is(not(nullValue())));
+            }
+        }
+
+        public static class NotYetCompleted extends ToDoItemTest {
+
+            @Test
+            public void happyCase() throws Exception {
+
+                // given
+                toDoItem.setComplete(true);
+                assertThat(toDoItem.disableNotYetCompleted(), is(nullValue()));
+
+                // when
+                toDoItem.notYetCompleted();
+
+                // then
+                assertThat(toDoItem.isComplete(), is(false));
+                assertThat(toDoItem.disableNotYetCompleted(), is(not(nullValue())));
+            }
+        }
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/95b3e9ec/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_completed.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_completed.java b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_completed.java
deleted file mode 100644
index 718460f..0000000
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/test/java/dom/todo/ToDoTest_completed.java
+++ /dev/null
@@ -1,71 +0,0 @@
-#set( $symbol_pound = '#' )
-#set( $symbol_dollar = '$' )
-#set( $symbol_escape = '\' )
-/**
- *  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 dom.todo;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.annotation.Bulk;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-
-public class ToDoTest_completed {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    @Mock
-    private EventBusService eventBusService;
-
-    private ToDoItem toDoItem;
-
-    @Before
-    public void setUp() throws Exception {
-        toDoItem = new ToDoItem();
-        toDoItem.bulkInteractionContext = Bulk.InteractionContext.regularAction(toDoItem);
-        toDoItem.eventBusService = eventBusService;
-
-        context.ignoring(eventBusService);
-
-        toDoItem.setComplete(false);
-    }
-    
-    @Test
-    public void happyCase() throws Exception {
-        // given
-        assertThat(toDoItem.disableCompleted(), is(nullValue()));
-        
-        // when
-        toDoItem.completed();
-        
-        // then
-        assertThat(toDoItem.isComplete(), is(true));
-        assertThat(toDoItem.disableCompleted(), is(not(nullValue())));
-    }
-    
-}


[03/39] git commit: ISIS-839: core, updates to comments only for isis-module-background

Posted by da...@apache.org.
ISIS-839: core, updates to comments only for isis-module-background


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

Branch: refs/heads/master
Commit: d2394b81dcdedb108b3a48a9bb280b5c2c86af8c
Parents: 0ddb462
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 11:10:01 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 11:10:01 2014 +0100

----------------------------------------------------------------------
 .../applib/services/background/ActionInvocationMemento.java  | 8 ++------
 .../applib/services/background/BackgroundCommandService.java | 2 +-
 .../metamodel/facets/actions/interaction/CommandUtil.java    | 2 +-
 3 files changed, 4 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/d2394b81/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java b/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
index 8b9e983..d9a51c6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
@@ -18,9 +18,6 @@ package org.apache.isis.applib.services.background;
 
 import java.util.Iterator;
 import java.util.List;
-
-import com.google.common.primitives.Primitives;
-
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.memento.MementoService;
 import org.apache.isis.applib.services.memento.MementoService.Memento;
@@ -31,9 +28,8 @@ import org.apache.isis.applib.services.memento.MementoService.Memento;
  * 
  * <p>
  * Provided as a mechanism by which implementations of {@link BackgroundService} can 
- * hand-off work to the {@link BackgroundCommandService} through 
- * {@link BackgroundCommandService#execute(ActionInvocationMemento)}.   This is used by the
- * default implementation of <tt>BackgroundServiceDefault</tt> in Isis' core-runtime.
+ * hand-off work to the {@link BackgroundCommandService}.  This is used by the
+ * default implementation of <tt>BackgroundServiceDefault</tt> in the <tt>isis-module-background</tt> module.
  * 
  * <p>
  * Implementation-wise this is a wrapper around {@link MementoService.Memento}, 

http://git-wip-us.apache.org/repos/asf/isis/blob/d2394b81/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
index 092ad82..6a291c1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
@@ -25,7 +25,7 @@ import org.apache.isis.applib.services.command.Command;
  *
  * <p>
  * Separate from {@link BackgroundService} primarily so that the default
- * implementation, <tt>BackgroundServiceDefault</tt> (in core-runtime) can
+ * implementation, <tt>BackgroundServiceDefault</tt> (in <tt>isis-module-background</tt>) can
  * delegate to different implementations of this service.
  *
  * <p>

http://git-wip-us.apache.org/repos/asf/isis/blob/d2394b81/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/CommandUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/CommandUtil.java
index 92ccb24..14d50b6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/CommandUtil.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 
 
 /**
- * Factoring out the commonality between {@link ActionInvocationFacetViaMethod} and <tt>BackgroundServiceDefault</tt>.
+ * Factoring out the commonality between <tt>ActionInvocationFacetViaMethod</tt> and <tt>BackgroundServiceDefault</tt>.
  */
 public class CommandUtil {
 


[34/39] git commit: [maven-release-plugin] prepare for next development iteration

Posted by da...@apache.org.
[maven-release-plugin] prepare for next development iteration


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

Branch: refs/heads/master
Commit: e35f974a150afb98432586feac403290278484f6
Parents: 055a18c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Jul 25 08:26:31 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:26:31 2014 +0100

----------------------------------------------------------------------
 example/archetype/todoapp/pom.xml | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e35f974a/example/archetype/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/pom.xml b/example/archetype/todoapp/pom.xml
index c8cb973..dd73d4a 100644
--- a/example/archetype/todoapp/pom.xml
+++ b/example/archetype/todoapp/pom.xml
@@ -21,7 +21,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.isis.archetype</groupId>
   <artifactId>todoapp-archetype</artifactId>
-  <version>1.6.0</version>
+  <version>1.7.0-SNAPSHOT</version>
   <packaging>maven-archetype</packaging>
   <name>todoapp-archetype</name>
   <build>
@@ -47,8 +47,4 @@
     <version>1.6.0</version>
     <relativePath>../../../core/pom.xml</relativePath>
   </parent>
-
-  <scm>
-    <tag>todoapp-archetype-1.6.0-RC3</tag>
-  </scm>
 </project>


[05/39] git commit: ISIS-839: further fix for Vfs discovery of @DomainService classes

Posted by da...@apache.org.
ISIS-839: further fix for Vfs discovery of @DomainService classes

(get rid of noisy/harmless exception stack trace).


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

Branch: refs/heads/master
Commit: 19cfaa8630475aa23bf9a064d463ca534644529a
Parents: 4e93d1b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 12:32:21 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 12:33:42 2014 +0100

----------------------------------------------------------------------
 .../ClassDiscoveryServiceUsingReflections.java  | 111 +++++++++++--------
 1 file changed, 64 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/19cfaa86/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java b/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
index 993319f..ea123e7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/classdiscovery/ClassDiscoveryServiceUsingReflections.java
@@ -23,13 +23,13 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import com.google.common.collect.Lists;
 import org.reflections.Reflections;
 import org.reflections.scanners.SubTypesScanner;
 import org.reflections.util.ClasspathHelper;
-import org.reflections.util.ConfigurationBuilder;
 import org.reflections.vfs.SystemDir;
 import org.reflections.vfs.Vfs;
 import org.apache.isis.applib.AbstractService;
@@ -53,16 +53,13 @@ public class ClassDiscoveryServiceUsingReflections
 
     @Override
     public <T> Set<Class<? extends T>> findSubTypesOfClasses(Class<T> type) {
-        List<Vfs.UrlType> urlTypes = getUrlTypes();
-        Vfs.setDefaultURLTypes(urlTypes);
+        Vfs.setDefaultURLTypes(getUrlTypes());
 
-        ConfigurationBuilder configuration = ConfigurationBuilder.build(
+        final Reflections reflections = new Reflections(
                 ClasspathHelper.forClassLoader(Thread.currentThread().getContextClassLoader()),
                 ClasspathHelper.forClass(Object.class),
-                new SubTypesScanner(false));
-        // doesn't seem to do anything
-        // configuration = configuration.filterInputsBy(ignorePom());
-        final Reflections reflections = new Reflections(configuration);
+                new SubTypesScanner(false)
+        );
         return reflections.getSubTypesOf(type);
     }
 
@@ -87,8 +84,28 @@ public class ClassDiscoveryServiceUsingReflections
         }
 
         public Vfs.Dir createDir(final URL url) throws Exception {
-            return null;
+            return emptyVfsDir(url);
+        }
+
+        private static Vfs.Dir emptyVfsDir(final URL url) {
+            return new Vfs.Dir() {
+                @Override
+                public String getPath() {
+                    return url.toExternalForm();
+                }
+
+                @Override
+                public Iterable<Vfs.File> getFiles() {
+                    return Collections.emptyList();
+                }
+
+                @Override
+                public void close() {
+                    //
+                }
+            };
         }
+
     }
 
     public static class JettyConsoleUrlType implements Vfs.UrlType {
@@ -102,47 +119,47 @@ public class ClassDiscoveryServiceUsingReflections
         public Vfs.Dir createDir(final URL url) throws Exception {
             return new SystemDir(getFile(url));
         }
-    }
 
-    /**
-     * try to get {@link java.io.File} from url
-     *
-     * <p>
-     *     Copied from {@link org.reflections.vfs.Vfs} (not publicly accessible)
-     * </p>
-     */
-    static java.io.File getFile(URL url) {
-        java.io.File file;
-        String path;
-
-        try {
-            path = url.toURI().getSchemeSpecificPart();
-            if ((file = new java.io.File(path)).exists()) return file;
-        } catch (URISyntaxException e) {
-        }
+        /**
+         * try to get {@link java.io.File} from url
+         *
+         * <p>
+         *     Copied from {@link org.reflections.vfs.Vfs} (not publicly accessible)
+         * </p>
+         */
+        static java.io.File getFile(URL url) {
+            java.io.File file;
+            String path;
+
+            try {
+                path = url.toURI().getSchemeSpecificPart();
+                if ((file = new java.io.File(path)).exists()) return file;
+            } catch (URISyntaxException e) {
+            }
+
+            try {
+                path = URLDecoder.decode(url.getPath(), "UTF-8");
+                if (path.contains(".jar!")) path = path.substring(0, path.lastIndexOf(".jar!") + ".jar".length());
+                if ((file = new java.io.File(path)).exists()) return file;
+
+            } catch (UnsupportedEncodingException e) {
+            }
+
+            try {
+                path = url.toExternalForm();
+                if (path.startsWith("jar:")) path = path.substring("jar:".length());
+                if (path.startsWith("file:")) path = path.substring("file:".length());
+                if (path.contains(".jar!")) path = path.substring(0, path.indexOf(".jar!") + ".jar".length());
+                if ((file = new java.io.File(path)).exists()) return file;
+
+                path = path.replace("%20", " ");
+                if ((file = new java.io.File(path)).exists()) return file;
+
+            } catch (Exception e) {
+            }
 
-        try {
-            path = URLDecoder.decode(url.getPath(), "UTF-8");
-            if (path.contains(".jar!")) path = path.substring(0, path.lastIndexOf(".jar!") + ".jar".length());
-            if ((file = new java.io.File(path)).exists()) return file;
-
-        } catch (UnsupportedEncodingException e) {
-        }
-
-        try {
-            path = url.toExternalForm();
-            if (path.startsWith("jar:")) path = path.substring("jar:".length());
-            if (path.startsWith("file:")) path = path.substring("file:".length());
-            if (path.contains(".jar!")) path = path.substring(0, path.indexOf(".jar!") + ".jar".length());
-            if ((file = new java.io.File(path)).exists()) return file;
-
-            path = path.replace("%20", " ");
-            if ((file = new java.io.File(path)).exists()) return file;
-
-        } catch (Exception e) {
+            return null;
         }
-
-        return null;
     }
 
 }
\ No newline at end of file


[07/39] git commit: ISIS-839: updates to simpleapp and todoapp examples for services:

Posted by da...@apache.org.
ISIS-839: updates to simpleapp and todoapp examples for services:

* include isis-module-background as maven dependency (commented out as per others for simpleapp, included for todoapp)
* remove registration of BackgroundServiceDefault in isis.properties, since now a @DomainService
* remove registration of AuditingServiceJdo, CommandServiceJdo, PublishingServiceJdo since now all @DomainService.


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

Branch: refs/heads/master
Commit: eb75a8cf71920f8cdb06675844b0c06b95c87c35
Parents: c0d3c41
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 11:15:09 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 12:34:35 2014 +0100

----------------------------------------------------------------------
 example/application/simpleapp/webapp/pom.xml             | 11 +++++++++++
 .../webapp/src/main/webapp/WEB-INF/isis.properties       |  8 +-------
 example/application/todoapp/webapp/pom.xml               |  4 ++++
 .../webapp/src/main/webapp/WEB-INF/isis.properties       |  8 +-------
 4 files changed, 17 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/eb75a8cf/example/application/simpleapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/pom.xml b/example/application/simpleapp/webapp/pom.xml
index 1c8e58f..7ec84d5 100644
--- a/example/application/simpleapp/webapp/pom.xml
+++ b/example/application/simpleapp/webapp/pom.xml
@@ -215,6 +215,17 @@
         -->
 
         <!--
+        uncomment to enable BackgroundService;
+        depends on: an implementation of BackgroundCommandService to persist commands
+        (see isis-module-command-jdo)
+        -->
+        <!--
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-background</artifactId>
+        </dependency>
+        -->
+        <!--
         uncomment to enable commands (@Command annotation)
         persisted to database, also enabling the ability to run commands in the background
         (eg using the Quartz scheduler)

http://git-wip-us.apache.org/repos/asf/isis/blob/eb75a8cf/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 52ce41a..605e0ab 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -163,23 +163,17 @@ isis.services.ServicesInstallerFromAnnotation.packagePrefix=dom.simple,\
 isis.services = \
                 org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions,\
                 \
-                # customizable exception handling for JDO objectstore, \
+                # customizable exception handling, \
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
                 \
-                # isis-module-background services (depends on: isis-module-command-jdo), \
-                # org.apache.isis.core.runtime.services.background.BackgroundServiceDefault,\
-                \
                 # isis-module-command-jdo services, \
-                # org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdo,\
                 # org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoContributions,\
                 # org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoContributions,\
                 \
                 # isis-module-audit-jdo services, \
-                # org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdo,\
                 # org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdoContributions,\
                 \
                 # isis-module-publishing-jdo services, \
-                # org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdo,\
                 # org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoContributions,\
                 \
                 # JDO implementation of the two SettingsServices, \

http://git-wip-us.apache.org/repos/asf/isis/blob/eb75a8cf/example/application/todoapp/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/pom.xml b/example/application/todoapp/webapp/pom.xml
index 58897a6..b217a23 100644
--- a/example/application/todoapp/webapp/pom.xml
+++ b/example/application/todoapp/webapp/pom.xml
@@ -201,6 +201,10 @@
         <!-- isis modules -->
         <dependency>
             <groupId>org.apache.isis.module</groupId>
+            <artifactId>isis-module-background</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.isis.module</groupId>
             <artifactId>isis-module-devutils-impl</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/eb75a8cf/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 121dc60..8e95327 100644
--- a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -165,23 +165,17 @@ isis.services.ServicesInstallerFromAnnotation.packagePrefix=app,\
 isis.services = \
                 org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions,\
                 \
-                # customizable exception handling for JDO objectstore, \
+                # customizable exception handling, \
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
                 \
-                # isis-module-background services (depends on: isis-module-command-jdo), \
-                org.apache.isis.core.runtime.services.background.BackgroundServiceDefault,\
-                \
                 # isis-module-command-jdo services, \
-                org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdo,\
                 org.apache.isis.objectstore.jdo.applib.service.command.CommandServiceJdoContributions,\
                 org.apache.isis.objectstore.jdo.applib.service.background.BackgroundCommandServiceJdoContributions,\
                 \
                 # isis-module-audit-jdo services, \
-                org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdo,\
                 org.apache.isis.objectstore.jdo.applib.service.audit.AuditingServiceJdoContributions,\
                 \
                 # isis-module-publishing-jdo services, \
-                org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdo,\
                 org.apache.isis.objectstore.jdo.applib.service.publish.PublishingServiceJdoContributions,\
                 \
                 # JDO implementation of the two SettingsServices, \


[09/39] git commit: ISIS-839: fixing RAT errors for Wicket viewer.

Posted by da...@apache.org.
ISIS-839: fixing RAT errors for Wicket viewer.


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

Branch: refs/heads/master
Commit: 172d56a4a6dbdc7fed277b70951202da685d9f8d
Parents: 98071b9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Jul 19 11:10:49 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 21 12:35:03 2014 +0100

----------------------------------------------------------------------
 .../FixedObjectAdapterMementoProviderTest.java    | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/172d56a4/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/FixedObjectAdapterMementoProviderTest.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/FixedObjectAdapterMementoProviderTest.java b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/FixedObjectAdapterMementoProviderTest.java
index 93f662e..7f508d3 100644
--- a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/FixedObjectAdapterMementoProviderTest.java
+++ b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/FixedObjectAdapterMementoProviderTest.java
@@ -1,3 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.viewer.wicket.ui.components.widgets.valuechoices;
 
 import java.util.Collection;


[25/39] git commit: ISIS-839: updating simpleapp and todoapp example apps to reference 1.6.0 (instead of -SNAPSHOT)

Posted by da...@apache.org.
ISIS-839: updating simpleapp and todoapp example apps to reference 1.6.0 (instead of -SNAPSHOT)


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

Branch: refs/heads/master
Commit: 8afcd9952c0aede1f6acb83aad6d56bc4c4b70f7
Parents: 49512f7
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 21 15:18:55 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Jul 25 08:14:09 2014 +0100

----------------------------------------------------------------------
 example/application/simpleapp/pom.xml | 4 ++--
 example/application/todoapp/pom.xml   | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8afcd995/example/application/simpleapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml
index de6115e..91f5399 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -34,8 +34,8 @@
     </prerequisites>
 
 	<properties>
-        <isis.version>1.6.0-SNAPSHOT</isis.version>
-        <isis-viewer-wicket.version>1.6.0-SNAPSHOT</isis-viewer-wicket.version>
+        <isis.version>1.6.0</isis.version>
+        <isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
 
         <!-- must be consistent with the versions defined by the JDO Objectstore -->
         <datanucleus-accessplatform-jdo-rdbms.version>3.3.6</datanucleus-accessplatform-jdo-rdbms.version>

http://git-wip-us.apache.org/repos/asf/isis/blob/8afcd995/example/application/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/todoapp/pom.xml b/example/application/todoapp/pom.xml
index 158a31d..1d40e99 100644
--- a/example/application/todoapp/pom.xml
+++ b/example/application/todoapp/pom.xml
@@ -34,8 +34,8 @@
     </prerequisites>
 
 	<properties>
-        <isis.version>1.6.0-SNAPSHOT</isis.version>
-		<isis-viewer-wicket.version>1.6.0-SNAPSHOT</isis-viewer-wicket.version>
+        <isis.version>1.6.0</isis.version>
+		<isis-viewer-wicket.version>1.6.0</isis-viewer-wicket.version>
 
         <!-- must be consistent with the versions defined by the JDO Objectstore -->
         <datanucleus-accessplatform-jdo-rdbms.version>3.3.6</datanucleus-accessplatform-jdo-rdbms.version>


[38/39] git commit: Merge branch 'prepare/isis-1.6.0-RC3'

Posted by da...@apache.org.
Merge branch 'prepare/isis-1.6.0-RC3'


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

Branch: refs/heads/master
Commit: fee6d3937f5424325ee1d7b72e71f0bc7ff7b8d1
Parents: 0af3219 15e4c14
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jul 28 14:21:52 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jul 28 14:21:52 2014 +0100

----------------------------------------------------------------------
 STATUS                                          |    5 +
 component/viewer/scimpi/pom.xml                 |    2 +-
 component/viewer/wicket/applib/pom.xml          |    2 +-
 component/viewer/wicket/impl/pom.xml            |    2 +-
 component/viewer/wicket/model/pom.xml           |    2 +-
 component/viewer/wicket/pom.xml                 |   18 +-
 component/viewer/wicket/tck/pom.xml             |    6 +-
 component/viewer/wicket/ui/pom.xml              |    2 +-
 .../wicket/ui/components/about/AboutPanel.java  |    6 +-
 .../FixedObjectAdapterMementoProviderTest.java  |   18 +
 core/applib/pom.xml                             |    2 +-
 .../background/ActionInvocationMemento.java     |    8 +-
 .../background/BackgroundCommandService.java    |    2 +-
 .../ClassDiscoveryServiceUsingReflections.java  |  121 +-
 .../applib/services/wrapper/WrapperFactory.java |    2 +-
 core/bytecode-cglib/pom.xml                     |    2 +-
 core/bytecode-javassist/pom.xml                 |    2 +-
 core/integtestsupport/pom.xml                   |    6 +-
 core/log4j/pom.xml                              |    2 +-
 core/metamodel/pom.xml                          |    2 +-
 .../facets/actions/interaction/CommandUtil.java |    2 +-
 core/module-audit-jdo/pom.xml                   |    2 +-
 .../service/audit/AuditingServiceJdo.java       |    7 +-
 core/module-background/pom.xml                  |    8 +-
 .../background/BackgroundCommandExecution.java  |  171 +++
 .../background/BackgroundServiceDefault.java    |  287 +++++
 core/module-command-jdo/pom.xml                 |   12 +-
 .../service/command/CommandServiceJdo.java      |    2 +
 ...xecutionFromBackgroundCommandServiceJdo.java |    3 +
 core/module-devutils/applib/pom.xml             |    2 +-
 core/module-devutils/impl/pom.xml               |    2 +-
 core/module-devutils/pom.xml                    |   10 +-
 core/module-publishing-jdo/pom.xml              |    2 +-
 .../service/publish/PublishingServiceJdo.java   |    2 +
 .../module-publishingeventserializer-ro/pom.xml |    2 +-
 core/module-settings/applib/pom.xml             |    2 +-
 core/module-settings/impl-jdo/pom.xml           |    2 +-
 core/module-settings/pom.xml                    |   10 +-
 core/module-wrapper/pom.xml                     |  139 ---
 .../core/wrapper/WrapperFactoryAbstract.java    |  314 ------
 .../isis/core/wrapper/WrapperFactoryCglib.java  |   30 -
 .../core/wrapper/WrapperFactoryDefault.java     |   39 -
 .../core/wrapper/WrapperFactoryJavassist.java   |   30 -
 .../dispatchers/InteractionEventDispatcher.java |   28 -
 .../InteractionEventDispatcherTypeSafe.java     |   34 -
 .../AbstractCollectionInvocationHandler.java    |   92 --
 .../handlers/CollectionInvocationHandler.java   |   53 -
 .../handlers/DelegatingInvocationHandler.java   |   32 -
 .../DelegatingInvocationHandlerDefault.java     |  131 ---
 .../handlers/DomainObjectInvocationHandler.java |  720 ------------
 .../wrapper/handlers/MapInvocationHandler.java  |   48 -
 .../wrapper/handlers/ProxyContextHandler.java   |   84 --
 .../core/wrapper/internal/util/Constants.java   |   52 -
 .../internal/util/MethodPrefixFinder.java       |   48 -
 .../isis/core/wrapper/internal/util/Util.java   |   53 -
 .../core/wrapper/proxy/ProxyInstantiator.java   |   26 -
 .../proxy/ProxyInstantiatorForCglib.java        |  101 --
 .../proxy/ProxyInstantiatorForJavassist.java    |   77 --
 .../wrapper/WrapperFactoryAbstractTest.java     |  109 --
 ...rapperFactoryAbstractTest_wrappedObject.java |  376 -------
 ...oryAbstractTest_wrappedObject_transient.java |  257 -----
 .../WrapperFactoryCglibTest_wrappedObject.java  |   32 -
 ...actoryCglibTest_wrappedObject_transient.java |   34 -
 ...apperFactoryJavassistTest_wrappedObject.java |   32 -
 ...ryJavassistTest_wrappedObject_transient.java |   31 -
 core/objectstore-inmemory/pom.xml               |    2 +-
 core/objectstore-jdo-datanucleus/pom.xml        |    2 +-
 core/objectstore-jdo-metamodel/pom.xml          |    2 +-
 core/pom.xml                                    |  123 ++-
 core/profilestore-inmemory/pom.xml              |    2 +-
 core/runtime/pom.xml                            |    2 +-
 .../ServicesInstallerFromAnnotation.java        |    3 +
 .../background/BackgroundCommandExecution.java  |  171 ---
 .../background/BackgroundServiceDefault.java    |  286 -----
 .../services/DeweyOrderComparatorTest.java      |   18 +
 .../runtime/services/DeweyOrderUtilTest.java    |   18 +
 core/security-noop/pom.xml                      |    2 +-
 core/security-shiro/pom.xml                     |    6 +-
 .../IsisPermissionTest_equals.java              |   18 +
 core/specsupport/pom.xml                        |    6 +-
 core/tck/pom.xml                                |    5 +-
 core/tck/tck-dom/pom.xml                        |    2 +-
 core/tck/tck-fixture/pom.xml                    |    2 +-
 core/tck/tck-viewer-restfulobjects/pom.xml      |    5 +-
 core/unittestsupport/pom.xml                    |    2 +-
 core/viewer-restfulobjects-applib/pom.xml       |    2 +-
 core/viewer-restfulobjects-rendering/pom.xml    |    2 +-
 core/viewer-restfulobjects-server/pom.xml       |    2 +-
 core/webserver/pom.xml                          |    2 +-
 core/wrapper/pom.xml                            |  138 +++
 .../core/wrapper/WrapperFactoryAbstract.java    |  314 ++++++
 .../isis/core/wrapper/WrapperFactoryCglib.java  |   30 +
 .../core/wrapper/WrapperFactoryDefault.java     |   39 +
 .../core/wrapper/WrapperFactoryJavassist.java   |   30 +
 .../dispatchers/InteractionEventDispatcher.java |   28 +
 .../InteractionEventDispatcherTypeSafe.java     |   34 +
 .../AbstractCollectionInvocationHandler.java    |   92 ++
 .../handlers/CollectionInvocationHandler.java   |   53 +
 .../handlers/DelegatingInvocationHandler.java   |   32 +
 .../DelegatingInvocationHandlerDefault.java     |  131 +++
 .../handlers/DomainObjectInvocationHandler.java |  720 ++++++++++++
 .../wrapper/handlers/MapInvocationHandler.java  |   48 +
 .../wrapper/handlers/ProxyContextHandler.java   |   84 ++
 .../core/wrapper/internal/util/Constants.java   |   52 +
 .../internal/util/MethodPrefixFinder.java       |   48 +
 .../isis/core/wrapper/internal/util/Util.java   |   53 +
 .../core/wrapper/proxy/ProxyInstantiator.java   |   26 +
 .../proxy/ProxyInstantiatorForCglib.java        |  101 ++
 .../proxy/ProxyInstantiatorForJavassist.java    |   77 ++
 .../wrapper/WrapperFactoryAbstractTest.java     |  127 +++
 ...rapperFactoryAbstractTest_wrappedObject.java |  376 +++++++
 ...oryAbstractTest_wrappedObject_transient.java |  257 +++++
 .../WrapperFactoryCglibTest_wrappedObject.java  |   32 +
 ...actoryCglibTest_wrappedObject_transient.java |   34 +
 ...apperFactoryJavassistTest_wrappedObject.java |   32 +
 ...ryJavassistTest_wrappedObject_transient.java |   31 +
 example/application/simpleapp/dom/pom.xml       |    2 +-
 .../src/main/java/dom/simple/SimpleObjects.java |    2 +-
 example/application/simpleapp/fixture/pom.xml   |    2 +-
 .../simple/SimpleObjectsFixturesService.java    |    2 +-
 .../application/simpleapp/integtests/pom.xml    |    6 +-
 example/application/simpleapp/pom.xml           |    6 +-
 .../launch/SimpleApp-PROTOTYPE-jrebel.launch    |    2 +-
 .../SimpleApp-PROTOTYPE-no-fixtures.launch      |    2 +-
 .../SimpleApp-PROTOTYPE-with-fixtures.launch    |    2 +-
 .../launch/SimpleApp-SERVER-no-fixtures.launch  |    2 +-
 .../webapp/ide/intellij/launch/README.txt       |    2 +
 .../ide/intellij/launch/SimpleApp_PROTOTYPE.xml |   29 +
 .../launch/SimpleApp__enhance_only_.xml         |   23 +
 example/application/simpleapp/webapp/pom.xml    |   17 +-
 .../src/main/resources/webapp/welcome.html      |    8 +-
 .../src/main/webapp/WEB-INF/isis.properties     |    8 +-
 .../webapp/src/main/webapp/about/index.html     |   86 +-
 example/application/todoapp/dom/pom.xml         |    2 +-
 example/application/todoapp/fixture/pom.xml     |    2 +-
 example/application/todoapp/integtests/pom.xml  |    6 +-
 example/application/todoapp/pom.xml             |    6 +-
 .../launch/ToDoApp-PROTOTYPE-jrebel.launch      |    2 +-
 .../ToDoApp-PROTOTYPE-with-fixtures.launch      |    2 +-
 .../ide/eclipse/launch/ToDoApp-PROTOTYPE.launch |    2 +-
 .../ide/eclipse/launch/ToDoApp-SERVER.launch    |    2 +-
 .../webapp/ide/intellij/launch/README.txt       |    3 +
 .../ide/intellij/launch/TodoApp_PROTOTYPE.xml   |   29 +
 .../intellij/launch/TodoApp__enhance_only_.xml  |   23 +
 example/application/todoapp/webapp/pom.xml      |   10 +-
 .../src/main/resources/webapp/welcome.html      |    7 +-
 .../src/main/webapp/WEB-INF/isis.properties     |    8 +-
 .../webapp/src/main/webapp/about/index.html     |  119 +-
 example/archetype/simpleapp/pom.xml             |    8 +-
 .../META-INF/maven/archetype-metadata.xml       |    9 +-
 .../resources/archetype-resources/dom/pom.xml   |   23 +-
 .../src/main/java/dom/simple/SimpleObjects.java |    6 +-
 .../archetype-resources/fixture/pom.xml         |    2 +-
 .../fixture/simple/SimpleObjectsFixture.java    |   14 +-
 .../simple/SimpleObjectsFixturesService.java    |   70 ++
 .../archetype-resources/integtests/pom.xml      |    6 +-
 .../integration/SimpleAppSystemInitializer.java |   22 +-
 .../main/resources/archetype-resources/pom.xml  |   33 +-
 .../webapp/ide/intellij/launch/README.txt       |    5 +
 .../ide/intellij/launch/SimpleApp_PROTOTYPE.xml |   32 +
 .../launch/SimpleApp__enhance_only_.xml         |   26 +
 .../archetype-resources/webapp/pom.xml          |   83 +-
 .../webapp/prototyping/DeveloperUtilities.java  |    4 +-
 .../SimpleObjectsFixturesService.java           |   71 --
 .../src/main/resources/webapp/welcome.html      |    8 +-
 .../src/main/webapp/WEB-INF/isis.properties     |   65 +-
 .../webapp/src/main/webapp/about/index.html     |   88 +-
 .../projects/basic/archetype.properties         |    2 +-
 example/archetype/todoapp/pom.xml               |    8 +-
 .../META-INF/maven/archetype-metadata.xml       |    9 +-
 .../resources/archetype-resources/dom/pom.xml   |   16 +-
 .../dom/src/main/java/app/ToDoAppDashboard.java |    9 -
 .../main/java/app/ToDoAppDashboardService.java  |   41 +-
 .../dom/src/main/java/app/ToDoItemAnalysis.java |   13 +-
 .../java/app/ToDoItemAnalysisContributions.java |   10 +-
 .../java/app/ToDoItemsByCategoryViewModel.java  |   15 -
 .../java/app/ToDoItemsByDateRangeViewModel.java |   16 -
 .../dom/src/main/java/dom/todo/Categorized.java |   35 +
 .../dom/src/main/java/dom/todo/ToDoItem.java    |  126 ++-
 .../src/main/java/dom/todo/ToDoItem.layout.json |  192 ++--
 .../dom/todo/ToDoItemChangedPayloadFactory.java |    1 +
 .../java/dom/todo/ToDoItemContributions.java    |   27 +-
 .../java/dom/todo/ToDoItemSubscriptions.java    |  248 ++++-
 .../dom/src/main/java/dom/todo/ToDoItems.java   |   41 +-
 .../src/test/java/dom/todo/ToDoItemTest.java    |   94 ++
 .../test/java/dom/todo/ToDoTest_completed.java  |   71 --
 .../java/dom/todo/ToDoTest_notYetCompleted.java |   71 --
 .../archetype-resources/fixture/pom.xml         |    2 +-
 .../fixture/todo/ToDoItemsFixturesService.java  |   10 +
 .../archetype-resources/integtests/pom.xml      |    6 +-
 .../java/integration/ToDoSystemInitializer.java |   47 +-
 .../tests/AbstractToDoIntegTest.java            |   41 +
 .../java/integration/tests/ToDoIntegTest.java   |   41 -
 .../tests/ToDoItemContributionsIntegTest.java   |  152 +++
 .../integration/tests/ToDoItemIntegTest.java    | 1040 ++++++++++++++++++
 .../integration/tests/ToDoItemsIntegTest.java   |  116 ++
 ...oDoItemContributionsTest_updateCategory.java |  106 --
 .../tests/actions/ToDoItemTest_completed.java   |  174 ---
 .../tests/actions/ToDoItemTest_duplicate.java   |   83 --
 .../actions/ToDoItemTest_notYetCompleted.java   |   79 --
 .../ToDoItemContributionsTest_similarTo.java    |   71 --
 .../colls/ToDoItemTest_dependencies_add.java    |  181 ---
 .../colls/ToDoItemTest_dependencies_remove.java |  176 ---
 .../ToDoItemContributionsTest_priority.java     |   75 --
 .../tests/props/ToDoItemTest_attachment.java    |   82 --
 .../tests/props/ToDoItemTest_category.java      |   62 --
 .../tests/props/ToDoItemTest_cost.java          |  100 --
 .../tests/props/ToDoItemTest_description.java   |  220 ----
 .../tests/props/ToDoItemTest_dueBy.java         |  106 --
 .../tests/props/ToDoItemTest_notes.java         |   90 --
 .../tests/props/ToDoItemTest_ownedBy.java       |   61 -
 .../tests/props/ToDoItemTest_subcategory.java   |   62 --
 .../tests/repo/ToDoItemsTest_finders.java       |   84 --
 .../repo/ToDoItemsTest_newToDo_and_delete.java  |   68 --
 .../tests/smoke/ToDoItemTest_title.java         |  116 --
 .../main/resources/archetype-resources/pom.xml  |   40 +-
 .../webapp/ide/intellij/launch/README.txt       |    6 +
 .../ide/intellij/launch/TodoApp_PROTOTYPE.xml   |   32 +
 .../intellij/launch/TodoApp__enhance_only_.xml  |   26 +
 .../archetype-resources/webapp/pom.xml          |   48 +-
 .../src/main/java/webapp/admin/Admin.java       |    1 +
 .../java/webapp/admin/AdminContributions.java   |    7 +-
 .../webapp/prototyping/DeveloperUtilities.java  |    6 +-
 .../prototyping/ExternalLinksService.java       |    8 +-
 .../prototyping/WicketDeveloperUtilities.java   |   42 +
 .../webapp/ToDoApplication_en.properties        |   54 +
 .../webapp/src/main/resources/webapp/realm1.ini |   26 +
 .../src/main/resources/webapp/welcome.html      |    7 +-
 .../src/main/webapp/WEB-INF/isis.properties     |   76 +-
 .../src/main/webapp/WEB-INF/logging.properties  |   32 +
 .../main/webapp/WEB-INF/persistor.properties    |   12 +-
 .../webapp/src/main/webapp/WEB-INF/shiro.ini    |   10 +
 .../webapp/src/main/webapp/about/index.html     |  149 +--
 .../webapp/src/main/webapp/css/application.css  |    2 +-
 .../projects/basic/archetype.properties         |    2 +-
 scripts/recreate-archetype.sh                   |   79 ++
 tool/maven-plugin/pom.xml                       |    2 +-
 237 files changed, 6782 insertions(+), 6826 deletions(-)
----------------------------------------------------------------------