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 2018/01/05 17:21:33 UTC

[isis] 01/01: dynamic parameter names.

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1720-dynamic-paranameter-names
in repository https://gitbox.apache.org/repos/asf/isis.git

commit d45422e6005ab3528106386239880be10584b2e7
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 28 20:05:21 2017 +0100

    dynamic parameter names.
    
    Incomplete.  Design ok, but a lot of impact... have to pass targetAdapter down to NamedFacet everywhere
---
 .../metamodel/facets/FacetedMethodParameter.java   |   7 --
 .../core/metamodel/facets/ImperativeFacet.java     |   2 +-
 .../actions/action/invocation/CommandUtil.java     |   8 +-
 .../facets/all/i18n/NamedFacetTranslated.java      |   3 +-
 .../facets/all/i18n/TranslationFacetFactory.java   |   2 +-
 .../metamodel/facets/all/named/NamedFacet.java     |   4 +-
 .../facets/all/named/NamedFacetAbstract.java       |   3 +-
 .../mandatory/MandatoryFacetAbstract.java          |   2 +-
 .../ActionParameterNamedFacetViaMethodFactory.java | 116 +++++++++++++++++++++
 .../named/method/NamedFacetOnParameterMethod.java  |  89 ++++++++++++++++
 .../json/LayoutMetadataReaderFromJson.java         |   4 +-
 .../services/grid/GridSystemServiceAbstract.java   |   2 +-
 .../core/metamodel/spec/ObjectSpecification.java   |   5 +-
 .../core/metamodel/spec/feature/ObjectAction.java  |   6 +-
 .../core/metamodel/spec/feature/ObjectActions.java |   7 --
 .../specimpl/ObjectActionParameterAbstract.java    |  12 +--
 .../specloader/specimpl/ObjectMemberAbstract.java  |   4 +-
 .../specimpl/ObjectSpecificationAbstract.java      |   9 +-
 .../specimpl/dflt/ObjectSpecificationDefault.java  |   2 +-
 .../isis/core/runtime/snapshot/XmlSnapshot.java    |   4 +-
 .../actions/ActionMethodsFacetFactoryTest.java     |   7 +-
 .../CollectionFieldMethodsFacetFactoryTest.java    |   2 +-
 ...etForCollectionLayoutAnnotationFactoryTest.java |   4 +-
 .../named/NamedAnnotationFacetFactoryTest.java     |  10 +-
 .../DomainObjectLayoutFactoryTest.java             |   5 +-
 .../singular/SingularMethodFacetFactoryTest.java   |   2 +-
 ...cetForParameterLayoutAnnotationFactoryTest.java |   4 +-
 .../PropertyMethodsFacetFactoryTest.java           |   2 +-
 ...acetForPropertyLayoutAnnotationFactoryTest.java |   4 +-
 ...ionParameterAbstractTest_getId_and_getName.java |   6 +-
 .../testspec/ObjectSpecificationStub.java          |   4 +-
 .../runtime/persistence/adapter/PojoAdapter.java   |   4 +-
 .../publish/PublishingServiceInternalDefault.java  |   8 +-
 .../system/OneToManyAssociationDefaultTest.java    |   2 +-
 .../domaintypes/DomainTypeReprRenderer.java        |   2 +-
 .../services/HintStoreUsingWicketSession.java      |  19 ++++
 .../viewer/wicket/model/links/LinkAndLabel.java    |   2 +-
 .../serviceactions/ServiceActionUtil.java          |   8 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |   2 +-
 39 files changed, 301 insertions(+), 87 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
index 6fdf648..c5af395 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
@@ -23,7 +23,6 @@ import com.google.common.base.Function;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 
 public class FacetedMethodParameter extends TypedHolderDefault implements IdentifiedHolder {
 
@@ -47,12 +46,6 @@ public class FacetedMethodParameter extends TypedHolderDefault implements Identi
 
 
     public static class Functions {
-        public static final Function<FacetedMethodParameter, String> GET_NAME = new Function<FacetedMethodParameter, String>() {
-            @Override public String apply(final FacetedMethodParameter input) {
-                final NamedFacet namedFacet = input.getFacet(NamedFacet.class);
-                return namedFacet.value();
-            }
-        };
         public static final Function<FacetedMethodParameter, Class<?>> GET_TYPE = new Function<FacetedMethodParameter, Class<?>>() {
             @Override public Class<?> apply(final FacetedMethodParameter input) {
                 return input.getType();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
index 606631f..ef785ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
@@ -86,7 +86,7 @@ public interface ImperativeFacet extends Facet {
         MODIFY_COLLECTION_ADD,
         MODIFY_COLLECTION_REMOVE,
         CHOICES_OR_AUTOCOMPLETE,
-        DEFAULTS, 
+        DEFAULTS,
         INITIALIZATION,
         LIFECYCLE, 
         UI_HINT
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
index 2134409..3c407ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -34,15 +34,9 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember2;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault;
 
 /**
  * Factoring out the commonality between <tt>ActionInvocationFacetViaMethod</tt> and <tt>BackgroundServiceDefault</tt>.
@@ -56,7 +50,7 @@ public class CommandUtil {
     }
 
     public static String targetClassNameFor(final ObjectAdapter targetAdapter) {
-        return StringExtensions.asNaturalName2(targetAdapter.getSpecification().getSingularName());
+        return StringExtensions.asNaturalName2(targetAdapter.getSpecification().getSingularName(owningAdapter));
     }
 
     public static String memberIdentifierFor(final ObjectMember objectMember) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java
index 005484b..bf9b9e3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.all.i18n;
 
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -46,7 +47,7 @@ public class NamedFacetTranslated extends FacetAbstract implements NamedFacet {
     }
 
     @Override
-    public String value() {
+    public String value(final ObjectAdapter owningAdapter) {
         return translateText();
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java
index 4d641f1..260636e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/TranslationFacetFactory.java
@@ -86,7 +86,7 @@ public class TranslationFacetFactory extends FacetFactoryAbstract implements Con
             // not expected...
             return;
         }
-        final String originalText = facet.value();
+        final String originalText = facet.value(owningAdapter);
         if (isNullOrEmptyWhenTrimmed(originalText)) {
             // not expected...
             return;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacet.java
index f2a6c4e..3fe9872 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacet.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.all.named;
 
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.MultipleValueFacet;
 
 /**
@@ -32,8 +33,9 @@ public interface NamedFacet extends MultipleValueFacet {
 
     /**
      * @return The name to use as a label for a collection, a property or a parameter
+     * @param owningAdapter
      */
-    String value();
+    String value(final ObjectAdapter owningAdapter);
 
     /**
      * @return A flag indicating whether the label should be show as is, or should be HTML escaped
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacetAbstract.java
index 1570d07..ceaeb06 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/named/NamedFacetAbstract.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.all.named;
 
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.MultipleValueFacetAbstract;
@@ -40,7 +41,7 @@ public abstract class NamedFacetAbstract extends MultipleValueFacetAbstract impl
     }
 
     @Override
-    public String value() {
+    public String value(final ObjectAdapter owningAdapter) {
         return value;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
index 06bc7e3..203760f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
@@ -91,7 +91,7 @@ public abstract class MandatoryFacetAbstract extends MarkerFacetAbstract impleme
             return null;
         }
         final NamedFacet namedFacet = getFacetHolder().getFacet(NamedFacet.class);
-        final String name = namedFacet != null? namedFacet.value(): null;
+        final String name = namedFacet != null? namedFacet.value(owningAdapter): null;
         return name != null? "'" + name + "' is mandatory":"Mandatory";
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/named/method/ActionParameterNamedFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/named/method/ActionParameterNamedFacetViaMethodFactory.java
new file mode 100644
index 0000000..8986b5c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/named/method/ActionParameterNamedFacetViaMethodFactory.java
@@ -0,0 +1,116 @@
+/*
+ *  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.param.named.method;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.StringExtensions;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
+import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+
+public class ActionParameterNamedFacetViaMethodFactory extends MethodPrefixBasedFacetFactoryAbstract {
+
+    private static final String[] PREFIXES = {"named"};
+
+    public ActionParameterNamedFacetViaMethodFactory() {
+        super(FeatureType.ACTIONS_ONLY, OrphanValidation.VALIDATE, PREFIXES);
+    }
+
+    // ///////////////////////////////////////////////////////
+    // Actions
+    // ///////////////////////////////////////////////////////
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+
+        final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+        final List<FacetedMethodParameter> holderList = facetedMethod.getParameters();
+
+        attachNamedFacetForParametersIfAutoCompleteNumMethodIsFound(processMethodContext, holderList);
+
+    }
+
+    private void attachNamedFacetForParametersIfAutoCompleteNumMethodIsFound(
+            final ProcessMethodContext processMethodContext,
+            final List<FacetedMethodParameter> parameters) {
+
+        if (parameters.isEmpty()) {
+            return;
+        }
+
+        final Method actionMethod = processMethodContext.getMethod();
+        final Class<?>[] params = actionMethod.getParameterTypes();
+
+        for (int i = 0; i < params.length; i++) {
+
+            final Class<?> paramType = params[i];
+
+            final Class[] returnTypes = { String.class };
+            Method namedMethod = findNamedNumMethodReturning(processMethodContext, i, returnTypes);
+            if (namedMethod == null) {
+                continue;
+            }
+            processMethodContext.removeMethod(namedMethod);
+
+            // add facets directly to parameters, not to actions
+            final FacetedMethodParameter paramAsHolder = parameters.get(i);
+            FacetUtil.addFacet(
+                    new NamedFacetOnParameterMethod(
+                            namedMethod, paramType,
+                            getDeploymentCategory(), getSpecificationLoader(),
+                            getAuthenticationSessionProvider(), adapterManager));
+        }
+    }
+
+    private Method findNamedNumMethodReturning(
+            final ProcessMethodContext processMethodContext,
+            final int paramNum,
+            final Class<?>[] returnTypes) {
+
+        final Class<?> cls = processMethodContext.getCls();
+        final Method actionMethod = processMethodContext.getMethod();
+        final String capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName());
+        final String name = MethodPrefixConstants.AUTO_COMPLETE_PREFIX + paramNum + capitalizedName;
+        return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, name, returnTypes, new Class[]{String.class});
+    }
+
+    // ///////////////////////////////////////////////////////////////
+    // Dependencies
+    // ///////////////////////////////////////////////////////////////
+
+
+    @Override
+    public void setServicesInjector(final ServicesInjector servicesInjector) {
+        super.setServicesInjector(servicesInjector);
+        adapterManager = servicesInjector.getPersistenceSessionServiceInternal();
+    }
+
+    PersistenceSessionServiceInternal adapterManager;
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/named/method/NamedFacetOnParameterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/named/method/NamedFacetOnParameterMethod.java
new file mode 100644
index 0000000..1559e0b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/named/method/NamedFacetOnParameterMethod.java
@@ -0,0 +1,89 @@
+/*
+ *  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.param.named.method;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.CollectionUtils;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.MultipleValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+
+public class NamedFacetOnParameterMethod extends MultipleValueFacetAbstract implements NamedFacet, ImperativeFacet {
+
+    public static Class<? extends Facet> type() {
+        return NamedFacet.class;
+    }
+
+    private final Method method;
+
+    public NamedFacetOnParameterMethod(
+            final Method method,
+            final FacetHolder holder) {
+        super(type(), holder);
+        this.method = method;
+    }
+
+    @Override
+    public String value(
+            final ObjectAdapter owningAdapter) {
+        return (String)ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
+    }
+
+    @Override
+    public boolean escaped() {
+        return false;
+    }
+
+    /**
+     * Returns a singleton list of the {@link Method} provided in the
+     * constructor.
+     */
+    @Override
+    public List<Method> getMethods() {
+        return Collections.singletonList(method);
+    }
+    
+    @Override
+    public Intent getIntent(final Method method) {
+        return Intent.UI_HINT;
+    }
+
+    @Override
+    protected String toStringValues() {
+        return "method=" + method;
+    }
+
+}
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 3b48d1e..b00a4eb 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
@@ -542,7 +542,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader2, Serv
         final NamedFacet namedFacet = action.getFacet(NamedFacet.class);
         if(namedFacet != null && !namedFacet.isNoop()) {
             final NamedFacetRepr namedFacetRepr = new NamedFacetRepr();
-            namedFacetRepr.value = namedFacet.value();
+            namedFacetRepr.value = namedFacet.value(owningAdapter);
             actionRepr.named = namedFacetRepr;
         }
         
@@ -582,7 +582,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader2, Serv
         final NamedFacet namedFacet = assoc.getFacet(NamedFacet.class);
         if(namedFacet != null && !namedFacet.isNoop()) {
             final NamedFacetRepr namedFacetRepr = new NamedFacetRepr();
-            namedFacetRepr.value = namedFacet.value();
+            namedFacetRepr.value = namedFacet.value(owningAdapter);
             memberRepr.named = namedFacetRepr;
         }
         final DisabledFacet disabledFacet = assoc.getFacet(DisabledFacet.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index c4baf66..af18b8f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -570,7 +570,7 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
             final FacetHolder facetHolder) {
         final NamedFacet namedFacet = facetHolder.getFacet(NamedFacet.class);
         if(isDoOp(namedFacet)) {
-            final String named = namedFacet.value();
+            final String named = namedFacet.value(owningAdapter);
             if(!Strings.isNullOrEmpty(named)){
                 hasNamed.setNamed(named);
             }
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 29e6bb7..6ba590b 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
@@ -126,10 +126,11 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
      * Returns the (singular) name for objects of this specification.
      * 
      * <p>
-     * Corresponds to the {@link NamedFacet#value()} of {@link NamedFacet}; is
+     * Corresponds to the {@link NamedFacet#value(ObjectAdapter)} of {@link NamedFacet}; is
      * not necessarily immutable.
+     * @param owningAdapter
      */
-    String getSingularName();
+    String getSingularName(final ObjectAdapter owningAdapter);
 
     /**
      * Returns the plural name for objects of this specification.
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 6ec249d..008aa52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -212,14 +212,16 @@ public interface ObjectAction extends ObjectMember {
         private Util() {
         }
 
-        public static String nameFor(final ObjectAction objAction) {
+        public static String nameFor(
+                final ObjectAction objAction,
+                final ObjectAdapter owningAdapter) {
             final String actionName = objAction.getName();
             if (actionName != null) {
                 return actionName;
             }
             final NamedFacet namedFacet = objAction.getFacet(NamedFacet.class);
             if (namedFacet != null) {
-                return namedFacet.value();
+                return namedFacet.value(owningAdapter);
             }
             return "(no name)";
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
index 0dcf8a1..72aa8fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
@@ -30,13 +30,6 @@ public final class ObjectActions {
     private ObjectActions() {
     }
 
-    /**
-     * @deprecated - use {@link ObjectAction.Util#nameFor(ObjectAction)}
-     */
-    @Deprecated
-    public static String nameFor(final ObjectAction action) {
-        return ObjectAction.Util.nameFor(action);
-    }
 
     /**
      * @deprecated - use {@link ObjectAction.Filters#memberOrderOf(ObjectAssociation)}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index f6cc3b1..a33713c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -138,10 +138,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     @Override
     public String getId() {
         final NamedFacet facet = getFacet(NamedFacet.class);
-        if (facet != null && facet.value() != null) {
-            return StringExtensions.asCamelLowerFirst(facet.value());
+        if (facet != null && facet.value(owningAdapter) != null) {
+            return StringExtensions.asCamelLowerFirst(facet.value(owningAdapter));
         }
-        final String name = getSpecification().getSingularName();
+        final String name = getSpecification().getSingularName(owningAdapter);
         final List<ObjectActionParameter> parameters = this.getAction().getParameters(new Filter<ObjectActionParameter>() {
 
             @Override
@@ -163,10 +163,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     @Override
     public String getName() {
         final NamedFacet facet = getFacet(NamedFacet.class);
-        if (facet != null && facet.value() != null) {
-            return facet.value();
+        if (facet != null && facet.value(owningAdapter) != null) {
+            return facet.value(owningAdapter);
         }
-        final String name = getSpecification().getSingularName();
+        final String name = getSpecification().getSingularName(owningAdapter);
         final List<ObjectActionParameter> parameters = getAction().getParameters(new Filter<ObjectActionParameter>() {
 
             @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index b059bf9..2b86b05 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -187,7 +187,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     @Override
     public String getName() {
         final NamedFacet facet = getFacet(NamedFacet.class);
-        final String name = facet.value();
+        final String name = facet.value(owningAdapter);
         if (name != null) {
             return name;
         }
@@ -348,7 +348,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     }
 
     static String suffix(final ObjectAction mixinAction) {
-        return suffix(mixinAction.getOnType().getSingularName());
+        return suffix(mixinAction.getOnType().getSingularName(owningAdapter));
     }
 
     static String suffix(final String singularName) {
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 792521b..46f47cc 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
@@ -397,7 +397,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
                 return titleString;
             }
         }
-        return (this.isService() ? "" : "Untitled ") + getSingularName();
+        return (this.isService() ? "" : "Untitled ") + getSingularName(targetAdapter);
     }
 
 
@@ -464,11 +464,12 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     /**
      * The name according to any available {@link org.apache.isis.core.metamodel.facets.all.named.NamedFacet},
      * but falling back to {@link #getFullIdentifier()} otherwise.
+     * @param owningAdapter
      */
     @Override
-    public String getSingularName() {
+    public String getSingularName(final ObjectAdapter owningAdapter) {
         final NamedFacet namedFacet = getFacet(NamedFacet.class);
-        return namedFacet != null? namedFacet.value() : this.getFullIdentifier();
+        return namedFacet != null? namedFacet.value(owningAdapter) : this.getFullIdentifier();
     }
 
     /**
@@ -683,7 +684,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
             }
         }
         throw new ObjectSpecificationException(
-                String.format("No association called '%s' in '%s'", id, getSingularName()));
+                String.format("No association called '%s' in '%s'", id, getSingularName(owningAdapter)));
     }
 
     private ObjectAssociation getAssociationWithId(final String id) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 09a91bd..d6feaf9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -198,7 +198,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
                 final NamedFacetTranslated facet = (NamedFacetTranslated) namedFacet;
                 pluralFacet = new PluralFacetTranslated(facet, this);
             } else {
-                pluralFacet = new PluralFacetInferred(StringExtensions.asPluralName(namedFacet.value()), this);
+                pluralFacet = new PluralFacetInferred(StringExtensions.asPluralName(namedFacet.value(owningAdapter)), this);
             }
             addFacet(pluralFacet);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
index 5a1d5b0..ade8633 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
@@ -53,7 +53,6 @@ import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotService.Snapshot;
 import org.apache.isis.applib.snapshot.SnapshottableWithInclusions;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -612,7 +611,8 @@ public class XmlSnapshot implements Snapshot {
         if (LOG.isDebugEnabled()) {
             LOG.debug("objectToElement(NO): create element and isis:title");
         }
-        final Element element = schema.createElement(getXmlDocument(), nos.getShortIdentifier(), nos.getFullIdentifier(), nos.getSingularName(), nos.getPluralName());
+        final Element element = schema.createElement(getXmlDocument(), nos.getShortIdentifier(), nos.getFullIdentifier(), nos.getSingularName(
+                owningAdapter), nos.getPluralName());
         isisMetaModel.appendIsisTitle(element, adapter.titleString());
 
         if (LOG.isDebugEnabled()) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index 7ed3aff..25d6797 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.metamodel.facets.actions;
 
 import java.lang.reflect.Method;
-import java.lang.reflect.Type;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -173,7 +172,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         assertNotNull(facet);
         assertTrue(facet instanceof NamedFacet);
         final NamedFacet namedFacet = (NamedFacet) facet;
-        assertEquals("An Action With Named Annotation", namedFacet.value());
+        assertEquals("An Action With Named Annotation", namedFacet.value(owningAdapter));
     }
 
 
@@ -201,7 +200,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         assertNotNull(facet);
         assertTrue(facet instanceof NamedFacet);
         final NamedFacet namedFacet = (NamedFacet) facet;
-        assertEquals("An Action With Exploration Prefix", namedFacet.value());
+        assertEquals("An Action With Exploration Prefix", namedFacet.value(owningAdapter));
     }
 
     public void testInstallsValidateMethodNoArgsFacetAndRemovesMethod() {
@@ -440,7 +439,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         assertNotNull(facet);
         assertTrue(facet instanceof NamedFacetAbstract);
         final NamedFacetAbstract namedFacetAbstract = (NamedFacetAbstract) facet;
-        assertEquals("Another Name", namedFacetAbstract.value());
+        assertEquals("Another Name", namedFacetAbstract.value(owningAdapter));
 
         assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(nameMethod));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
index 75da9e6..eefeca2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
@@ -675,7 +675,7 @@ public class CollectionFieldMethodsFacetFactoryTest extends AbstractFacetFactory
         assertNotNull(facet);
         assertTrue(facet instanceof NamedFacetStaticMethod);
         final NamedFacetStaticMethod namedFacet = (NamedFacetStaticMethod) facet;
-        assertEquals("Most Recent Orders", namedFacet.value());
+        assertEquals("Most Recent Orders", namedFacet.value(owningAdapter));
 
         assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(nameMethod));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java
index d7095ed..ebf6be6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java
@@ -55,7 +55,7 @@ public class NamedFacetForCollectionLayoutAnnotationFactoryTest extends Abstract
         final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
         assertThat(facet, is(notNullValue()));
         assertThat(facet, is(instanceOf(NamedFacetForCollectionLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo("1st names")));
+        assertThat(facet.value(owningAdapter), is(equalTo("1st names")));
         assertThat(facet.escaped(), is(true));
     }
 
@@ -76,7 +76,7 @@ public class NamedFacetForCollectionLayoutAnnotationFactoryTest extends Abstract
         final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
         assertThat(facet, is(notNullValue()));
         assertThat(facet, is(instanceOf(NamedFacetForCollectionLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo("1st names")));
+        assertThat(facet.value(owningAdapter), is(equalTo("1st names")));
         assertThat(facet.escaped(), is(false));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
index db0931a..307f001 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/naming/named/NamedAnnotationFacetFactoryTest.java
@@ -59,7 +59,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof NamedFacetAbstract, is(true));
         final NamedFacetAbstract namedFacetAbstract = (NamedFacetAbstract) facet;
-        assertThat(namedFacetAbstract.value(), equalTo("some name"));
+        assertThat(namedFacetAbstract.value(owningAdapter), equalTo("some name"));
     }
 
     @Test
@@ -84,7 +84,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof NamedFacetAbstract, is(true));
         final NamedFacetAbstract namedFacetAbstract = (NamedFacetAbstract) facet;
-        assertThat(namedFacetAbstract.value(), equalTo("some name"));
+        assertThat(namedFacetAbstract.value(owningAdapter), equalTo("some name"));
     }
 
     public void testNamedAnnotationPickedUpOnCollection() {
@@ -107,7 +107,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof NamedFacetAbstract, is(true));
         final NamedFacetAbstract namedFacetAbstract = (NamedFacetAbstract) facet;
-        assertThat(namedFacetAbstract.value(), equalTo("some name"));
+        assertThat(namedFacetAbstract.value(owningAdapter), equalTo("some name"));
     }
 
     public void testNamedAnnotationPickedUpOnAction() {
@@ -129,7 +129,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof NamedFacetAbstract, is(true));
         final NamedFacetAbstract namedFacetAbstract = (NamedFacetAbstract) facet;
-        assertThat(namedFacetAbstract.value(), equalTo("some name"));
+        assertThat(namedFacetAbstract.value(owningAdapter), equalTo("some name"));
     }
 
     public void testNamedAnnotationPickedUpOnActionParameter() {
@@ -151,7 +151,7 @@ public class NamedAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4T
         assertThat(facet, is(not(nullValue())));
         assertThat(facet instanceof NamedFacetAbstract, is(true));
         final NamedFacetAbstract namedFacetAbstract = (NamedFacetAbstract) facet;
-        assertThat(namedFacetAbstract.value(), equalTo("some name"));
+        assertThat(namedFacetAbstract.value(owningAdapter), equalTo("some name"));
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
index 32de97a..5acaa67 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
 
-import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.junit.After;
 import org.junit.Assert;
@@ -441,7 +440,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
                 assertTrue(facet instanceof NamedFacetForDomainObjectLayoutAnnotation);
 
                 final NamedFacetForDomainObjectLayoutAnnotation facetImpl = (NamedFacetForDomainObjectLayoutAnnotation) facet;
-                Assert.assertThat(facetImpl.value(), is("Name override"));
+                Assert.assertThat(facetImpl.value(owningAdapter), is("Name override"));
 
                 expectNoMethodsRemoved();
             }
@@ -474,7 +473,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
                 assertTrue(facet instanceof NamedFacetForViewModelLayoutAnnotation);
 
                 final NamedFacetForViewModelLayoutAnnotation facetImpl = (NamedFacetForViewModelLayoutAnnotation) facet;
-                Assert.assertThat(facetImpl.value(), is("Name override"));
+                Assert.assertThat(facetImpl.value(owningAdapter), is("Name override"));
 
                 expectNoMethodsRemoved();
             }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/singular/SingularMethodFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/singular/SingularMethodFacetFactoryTest.java
index df6e86a..8f58390 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/singular/SingularMethodFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/singular/SingularMethodFacetFactoryTest.java
@@ -60,7 +60,7 @@ public class SingularMethodFacetFactoryTest extends AbstractFacetFactoryTest {
         assertNotNull(facet);
         assertTrue(facet instanceof NamedFacetStaticMethod);
         final NamedFacetStaticMethod namedFacetStaticMethod = (NamedFacetStaticMethod) facet;
-        assertEquals("Some name", namedFacetStaticMethod.value());
+        assertEquals("Some name", namedFacetStaticMethod.value(owningAdapter));
 
         assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(singularNameMethod));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java
index b73cdfb..03b5d3c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java
@@ -52,7 +52,7 @@ public class NamedFacetForParameterLayoutAnnotationFactoryTest extends AbstractF
         final NamedFacet facet = facetedMethodParameter.getFacet(NamedFacet.class);
         assertThat(facet, is(notNullValue()));
         assertThat(facet, is(instanceOf(NamedFacetForParameterLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo(NAME)));
+        assertThat(facet.value(owningAdapter), is(equalTo(NAME)));
         assertThat(facet.escaped(), is(true));
     }
 
@@ -71,7 +71,7 @@ public class NamedFacetForParameterLayoutAnnotationFactoryTest extends AbstractF
         final NamedFacet facet = facetedMethodParameter.getFacet(NamedFacet.class);
         assertThat(facet, is(notNullValue()));
         assertThat(facet, is(instanceOf(NamedFacetForParameterLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo(NAME)));
+        assertThat(facet.value(owningAdapter), is(equalTo(NAME)));
         assertThat(facet.escaped(), is(false));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
index dc585c2..793f3d7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
@@ -764,7 +764,7 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         assertNotNull(facet);
         assertTrue(facet instanceof NamedFacetStaticMethod);
         final NamedFacetStaticMethod namedFacet = (NamedFacetStaticMethod) facet;
-        assertEquals("Given name", namedFacet.value());
+        assertEquals("Given name", namedFacet.value(owningAdapter));
 
         assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(nameMethod));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
index 5750433..ff7ba05 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
@@ -62,7 +62,7 @@ public class NamedFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFa
         final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
         assertThat(facet, is(notNullValue()));
         assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo("1st name")));
+        assertThat(facet.value(owningAdapter), is(equalTo("1st name")));
         assertThat(facet.escaped(), is(true));
     }
 
@@ -92,7 +92,7 @@ public class NamedFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFa
         final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
         assertThat(facet, is(notNullValue()));
         assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo("1st name")));
+        assertThat(facet.value(owningAdapter), is(equalTo("1st name")));
         assertThat(facet.escaped(), is(false));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index 3985ca0..556e9c0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -103,7 +103,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
     public void setUp() throws Exception {
         context.checking(new Expectations() {
             {
-                allowing(stubSpecForString).getSingularName();
+                allowing(stubSpecForString).getSingularName(owningAdapter);
                 will(returnValue("string"));
 
                 allowing(stubObjectActionParameterString).getSpecification();
@@ -126,7 +126,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
                 one(actionParamPeer).getFacet(NamedFacet.class);
                 will(returnValue(namedFacet));
 
-                atLeast(1).of(namedFacet).value();
+                atLeast(1).of(namedFacet).value(owningAdapter);
                 will(returnValue("Some parameter name"));
             }
         });
@@ -144,7 +144,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
                 one(actionParamPeer).getFacet(NamedFacet.class);
                 will(returnValue(namedFacet));
 
-                atLeast(1).of(namedFacet).value();
+                atLeast(1).of(namedFacet).value(owningAdapter);
                 will(returnValue("Some parameter name"));
             }
         });
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 6316439..770f362 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
@@ -225,13 +225,13 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
-    public String getSingularName() {
+    public String getSingularName(final ObjectAdapter owningAdapter) {
         return name + " (singular)";
     }
 
     @Override
     public String getDescription() {
-        return getSingularName();
+        return getSingularName(owningAdapter);
     }
 
     @Override
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index d8211cb..c996bb3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -335,7 +335,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
             case 0:
                 return "No " + elementSpecification.getPluralName();
             case 1:
-                return "1 " + elementSpecification.getSingularName();
+                return "1 " + elementSpecification.getSingularName(owningAdapter);
             default:
                 return size + " " + elementSpecification.getPluralName();
             }
@@ -357,7 +357,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
     }
 
     protected String getDefaultTitle() {
-        return "A" + (" " + getSpecification().getSingularName()).toLowerCase();
+        return "A" + (" " + getSpecification().getSingularName(owningAdapter)).toLowerCase();
     }
 
     protected void toString(final ToString str) {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
index 788de3e..0801092 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publish/PublishingServiceInternalDefault.java
@@ -63,6 +63,7 @@ import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
 import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal;
@@ -274,7 +275,12 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
             returnType = facetedMethod.getType();
 
             final List<FacetedMethodParameter> parameters = facetedMethod.getParameters();
-            parameterNames = immutableList(Iterables.transform(parameters, FacetedMethodParameter.Functions.GET_NAME));
+            parameterNames = immutableList(Iterables.transform(parameters, new Function<FacetedMethodParameter, String>() {
+                @Override public String apply(final FacetedMethodParameter input) {
+                    final NamedFacet namedFacet = input.getFacet(NamedFacet.class);
+                    return namedFacet.value(targetAdapter);
+                }
+            }));
             parameterTypes = immutableList(Iterables.transform(parameters, FacetedMethodParameter.Functions.GET_TYPE));
         } else {
             parameterNames = null;
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
index 2dc326f..03c9915 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
@@ -185,7 +185,7 @@ public class OneToManyAssociationDefaultTest {
                 one(mockPeer).getFacet(NamedFacet.class);
                 will(returnValue(mockNamedFacet));
 
-                one(mockNamedFacet).value();
+                one(mockNamedFacet).value(owningAdapter);
                 will(returnValue("My name"));
             }
         });
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index 26baf69..4022c5d 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -147,7 +147,7 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
     }
 
     protected void putExtensionsNames() {
-        final String singularName = objectSpecification.getSingularName();
+        final String singularName = objectSpecification.getSingularName(owningAdapter);
         getExtensions().mapPut("friendlyName", singularName);
 
         final String pluralName = objectSpecification.getPluralName();
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
index dda8da5..1f4f988 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.viewer.wicket.viewer.services;
 
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
@@ -45,6 +46,9 @@ public class HintStoreUsingWicketSession implements HintStore {
 
     @Override
     public String get(final Bookmark bookmark, final String key) {
+        if(bookmark == null) {
+            return null;
+        }
         final Map<String, String> hintsForBookmark = hintsFor(bookmark);
         final String value = hintsForBookmark.get(key);
 
@@ -57,6 +61,9 @@ public class HintStoreUsingWicketSession implements HintStore {
 
     @Override
     public void set(final Bookmark bookmark, final String key, final String value) {
+        if(bookmark == null) {
+            return;
+        }
         final Map<String, String> hintsForBookmark = hintsFor(bookmark);
 
         if(LOG.isDebugEnabled()) {
@@ -68,6 +75,9 @@ public class HintStoreUsingWicketSession implements HintStore {
 
     @Override
     public void remove(final Bookmark bookmark, final String key) {
+        if(bookmark == null) {
+            return;
+        }
         final Map<String, String> hintsForBookmark = hintsFor(bookmark);
 
         if(LOG.isDebugEnabled()) {
@@ -79,18 +89,27 @@ public class HintStoreUsingWicketSession implements HintStore {
 
     @Override
     public Set<String> findHintKeys(final Bookmark bookmark) {
+        if(bookmark == null) {
+            return Collections.emptySet();
+        }
         final Map<String, String> hintsForBookmark = hintsFor(bookmark);
         return hintsForBookmark.keySet();
     }
 
     @Override
     public void removeAll(final Bookmark bookmark) {
+        if(bookmark == null) {
+            return;
+        }
         final String sessionAttribute = sessionAttributeFor(bookmark);
         Session.get().removeAttribute(sessionAttribute);
     }
 
 
     protected Map<String, String> hintsFor(final Bookmark bookmark) {
+        if(bookmark == null) {
+            return Maps.newLinkedHashMap();
+        }
         final String sessionAttribute = sessionAttributeFor(bookmark);
         LinkedHashMap<String, String> hints =
                 (LinkedHashMap<String, String>) Session.get().getAttribute(sessionAttribute);
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index e0966d2..e54e157 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -52,7 +52,7 @@ public class LinkAndLabel implements Serializable {
             final String disabledReasonIfAny,
             final boolean blobOrClob) {
 
-        final String name = ObjectAction.Util.nameFor(objectAction);
+        final String name = ObjectAction.Util.nameFor(objectAction, owningAdapter);
 
         final boolean explorationOrPrototype = objectAction.isPrototype();
         final String actionIdentifier = ObjectAction.Util.actionIdentifierFor(objectAction);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
index 9d7569c..8f3c25d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
@@ -37,9 +37,8 @@ import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.Model;
-import org.apache.isis.applib.annotation.ActionSemantics;
+
 import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.filter.Filters;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -58,7 +57,6 @@ import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ServiceActionsModel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.CssClassFaBehavior;
-import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipBehavior;
@@ -277,7 +275,7 @@ public final class ServiceActionUtil {
             final MemberOrderFacet memberOrderFacet = objectAction.getFacet(MemberOrderFacet.class);
             String serviceName = memberOrderFacet != null? memberOrderFacet.name(): null;
             if(Strings.isNullOrEmpty(serviceName)){
-                serviceName = serviceSpec.getFacet(NamedFacet.class).value();
+                serviceName = serviceSpec.getFacet(NamedFacet.class).value(serviceAdapter);
             }
             final EntityModel serviceModel = new EntityModel(serviceAdapter);
             serviceActions.add(new ServiceAndAction(serviceName, serviceModel, objectAction));
@@ -295,7 +293,7 @@ public final class ServiceActionUtil {
         // first, order as defined in isis.properties
         for (ObjectAdapter serviceAdapter : serviceAdapters) {
             final ObjectSpecification serviceSpec = serviceAdapter.getSpecification();
-            String serviceName = serviceSpec.getFacet(NamedFacet.class).value();
+            String serviceName = serviceSpec.getFacet(NamedFacet.class).value(serviceAdapter);
             serviceNameOrder.add(serviceName);
         }
         // then, any other services (eg due to misspellings, at the end)
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index 1a9539d..ab12dd1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -131,7 +131,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
 
             link.addOrReplace(this.label = newLabel(ID_ENTITY_TITLE, titleAbbreviated(title)));
 
-            String entityTypeName = adapterIfAny.getSpecification().getSingularName();
+            String entityTypeName = adapterIfAny.getSpecification().getSingularName(owningAdapter);
             link.add(new AttributeModifier("title", entityTypeName + ": " + title));
         }
 

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.