http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
new file mode 100644
index 0000000..0a85fb6
--- /dev/null
+++ 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
@@ -0,0 +1,66 @@
+#  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.
+
+#
+# configuration file for the Restful Objects viewer
+#
+
+# the baseUrl for hrefs in the events generated by the RO EventSerializer 
+isis.viewer.restfulobjects.RestfulObjectsSpecEventSerializer.baseUrl=http://localhost:8080/restful/
+
+# renders param details in the (incorrect) form that they were for GSOC2013 
viewers
+# isis.viewer.restfulobjects.gsoc2013.legacyParamDetails=true
+
+# whether to honor UI hints, in particular Render(EAGERLY).  Defaults to false.
+#isis.viewer.restfulobjects.honorUiHints=false
+
+
+
+###############################################################################
+# Non-standard configuration settings.
+#
+# If enabled of the following are enabled then the viewer is deviating from the
+# RO spec standard; compatibility may be compromised with RO clients.
+###############################################################################
+
+# whether to show only object properties for object members
+# (on the object representation only)
+# Takes precedence over the other 'suppress' below.
+#isis.viewer.restfulobjects.objectPropertyValuesOnly=true
+
+# whether to suppress "describedby" links.  Defaults to false.
+#isis.viewer.restfulobjects.suppressDescribedByLinks=true
+
+# whether to suppress "update" links.  Defaults to false.
+#isis.viewer.restfulobjects.suppressUpdateLink=true
+
+# whether to suppress "id" json-prop for object members.  Defaults to false.
+#isis.viewer.restfulobjects.suppressMemberId=true
+
+# whether to suppress "links" json-prop for object members
+# (on the object representation only).  Defaults to false.
+#isis.viewer.restfulobjects.suppressMemberLinks=true
+
+# whether to suppress "extensions" json-prop for object members
+# (on the object representation only).  Defaults to false.
+#isis.viewer.restfulobjects.suppressMemberExtensions=true
+
+# whether to suppress "disabledReason" json-prop for object members
+# (on the object representation only).  Defaults to false.
+#isis.viewer.restfulobjects.suppressMemberDisabledReason=true
+
+###############################################################################

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
new file mode 100644
index 0000000..41bd21b
--- /dev/null
+++ 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
@@ -0,0 +1,87 @@
+#  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.
+
+#
+# configuration file for the Wicket viewer
+#
+
+#
+# The maximum length of titles to display in standalone or parented tables.
+# Titles longer than this length will be truncated with trailing ellipses (...)
+#
+# For example, if set to 12, the title
+# "Buy milk on 15-Feb-13" will be truncated to "Buy milk ..."
+#
+# If set to 0, then only the icon will be shown.
+#
+isis.viewer.wicket.maxTitleLengthInStandaloneTables=0
+isis.viewer.wicket.maxTitleLengthInParentedTables=0
+
+
+#isis.viewer.wicket.datePattern=dd-MM-yyyy
+#isis.viewer.wicket.dateTimePattern=dd-MM-yyyy HH:mm
+#isis.viewer.wicket.datePickerPattern=DD-MM-YYYY
+
+#isis.viewer.wicket.datePattern=dd/MM/yy
+#isis.viewer.wicket.dateTimePattern=dd/MM/yy HH:mm
+#isis.viewer.wicket.datePickerPattern=DD/MM/YY
+
+
+
+#
+# whether to strip wicket tags from markup (default is true, as they may break 
some CSS rules)
+#
+#isis.viewer.wicket.stripWicketTags=false
+
+
+#
+# whether to suppress the 'rememberMe' checkbox on the login page (default is 
false)
+#
+#isis.viewer.wicket.suppressRememberMe=false
+
+#
+# if user attempts to access a protected URL before signing in, then as a 
convenience the viewer will continue
+# through to that destination after successful login.  If you consider this to 
be a security risk then this flag
+# disables that behaviour (default is false).
+#
+#isis.viewer.wicket.clearOriginalDestination=true
+
+
+#
+# whether to show action dialogs on their own page rather than as a modal 
dialog (default is false)
+#
+#isis.viewer.wicket.disableModalDialogs=false
+
+
+#
+# the maximum number of pages to list in bookmark (default is 15)
+#
+#isis.viewer.wicket.bookmarkedPages.maxSize=15
+
+
+#
+# whether to show the bootstrap theme chooser (defaults false)
+#
+#isis.viewer.wicket.themes.showChooser=false
+isis.viewer.wicket.themes.showChooser=true
+
+#
+# comma-separated list of themes to choose from (default is to show all themes 
from bootswatch.com).
+#
+#isis.viewer.wicket.themes.enabled=bootstrap-theme,Cosmo,Flatly,Darkly,Sandstone,United
+isis.viewer.wicket.themes.enabled=bootstrap-theme,Cosmo,Flatly,Darkly,Sandstone,United
+

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..5cc79b5
--- /dev/null
+++ 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,308 @@
+<?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.
+-->
+<web-app id="WebApp_ID" version="2.4"
+    xmlns="http://java.sun.com/xml/ns/j2ee"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";>
+
+    <display-name>Todo app</display-name>
+
+    <welcome-file-list>
+        <welcome-file>about/index.html</welcome-file>
+    </welcome-file-list>
+
+    <!-- shiro security configuration -->
+    <listener>
+        
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
+    </listener>
+
+    <filter>
+        <filter-name>ShiroFilter</filter-name>
+        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>ShiroFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+
+
+    <!-- which configuration directory to read overloaded property files from 
-->
+    <!-- 
+    Normally configuration like this should be done from outside your web 
+    application. Especially if your configuration is not know in advance or
+    if it can change depending on where the application gets deployed.
+    
+    For instance to configure this in Tomcat outside the application WAR add
+    the following line to your application context ( For more detail see:
+    
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Context_Parameters )
+     
+    <Parameter name="isis.config.dir" value="/usr/local/tomcat/conf/"
+         override="true"/>
+         
+    If your configuration directory is fixed you can enable the following 
+    context parameter in here and forget about the outside part.
+         
+    <context-param>
+      <param-name>isis.config.dir</param-name>
+      <param-value>location of your config directory if fixed</param-value>
+    </context-param>
+    -->
+
+
+    <!--
+    determines which additional configuration files to search for 
+     -->
+    <context-param>
+        <param-name>isis.viewers</param-name>
+        <param-value>wicket,restfulobjects</param-value>
+    </context-param>
+
+
+    <!-- 
+    for diagnostics
+    -->
+    <filter>
+        <filter-name>IsisLogOnExceptionFilter</filter-name>
+        
<filter-class>org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>IsisLogOnExceptionFilter</filter-name>
+        <url-pattern>/wicket/*</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>IsisLogOnExceptionFilter</filter-name>
+        <url-pattern>/restful/*</url-pattern>
+    </filter-mapping>
+
+
+    <!-- cache static resources for 1 day -->
+    <filter>
+        <filter-name>ResourceCachingFilter</filter-name>
+        
<filter-class>org.apache.isis.core.webapp.content.ResourceCachingFilter</filter-class>
+        <init-param>
+            <param-name>CacheTime</param-name>
+            <param-value>86400</param-value>
+        </init-param>
+    </filter>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.js</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.css</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.png</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.jpg</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.gif</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.html</url-pattern>
+    </filter-mapping>
+    <filter-mapping>
+        <filter-name>ResourceCachingFilter</filter-name>
+        <url-pattern>*.swf</url-pattern>
+    </filter-mapping>
+    
+    <servlet>
+        <servlet-name>Resource</servlet-name>
+        
<servlet-class>org.apache.isis.core.webapp.content.ResourceServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.css</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.png</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.jpg</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.gif</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.js</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.html</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Resource</servlet-name>
+        <url-pattern>*.swf</url-pattern>
+    </servlet-mapping>
+    
+
+
+    <!--
+    -
+    - config specific to the wicket-viewer
+    -
+    -->
+    <filter>
+        <filter-name>WicketFilter</filter-name>
+        
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
+        <init-param>
+            <param-name>applicationClassName</param-name>
+            <param-value>webapp.ToDoApplication</param-value>
+        </init-param>
+    </filter>
+    <filter-mapping>
+        <filter-name>WicketFilter</filter-name>
+        <url-pattern>/wicket/*</url-pattern>
+    </filter-mapping>
+
+
+    <context-param>
+        <param-name>configuration</param-name>
+        <!-- 
+        <param-value>deployment</param-value>
+         -->
+        <param-value>development</param-value>
+    </context-param>
+    
+   
+    <!--
+    -
+    - config specific to the restfulobjects-viewer
+    -
+    -->
+
+    <!--
+    THE FOLLOWING CONFIGURATION IS NOT REQUIRED IF THE WICKET VIEWER IS IN USE.
+    IF THE WICKET VIEWER CONFIGURATION IS REMOVED, THEN UNCOMMENT
+    
+    <listener>
+        
<listener-class>org.apache.isis.core.webapp.IsisWebAppBootstrapper</listener-class>
+    </listener>
+
+    <context-param>
+        <param-name>deploymentType</param-name>
+        <param-value>SERVER_EXPLORATION</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>isis.viewers</param-name>
+        <param-value>restfulobjects</param-value>
+    </context-param>    
+    -->    
+    
+    <!-- bootstrap the RestEasy framework -->
+    <listener>
+        
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
+    </listener>
+
+    <!-- used by RestEasy to determine the JAX-RS resources and other related 
configuration -->
+    <context-param>
+        <param-name>javax.ws.rs.Application</param-name>
+        
<param-value>org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication</param-value>
+    </context-param>
+    
+    <context-param>
+        <param-name>resteasy.servlet.mapping.prefix</param-name>
+        <param-value>/restful/</param-value>
+    </context-param>
+    
+
+    <!-- authenticate user, set up an Isis session -->
+    <filter>
+        <filter-name>IsisSessionFilterForRestfulObjects</filter-name>
+        
<filter-class>org.apache.isis.core.webapp.IsisSessionFilter</filter-class>
+        <!-- authentication required for REST -->
+        <init-param>
+            <param-name>authenticationSessionStrategy</param-name>
+            
<param-value>org.apache.isis.viewer.restfulobjects.server.authentication.AuthenticationSessionStrategyBasicAuth</param-value>
+        </init-param>
+        <init-param>
+            <!-- what to do if no session was found; we indicate to issue a 
401 basic authentication challenge -->
+            <param-name>whenNoSession</param-name>
+            <param-value>basicAuthChallenge</param-value>
+        </init-param>
+    </filter>
+    <filter-mapping>
+        <!-- this is mapped to the entire app; however the IsisSessionFilter 
will "notice" if the session filter has already been
+             executed for the request pipeline, and if so will do nothing -->
+        <filter-name>IsisSessionFilterForRestfulObjects</filter-name>
+        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
+    </filter-mapping>
+
+    <filter>
+        <filter-name>IsisTransactionFilterForRestfulObjects</filter-name>
+        
<filter-class>org.apache.isis.viewer.restfulobjects.server.webapp.IsisTransactionFilterForRestfulObjects</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>IsisTransactionFilterForRestfulObjects</filter-name>
+        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
+    </filter-mapping>
+
+
+    <servlet>
+        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
+        
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
+        <url-pattern>/restful/*</url-pattern>
+    </servlet-mapping>
+
+
+    <!-- 
+    uncomment to use container-managed datasource;
+    for both container-managed (JTA) and non-container-managed transactions
+     -->
+     <!-- 
+    <resource-ref>
+        <description>db</description>
+        <res-ref-name>jdbc/quickstart</res-ref-name>
+        <res-type>javax.sql.DataSource</res-type>
+        <res-auth>Container</res-auth>
+    </resource-ref>
+      -->
+
+    <!--
+    uncomment to use container-managed datasource
+    with container-managed transactions (JTA).
+    -->
+    <!-- 
+    <resource-ref>
+        <description>db</description>
+        <res-ref-name>jdbc/quickstart-nontx</res-ref-name>
+        <res-type>javax.sql.DataSource</res-type>
+        <res-auth>Container</res-auth>
+    </resource-ref>
+     -->
+
+
+</web-app>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/about/images/isis-logo.png
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/about/images/isis-logo.png
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/about/images/isis-logo.png
new file mode 100644
index 0000000..5284fe7
Binary files /dev/null and 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/about/images/isis-logo.png
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/about/index.html
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/about/index.html
new file mode 100644
index 0000000..5762e8f
--- /dev/null
+++ 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/about/index.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
+<!--
+  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.
+-->
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; 
charset=ISO-8859-1">
+        <title>Apache Isis&trade; TodoApp</title>
+        
+        <style type="text/css">
+body {
+    background-color: #1A467B;
+    font-family: Verdana, Helvetica, Arial;
+    font-size: 90%;
+}
+
+li {
+    margin-top: 6px;
+    margin-bottom: 6px;
+}
+table {
+    border-collapse: collapse;
+}
+table, th, td {
+    border: 1px;
+    border-style: solid;
+    border-color: lightgray;
+}
+th, td {
+    padding: 10px;
+}
+#wrapper {
+    background-color: #ffffff;
+    width: 900px;
+    margin: 8px auto;
+    padding: 12px;
+}
+        </style>
+    </head>
+    <body>
+        <div id="wrapper">
+            <img alt="Isis Logo" src="about/images/isis-logo.png" />
+             
+            <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/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>
+                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>
+                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>
+            <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/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/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/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/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/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/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/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/todo%61pp/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/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/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/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/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> - explicitly loaded 
framework-provide domain services.  Other services (including 
<tt>ToDoItems</tt> and <tt>ToDoItemsFixtureService</tt> described above),
+                      are loaded automatically from the classpath.
+                  </li>
+                  <li><tt>isis.persistor</tt> - specifies to use Isis' 
integration with <a href="http://datanucleus.org";>DataNucleus</a> for 
(JDO-based) persistence.
+                  </li>
+                  <li><tt>isis.authentication</tt> and 
<tt>isis.authorization</tt> - specifies to use Isis' integration with <a 
href="http://shiro.apache.org";>Apache Shiro</a> for security.
+                  </li>
+                </ul>
+              </li>
+              <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 the DataNucleus (JDO) object store
+                  </li>
+                </ul>
+              </li>
+              <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 DataNucleus (JDO) object store
+                  </li>
+                </ul>
+              </li>
+              <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>
+        </div>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/css/application.css
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/css/application.css
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/css/application.css
new file mode 100644
index 0000000..7cc31cf
--- /dev/null
+++ 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/css/application.css
@@ -0,0 +1,35 @@
+/*
+ *  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.
+ */
+
+.navbar-brand img {
+    margin-top: -7px;
+    margin-left: 5px;
+}
+
+.x-key label.scalarName {
+    color: red;
+}
+
+tr.todo {
+}
+
+tr.done {
+    text-decoration: line-through;
+    color: #d3d3d3;
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.pdn
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.pdn
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.pdn
new file mode 100644
index 0000000..016c9b8
Binary files /dev/null and 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.pdn
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.png
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.png
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.png
new file mode 100644
index 0000000..2c417fb
Binary files /dev/null and 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-header.png
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.pdn
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.pdn
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.pdn
new file mode 100644
index 0000000..7a164e1
Binary files /dev/null and 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.pdn
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.png
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.png
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.png
new file mode 100644
index 0000000..ee2feb4
Binary files /dev/null and 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo-signin.png
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo.pdn
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo.pdn
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo.pdn
new file mode 100644
index 0000000..4983ca9
Binary files /dev/null and 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/images/todoapp-logo.pdn
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/application/todoapp/webapp/src/main/webapp/scripts/application.js
----------------------------------------------------------------------
diff --git 
a/mothballed/example/application/todoapp/webapp/src/main/webapp/scripts/application.js
 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/scripts/application.js
new file mode 100644
index 0000000..d8cf6fe
--- /dev/null
+++ 
b/mothballed/example/application/todoapp/webapp/src/main/webapp/scripts/application.js
@@ -0,0 +1,3 @@
+$(document).ready(function() {
+       /// here...
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/mothballed/example/archetype/todoapp/pom.xml 
b/mothballed/example/archetype/todoapp/pom.xml
new file mode 100644
index 0000000..dfc82e5
--- /dev/null
+++ b/mothballed/example/archetype/todoapp/pom.xml
@@ -0,0 +1,50 @@
+<?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"; 
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>todoapp-archetype</artifactId>
+    <version>1.8.0-SNAPSHOT</version>
+    <packaging>maven-archetype</packaging>
+    <name>todoapp-archetype</name>
+    <build>
+        <extensions>
+            <extension>
+                <groupId>org.apache.maven.archetype</groupId>
+                <artifactId>archetype-packaging</artifactId>
+                <version>2.2</version>
+            </extension>
+        </extensions>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-archetype-plugin</artifactId>
+                    <version>2.2</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+    <parent>
+        <groupId>org.apache.isis.core</groupId>
+        <artifactId>isis</artifactId>
+        <version>1.8.0-SNAPSHOT</version>
+        <relativePath>../../../core/pom.xml</relativePath>
+    </parent>
+</project>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/appended-resources/supplemental-models.xml
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/appended-resources/supplemental-models.xml
 
b/mothballed/example/archetype/todoapp/src/main/appended-resources/supplemental-models.xml
new file mode 100644
index 0000000..01c58d8
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/appended-resources/supplemental-models.xml
@@ -0,0 +1,26 @@
+<?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.
+-->
+<supplementalDataModels 
+  xmlns="http://maven.apache.org/supplemental-model/1.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/supplemental-model/1.0.0 
+            http://maven.apache.org/xsd/supplemental-model-1.0.0.xsd";>
+
+</supplementalDataModels>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
 
b/mothballed/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
new file mode 100644
index 0000000..fbe878e
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -0,0 +1,167 @@
+<?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.
+-->
+<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";>
+    <fileSets>
+        <fileSet encoding="UTF-8">
+            <directory/>
+            <includes>
+                <include>.gitattributes</include>
+                <include>.gitignore</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+    <modules>
+        <module id="${rootArtifactId}-dom" dir="dom" 
name="${rootArtifactId}-dom">
+            <fileSets>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/java</directory>
+                    <includes>
+                        <include>**/*.xml</include>
+                        <include>**/*.java</include>
+                    </includes>
+                </fileSet>
+                <fileSet encoding="UTF-8">
+                    <directory>src/main/java</directory>
+                    <includes>
+                        <include>**/*.png</include>
+                        <include>**/*.json</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/resources</directory>
+                    <includes>
+                        <include>**/*.xml</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/test/java</directory>
+                    <includes>
+                        <include>**/*.java</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory/>
+                    <includes>
+                        <include>log4j.properties</include>
+                    </includes>
+                </fileSet>
+            </fileSets>
+        </module>
+        <module id="${rootArtifactId}-fixture" dir="fixture" 
name="${rootArtifactId}-fixture">
+            <fileSets>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/java</directory>
+                    <includes>
+                        <include>**/*.java</include>
+                    </includes>
+                </fileSet>
+            </fileSets>
+        </module>
+        <module id="${rootArtifactId}-integtests" dir="integtests" 
name="${rootArtifactId}-integtests">
+            <fileSets>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/test/java</directory>
+                    <includes>
+                        <include>**/*.java</include>
+                    </includes>
+                </fileSet>
+                <fileSet encoding="UTF-8">
+                    <directory>src/test/java</directory>
+                    <includes>
+                        <include>**/*.feature</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory/>
+                    <includes>
+                        <include>logging.properties</include>
+                    </includes>
+                </fileSet>
+            </fileSets>
+        </module>
+        <module id="${rootArtifactId}-webapp" dir="webapp" 
name="${rootArtifactId}-webapp">
+            <fileSets>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/java</directory>
+                    <includes>
+                        <include>**/*.java</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/webapp</directory>
+                    <includes>
+                        <include>**/*.xml</include>
+                        <include>**/*.html</include>
+                        <include>**/*.properties</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>src/main/resources</directory>
+                    <includes>
+                        <include>**/*.html</include>
+                        <include>**/*.properties</include>
+                    </includes>
+                </fileSet>
+                <fileSet encoding="UTF-8">
+                    <directory>src/main/jettyconsole</directory>
+                    <includes>
+                        <include>**/*.png</include>
+                        <include>**/*.pdn</include>
+                    </includes>
+                </fileSet>
+                <fileSet encoding="UTF-8">
+                    <directory>src/main/webapp</directory>
+                    <includes>
+                        <include>**/*.png</include>
+                        <include>**/*.js</include>
+                        <include>**/*.ini</include>
+                        <include>**/*.pdn</include>
+                        <include>**/*.css</include>
+                    </includes>
+                </fileSet>
+                <fileSet encoding="UTF-8">
+                    <directory>src/main/resources</directory>
+                    <includes>
+                        <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>
+                        <include>**/*.gitignore</include>
+                    </includes>
+                </fileSet>
+                <fileSet filtered="true" encoding="UTF-8">
+                    <directory>ide/eclipse</directory>
+                    <includes>
+                        <include>**/*.launch</include>
+                    </includes>
+                </fileSet>
+            </fileSets>
+        </module>
+    </modules>
+</archetype-descriptor>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitattributes
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitattributes
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitattributes
new file mode 100644
index 0000000..b1eafb6
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitattributes
@@ -0,0 +1,51 @@
+#
+#
+# text files are normalized (convert crlf => lf)
+# binary files are not normalized (binary is a macro for -text -diff)
+#
+#
+
+
+# Unless otherwise stated, assume text
+
+* text=auto
+
+
+*.java text diff=java
+*.html text diff=html
+*.xhtml text diff=html
+*.xml text
+*.txt text
+
+
+*.jar binary
+*.so binary
+*.dll binary
+
+# images
+*.jpg binary
+*.jpeg binary
+*.png binary
+*.pdn binary
+*.pdn binary
+
+
+*.cs     text diff=csharp
+
+*.sln    merge=union
+*.csproj merge=union
+*.vbproj merge=union
+*.fsproj merge=union
+*.dbproj merge=union
+
+*.doc   diff=astextplain
+*.DOC   diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot  diff=astextplain
+*.DOT  diff=astextplain
+*.pdf  diff=astextplain
+*.PDF   diff=astextplain
+*.rtf   diff=astextplain
+*.RTF   diff=astextplain
+

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitignore
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitignore
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitignore
new file mode 100644
index 0000000..ad3f5e2
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/.gitignore
@@ -0,0 +1,40 @@
+*~
+*.swp
+*.class
+bin/
+target/
+target-ide/
+logs/
+.settings/
+.project
+.classpath
+.idea
+*.iml
+
+JArchitectOut/
+*.jdproj
+
+neo4j_DB/
+
+# log files
+datanucleus.log
+isis.log
+hs_err_pid*.log
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+dependency-reduced-pom.xml
+pom.xml.tag
+pom.xml.next
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+
+.clover/
+*.jdproj
+JArchitectOut/
+
+
+rebel.xml

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/log4j.properties
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/log4j.properties
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/log4j.properties
new file mode 100644
index 0000000..2040d89
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/log4j.properties
@@ -0,0 +1,44 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+${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} LOG4J Configuration
+${symbol_pound} ===================
+
+${symbol_pound} Basic logging goes to "datanucleus.log"
+log4j.appender.A1=org.apache.log4j.FileAppender
+log4j.appender.A1.File=datanucleus.log
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} (%t) %-5p [%c] - 
%m%n
+${symbol_pound}log4j.appender.A1.Threshold=INFO
+
+${symbol_pound} Categories
+${symbol_pound} Each category can be set to a "level", and to direct to an 
appender
+
+${symbol_pound} Default to DEBUG level for all DataNucleus categories
+log4j.logger.DataNucleus = DEBUG, A1
+
+log4j.category.com.mchange.v2.c3p0=INFO, A1
+log4j.category.com.mchange.v2.resourcepool=INFO, A1
+log4j.category.org.logicalcobwebs.proxool=INFO,A1
+
+
+${symbol_pound} Hbase libs logging
+log4j.category.org.apache.hadoop=INFO,A1
+log4j.category.org.apache.zookeeper=INFO,A1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
new file mode 100644
index 0000000..38e5063
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/pom.xml
@@ -0,0 +1,162 @@
+<?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>${groupId}</groupId>
+        <artifactId>${rootArtifactId}</artifactId>
+        <version>${version}</version>
+    </parent>
+
+    <artifactId>${artifactId}</artifactId>
+    <name>ToDo App DOM</name>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**</include>
+                </includes>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.datanucleus</groupId>
+                <artifactId>datanucleus-maven-plugin</artifactId>
+                <version>${datanucleus-maven-plugin.version}</version>
+                <configuration>
+                    <fork>false</fork>
+                    
<log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration>
+                    <verbose>true</verbose>
+                    <props>${basedir}/datanucleus.properties</props>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>enhance</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <pluginManagement>
+            <plugins>
+                <!--This plugin's configuration is used to store Eclipse m2e 
settings only. It has no influence on the Maven build itself.-->
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.datanucleus</groupId>
+                                        
<artifactId>datanucleus-maven-plugin</artifactId>
+                                        
<versionRange>[3.2.0-release,)</versionRange>
+                                        <goals>
+                                            <goal>enhance</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore></ignore>
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-applib</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-unittestsupport</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- Bytecode libraries (for mocking) -->
+        <dependency>
+            <groupId>org.objenesis</groupId>
+            <artifactId>objenesis</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>isis-validate</id>
+            <activation>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.isis.tool</groupId>
+                        <artifactId>isis-maven-plugin</artifactId>
+                        <version>1.8.0-SNAPSHOT</version>
+                        <configuration>
+                            
<isisConfigDir>../webapp/src/main/webapp/WEB-INF</isisConfigDir>
+                        </configuration>
+                        <dependencies>
+                            <dependency>
+                                
<groupId>org.apache.isis.example.application</groupId>
+                                <artifactId>todoapp-dom</artifactId>
+                                <version>1.8.0-SNAPSHOT</version>
+                            </dependency>
+                            <!--
+                            ... workaround to avoid conflict with 
plexus-default
+                                (not sure why exclusions in the 
isis-maven-plugin aren't sufficient, though ...
+                            -->
+                            <dependency>
+                                <groupId>com.google.guava</groupId>
+                                <artifactId>guava</artifactId>
+                                <version>16.0.1</version>
+                            </dependency>
+                        </dependencies>
+                        <executions>
+                            <execution>
+                                <phase>test</phase>
+                                <goals>
+                                    <goal>validate</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/META-INF/persistence.xml
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/META-INF/persistence.xml
new file mode 100644
index 0000000..020d759
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/META-INF/persistence.xml
@@ -0,0 +1,29 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?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.
+-->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence";
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"; version="1.0">
+
+    <persistence-unit name="quickstart">
+    </persistence-unit>
+</persistence>

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
new file mode 100644
index 0000000..2686139
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.java
@@ -0,0 +1,86 @@
+#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 app;
+
+import java.util.List;
+import org.apache.isis.applib.AbstractViewModel;
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.RenderType;
+
+public class ToDoAppDashboard extends AbstractViewModel {
+
+    //region > identification in the UI
+    public String title() {
+        return "Dashboard";
+    }
+    //endregion
+
+    //region > ViewModel contract
+    private String memento;
+    
+    @Override
+    public String viewModelMemento() {
+        return memento;
+    }
+
+    @Override
+    public void viewModelInit(final String memento) {
+        this.memento = memento;
+    }
+
+    //endregion
+
+    //region > getAnalysisByCategory (collection)
+    @CollectionLayout(
+            named="By Category",
+            render = RenderType.EAGERLY
+    )
+    @Collection(
+            editing = Editing.DISABLED
+    )
+    public List<ToDoItemsByCategoryViewModel> getAnalysisByCategory() {
+        return toDoItemAnalysis.toDoItemsByCategory();
+    }
+    //endregion
+
+    //region > getAnalysisByDateRange (collection)
+    @CollectionLayout(
+            named="By Date Range",
+            render = RenderType.EAGERLY
+    )
+    @Collection(
+            editing = Editing.DISABLED
+    )
+    public List<ToDoItemsByDateRangeViewModel> getAnalysisByDateRange() {
+        return toDoItemAnalysis.toDoItemsByDateRange();
+    }
+    //endregion
+
+    //region > injected services
+    @javax.inject.Inject
+    private ToDoItemAnalysis toDoItemAnalysis;
+
+    //endregion
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.layout.json
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.layout.json
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.layout.json
new file mode 100644
index 0000000..3421543
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.layout.json
@@ -0,0 +1,26 @@
+{
+  "columns": [
+    {
+      "span": 0,
+      "memberGroups": {}
+    },
+    {
+      "span": 0,
+      "memberGroups": {}
+    },
+    {
+      "span": 0,
+      "memberGroups": {}
+    },
+    {
+      "span": 12,
+      "collections": {
+        "analysisByCategory": {}
+      }
+    }
+  ],
+  "actions": {
+    "downloadLayout": {},
+    "refreshLayout": {}
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png
new file mode 100644
index 0000000..fe6e6a1
Binary files /dev/null and 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png
 differ

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.java
new file mode 100644
index 0000000..190c7ba
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboardService.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 app;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import 
org.apache.isis.applib.services.homepage.AbstractHomePageDashboardService;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class ToDoAppDashboardService extends 
AbstractHomePageDashboardService<ToDoAppDashboard> {
+
+    public ToDoAppDashboardService() {
+        super(ToDoAppDashboard.class);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
new file mode 100644
index 0000000..f5ff7f9
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysis.java
@@ -0,0 +1,129 @@
+#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 app;
+
+import dom.todo.ToDoItem.Category;
+
+import java.util.Arrays;
+import java.util.List;
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+@DomainServiceLayout(
+        named="Analysis",
+        menuOrder = "20")
+@DomainService
+public class ToDoItemAnalysis {
+
+
+    //region > identification in the UI
+    public String getId() {
+        return "analysis";
+    }
+
+    public String iconName() {
+        return "ToDoItem";
+    }
+    //endregion
+
+
+    //region > byCategory (action)
+    @ActionLayout(
+        cssClassFa="fa fa-pie-chart",
+        named="By Category",
+        bookmarking = BookmarkPolicy.AS_ROOT
+    )
+    @Action(semantics = SemanticsOf.SAFE)
+    @MemberOrder(sequence = "1")
+    public List<ToDoItemsByCategoryViewModel> toDoItemsByCategory() {
+        final List<Category> categories = Arrays.asList(Category.values());
+        return Lists.newArrayList(Iterables.transform(categories, 
byCategory()));
+    }
+
+    private Function<Category, ToDoItemsByCategoryViewModel> byCategory() {
+        return new Function<Category, ToDoItemsByCategoryViewModel>(){
+             @Override
+             public ToDoItemsByCategoryViewModel apply(final Category 
category) {
+                 return new ToDoItemsByCategoryViewModel(category);
+             }
+         };
+    }
+    //endregion
+
+    //region > byDateRange (action)
+
+    public enum DateRange {
+        OverDue,
+        Today,
+        Tomorrow,
+        ThisWeek,
+        Later,
+        Unknown,
+    }
+
+    @ActionLayout(
+        cssClassFa="fa fa-calendar",
+        named="By Date Range",
+        bookmarking = BookmarkPolicy.AS_ROOT
+    )
+    @Action(semantics = SemanticsOf.SAFE)
+    @MemberOrder(sequence = "1")
+    public List<ToDoItemsByDateRangeViewModel> toDoItemsByDateRange() {
+        final List<DateRange> dateRanges = Arrays.asList(DateRange.values());
+        return Lists.newArrayList(Iterables.transform(dateRanges, 
byDateRange()));
+    }
+
+    private static Function<DateRange, ToDoItemsByDateRangeViewModel> 
byDateRange() {
+        return new Function<DateRange, ToDoItemsByDateRangeViewModel>(){
+             @Override
+             public ToDoItemsByDateRangeViewModel apply(final DateRange 
dateRange) {
+                 return new ToDoItemsByDateRangeViewModel(dateRange);
+             }
+         };
+    }
+    //endregion
+
+    //region > forCategory (programmatic)
+    @Programmatic
+    public ToDoItemsByCategoryViewModel toDoItemsForCategory(final Category 
category) {
+        return byCategory().apply(category);
+    }
+
+    //endregion
+
+    //region > injected services
+    @javax.inject.Inject
+    private DomainObjectContainer container;
+
+    //endregion
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
new file mode 100644
index 0000000..f40e14d
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemAnalysisContributions.java
@@ -0,0 +1,53 @@
+#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 app;
+
+import dom.todo.ToDoItem;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Contributed;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+@DomainService(nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY)
+public class ToDoItemAnalysisContributions {
+
+
+    //region > analyseCategory (action)
+    @ActionLayout(contributed = Contributed.AS_ACTION)
+    @Action(
+            semantics = SemanticsOf.SAFE
+    )
+    public ToDoItemsByCategoryViewModel analyseCategory(final ToDoItem item) {
+        return toDoAppAnalysis.toDoItemsForCategory(item.getCategory());
+    }
+    //endregion
+
+    //region > injected services
+    @javax.inject.Inject
+    private ToDoItemAnalysis toDoAppAnalysis;
+
+    //endregion
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
new file mode 100644
index 0000000..9226e54
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java
@@ -0,0 +1,171 @@
+#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 app;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItems;
+
+import java.util.Arrays;
+import java.util.List;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.RenderType;
+import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.util.ObjectContracts;
+
+@DomainObjectLayout(
+        named="By Category",
+        bookmarking = BookmarkPolicy.AS_ROOT
+)
+@DomainObject(
+        nature = Nature.VIEW_MODEL
+)
+public class ToDoItemsByCategoryViewModel
+        implements Comparable<ToDoItemsByCategoryViewModel> {
+
+    //region > constructors
+    public ToDoItemsByCategoryViewModel() {
+    }
+    public ToDoItemsByCategoryViewModel(final Category category) {
+        setCategory(category);
+    }
+    //endregion
+
+
+    //region > category (property)
+    private Category category;
+
+    @Title
+    public Category getCategory() {
+        return category;
+    }
+
+    public void setCategory(final Category category) {
+        this.category = category;
+    }
+    //endregion
+
+    //region > notYetComplete (property), complete (property)
+    @PropertyLayout(
+        multiLine=5
+    )
+    public String getNotYetComplete() {
+        final List<ToDoItem> notYetComplete = getItemsNotYetComplete();
+        return Joiner.on(", ").join(
+            Iterables.transform(subcategories(), 
summarizeBySubcategory(notYetComplete)));
+    }
+
+    @PropertyLayout(
+        multiLine=5
+    )
+    public String getComplete() {
+        final List<ToDoItem> completeInCategory = getItemsComplete();
+        return Joiner.on(", ").join(
+            Iterables.transform(subcategories(), 
summarizeBySubcategory(completeInCategory)));
+    }
+
+    // //////////////////////////////////////
+
+    private Iterable<ToDoItem.Subcategory> subcategories() {
+        return Iterables.filter(Arrays.asList(ToDoItem.Subcategory.values()), 
ToDoItem.Subcategory.thoseFor(getCategory()));
+    }
+
+    private Function<ToDoItem.Subcategory, String> 
summarizeBySubcategory(final Iterable<ToDoItem> itemsInCategory) {
+        return new Function<ToDoItem.Subcategory, String>() {
+            @Override
+            public String apply(final ToDoItem.Subcategory subcategory) {
+                return subcategory + ": " + countIn(itemsInCategory, 
subcategory);
+            }
+        };
+    }
+
+    private static int countIn(final Iterable<ToDoItem> items, final 
ToDoItem.Subcategory subcategory) {
+        return Iterables.size(Iterables.filter(items,
+                ToDoItem.Predicates.thoseSubcategorised(subcategory)));
+    }
+    //endregion
+
+    //region > getItemsNotYetComplete (collection), getItemsComplete 
(collection)
+    /**
+     * All those items {@link ToDoItems${symbol_pound}notYetComplete() not yet 
complete}, for this {@link ${symbol_pound}getCategory() category}.
+     */
+    @CollectionLayout(
+            render = RenderType.EAGERLY
+    )
+    public List<ToDoItem> getItemsNotYetComplete() {
+        final List<ToDoItem> notYetComplete = toDoItems.notYetCompleteNoUi();
+        return Lists.newArrayList(Iterables.filter(notYetComplete, 
ToDoItem.Predicates.thoseCategorised(getCategory())));
+    }
+
+    /**
+     * All those items {@link ToDoItems${symbol_pound}complete() complete}, 
for this {@link ${symbol_pound}getCategory() category}.
+     */
+    @CollectionLayout(
+            render = RenderType.EAGERLY
+    )
+    public List<ToDoItem> getItemsComplete() {
+        final List<ToDoItem> complete = toDoItems.completeNoUi();
+        return Lists.newArrayList(Iterables.filter(complete, 
ToDoItem.Predicates.thoseCategorised(getCategory())));
+    }
+
+    //endregion
+
+    //region > deleteCompleted (action)
+    @ActionLayout(
+            named="Delete"
+    )
+    public ToDoItemsByCategoryViewModel deleteCompleted() {
+        for (final ToDoItem item : getItemsComplete()) {
+            container.removeIfNotAlready(item);
+        }
+        // force reload of page
+        return this;
+    }
+
+    //endregion
+
+    //region > compareTo
+    @Override
+    public int compareTo(final ToDoItemsByCategoryViewModel other) {
+        return ObjectContracts.compare(this, other, "category");
+    }
+    //endregion
+
+    //region > injected services
+    @javax.inject.Inject
+    private DomainObjectContainer container;
+    @javax.inject.Inject
+    private ToDoItems toDoItems;
+    //endregion
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.layout.json
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.layout.json
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.layout.json
new file mode 100644
index 0000000..c87b554
--- /dev/null
+++ 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.layout.json
@@ -0,0 +1,43 @@
+{
+  "columns": [
+    {
+      "span": 4,
+      "memberGroups": {
+        "General": {
+          "members": {
+            "category": {}
+          }
+        },
+        "Analysis": {
+          "members": {
+            "notYetComplete": {},
+            "complete": {}
+          }
+        }
+      }
+    },
+    {
+      "span": 0,
+      "memberGroups": {}
+    },
+    {
+      "span": 0,
+      "memberGroups": {}
+    },
+    {
+      "span": 8,
+      "collections": {
+        "itemsNotYetComplete": {},
+        "itemsComplete": {
+          "actions": {
+            "deleteCompleted": {}
+          }
+        }
+      }
+    }
+  ],
+  "actions": {
+    "downloadLayout": {},
+    "refreshLayout": {}
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a4ec0b72/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png
----------------------------------------------------------------------
diff --git 
a/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png
 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png
new file mode 100644
index 0000000..c22ab2b
Binary files /dev/null and 
b/mothballed/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png
 differ

Reply via email to