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/11/14 14:46:26 UTC

[2/2] isis git commit: ISIS-928: recreating todoapp archetype

ISIS-928: 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/853f6213
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/853f6213
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/853f6213

Branch: refs/heads/master
Commit: 853f62137a6d7c15b0a8e54b7094b22721c06cd6
Parents: 2fa4bcf
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 14 13:10:32 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 14 13:10:32 2014 +0000

----------------------------------------------------------------------
 example/archetype/todoapp/pom.xml               |   2 +-
 .../dom/src/main/java/app/ToDoAppDashboard.png  | Bin 684 -> 834 bytes
 .../dom/src/main/java/app/ToDoItemAnalysis.java |   5 +-
 .../java/app/ToDoItemsByCategoryViewModel.png   | Bin 0 -> 684 bytes
 .../java/app/ToDoItemsByDateRangeViewModel.png  | Bin 0 -> 613 bytes
 .../dom/src/main/java/dom/todo/ToDoItem.java    |  26 +++++++-
 .../src/main/java/dom/todo/ToDoItem.layout.json |  57 +++++++++++-----
 .../java/dom/todo/ToDoItemContributions.java    |   4 +-
 .../java/dom/todo/ToDoItemSubscriptions.java    |  66 +++++++++++++++----
 .../dom/src/main/java/dom/todo/ToDoItems.java   |   5 ++
 .../fixture/todo/ToDoItemsFixturesService.java  |  14 ++--
 .../archetype-resources/integtests/pom.xml      |   2 +-
 .../integration/tests/ToDoItemIntegTest.java    |  28 ++++----
 .../main/resources/archetype-resources/pom.xml  |   4 +-
 .../archetype-resources/webapp/pom.xml          |   4 --
 .../src/main/java/webapp/ToDoApplication.java   |  19 +++++-
 .../prototyping/ExternalLinksService.java       |   3 +-
 .../src/main/webapp/WEB-INF/isis.properties     |   2 +
 .../WEB-INF/viewer_restfulobjects.properties    |  42 +++++++++++-
 .../webapp/WEB-INF/viewer_wicket.properties     |  45 +++++++++----
 .../projects/basic/archetype.properties         |   2 +-
 21 files changed, 254 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/example/archetype/todoapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/pom.xml b/example/archetype/todoapp/pom.xml
index 1922cdb..a1ce46a 100644
--- a/example/archetype/todoapp/pom.xml
+++ b/example/archetype/todoapp/pom.xml
@@ -17,7 +17,7 @@
   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>todoapp-archetype</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png b/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png
index c22ab2b..fe6e6a1 100644
Binary files a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoAppDashboard.png and b/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/853f6213/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 5f7eeef..fdf23e3 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
@@ -47,7 +47,9 @@ public class ToDoItemAnalysis {
     }
     //endregion
 
+
     //region > byCategory (action)
+    @CssClassFa("fa fa-pie-chart")
     @Named("By Category")
     @Bookmarkable
     @ActionSemantics(Of.SAFE)
@@ -77,7 +79,8 @@ public class ToDoItemAnalysis {
         Later,
         Unknown,
     }
-    
+
+    @CssClassFa("fa fa-calendar")
     @Named("By Date Range")
     @Bookmarkable
     @ActionSemantics(Of.SAFE)

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png b/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/example/archetype/todoapp/src/main/resources/archetype-resources/dom/src/main/java/app/ToDoItemsByCategoryViewModel.png differ

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

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 c32b3a8..74a84f1 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
@@ -137,7 +137,7 @@ public class ToDoItem implements Categorized, Comparable<ToDoItem> {
 
     @javax.jdo.annotations.Column(allowsNull="false", length=100)
     @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]*") 
+    @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]*")
     public String getDescription() {
         return description;
     }
@@ -600,7 +600,7 @@ public class ToDoItem implements Categorized, Comparable<ToDoItem> {
         container.informUser("Deleted " + container.titleOf(this));
         
         // invalid to return 'this' (cannot render a deleted object)
-        return toDoItems.notYetComplete(); 
+        return toDoItems.notYetComplete();
     }
     //endregion
 
@@ -692,6 +692,25 @@ public class ToDoItem implements Categorized, Comparable<ToDoItem> {
     //region > object-level validation
 
     /**
+     * Prevent user from viewing another user's data.
+     */
+    public boolean hidden() {
+        // uncomment to enable.  As things stand, the disabled() method below instead will make object "read-only".
+        //return !Objects.equal(getOwnedBy(), container.getUser().getName());
+        return false;
+    }
+
+    /**
+     * Prevent user from modifying any other user's data.
+     */
+    public String disabled(Identifier.Type type){
+        final UserMemento currentUser = container.getUser();
+        final String currentUserName = currentUser.getName();
+        if(Objects.equal(getOwnedBy(), currentUserName)) { return null; }
+        return "This object is owned by '" + getOwnedBy() + "' and cannot be modified by you";
+    }
+
+    /**
      * In a real app, if this were actually a rule, then we'd expect that
      * invoking the {@link ${symbol_pound}completed() done} action would clear the {@link ${symbol_pound}getDueBy() dueBy}
      * property (rather than require the user to have to clear manually).
@@ -702,8 +721,11 @@ public class ToDoItem implements Categorized, Comparable<ToDoItem> {
         }
         return null;
     }
+
+
     //endregion
 
+
     //region > programmatic helpers
     @Programmatic // excluded from the framework's metamodel
     public boolean isDue() {

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 f15424d..4ad0a90 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
@@ -22,18 +22,26 @@
             "General": {
                 "members": {
                     "description": {
-                        "typicalLength": { "value": 50 }
+                        "typicalLength": { "value": 50 },
+                        "labelAt": { "value": "TOP" }
                     },
                     "category": {
+                        "named": { "value": "Category/subcategory" },
+                        "labelAt": { "value": "TOP" }
                     },
                     "subcategory": {
+                        "labelAt": { "value": "NONE" },
                         "actions": {
                             "updateCategory": {
                                 "named": {
                                     "value": "Update"
                                 }
                             },
-                            "analyseCategory": {}
+                            "analyseCategory": {
+                                "cssClassFa": {
+                                     "value": "fa fa-pie-chart"
+                                }
+                            }
                         }
                     },
                     "ownedBy": {
@@ -44,12 +52,16 @@
                             "completed": {
                                 "named": { "value": "Done" },
                                 "describedAs": {
-                                    "value": "Mark this todo item as having been completed"
+                                    "value": "Update this todo item as complete"
                                 },
-                                "cssClass": { "value": "x-highlight" }
+                                "cssClassFa": { "value": "fa fa-thumbs-up" }
                             },
                             "notYetCompleted": {
-                                "named": { "value": "Not done" }
+                                "named": { "value": "Not done" },
+                                "describedAs": {
+                                    "value": "Update this todo item as not yet complete"
+                                },
+                                "cssClassFa": { "value": "fa fa-thumbs-down" }
                             },
                             "scheduleExplicitly": {
                             },
@@ -84,8 +96,12 @@
                 "members": {
                      "relativePriority": {
                         "actions": {
-                            "previous": {},
-                            "next": {}
+                            "previous": {
+                                "cssClassFa": { "value": "fa fa-step-backward" }
+                            },
+                            "next": {
+                                "cssClassFa": { "value": "fa fa-step-forward" }
+                            }
                         }
                     },
                     "dueBy": {
@@ -98,9 +114,8 @@
                     "cost": {
                         "actions": {
                             "updateCost":{
-                                "named": {
-                                    "value": "Update"
-                                }
+                                "named": { "value": "Update" },
+                                "cssClassFa": { "value": "fa fa-dollar" }
                             }
                         }
                     },
@@ -110,7 +125,8 @@
                         },
                         "hidden": {
                             "where": "ALL_TABLES"
-                        }
+                        },
+                        "labelAt": { "value": "TOP" }
                     },
                     "attachment": {
                         "hidden": {
@@ -135,9 +151,12 @@
             "dependencies": {
                 "disabled": {},
                 "actions": {
-                    "add":{},
+                    "add":{
+                        "cssClassFa": { "value": "fa fa-plus-square" }
+                    },
                     "remove": {
-                        "cssClass": { "value": "x-caution" }
+                        "cssClass": { "value": "x-caution btn-danger" },
+                        "cssClassFa": { "value": "fa fa-minus-square" }
                     }
                 },
                 "paged": {
@@ -162,15 +181,17 @@
     "actions": {
         "totalCost": {},
         "delete": {
-            "cssClass": { "value": "x-caution" }
+            "cssClass": { "value": "btn btn-danger" },
+            "cssClassFa": { "value": "fa fa-trash fa-lg" }
         },
         "duplicate": {
-	        "named": {
-	            "value": "Clone"
-	        },
+	          "named": {
+	              "value": "Clone"
+	          },
             "describedAs": {
                 "value": "Create a new todo item from this one"
-            }
+            },
+            "cssClassFa": { "value": "fa fa-copy fa-lg" }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 789796d..51ce968 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
@@ -118,7 +118,7 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     }
 
     // //////////////////////////////////////
-    
+
     @DescribedAs("The previous item not yet completed")
     @NotInServiceMenu
     @ActionSemantics(Of.SAFE)
@@ -164,7 +164,7 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     @NotContributed(As.ACTION)
     public List<ToDoItem> similarTo(final ToDoItem toDoItem) {
         final List<ToDoItem> similarToDoItems = allMatches(
-                new QueryDefault<ToDoItem>(ToDoItem.class, 
+                new QueryDefault<ToDoItem>(ToDoItem.class,
                         "findByOwnedByAndCategory", 
                         "ownedBy", currentUserName(), 
                         "category", toDoItem.getCategory()));

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 1230090..fe641f5 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,6 +23,8 @@ package dom.todo;
 
 import java.util.EventObject;
 import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Lists;
@@ -40,6 +42,16 @@ import static com.google.common.collect.Iterables.filter;
 import static com.google.common.collect.Iterables.transform;
 import static com.google.common.collect.Lists.newArrayList;
 
+/**
+ * Subscribes to changes made to  the {@link dom.todo.ToDoItem} entity.
+ *
+ * <p>
+ *     (For demo purposes) the behaviour can be influenced using {@link ${symbol_pound}subscriberBehaviour(dom.todo.ToDoItemSubscriptions.Behaviour)}.
+ *     In particular, the subscriber can be used to hide/disable/validate actions, or just to perform pre- or post-execute
+ *     tasks.  This also includes being set to throw an exception during the execution of the action (also in effect
+ *     vetoing the change).
+ * </p>
+ */
 @DomainService
 public class ToDoItemSubscriptions {
 
@@ -47,6 +59,38 @@ public class ToDoItemSubscriptions {
     private final static org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(ToDoItemSubscriptions.class);
     //endregion
 
+    //region > postConstruct, preDestroy
+
+    /**
+     * Registers this service with the {@link org.apache.isis.applib.services.eventbus.EventBusService}.
+     *
+     * <p>
+     *     Because this service is a singleton, this is called during initial bootstrap.
+     * </p>
+     */
+    @Programmatic
+    @PostConstruct
+    public void postConstruct() {
+        LOG.info("postConstruct: registering to event bus");
+        eventBusService.register(this);
+    }
+
+    /**
+     * Unregisters this service from the {@link org.apache.isis.applib.services.eventbus.EventBusService}.
+     *
+     * <p>
+     *     Because this service is a singleton, this is only done when the system is shutdown.
+     * </p>
+     */
+    @Programmatic
+    @PreDestroy
+    public void preDestroy() {
+        LOG.info("preDestroy: unregistering from event bus");
+        eventBusService.unregister(this);
+    }
+    //endregion
+
+
     //region > on(Event)...
 
     public static enum Behaviour {
@@ -68,6 +112,10 @@ public class ToDoItemSubscriptions {
         DependenciesCollectionInvalidateRemove,
         SimilarToCollectionHide
     }
+
+    /**
+     * The desired behaviour of this service.
+     */
     private Behaviour behaviour = Behaviour.AnyExecuteAccept;
 
     /**
@@ -76,13 +124,13 @@ public class ToDoItemSubscriptions {
     @Prototype
     @MemberOrder(name = "Prototyping", sequence = "80")
     @Named("Set subscriber behaviour")
+    @NotContributed
     @ActionSemantics(ActionSemantics.Of.IDEMPOTENT)
-    public ToDoItem subscriberBehaviour(ToDoItem toDoItem, @Named("Behaviour") Behaviour behaviour) {
+    public void subscriberBehaviour(@Named("Behaviour") Behaviour behaviour) {
         this.behaviour = behaviour;
         container.informUser("Subscriber behaviour set to: " + behaviour);
-        return toDoItem;
     }
-    public Behaviour default1SubscriberBehaviour() {
+    public Behaviour default0SubscriberBehaviour() {
         return this.behaviour;
     }
 
@@ -95,7 +143,7 @@ public class ToDoItemSubscriptions {
             throw new RecoverableException("Rejecting event (recoverable exception thrown)");
         }
         if(behaviour == Behaviour.AnyExecuteVetoWithNonRecoverableException) {
-            throw new NonRecoverableException("Rejecting event (recoverable exception thrown)");
+            throw new NonRecoverableException("Rejecting event (non-recoverable exception thrown)");
         }
         if(behaviour == Behaviour.AnyExecuteVetoWithOtherException) {
             throw new RuntimeException("Throwing some other exception");
@@ -148,7 +196,7 @@ public class ToDoItemSubscriptions {
             case VALIDATE:
                 if(getSubscriberBehaviour() == Behaviour.UpdateCostActionInvalidate &&
                         ev.getIdentifier().getMemberName().equals("updateCost")) {
-                    ev.disable("ToDoItemSubscriptions says: can't invoke updateCostaction with these args!");
+                    ev.invalidate("ToDoItemSubscriptions says: can't invoke updateCost action with these args!");
                 }
                 break;
             case EXECUTING:
@@ -304,7 +352,7 @@ public class ToDoItemSubscriptions {
     @Programmatic
     public void reset() {
         receivedEvents.clear();
-        subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteAccept);
+        subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteAccept);
     }
     //endregion
 
@@ -312,12 +360,8 @@ public class ToDoItemSubscriptions {
     @javax.inject.Inject
     private DomainObjectContainer container;
 
-    @SuppressWarnings("unused")
+    @javax.inject.Inject
     private EventBusService eventBusService;
-    @Programmatic
-    public final void injectEventBusService(EventBusService eventBusService) {
-        eventBusService.register(this);
-    }
     //endregion
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 07d3c66..8ed6957 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
@@ -39,6 +39,7 @@ import org.apache.isis.applib.services.clock.ClockService;
 public class ToDoItems {
 
     //region > notYetComplete (action)
+    @CssClassFa("fa fa-thumbs-down")
     @Bookmarkable
     @ActionSemantics(Of.SAFE)
     @MemberOrder(sequence = "10")
@@ -60,6 +61,7 @@ public class ToDoItems {
     //endregion
 
     //region > complete (action)
+    @CssClassFa("fa fa-thumbs-up")
     @ActionSemantics(Of.SAFE)
     @MemberOrder(sequence = "20")
     public List<ToDoItem> complete() {
@@ -84,6 +86,7 @@ public class ToDoItems {
 	@Bookmarkable
     @ActionSemantics(Of.SAFE)
     @MemberOrder(sequence = "40")
+    @CssClassFa("fa fa-question")
     public List<ToDoItem> categorized(
     		@Named("Category") final Category category,
     		@Named("Subcategory") final Subcategory subcategory,
@@ -117,6 +120,7 @@ public class ToDoItems {
     //endregion
 
     //region > newToDo (action)
+    @CssClassFa("fa fa-plus")
     @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, 
@@ -148,6 +152,7 @@ public class ToDoItems {
     //endregion
 
     //region > allToDos (action)
+    @CssClassFa("fa fa-globe")
     @Prototype
     @ActionSemantics(Of.SAFE)
     @MemberOrder(sequence = "50")

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 dcaa956..0396bba 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,10 +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;
+import org.apache.isis.applib.annotation.*;
 import org.apache.isis.applib.fixturescripts.FixtureResult;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
@@ -43,6 +40,12 @@ public class ToDoItemsFixturesService extends FixtureScripts {
         super("fixture.todo");
     }
 
+    @CssClassFa("fa fa-bolt")
+    @Override
+    public List<FixtureResult> runFixtureScript(FixtureScript fixtureScript, @Named("Parameters") @DescribedAs("Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)") @MultiLine(numberOfLines = 10) @Optional String parameters) {
+        return super.runFixtureScript(fixtureScript, parameters);
+    }
+
     @Override
     public FixtureScript default0RunFixtureScript() {
         return findFixtureScriptFor(RecreateToDoItemsAndCompleteSeveralForCurrent.class);
@@ -61,8 +64,9 @@ public class ToDoItemsFixturesService extends FixtureScripts {
 
 
     @Prototype
+    @CssClassFa("fa fa-list")
     @MemberOrder(sequence="20")
-    public Object recreateToDoItemsForCurrentAndReturnFirst() {
+    public Object recreateToDoItemsReturnFirst() {
         final List<FixtureResult> run = findFixtureScriptFor(RecreateToDoItemsAndCompleteSeveralForCurrent.class).run(null);
         return run.get(0).getObject();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 1396994..1ec97ae 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
@@ -77,7 +77,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-objectstore-jdo-datanucleus</artifactId>
+            <artifactId>isis-core-runtime</artifactId>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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
index ccfd19c..90bb098 100644
--- 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
@@ -236,7 +236,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
             public void subscriberVetoesEventWithRecoverableException() throws Exception {
 
                 // given
-                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+                toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
 
                 // then
                 expectedExceptions.expect(RecoverableException.class);
@@ -249,7 +249,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
             public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
 
                 // given
-                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+                toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
 
                 // then
                 expectedExceptions.expect(NonRecoverableException.class);
@@ -262,7 +262,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
             public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
 
                 // given
-                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+                toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
 
                 // when
                 toDoItem.completed();
@@ -295,8 +295,12 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 scenarioExecution().replaceService(originalEventBusService, mockEventBusService);
                 scenarioExecution().closeSession();
                 scenarioExecution().openSession();
+
+                final List<ToDoItem> all = toDoItems.notYetComplete();
+                toDoItem = wrap(all.get(0));
             }
 
+
             @After
             public void reinstateOriginalEventBusService() throws Exception {
                 scenarioExecution().replaceService(mockEventBusService, originalEventBusService);
@@ -535,7 +539,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 public void subscriberVetoesEventWithRecoverableException() throws Exception {
 
                     // given
-                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+                    toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
 
                     // then
                     expectedExceptions.expect(RecoverableException.class);
@@ -548,7 +552,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
 
                     // given
-                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+                    toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
 
                     // then
                     expectedExceptions.expect(NonRecoverableException.class);
@@ -561,7 +565,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
 
                     // given
-                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+                    toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
 
                     // when
                     toDoItem.add(otherToDoItem);
@@ -633,7 +637,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 public void subscriberVetoesEventWithRecoverableException() throws Exception {
 
                     // given
-                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+                    toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
 
                     // then
                     expectedExceptions.expect(RecoverableException.class);
@@ -646,7 +650,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
 
                     // given
-                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+                    toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
 
                     // then
                     expectedExceptions.expect(NonRecoverableException.class);
@@ -659,7 +663,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
                 public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
 
                     // given
-                    toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+                    toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
 
                     // when
                     toDoItem.remove(otherToDoItem);
@@ -872,7 +876,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
             public void subscriberVetoesEventWithRecoverableException() throws Exception {
 
                 // given
-                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
+                toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithRecoverableException);
 
                 // then
                 expectedExceptions.expect(RecoverableException.class);
@@ -886,7 +890,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
             public void subscriberVetoesEventWithNonRecoverableException() throws Exception {
 
                 // given
-                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
+                toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithNonRecoverableException);
 
                 // then
                 expectedExceptions.expect(NonRecoverableException.class);
@@ -900,7 +904,7 @@ public class ToDoItemIntegTest extends AbstractToDoIntegTest {
             public void subscriberThrowingOtherExceptionIsIgnored() throws Exception {
 
                 // given
-                toDoItemSubscriptions.subscriberBehaviour(null, ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
+                toDoItemSubscriptions.subscriberBehaviour(ToDoItemSubscriptions.Behaviour.AnyExecuteVetoWithOtherException);
 
                 // when
                 toDoItem.setDescription("Buy bread and butter");

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 97fd96f..0c91870 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/pom.xml
@@ -64,8 +64,8 @@
                     <artifactId>maven-compiler-plugin</artifactId>
                     <version>3.1</version>
                     <configuration>
-                        <source>1.6</source>
-                        <target>1.6</target>
+                        <source>1.7</source>
+                        <target>1.7</target>
                     </configuration>
                     <executions>
                         <execution>

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 c4bdfc4..406385b 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
@@ -156,10 +156,6 @@
         
         <!-- other isis components -->
         <dependency>
-            <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>

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/ToDoApplication.java
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/ToDoApplication.java b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/ToDoApplication.java
index 459970c..299f3f9 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/ToDoApplication.java
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/java/webapp/ToDoApplication.java
@@ -21,6 +21,11 @@
  */
 package webapp;
 
+import de.agilecoders.wicket.core.Bootstrap;
+import de.agilecoders.wicket.core.settings.IBootstrapSettings;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchTheme;
+import de.agilecoders.wicket.themes.markup.html.bootswatch.BootswatchThemeProvider;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.Charset;
@@ -63,15 +68,23 @@ public class ToDoApplication extends IsisWicketApplication {
     private static final long serialVersionUID = 1L;
 
     /**
-     * uncomment for a (slightly hacky) way of allowing logins using query args, eg:
+     * set to true for a (slightly hacky) way of allowing logins using query args, eg:
      * 
      * <tt>?user=sven&pass=pass</tt>
      * 
      * <p>
-     * for demos only, obvious.
+     * for demos only, obviously.
      */
     private final static boolean DEMO_MODE_USING_CREDENTIALS_AS_QUERYARGS = false;
-    
+
+    @Override
+    protected void init() {
+        super.init();
+
+        IBootstrapSettings settings = Bootstrap.getSettings();
+        settings.setThemeProvider(new BootswatchThemeProvider(BootswatchTheme.Flatly));
+    }
+
     @Override
     public Session newSession(final Request request, final Response response) {
         if(!DEMO_MODE_USING_CREDENTIALS_AS_QUERYARGS) {

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 c3b6be3..7697ea8 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
@@ -48,7 +48,8 @@ public class ExternalLinksService {
             return title;
         }
     }
-    
+
+    @CssClassFa("fa-external-link")
     @Prototype
     @ActionSemantics(Of.SAFE)
     @MemberOrder(name="Prototyping", sequence="91.1")

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/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 6961bb1..b9cf19e 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
@@ -196,3 +196,5 @@ ${symbol_pound}
 ${symbol_pound}isis.viewers.paged.standalone=30
 ${symbol_pound}isis.viewers.paged.parented=10
 
+${symbol_pound}isis.viewers.labelAt.property=LEFT
+${symbol_pound}isis.viewers.labelAt.parameter=LEFT

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
index 10cbce9..85e658a 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_restfulobjects.properties
@@ -26,4 +26,44 @@ ${symbol_pound} the baseUrl for hrefs in the events generated by the RO EventSer
 isis.viewer.restfulobjects.RestfulObjectsSpecEventSerializer.baseUrl=http://localhost:8080/restful/
 
 ${symbol_pound} renders param details in the (incorrect) form that they were for GSOC2013 viewers
-${symbol_pound} isis.viewer.restfulobjects.gsoc2013.legacyParamDetails=true
\ No newline at end of file
+${symbol_pound} isis.viewer.restfulobjects.gsoc2013.legacyParamDetails=true
+
+${symbol_pound} whether to honor UI hints, in particular Render(EAGERLY).  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.honorUiHints=false
+
+
+
+${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} Non-standard configuration settings.
+${symbol_pound}
+${symbol_pound} If enabled of the following are enabled then the viewer is deviating from the
+${symbol_pound} RO spec standard; compatibility may be compromised with RO clients.
+${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} whether to show only object properties for object members
+${symbol_pound} (on the object representation only)
+${symbol_pound} Takes precedence over the other 'suppress' below.
+${symbol_pound}isis.viewer.restfulobjects.objectPropertyValuesOnly=true
+
+${symbol_pound} whether to suppress "describedby" links.  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.suppressDescribedByLinks=true
+
+${symbol_pound} whether to suppress "update" links.  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.suppressUpdateLink=true
+
+${symbol_pound} whether to suppress "id" json-prop for object members.  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.suppressMemberId=true
+
+${symbol_pound} whether to suppress "links" json-prop for object members
+${symbol_pound} (on the object representation only).  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.suppressMemberLinks=true
+
+${symbol_pound} whether to suppress "extensions" json-prop for object members
+${symbol_pound} (on the object representation only).  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.suppressMemberExtensions=true
+
+${symbol_pound} whether to suppress "disabledReason" json-prop for object members
+${symbol_pound} (on the object representation only).  Defaults to false.
+${symbol_pound}isis.viewer.restfulobjects.suppressMemberDisabledReason=true
+
+${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}

http://git-wip-us.apache.org/repos/asf/isis/blob/853f6213/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
----------------------------------------------------------------------
diff --git a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
index 9e4fb9d..84e8f10 100644
--- a/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
+++ b/example/archetype/todoapp/src/main/resources/archetype-resources/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
@@ -35,32 +35,55 @@ 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-yy
+${symbol_pound}isis.viewer.wicket.datePattern=dd-MM-yyyy
+${symbol_pound}isis.viewer.wicket.dateTimePattern=dd-MM-yyyy HH:mm
+${symbol_pound}isis.viewer.wicket.datePickerPattern=DD-MM-YYYY
 
 ${symbol_pound}isis.viewer.wicket.datePattern=dd/MM/yy
 ${symbol_pound}isis.viewer.wicket.dateTimePattern=dd/MM/yy HH:mm
-${symbol_pound}isis.viewer.wicket.datePickerPattern=dd/mm/y
+${symbol_pound}isis.viewer.wicket.datePickerPattern=DD/MM/YY
 
 
 
-${symbol_pound} default is for wicket tags to be stripped in production (Isis SERVER mode == Wicket deployment mode), 
-${symbol_pound} not stripped otherwise (Isis' PROTOTYPE mode == Wicket's DEVELOPMENT mode)
-${symbol_pound} isis.viewer.wicket.stripWicketTags=false
+${symbol_pound}
+${symbol_pound} whether to strip wicket tags from markup (default is true, as they may break some CSS rules)
+${symbol_pound}
+${symbol_pound}isis.viewer.wicket.stripWicketTags=false
 
-${symbol_pound}isis.viewer.wicket.suppressRememberMe=true
+
+${symbol_pound}
+${symbol_pound} whether to suppress the 'rememberMe' checkbox on the login page (default is false)
+${symbol_pound}
+${symbol_pound}isis.viewer.wicket.suppressRememberMe=false
 
 ${symbol_pound}
 ${symbol_pound} if user attempts to access a protected URL before signing in, then as a convenience the viewer will continue
 ${symbol_pound} through to that destination after successful login.  If you consider this to be a security risk then this flag
-${symbol_pound} disables that behaviour.
+${symbol_pound} disables that behaviour (default is false).
 ${symbol_pound}
 ${symbol_pound}isis.viewer.wicket.clearOriginalDestination=true
 
-${symbol_pound}isis.viewer.wicket.disableModalDialogs=true
 
+${symbol_pound}
+${symbol_pound} whether to show action dialogs on their own page rather than as a modal dialog (default is false)
+${symbol_pound}
+${symbol_pound}isis.viewer.wicket.disableModalDialogs=false
+
+
+${symbol_pound}
+${symbol_pound} the maximum number of pages to list in bookmark (default is 15)
+${symbol_pound}
 ${symbol_pound}isis.viewer.wicket.bookmarkedPages.maxSize=15
 
-${symbol_pound}isis.viewer.wicket.regularCase=false
 
+${symbol_pound}
+${symbol_pound} whether to show the bootstrap theme chooser (defaults false)
+${symbol_pound}
+${symbol_pound}isis.viewer.wicket.themes.showChooser=false
+isis.viewer.wicket.themes.showChooser=true
+
+${symbol_pound}
+${symbol_pound} comma-separated list of themes to choose from (default is to show all themes from bootswatch.com).
+${symbol_pound}
+${symbol_pound}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/853f6213/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 d48dc88..0d38840 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 Oct 13 23:45:24 BST 2014
+#Fri Nov 14 13:10:25 GMT 2014
 package=it.pkg
 version=0.1-SNAPSHOT
 groupId=archetype.it