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 2013/07/15 15:32:01 UTC

[1/3] git commit: ISIS-457 - New annotation @CssClass for class member, should render in the HTML markup for that member.

Updated Branches:
  refs/heads/master 002266d54 -> 4fce57533


ISIS-457 - New annotation @CssClass for class member, should render in the HTML markup for that member.

Signed-off-by: Dan Haywood <da...@apache.org>


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

Branch: refs/heads/master
Commit: 5780784675ee5439b4d740e57073dca4a5d72bfa
Parents: 002266d
Author: bibryam <bi...@gmail.com>
Authored: Sun Jul 14 20:28:05 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Jul 15 13:32:56 2013 +0100

----------------------------------------------------------------------
 .../components/collection/CollectionPanel.java  |  2 +-
 .../collections/EntityCollectionsPanel.java     | 13 ++++--
 .../entity/combined/EntityCombinedPanel.java    |  6 +++
 .../components/scalars/ScalarPanelAbstract.java |  8 ++++
 .../scalars/primitive/BooleanPanel.java         |  2 -
 .../components/widgets/cssmenu/CssMenuItem.java | 40 ++++++++++++++---
 .../apache/isis/applib/annotation/CssClass.java | 38 ++++++++++++++++
 .../facets/members/cssclass/CssClassFacet.java  | 32 +++++++++++++
 .../members/cssclass/CssClassFacetAbstract.java | 35 +++++++++++++++
 .../metamodel/spec/ObjectSpecification.java     | 10 ++++-
 .../specimpl/ObjectSpecificationAbstract.java   |  7 +++
 .../CssClassAnnotationOnMemberFacetFactory.java | 47 ++++++++++++++++++++
 .../CssClassFacetAnnotationOnMember.java        | 30 +++++++++++++
 .../CssClassAnnotationForTypeFacetFactory.java  | 45 +++++++++++++++++++
 .../CssClassFacetForTypeAnnotation.java         | 31 +++++++++++++
 .../dflt/ProgrammingModelFacetsJava5.java       |  4 ++
 .../testspec/ObjectSpecificationStub.java       |  5 +++
 ...ClassAnnotationOnMemberFacetFactoryTest.java | 45 +++++++++++++++++++
 ...sClassAnnotationForTypeFacetFactoryTest.java | 39 ++++++++++++++++
 19 files changed, 424 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index b6065df..fd29193 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -69,7 +69,7 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> {
         final WebMarkupContainer markupContainer = new WebMarkupContainer(ID_COLLECTION);
 
         final Component collectionContents = getComponentFactoryRegistry().addOrReplaceComponent(markupContainer, ComponentType.COLLECTION_CONTENTS, getModel());
-        
+
         addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, collectionContents));
         addOrReplace(markupContainer);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
index ede810a..6393798 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
@@ -21,6 +21,8 @@ package org.apache.isis.viewer.wicket.ui.components.entity.collections;
 
 import java.util.List;
 
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -75,10 +77,9 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
     }
 
     private void addCollections() {
-        final EntityModel entityModel = (EntityModel) getModel();
+        final EntityModel entityModel = getModel();
         final ObjectAdapter adapter = entityModel.getObject();
         final ObjectSpecification noSpec = adapter.getSpecification();
-
         final List<ObjectAssociation> associations = visibleAssociations(adapter, noSpec);
 
         final RepeatingView collectionRv = new RepeatingView(ID_COLLECTIONS);
@@ -98,7 +99,11 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
     private void addCollectionToForm(final EntityModel entityModel,
 			final ObjectAssociation association,
 			final WebMarkupContainer collectionRvContainer) {
-	    
+
+        final CssClassFacet facet = association.getFacet(CssClassFacet.class);
+        if(facet != null) {
+            collectionRvContainer.add(new CssClassAppender(facet.value()));
+        }
         final WebMarkupContainer fieldset = new WebMarkupContainer(ID_COLLECTION_GROUP);
         collectionRvContainer.add(fieldset);
         
@@ -128,7 +133,7 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
     }
 
     private EntityModel getEntityModel() {
-        return (EntityModel) getModel();
+        return getModel();
     }
 
     void toViewMode(final AjaxRequestTarget target) {

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
index 844e1b1..2bb55be 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
@@ -19,9 +19,11 @@
 
 package org.apache.isis.viewer.wicket.ui.components.entity.combined;
 
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
  * {@link PanelAbstract Panel} to represent an entity on a single page made up
@@ -38,6 +40,10 @@ public class EntityCombinedPanel extends PanelAbstract<EntityModel> {
 
     private void buildGui() {
         final EntityModel model = getModel();
+        final CssClassFacet facet = model.getObject().getSpecification().getFacet(CssClassFacet.class);
+        if(facet != null) {
+            this.add(new CssClassAppender(facet.value()));
+        }
 
         addOrReplace(ComponentType.ENTITY_SUMMARY, model);
         addOrReplace(ComponentType.ENTITY_PROPERTIES, model);

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index eedff4d..b3cf481 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -23,6 +23,8 @@ import java.util.List;
 
 import com.google.common.collect.Lists;
 
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.AttributeAppender;
@@ -174,6 +176,12 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         if (cssForMetaModel != null) {
             add(new AttributeAppender("class", Model.of(cssForMetaModel), " "));
         }
+
+        ScalarModel model = getModel();
+        final CssClassFacet facet = model.getFacet(CssClassFacet.class);
+        if(facet != null) {
+              add(new CssClassAppender(facet.value()));
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 54a660d..226d7e4 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -21,11 +21,9 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.FormComponentLabel;
-import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
index bfd3a09..af86678 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
@@ -27,6 +27,7 @@ import java.util.List;
 
 import com.google.common.collect.Lists;
 
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -60,6 +61,10 @@ public class CssMenuItem implements Serializable {
 
     public static final String ID_MENU_LINK = "menuLink";
 
+    public void setCssClass(String cssClass) {
+        this.cssClass = cssClass;
+    }
+
     public static class Builder {
         private final CssMenuItem cssMenuItem;
 
@@ -114,6 +119,10 @@ public class CssMenuItem implements Serializable {
             return this;
         }
 
+        public void withCssClass(String cssClass) {
+            cssMenuItem.setCssClass(cssClass);
+        }
+
         /**
          * Returns the built {@link CssMenuItem}, associating with
          * {@link #parent(CssMenuItem) parent} (if specified).
@@ -124,8 +133,6 @@ public class CssMenuItem implements Serializable {
             }
             return cssMenuItem;
         }
-
-
     }
 
     private final String name;
@@ -143,6 +150,7 @@ public class CssMenuItem implements Serializable {
     static final String ID_SUB_MENU_ITEMS = "subMenuItems";
 
     private String actionIdentifier;
+    private String cssClass;
 
 
 
@@ -262,13 +270,23 @@ public class CssMenuItem implements Serializable {
         // check whether enabled
         final Consent usability = objectAction.isUsable(session, adapter, where);
         final String reasonDisabledIfAny = usability.getReason();
-        
+        CssClassFacet cssClassFacet = objectAction.getFacet(CssClassFacet.class);
+
         // check if returns blob or clob (if so, then add CSS to suppress veil)
         final boolean blobOrClob = returnsBlobOrClob(objectAction);
         final boolean prototype = isExplorationOrPrototype(objectAction);
         final String actionIdentifier = actionIdentifierFor(objectAction);
 
-        return newSubMenuItem(actionLabel).link(link).enabled(reasonDisabledIfAny).returnsBlobOrClob(blobOrClob).prototyping(prototype).withActionIdentifier(actionIdentifier);
+        Builder builder = newSubMenuItem(actionLabel)
+                .link(link)
+                .enabled(reasonDisabledIfAny)
+                .returnsBlobOrClob(blobOrClob)
+                .prototyping(prototype)
+                .withActionIdentifier(actionIdentifier);
+        if (cssClassFacet != null) {
+            builder.withCssClass(cssClassFacet.value());
+        }
+        return builder;
     }
 
     public static boolean returnsBlobOrClob(final ObjectAction objectAction) {
@@ -293,7 +311,7 @@ public class CssMenuItem implements Serializable {
         
         final String className = action.getOnType().getShortIdentifier();
         final String actionId = action.getId();
-        return className+"-"+actionId;
+        return className + "-" + actionId;
     }
 
     
@@ -306,8 +324,13 @@ public class CssMenuItem implements Serializable {
 
         final AbstractLink link = linkAndLabel.getLink();
         final String actionLabel = linkAndLabel.getLabel();
+        Builder builder = this.newSubMenuItem(actionLabel).link(link).prototyping(linkAndLabel.isPrototype());
 
-        return this.newSubMenuItem(actionLabel).link(link).prototyping(linkAndLabel.isPrototype());
+        CssClassFacet cssClassFacet = objectAction.getFacet(CssClassFacet.class);
+        if (cssClassFacet != null) {
+            builder.withCssClass(cssClassFacet.value());
+        }
+        return builder;
     }
 
     // //////////////////////////////////////////////////////////////
@@ -337,8 +360,11 @@ public class CssMenuItem implements Serializable {
             if(this.prototype) {
                 link.add(new CssClassAppender("prototype"));
             }
+            if(this.cssClass != null) {
+                link.add(new CssClassAppender(this.cssClass));
+            }
             link.add(new CssClassAppender(this.actionIdentifier));
-            
+
             // .. and hide label
             Components.permanentlyHide(markupContainer, CssMenuItem.ID_MENU_LABEL);
             return link;

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/applib/src/main/java/org/apache/isis/applib/annotation/CssClass.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/CssClass.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/CssClass.java
new file mode 100644
index 0000000..b33694e
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/CssClass.java
@@ -0,0 +1,38 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates the css class that a class/property/action should have.
+ */
+
+@Inherited
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CssClass {
+    String value();
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
new file mode 100644
index 0000000..b2d9ce3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.members.cssclass;
+
+import org.apache.isis.core.metamodel.facets.SingleStringValueFacet;
+
+/**
+ * The css class of a class, a property, collection, or an action.
+ *
+ * <p>
+ * In the standard Apache Isis Programming Model, corresponds to annotating the
+ * member with <tt>@CssClass</tt>.
+ */
+public interface CssClassFacet extends SingleStringValueFacet {
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
new file mode 100644
index 0000000..76dd19e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
@@ -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.
+ */
+
+package org.apache.isis.core.metamodel.facets.members.cssclass;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.SingleStringValueFacetAbstract;
+
+public class CssClassFacetAbstract extends SingleStringValueFacetAbstract implements CssClassFacet {
+
+    public CssClassFacetAbstract(final String value, final FacetHolder holder) {
+        super(type(), holder, value);
+    }
+
+    public static Class<? extends Facet> type() {
+        return CssClassFacet.class;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 553db32..76a9c55 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -101,7 +101,7 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
      * {@link ClassSubstitutor class name substituted} if necessary to allow for runtime bytecode enhancement.
      * 
      * <p>
-     * The {@link ObjectSpecification} can be retrieved using {@link SpecificationLoader#lookupBySpecId(String)}.
+     * The {@link ObjectSpecification} can be retrieved using {@link SpecificationLoader#lookupBySpecId(ObjectSpecId)}.
      */
     ObjectSpecId getSpecId();
     
@@ -161,6 +161,14 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
     String getHelp();
 
     /**
+     * Returns a css class name of the specification.
+     *
+     * <p>
+     * Corresponds to the {@link CssClass#value()) value} of {@link CssClassFacet};
+     */
+    String getCssClass();
+
+    /**
      * Returns the title string for the specified object.
      * 
      * <p>

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 2a0fce8..c8dc0e0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -28,6 +28,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.log4j.Logger;
 
 import org.apache.isis.applib.Identifier;
@@ -494,6 +495,12 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     }
 
     @Override
+    public String getCssClass() {
+        final CssClassFacet cssClassFacet = getFacet(CssClassFacet.class);
+        return cssClassFacet == null ? null : cssClassFacet.value();
+    }
+
+    @Override
     public Persistability persistability() {
         return persistability;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactory.java
new file mode 100644
index 0000000..7e20e37
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactory.java
@@ -0,0 +1,47 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.members.cssclass;
+
+import org.apache.isis.applib.annotation.CssClass;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+
+public class CssClassAnnotationOnMemberFacetFactory extends FacetFactoryAbstract {
+
+    public CssClassAnnotationOnMemberFacetFactory() {
+        super(FeatureType.MEMBERS);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+        final CssClass annotation = Annotations.getAnnotation(processMethodContext.getMethod(), CssClass.class);
+        FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
+    }
+
+    private CssClassFacet create(final CssClass annotation, final FacetHolder holder) {
+        return annotation != null ? new CssClassFacetAnnotationOnMember(annotation.value(), holder) : null;
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassFacetAnnotationOnMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassFacetAnnotationOnMember.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassFacetAnnotationOnMember.java
new file mode 100644
index 0000000..26d0c29
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassFacetAnnotationOnMember.java
@@ -0,0 +1,30 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.members.cssclass;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+
+public class CssClassFacetAnnotationOnMember extends CssClassFacetAbstract {
+
+    public CssClassFacetAnnotationOnMember(final String value, final FacetHolder holder) {
+        super(value, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactory.java
new file mode 100644
index 0000000..1bc6fda
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactory.java
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.cssclass;
+
+import org.apache.isis.applib.annotation.CssClass;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+
+public class CssClassAnnotationForTypeFacetFactory extends FacetFactoryAbstract {
+
+    public CssClassAnnotationForTypeFacetFactory() {
+        super(FeatureType.OBJECTS_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        final CssClass annotation = Annotations.getAnnotation(processClassContext.getCls(), CssClass.class);
+        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
+    }
+
+    private static CssClassFacet create(final CssClass annotation, final FacetHolder holder) {
+        return annotation == null ? null : new CssClassFacetForTypeAnnotation(annotation, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassFacetForTypeAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassFacetForTypeAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassFacetForTypeAnnotation.java
new file mode 100644
index 0000000..e63e610
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassFacetForTypeAnnotation.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.cssclass;
+
+import org.apache.isis.applib.annotation.CssClass;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+
+public class CssClassFacetForTypeAnnotation extends CssClassFacetAbstract {
+
+    public CssClassFacetForTypeAnnotation(final CssClass cssClass, final FacetHolder holder) {
+        super(cssClass.value(), holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 9150f59..454c825 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -49,6 +49,7 @@ import org.apache.isis.core.progmodel.facets.collections.notpersisted.annotation
 import org.apache.isis.core.progmodel.facets.collections.sortedby.SortedByAnnotationFacetFactory;
 import org.apache.isis.core.progmodel.facets.collections.typeof.TypeOfAnnotationForCollectionsFacetFactory;
 import org.apache.isis.core.progmodel.facets.fallback.FallbackFacetFactory;
+import org.apache.isis.core.progmodel.facets.members.cssclass.CssClassAnnotationOnMemberFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.describedas.annotation.DescribedAsAnnotationOnMemberFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.describedas.staticmethod.DescribedAsFacetViaDescriptionMethodFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.disabled.annotation.DisabledAnnotationFacetFactory;
@@ -75,6 +76,7 @@ import org.apache.isis.core.progmodel.facets.object.callbacks.persist.PersistCal
 import org.apache.isis.core.progmodel.facets.object.callbacks.remove.RemoveCallbackFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.callbacks.update.UpdateCallbackFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.choices.enums.EnumFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.cssclass.CssClassAnnotationForTypeFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.defaults.annotation.DefaultedAnnotationFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.describedas.annotation.DescribedAsAnnotationOnTypeFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.dirty.method.DirtyMethodsFacetFactory;
@@ -338,6 +340,8 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(HiddenAnnotationForTypeFacetFactory.class);
         // must come after the TitleAnnotationFacetFactory, because can act as an override
         addFactory(HiddenAnnotationForMemberFacetFactory.class);
+        addFactory(CssClassAnnotationForTypeFacetFactory.class);
+        addFactory(CssClassAnnotationOnMemberFacetFactory.class);
 
         addFactory(HiddenObjectViaHiddenMethodFacetFactory.class);
         addFactory(DisabledObjectViaDisabledMethodFacetFactory.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 859977d..9a38b55 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -264,6 +264,11 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
+    public String getCssClass() {
+        return null;
+    }
+
+    @Override
     public String getTitle(final ObjectAdapter targetAdapter, final Localization localization) {
         return getTitle(null, targetAdapter, localization);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
new file mode 100644
index 0000000..803bfc3
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
@@ -0,0 +1,45 @@
+package org.apache.isis.core.progmodel.facets.members.cssclass;
+
+import org.apache.isis.applib.annotation.CssClass;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+public class CssClassAnnotationOnMemberFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
+
+    @Test
+    public void testCssClassAnnotationPickedUpOnClass() {
+
+        final CssClassAnnotationOnMemberFacetFactory facetFactory = new CssClassAnnotationOnMemberFacetFactory();
+        facetFactory.setSpecificationLookup(mockSpecificationLoaderSpi);
+
+        class Customer {
+
+            @CssClass("user")
+            public String getName() {
+                return "Joe";
+            }
+        }
+
+        expectNoMethodsRemoved();
+
+        facetedMethod = FacetedMethod.createForProperty(Customer.class, "name");
+        facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
+
+        final Facet facet = facetedMethod.getFacet(CssClassFacet.class);
+        assertThat(facet, is(not(nullValue())));
+        assertThat(facet instanceof CssClassFacetAbstract, is(true));
+        final CssClassFacetAbstract cssClassFacetAbstract = (CssClassFacetAbstract) facet;
+        assertThat(cssClassFacetAbstract.value(), equalTo("user"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/57807846/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactoryTest.java
new file mode 100644
index 0000000..93a7426
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/cssclass/CssClassAnnotationForTypeFacetFactoryTest.java
@@ -0,0 +1,39 @@
+package org.apache.isis.core.progmodel.facets.object.cssclass;
+
+import org.apache.isis.applib.annotation.CssClass;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+public class CssClassAnnotationForTypeFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
+
+    @Test
+    public void testCssClassAnnotationPickedUpOnClass() {
+
+        final CssClassAnnotationForTypeFacetFactory facetFactory = new CssClassAnnotationForTypeFacetFactory();
+        facetFactory.setSpecificationLookup(mockSpecificationLoaderSpi);
+
+        @CssClass("testClass")
+        class Customer {
+        }
+
+        expectNoMethodsRemoved();
+
+        facetFactory.process(new FacetFactory.ProcessClassContext(Customer.class, mockMethodRemover, facetedMethod));
+
+        final Facet facet = facetedMethod.getFacet(CssClassFacet.class);
+        assertThat(facet, is(not(nullValue())));
+        assertThat(facet instanceof CssClassFacetAbstract, is(true));
+        final CssClassFacetAbstract cssClassFacetAbstract = (CssClassFacetAbstract) facet;
+        assertThat(cssClassFacetAbstract.value(), equalTo("testClass"));
+    }
+}


[3/3] git commit: ISIS-466: tidy-up and fix.

Posted by da...@apache.org.
ISIS-466: tidy-up and fix.


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

Branch: refs/heads/master
Commit: 4fce5753343d4167159c1d03f0a4f39af9c2725d
Parents: f0aee8c
Author: Dan Haywood <da...@apache.org>
Authored: Mon Jul 15 14:31:36 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Jul 15 14:31:36 2013 +0100

----------------------------------------------------------------------
 .../dom/src/main/java/dom/todo/ToDoItem.java    |  6 ++
 .../src/main/java/dom/todo/ToDoItemsJdo.java    | 87 ++++++++++++++++++++
 .../java/fixture/todo/ToDoItemsFixture.java     | 14 +++-
 .../fixture/todo/ToDoItemsFixturesService.java  | 64 --------------
 .../integtests/pom.xml                          |  8 +-
 .../java/integration/ToDoSystemInitializer.java |  2 +-
 .../objstore-jdo/.gitignore                     |  2 -
 .../objstore-jdo/lib/.gitignore                 |  5 --
 .../objstore-jdo/pom.xml                        | 57 -------------
 .../java/objstore/jdo/todo/ToDoItemsJdo.java    | 87 --------------------
 .../quickstart_wicket_restful_jdo/pom.xml       |  6 --
 .../webapp/pom.xml                              | 17 +---
 .../java/app/services/DeveloperUtilities.java   |  2 -
 .../app/services/ToDoItemsFixturesService.java  | 59 +++++++++++++
 .../src/main/webapp/WEB-INF/isis.properties     |  5 +-
 .../webapp/src/main/webapp/about/index.html     |  4 +-
 16 files changed, 178 insertions(+), 247 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index 42b5ec9..ed4a1c7 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -41,6 +41,7 @@ import org.apache.isis.applib.annotation.Audited;
 import org.apache.isis.applib.annotation.AutoComplete;
 import org.apache.isis.applib.annotation.Bookmarkable;
 import org.apache.isis.applib.annotation.Bulk;
+import org.apache.isis.applib.annotation.CssClass;
 import org.apache.isis.applib.annotation.Disabled;
 import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.MemberGroups;
@@ -138,6 +139,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
 
     @MemberOrder(name="Detail", sequence = "3")
     @Optional
+    @CssClass("x-key")
     public LocalDate getDueBy() {
         return dueBy;
     }
@@ -233,6 +235,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     @PublishedAction
     @Bulk
     @MemberOrder(name="complete", sequence = "1")
+    @CssClass("x-highlight")
     public ToDoItem completed() {
         setComplete(true);
         return this;
@@ -410,6 +413,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     }
 
     @MemberOrder(name="dependencies", sequence = "4")
+    @CssClass("x-caution")
     public ToDoItem remove(final ToDoItem toDoItem) {
         getDependencies().remove(toDoItem);
         return this;
@@ -442,6 +446,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     @MemberOrder(sequence = "5")
     @NotPersisted
     @Render(Type.LAZILY)
+    @CssClass("x-info")
     public List<ToDoItem> getSimilarItems() {
         return toDoItems.similarTo(this);
     }
@@ -456,6 +461,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     // nb: method is not called "clone()" is inherited by java.lang.Object and
     // (a) has different semantics and (b) is in any case automatically ignored
     // by the framework
+    @CssClass("x-caution")
     public ToDoItem duplicate(
             @Named("Description") 
             String description,

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemsJdo.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemsJdo.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemsJdo.java
new file mode 100644
index 0000000..1927ec0
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemsJdo.java
@@ -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.
+ */
+package dom.todo;
+
+import java.util.List;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItems;
+
+import org.apache.isis.applib.query.QueryDefault;
+
+public class ToDoItemsJdo extends ToDoItems {
+
+    // {{ notYetComplete (action)
+    @Override
+    protected List<ToDoItem> doNotYetComplete() {
+        return allMatches(
+                new QueryDefault<ToDoItem>(ToDoItem.class, 
+                        "todo_notYetComplete", 
+                        "ownedBy", currentUserName()));
+    }
+    // }}
+
+    // {{ done (action)
+    @Override
+    protected List<ToDoItem> doComplete() {
+        return allMatches(
+                new QueryDefault<ToDoItem>(ToDoItem.class, 
+                        "todo_complete", 
+                        "ownedBy", currentUserName()));
+    }
+    // }}
+
+    // {{ similarTo (action)
+    @Override
+    public List<ToDoItem> similarTo(final ToDoItem thisToDoItem) {
+        final List<ToDoItem> similarToDoItems = allMatches(
+                new QueryDefault<ToDoItem>(ToDoItem.class, 
+                        "todo_similarTo", 
+                        "ownedBy", currentUserName(), 
+                        "category", thisToDoItem.getCategory()));
+        return Lists.newArrayList(Iterables.filter(similarToDoItems, excluding(thisToDoItem)));
+    }
+
+    private static Predicate<ToDoItem> excluding(final ToDoItem toDoItem) {
+        return new Predicate<ToDoItem>() {
+            @Override
+            public boolean apply(ToDoItem input) {
+                return input != toDoItem;
+            }
+        };
+    }
+    // }}
+
+    // {{ autoComplete (action)
+    @Override
+    public List<ToDoItem> autoComplete(String description) {
+        
+        return allMatches(
+                new QueryDefault<ToDoItem>(ToDoItem.class, 
+                        "todo_autoComplete", 
+                        "ownedBy", currentUserName(), 
+                        "description", description));
+    }
+    // }}
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
index 6c9280b..7a14f6d 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
@@ -33,10 +33,20 @@ import org.apache.isis.objectstore.jdo.applib.service.support.IsisJdoSupport;
 
 public class ToDoItemsFixture extends AbstractFixture {
 
+    private final String user;
+
+    public ToDoItemsFixture() {
+        this(null);
+    }
+    
+    public ToDoItemsFixture(String ownedBy) {
+        this.user = ownedBy;
+    }
+    
     @Override
     public void install() {
 
-        final String ownedBy = getContainer().getUser().getName();
+        final String ownedBy = this.user != null? this.user : getContainer().getUser().getName();
         
         isisJdoSupport.executeUpdate("delete from TODOITEM where OWNEDBY = '" + ownedBy + "'");
 
@@ -45,7 +55,7 @@ public class ToDoItemsFixture extends AbstractFixture {
         getContainer().flush();
     }
 
-    public void installFor(String user) {
+    private void installFor(String user) {
 
         createToDoItemForUser("Buy milk", Category.Domestic, user, daysFromToday(0), new BigDecimal("0.75"));
         createToDoItemForUser("Buy bread", Category.Domestic, user, daysFromToday(0), new BigDecimal("1.75"));

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
deleted file mode 100644
index bc86f67..0000000
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixturesService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package fixture.todo;
-
-import java.util.List;
-
-import org.apache.isis.applib.AbstractService;
-import org.apache.isis.applib.annotation.Named;
-
-import com.google.common.collect.Lists;
-
-import dom.todo.ToDoItems;
-
-/**
- * Enables fixtures to be installed from the application.
- */
-@Named("Fixtures")
-public class ToDoItemsFixturesService extends AbstractService {
-
-    public String install() {
-        final ToDoItemsFixture fixture = new ToDoItemsFixture();
-        fixture.setContainer(getContainer());
-        fixture.setToDoItems(toDoItems);
-        fixture.install();
-        return "Example fixtures installed";
-    }
-
-    public String installFor(@Named("User") String user) {
-        final ToDoItemsFixture fixture = new ToDoItemsFixture();
-        fixture.setContainer(getContainer());
-        fixture.setToDoItems(toDoItems);
-        fixture.installFor(user);
-        return "Example fixtures installed for " + user;
-    }
-    public String default0InstallFor() {
-        return "guest";
-    }
-    public List<String> choices0InstallFor() {
-        return Lists.newArrayList("guest", "dick", "bob", "joe");
-    }
-
-    
-    private ToDoItems toDoItems;
-    public void setToDoItems(final ToDoItems toDoItems) {
-        this.toDoItems = toDoItems;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/integtests/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/pom.xml b/example/application/quickstart_wicket_restful_jdo/integtests/pom.xml
index 26d95c0..553f460 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/pom.xml
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/pom.xml
@@ -54,10 +54,6 @@
 			<groupId>${project.groupId}</groupId>
 			<artifactId>quickstart_wicket_restful_jdo-fixture</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>quickstart_wicket_restful_jdo-objstore-jdo</artifactId>
-		</dependency>
 
         <dependency>
             <groupId>org.apache.isis.core</groupId>
@@ -82,6 +78,10 @@
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-wrapper</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.isis.objectstore</groupId>
+            <artifactId>isis-objectstore-jdo-datanucleus</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.hsqldb</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
index 349fd34..e24d78a 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/ToDoSystemInitializer.java
@@ -16,7 +16,7 @@
  */
 package integration;
 
-import objstore.jdo.todo.ToDoItemsJdo;
+import dom.todo.ToDoItemsJdo;
 
 import org.apache.log4j.Level;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/objstore-jdo/.gitignore
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/.gitignore b/example/application/quickstart_wicket_restful_jdo/objstore-jdo/.gitignore
deleted file mode 100644
index 1c85271..0000000
--- a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/target-ide
-/target-ide

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/objstore-jdo/lib/.gitignore
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/lib/.gitignore b/example/application/quickstart_wicket_restful_jdo/objstore-jdo/lib/.gitignore
deleted file mode 100644
index 70eee7e..0000000
--- a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/lib/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# explicitly ignoring Microsoft JDBC4 jar
-# (cannot redistribute, licensing)
-#
-sqljdbc4.jar

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/objstore-jdo/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/pom.xml b/example/application/quickstart_wicket_restful_jdo/objstore-jdo/pom.xml
deleted file mode 100644
index 3350241..0000000
--- a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/pom.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-    <parent>
-    	<groupId>org.apache.isis.example.application</groupId>
-        <artifactId>quickstart_wicket_restful_jdo</artifactId>
-        <version>1.0.4-SNAPSHOT</version>
-    </parent>
-
-	<artifactId>quickstart_wicket_restful_jdo-objstore-jdo</artifactId>
-	<name>Quickstart Wicket/Restful/JDO Repositories (for JDO)</name>
-
-	<dependencyManagement>
-		<dependencies>
-	        <dependency>
-	            <groupId>org.slf4j</groupId>
-	            <artifactId>slf4j-log4j12</artifactId>
-	            <version>1.7.5</version>
-	        </dependency>
-		</dependencies>
-	</dependencyManagement>
-
-	<dependencies>
-	
-		<!-- other modules in this project -->
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>quickstart_wicket_restful_jdo-dom</artifactId>
-		</dependency>
-		
-        <dependency>
-            <groupId>org.apache.isis.objectstore</groupId>
-            <artifactId>isis-objectstore-jdo-datanucleus</artifactId>
-        </dependency>
-
-	</dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/objstore-jdo/src/main/java/objstore/jdo/todo/ToDoItemsJdo.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/src/main/java/objstore/jdo/todo/ToDoItemsJdo.java b/example/application/quickstart_wicket_restful_jdo/objstore-jdo/src/main/java/objstore/jdo/todo/ToDoItemsJdo.java
deleted file mode 100644
index a16c228..0000000
--- a/example/application/quickstart_wicket_restful_jdo/objstore-jdo/src/main/java/objstore/jdo/todo/ToDoItemsJdo.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package objstore.jdo.todo;
-
-import java.util.List;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-import dom.todo.ToDoItem;
-import dom.todo.ToDoItems;
-
-import org.apache.isis.applib.query.QueryDefault;
-
-public class ToDoItemsJdo extends ToDoItems {
-
-    // {{ notYetComplete (action)
-    @Override
-    protected List<ToDoItem> doNotYetComplete() {
-        return allMatches(
-                new QueryDefault<ToDoItem>(ToDoItem.class, 
-                        "todo_notYetComplete", 
-                        "ownedBy", currentUserName()));
-    }
-    // }}
-
-    // {{ done (action)
-    @Override
-    protected List<ToDoItem> doComplete() {
-        return allMatches(
-                new QueryDefault<ToDoItem>(ToDoItem.class, 
-                        "todo_complete", 
-                        "ownedBy", currentUserName()));
-    }
-    // }}
-
-    // {{ similarTo (action)
-    @Override
-    public List<ToDoItem> similarTo(final ToDoItem thisToDoItem) {
-        final List<ToDoItem> similarToDoItems = allMatches(
-                new QueryDefault<ToDoItem>(ToDoItem.class, 
-                        "todo_similarTo", 
-                        "ownedBy", currentUserName(), 
-                        "category", thisToDoItem.getCategory()));
-        return Lists.newArrayList(Iterables.filter(similarToDoItems, excluding(thisToDoItem)));
-    }
-
-    private static Predicate<ToDoItem> excluding(final ToDoItem toDoItem) {
-        return new Predicate<ToDoItem>() {
-            @Override
-            public boolean apply(ToDoItem input) {
-                return input != toDoItem;
-            }
-        };
-    }
-    // }}
-
-    // {{ autoComplete (action)
-    @Override
-    public List<ToDoItem> autoComplete(String description) {
-        
-        return allMatches(
-                new QueryDefault<ToDoItem>(ToDoItem.class, 
-                        "todo_autoComplete", 
-                        "ownedBy", currentUserName(), 
-                        "description", description));
-    }
-    // }}
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/pom.xml b/example/application/quickstart_wicket_restful_jdo/pom.xml
index 8b0600c..ad8ca91 100644
--- a/example/application/quickstart_wicket_restful_jdo/pom.xml
+++ b/example/application/quickstart_wicket_restful_jdo/pom.xml
@@ -252,7 +252,6 @@
     <modules>
         <module>dom</module>
         <module>fixture</module>
-        <module>objstore-jdo</module>
         <module>integtests</module>
         <module>webapp</module>
     </modules>
@@ -314,11 +313,6 @@
             </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
-                <artifactId>quickstart_wicket_restful_jdo-objstore-jdo</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>${project.groupId}</groupId>
                 <artifactId>quickstart_wicket_restful_jdo-webapp</artifactId>
                 <version>${project.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/webapp/pom.xml
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/pom.xml b/example/application/quickstart_wicket_restful_jdo/webapp/pom.xml
index 7ef1c65..e9b4186 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/pom.xml
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/pom.xml
@@ -173,22 +173,13 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
-        <!-- objectstore/domain service/repository implementations (brings in dependency to objectstore-jdo)-->
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>quickstart_wicket_restful_jdo-objstore-jdo</artifactId>
-            <exclusions>
-                <exclusion>
-                    <!-- so don't pick up transitive dependency to asm 4.0.0 -->
-                    <groupId>org.datanucleus</groupId>
-                    <artifactId>datanucleus-enhancer</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
         
         <!-- other isis components -->
         <dependency>
+            <groupId>org.apache.isis.objectstore</groupId>
+            <artifactId>isis-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/4fce5753/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/DeveloperUtilities.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/DeveloperUtilities.java b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/DeveloperUtilities.java
index 75c4e07..4675c4e 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/DeveloperUtilities.java
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/DeveloperUtilities.java
@@ -16,8 +16,6 @@
  */
 package app.services;
 
-import fixture.todo.ToDoItemsFixturesService;
-
 import org.apache.isis.applib.annotation.ActionSemantics;
 import org.apache.isis.applib.annotation.ActionSemantics.Of;
 import org.apache.isis.applib.annotation.MemberOrder;

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/ToDoItemsFixturesService.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/ToDoItemsFixturesService.java b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/ToDoItemsFixturesService.java
new file mode 100644
index 0000000..f665ec3
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/services/ToDoItemsFixturesService.java
@@ -0,0 +1,59 @@
+/*
+ *  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.services;
+
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import fixture.todo.ToDoItemsFixture;
+
+import org.apache.isis.applib.AbstractService;
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate;
+
+/**
+ * Enables fixtures to be installed from the application.
+ */
+@Named("Fixtures")
+public class ToDoItemsFixturesService extends AbstractService {
+
+    public String install() {
+        installFixturesFor(null); // ie current user
+        return "Example fixtures installed";
+    }
+
+    public String installFor(@Named("User") String user) {
+        installFixturesFor(user);
+        return "Example fixtures installed for " + user;
+    }
+    public String default0InstallFor() {
+        return "guest";
+    }
+    public List<String> choices0InstallFor() {
+        return Lists.newArrayList("guest", "dick", "bob", "joe");
+    }
+
+    private static void installFixturesFor(String user) {
+        final FixturesInstallerDelegate installer = new FixturesInstallerDelegate().withOverride();
+        installer.addFixture(new ToDoItemsFixture(user));
+        installer.installFixtures();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
index 99907bb..a260961 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -185,11 +185,12 @@ isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i
 
 # if using the DataNucleus object store
 #isis.services.prefix = 
-isis.services = objstore.jdo.todo.ToDoItemsJdo,\
-                fixture.todo.ToDoItemsFixturesService,\
+isis.services = dom.todo.ToDoItemsJdo,\
+                app.services.ToDoItemsFixturesService,\
                 app.services.DeveloperUtilities,\
                 org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault,\
                 org.apache.isis.objectstore.jdo.service.RegisterEntities,\
+                org.apache.isis.objectstore.jdo.datanucleus.service.support.IsisJdoSupportImpl,\
                 org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
                 org.apache.isis.viewer.restfulobjects.rendering.eventserializer.RestfulObjectsSpecEventSerializer,\
                 org.apache.isis.applib.services.audit.AuditingService$Stderr,\

http://git-wip-us.apache.org/repos/asf/isis/blob/4fce5753/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/about/index.html
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/about/index.html b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/about/index.html
index cb966e6..dffcb45 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/about/index.html
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/about/index.html
@@ -102,13 +102,13 @@ th, td {
             <p>The key files in the application 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 and <tt>objstore-jdo</tt> module)</a>
+              <li>Domain classes (todo functionality) (in <tt>dom</tt> module)</a>
                   <ul>
                   <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java"><tt>ToDoItem</tt></a> domain entity
                   </li>
                   <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java"><tt>ToDoItems</tt></a> domain service (repository/factory)
                   </li>
-                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/objstore-jdo/src/main/java/objstore/jdo/todo/ToDoItemsJdo.java"><tt>ToDoItemsJdo</tt></a> domain service (repository methods overridden for JDO)
+                  <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemsJdo.java"><tt>ToDoItemsJdo</tt></a> domain service (repository methods overridden for JDO)
                   </li>
                   </ul>
               </li>


[2/3] git commit: ISIS-464 - Some trivial cleanup

Posted by da...@apache.org.
ISIS-464 - Some trivial cleanup

Signed-off-by: Dan Haywood <da...@apache.org>


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

Branch: refs/heads/master
Commit: f0aee8c6dd828c133f960a49f2485392ba3a0922
Parents: 5780784
Author: bibryam <bi...@gmail.com>
Authored: Sun Jul 14 20:52:20 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Jul 15 13:38:08 2013 +0100

----------------------------------------------------------------------
 .../isis/viewer/restfulobjects/rendering/LinkBuilder.java    | 1 -
 .../rendering/domainobjects/DomainObjectReprRenderer.java    | 8 +-------
 .../isis/viewer/restfulobjects/rendering/util/OidUtils.java  | 4 ++--
 .../isis/viewer/restfulobjects/server/ResourceContext.java   | 5 -----
 .../server/resources/DomainServiceResourceServerside.java    | 3 ---
 .../restfulobjects/server/resources/ResourceAbstract.java    | 7 ++-----
 .../org/apache/isis/applib/annotation/NotContributed.java    | 2 +-
 .../main/java/org/apache/isis/applib/annotation/Where.java   | 2 +-
 .../org/apache/isis/core/metamodel/facets/FacetFactory.java  | 2 +-
 .../org/apache/isis/example/domainservice/email/Email.java   | 4 ----
 10 files changed, 8 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
index a2ceb59..f6e27e7 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
@@ -45,7 +45,6 @@ public final class LinkBuilder {
     private String title;
     private JsonRepresentation arguments;
     private JsonRepresentation value;
-    private String id;
 
     protected LinkBuilder(final RendererContext resourceContext, final String rel, final String href, final MediaType mediaType) {
         this.resourceContext = resourceContext;

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index caed176..eaf605f 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -18,15 +18,9 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
 import java.util.List;
 
-import org.codehaus.jackson.node.NullNode;
-
-import org.apache.isis.applib.annotation.Render.Type;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
 import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.facets.members.resolve.RenderFacet;
 import org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
@@ -149,7 +143,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             } else {
                 final String domainType = getDomainType();
                 final String instanceId = getInstanceId();
-                if(domainType != null) {
+                if (domainType != null) {
                     representation.mapPut("domainType", domainType);
                     representation.mapPut("instanceId", instanceId);
                     

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
index 823da16..7db64d3 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/OidUtils.java
@@ -32,7 +32,7 @@ public final class OidUtils {
 
     public static String getDomainType(final ObjectAdapter objectAdapter) {
         Oid oid = objectAdapter.getOid();
-        if(oid == null || !(oid instanceof TypedOid)) {
+        if (oid == null || !(oid instanceof TypedOid)) {
             return null;
         }
         TypedOid typedOid = (TypedOid) oid;
@@ -48,7 +48,7 @@ public final class OidUtils {
     
     public static String getOidStr(final RendererContext renderContext, final ObjectAdapter objectAdapter) {
         final Oid oid = objectAdapter.getOid();
-        if(!(oid instanceof RootOid)) {
+        if (!(oid instanceof RootOid)) {
             throw new IllegalArgumentException("objectAdapter must be a root adapter");
         }
         return oid != null ? oid.enStringNoVersion(getOidMarshaller()) : null;

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index b9204c3..6b81dac 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.viewer.restfulobjects.server;
 
-import java.io.InputStream;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -49,10 +48,6 @@ import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpS
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
 import org.apache.isis.viewer.restfulobjects.server.resources.DomainResourceHelper;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 public class ResourceContext implements RendererContext {

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
index 60d81ce..90585e6 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
@@ -35,9 +35,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.domainobjects.DomainServiceResource;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainServiceLinkTo;

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index 6b1edca..933563d 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -20,7 +20,6 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
@@ -51,9 +50,7 @@ import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.OidGenerator;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
@@ -131,13 +128,13 @@ public abstract class ResourceAbstract {
     protected void init(RepresentationType representationType, Where where, String queryString) {
         if (!IsisContext.inSession()) {
             throw RestfulObjectsApplicationException.create(HttpStatusCode.UNAUTHORIZED);
-        } 
+        }
         if (getAuthenticationSession() == null) {
             throw RestfulObjectsApplicationException.create(HttpStatusCode.UNAUTHORIZED);
         }
 
         this.resourceContext = new ResourceContext(
-                representationType, httpHeaders, uriInfo, request, where, queryString, httpServletRequest, httpServletResponse, 
+                representationType, httpHeaders, uriInfo, request, where, queryString, httpServletRequest, httpServletResponse,
                 securityContext, getLocalization(), getAuthenticationSession(), getPersistenceSession(), getAdapterManager(), getSpecificationLoader(), getConfiguration());
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/core/applib/src/main/java/org/apache/isis/applib/annotation/NotContributed.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/NotContributed.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/NotContributed.java
index b809565..13f58cd 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/NotContributed.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/NotContributed.java
@@ -26,7 +26,7 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Indicates the a (repository) action should be not be contributed.
+ * Indicates the a (repository) action should not be contributed.
  * 
  * <p>
  * It may still be appear in the repository menu (unless it has been annotated

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/core/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Where.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
index b61628c..d3edc27 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
@@ -84,7 +84,7 @@ public enum Where {
      * collection or a standalone list.
      * 
      * <p>
-     * This combines {@link #PARENTED_TABLE} and {@link #STANDALONE_TABLE}.
+     * This combines {@link #PARENTED_TABLES} and {@link #STANDALONE_TABLES}.
      */
     ALL_TABLES {
         @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
index c39458f..199f289 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java
@@ -94,7 +94,7 @@ public interface FacetFactory {
     /**
      * Process the class, and return the correctly setup annotation if present.
      */
-    void process(ProcessClassContext processClassContaxt);
+    void process(ProcessClassContext processClassContext);
 
     public static class ProcessMethodContext extends AbstractProcessContext<FacetedMethod> implements MethodRemover {
         private final Class<?> cls;

http://git-wip-us.apache.org/repos/asf/isis/blob/f0aee8c6/example/domain-service/email-service/src/main/java/org/apache/isis/example/domainservice/email/Email.java
----------------------------------------------------------------------
diff --git a/example/domain-service/email-service/src/main/java/org/apache/isis/example/domainservice/email/Email.java b/example/domain-service/email-service/src/main/java/org/apache/isis/example/domainservice/email/Email.java
index 5fcc6f7..48db549 100644
--- a/example/domain-service/email-service/src/main/java/org/apache/isis/example/domainservice/email/Email.java
+++ b/example/domain-service/email-service/src/main/java/org/apache/isis/example/domainservice/email/Email.java
@@ -77,10 +77,6 @@ public class Email extends AbstractDomainObject {
     public void removeFromTo(Address address) { 
         to.remove(address);
     }
-    
-   
-    
-    
 }