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/11/22 14:35:20 UTC

git commit: ISIS-603: specify named facet in dynamic JSON layout

Updated Branches:
  refs/heads/master 0da0070fe -> 2dee08b44


ISIS-603: specify named facet in dynamic JSON layout


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

Branch: refs/heads/master
Commit: 2dee08b44fb60f80cb9d39ccafbfb806cc9fbc26
Parents: 0da0070
Author: Dan Haywood <da...@apache.org>
Authored: Fri Nov 22 13:25:54 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Nov 22 13:25:54 2013 +0000

----------------------------------------------------------------------
 .../metamodel/layoutmetadata/ActionRepr.java    |  1 +
 .../metamodel/layoutmetadata/MemberRepr.java    |  1 +
 .../layoutmetadata/NamedFacetRepr.java          | 22 +++++++
 .../json/LayoutMetadataReaderFromJson.java      | 27 ++++++--
 .../NamedAnnotationOnMemberFacetFactory.java    | 46 -------------
 .../NamedFacetAnnotationOnMember.java           | 31 ---------
 .../NamedFacetOnMemberAnnotation.java           | 31 +++++++++
 .../NamedFacetOnMemberFromProperties.java       | 37 +++++++++++
 .../annotation/NamedOnMemberFacetFactory.java   | 69 ++++++++++++++++++++
 .../dflt/ProgrammingModelFacetsJava5.java       |  4 +-
 .../named/NamedAnnotationFacetFactoryTest.java  |  8 +--
 .../json/ExampleDomainObject.layout.json        | 12 +++-
 .../json/ExampleDomainObject.layout.properties  |  2 +
 .../dom/src/main/java/dom/todo/ToDoItem.java    |  4 --
 .../src/main/java/dom/todo/ToDoItem.layout.json | 30 +++++++--
 .../java/dom/todo/ToDoItemContributions.java    |  1 -
 16 files changed, 226 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionRepr.java
index ba8db76..d4bb5fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionRepr.java
@@ -17,4 +17,5 @@
 package org.apache.isis.core.metamodel.layoutmetadata;
 
 public class ActionRepr {
+    public NamedFacetRepr named;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/MemberRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/MemberRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/MemberRepr.java
index a1456f3..767a411 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/MemberRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/MemberRepr.java
@@ -23,4 +23,5 @@ public class MemberRepr {
     public Map<String,ActionRepr> actions;
     public PagedFacetRepr paged;
     public RenderFacetRepr render;
+    public NamedFacetRepr named;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/NamedFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/NamedFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/NamedFacetRepr.java
new file mode 100644
index 0000000..cac1c84
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/NamedFacetRepr.java
@@ -0,0 +1,22 @@
+/**
+ *  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.layoutmetadata;
+
+
+public class NamedFacetRepr {
+    public String value;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
index 874d27c..870e84d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
@@ -48,6 +48,7 @@ import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadata;
 import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
 import org.apache.isis.core.metamodel.layoutmetadata.MemberGroupRepr;
 import org.apache.isis.core.metamodel.layoutmetadata.MemberRepr;
+import org.apache.isis.core.metamodel.layoutmetadata.NamedFacetRepr;
 import org.apache.isis.core.metamodel.layoutmetadata.PagedFacetRepr;
 import org.apache.isis.core.metamodel.layoutmetadata.RenderFacetRepr;
 import org.apache.isis.core.metamodel.spec.ActionType;
@@ -140,6 +141,11 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
             
             final MemberRepr memberRepr = members.get(memberName);
 
+            final NamedFacetRepr named = memberRepr.named;
+            if(named != null) {
+                props.setProperty("member." + memberName + ".named.value", named.value);
+            }
+            
             final PagedFacetRepr paged = memberRepr.paged;
             if(paged != null) {
                 props.setProperty("member." + memberName + ".paged.value", ""+paged.value);
@@ -156,10 +162,10 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
             if(actions != null) {
                 int actSeq = 0;
                 for(final String actionName: actions.keySet()) {
+                    final ActionRepr actionRepr = actions.get(actionName);
                     String nameKey = "action." + actionName + ".memberOrder.name";
-                    String sequenceKey = "action." + actionName + ".memberOrder.sequence";
                     props.setProperty(nameKey, memberName);
-                    props.setProperty(sequenceKey, ""+ ++actSeq);
+                    setRemainingActionProperties(props, "action", actionName, actionRepr, ++actSeq);
                 }
             }
         }
@@ -169,9 +175,20 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
         if(metadata.getActions() == null) {
             return;
         }
-        int seq=0;
-        for (final String actionName : metadata.getActions().keySet()) {
-            props.setProperty("member." + actionName + ".memberOrder.sequence", ""+ ++seq);
+        int xeq=0;
+        final Map<String, ActionRepr> actions = metadata.getActions();
+        for (final String actionName : actions.keySet()) {
+            final ActionRepr actionRepr = actions.get(actionName);
+            setRemainingActionProperties(props, "member", actionName, actionRepr, ++xeq);
+        }
+    }
+
+    private static void setRemainingActionProperties(Properties props, String prefix, final String actionName, final ActionRepr actionRepr, final int seq) {
+        props.setProperty(prefix + "." + actionName + ".memberOrder.sequence", ""+ seq);
+        
+        final NamedFacetRepr actionNamed = actionRepr.named;
+        if(actionNamed != null) {
+            props.setProperty(prefix +"." + actionName + ".named.value", actionNamed.value);
         }
     }
 

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

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

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberAnnotation.java
new file mode 100644
index 0000000..55b5822
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberAnnotation.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.members.named.annotation;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.named.NamedFacetAbstract;
+
+public class NamedFacetOnMemberAnnotation extends NamedFacetAbstract {
+
+    public NamedFacetOnMemberAnnotation(final String value, final FacetHolder holder) {
+        super(value, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberFromProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberFromProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberFromProperties.java
new file mode 100644
index 0000000..e8497d1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedFacetOnMemberFromProperties.java
@@ -0,0 +1,37 @@
+/*
+ *  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.named.annotation;
+
+import java.util.Properties;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.named.NamedFacetAbstract;
+
+public class NamedFacetOnMemberFromProperties extends NamedFacetAbstract {
+
+    public NamedFacetOnMemberFromProperties(final Properties properties, final FacetHolder holder) {
+        super(valueFrom(properties), holder);
+    }
+
+    private static String valueFrom(Properties properties) {
+        return properties.getProperty("value");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedOnMemberFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedOnMemberFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedOnMemberFacetFactory.java
new file mode 100644
index 0000000..78dd13e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation/NamedOnMemberFacetFactory.java
@@ -0,0 +1,69 @@
+/*
+ *  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.named.annotation;
+
+import java.util.Properties;
+
+import org.apache.isis.applib.annotation.Named;
+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.ContributeeMemberFacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.named.NamedFacet;
+
+public class NamedOnMemberFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+
+    public NamedOnMemberFacetFactory() {
+        super(FeatureType.MEMBERS);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+        NamedFacet namedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
+        if(namedFacet == null) {
+            namedFacet = createFromAnnotationIfPossible(processMethodContext);
+        }
+        // no-op if null
+        FacetUtil.addFacet(namedFacet);
+    }
+
+    @Override
+    public void process(ProcessContributeeMemberContext processMemberContext) {
+        NamedFacet namedFacet = createFromMetadataPropertiesIfPossible(processMemberContext);
+        // no-op if null
+        FacetUtil.addFacet(namedFacet);
+    }
+
+    private static NamedFacet createFromAnnotationIfPossible(final ProcessMethodContext processMethodContext) {
+        final Named annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Named.class);
+        return annotation != null ? new NamedFacetOnMemberAnnotation(annotation.value(), processMethodContext.getFacetHolder()) : null;
+    }
+    
+    private static NamedFacet createFromMetadataPropertiesIfPossible(
+            final ProcessContextWithMetadataProperties<? extends FacetHolder> pcwmp) {
+        
+        final FacetHolder holder = pcwmp.getFacetHolder();
+        
+        final Properties properties = pcwmp.metadataProperties("named");
+        return properties != null ? new NamedFacetOnMemberFromProperties(properties, holder) : null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/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 d47c287..c51834f 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
@@ -60,7 +60,7 @@ import org.apache.isis.core.progmodel.facets.members.hidden.annotation.HiddenAnn
 import org.apache.isis.core.progmodel.facets.members.hidden.forsession.HiddenFacetViaHideForSessionMethodFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.hidden.method.HiddenFacetViaHideMethodFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.hidden.staticmethod.HiddenFacetViaAlwaysHideMethodFacetFactory;
-import org.apache.isis.core.progmodel.facets.members.named.annotation.NamedAnnotationOnMemberFacetFactory;
+import org.apache.isis.core.progmodel.facets.members.named.annotation.NamedOnMemberFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.named.staticmethod.NamedFacetViaNameMethodFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.order.MemberOrderFacetFactory;
 import org.apache.isis.core.progmodel.facets.members.resolve.RenderOrResolveAnnotationFacetFactory;
@@ -371,7 +371,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(MultiLineAnnotationOnParameterFacetFactory.class);
 
         addFactory(NamedAnnotationOnTypeFacetFactory.class);
-        addFactory(NamedAnnotationOnMemberFacetFactory.class);
+        addFactory(NamedOnMemberFacetFactory.class);
         addFactory(NamedAnnotationOnParameterFacetFactory.class);
 
         addFactory(NotPersistableAnnotationFacetFactory.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
index aa0ebee..ce48d06 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
@@ -38,7 +38,7 @@ import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessParameterContex
 import org.apache.isis.core.metamodel.facets.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.named.NamedFacetAbstract;
 import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryJUnit4TestCase;
-import org.apache.isis.core.progmodel.facets.members.named.annotation.NamedAnnotationOnMemberFacetFactory;
+import org.apache.isis.core.progmodel.facets.members.named.annotation.NamedOnMemberFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.named.annotation.NamedAnnotationOnTypeFacetFactory;
 import org.apache.isis.core.progmodel.facets.param.named.annotation.NamedAnnotationOnParameterFacetFactory;
 
@@ -68,7 +68,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
     @Test
     public void testNamedAnnotationPickedUpOnProperty() {
 
-        final NamedAnnotationOnMemberFacetFactory facetFactory = new NamedAnnotationOnMemberFacetFactory();
+        final NamedOnMemberFacetFactory facetFactory = new NamedOnMemberFacetFactory();
         facetFactory.setSpecificationLookup(mockSpecificationLoaderSpi);
 
         class Customer {
@@ -92,7 +92,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
     }
 
     public void testNamedAnnotationPickedUpOnCollection() {
-        final NamedAnnotationOnMemberFacetFactory facetFactory = new NamedAnnotationOnMemberFacetFactory();
+        final NamedOnMemberFacetFactory facetFactory = new NamedOnMemberFacetFactory();
         facetFactory.setSpecificationLookup(mockSpecificationLoaderSpi);
 
         class Customer {
@@ -116,7 +116,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
     }
 
     public void testNamedAnnotationPickedUpOnAction() {
-        final NamedAnnotationOnMemberFacetFactory facetFactory = new NamedAnnotationOnMemberFacetFactory();
+        final NamedOnMemberFacetFactory facetFactory = new NamedOnMemberFacetFactory();
         facetFactory.setSpecificationLookup(mockSpecificationLoaderSpi);
 
         class Customer {

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.json
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.json b/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.json
index a74ca0d..9bf292e 100644
--- a/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.json
+++ b/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.json
@@ -25,7 +25,11 @@
                     category: {},
                     complete: {
                         actions: {
-                            completed: {},
+                            completed: {
+                                named: {
+                                    value: Done
+                                }
+                            },
                             notYetCompleted: {}
                         }
                     }
@@ -85,7 +89,11 @@
     ],
     actions: {
         delete: {},
-        duplicate: {}
+        duplicate: {
+           named: {
+                value: Clone
+            }
+        }
     }
 }
  
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.properties
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.properties b/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.properties
index 5d1f3bb..8499c31 100644
--- a/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.properties
+++ b/core/metamodel/src/test/resources/org/apache/isis/core/metamodel/layoutmetadata/json/ExampleDomainObject.layout.properties
@@ -67,10 +67,12 @@ member.similarItems.render.value=LAZILY
 #Actions (freestanding)
 member.delete.memberOrder.sequence=1
 member.duplicate.memberOrder.sequence=2
+member.duplicate.named.value=Clone
 
 
 #Actions (associated with properties)
 action.completed.memberOrder.name=complete
+action.completed.named.value=Done
 action.notYetCompleted.memberOrder.name=complete
 
 action.completed.memberOrder.sequence=1

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/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 5d68cab..12b7d36 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
@@ -309,7 +309,6 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
         this.complete = complete;
     }
 
-    @Named("Done")
     @PublishedAction
     @Bulk
     @CssClass("x-highlight")
@@ -334,7 +333,6 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
         return isComplete() ? "Already completed" : null;
     }
 
-    @Named("Not done")
     @PublishedAction
     @Bulk
     public ToDoItem notYetCompleted() {
@@ -363,7 +361,6 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
         this.cost = cost!=null?cost.setScale(2):null;
     }
     
-    @Named("Update")
     public ToDoItem updateCost(@Named("New cost") @Optional final BigDecimal cost) {
         LOG.debug("%s: cost updated: %s -> %s", this.container.titleOf(this), getCost(), cost);
         setCost(cost);
@@ -530,7 +527,6 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     // Clone (action)
     // //////////////////////////////////////
 
-    @Named("Clone")
     // the name of the action in the UI
     // 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

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
index cbfd86d..779f20c 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
@@ -26,14 +26,26 @@
                     },
                     subcategory: {
                         actions: {
-                            updateCategory: {},
+                            updateCategory: {
+                                named: {
+                                    value: "Update"
+                                }
+                            },
                             analyseCategory: {}
                         }
                     },
                     complete: {
                         actions: {
-                            completed: {},
-                            notYetCompleted: {}
+                            completed: {
+                                named: {
+                                    value: "Done"
+                                }
+                            },
+                            notYetCompleted: {
+                                named: {
+                                    value: "Not done"
+                                }
+                            }
                         }
                     }
                 }
@@ -59,7 +71,11 @@
                     dueBy: {},
                     cost: {
                         actions: {
-                            updateCost:{}
+                            updateCost:{
+                                named: {
+                                    value: "Update"
+                                }
+                            }
                         }
                     },
                     notes: {},
@@ -98,7 +114,11 @@
     }
     ],
     actions: {
-        duplicate: {},
+        duplicate: {
+	        named: {
+	            value: "Clone"
+	        }
+        },
         delete: {}
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/2dee08b4/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
index 6f8152c..0cb371b 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -165,7 +165,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
     // UpdateCategory (contributed action)
     // //////////////////////////////////////
 
-    @Named("Update")
     @DescribedAs("Update category and subcategory")
     @NotInServiceMenu
     @ActionSemantics(Of.IDEMPOTENT)