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 2015/09/15 08:03:34 UTC

[29/50] [abbrv] isis git commit: ISIS-1194: removing AdapterManager from ObjectSpecificationDependencies

ISIS-1194: removing AdapterManager from ObjectSpecificationDependencies

- removing ObjectActionContainer#getServiceActionsReturning, as not used anywhere
- ObjectXxxContributee hold servicePojo rather than serviceAdapter, and lookup from AdapterManager on-the-fly
- replace getServiceAdapters() with getServicePojos() in ObjectSpecificationAbstract


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

Branch: refs/heads/master
Commit: b8fb1747d6b214b51532036bb5c06802f1b613b2
Parents: 7e3fb25
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Sep 14 10:03:46 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 10:03:46 2015 +0100

----------------------------------------------------------------------
 .../spec/ObjectSpecificationDependencies.java   |   9 +-
 .../spec/feature/ObjectActionContainer.java     |   1 -
 .../specloader/ObjectReflectorDefault.java      |   2 +-
 .../specimpl/ObjectActionContributee.java       |  27 ++--
 .../specimpl/ObjectSpecificationAbstract.java   | 122 +++++++------------
 .../OneToManyAssociationContributee.java        |  19 +--
 .../OneToOneAssociationContributee.java         |  25 ++--
 .../ObjectSpecificationOnStandaloneList.java    |  11 --
 .../testspec/ObjectSpecificationStub.java       |   5 -
 9 files changed, 88 insertions(+), 133 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecificationDependencies.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecificationDependencies.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecificationDependencies.java
index 40a140f..f8def88 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecificationDependencies.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecificationDependencies.java
@@ -16,7 +16,6 @@
  */
 package org.apache.isis.core.metamodel.spec;
 
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
@@ -27,19 +26,16 @@ public class ObjectSpecificationDependencies {
     private final ServicesInjector servicesInjector;
     private final SpecificationLoader specificationLoader;
     private final FacetProcessor facetProcessor;
-    private final AdapterManager adapterManager;
 
     public ObjectSpecificationDependencies(
             final DeploymentCategory deploymentCategory,
             final ServicesInjector servicesInjector,
             final SpecificationLoader specificationLoader,
-            final FacetProcessor facetProcessor,
-            final AdapterManager adapterManager) {
+            final FacetProcessor facetProcessor) {
         this.deploymentCategory = deploymentCategory;
         this.servicesInjector = servicesInjector;
         this.specificationLoader = specificationLoader;
         this.facetProcessor = facetProcessor;
-        this.adapterManager = adapterManager;
     }
 
     public DeploymentCategory getDeploymentCategory() {
@@ -58,7 +54,4 @@ public class ObjectSpecificationDependencies {
         return facetProcessor;
     }
 
-    public AdapterManager getAdapterManager() {
-        return adapterManager;
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
index 1c6b00e..c9cadc0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
@@ -68,7 +68,6 @@ public interface ObjectActionContainer {
 
     List<ObjectAction> getObjectActions(Contributed contributee);
 
-    List<ObjectAction> getServiceActionsReturning(List<ActionType> type);
 
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index f73d8a7..7c2e3f5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -452,7 +452,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         final ObjectSpecificationDependencies specContext =
                 new ObjectSpecificationDependencies(
                         getDeploymentCategory(), servicesInjector, specificationLookup,
-                        facetProcessor, adapterManager);
+                        facetProcessor);
 
         final ObjectMemberDependencies objectMemberDependencies = new ObjectMemberDependencies(
                 specificationLookup, adapterManager, getRuntimeContext().getMessageBrokerService(), servicesInjector,

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index 7202e6f..36f19e2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -51,7 +51,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 
 public class ObjectActionContributee extends ObjectActionImpl implements ContributeeMember {
 
-    private final ObjectAdapter serviceAdapter;
+    private final Object servicePojo;
     private final ObjectActionImpl serviceAction;
     private final int contributeeParam;
     private final ObjectSpecification contributeeType;
@@ -74,14 +74,14 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
      * @param contributeeParam - the parameter number which corresponds to the contributee, and so should be suppressed.
      */
     public ObjectActionContributee(
-            final ObjectAdapter serviceAdapter,
+            final Object servicePojo,
             final ObjectActionImpl serviceAction,
             final int contributeeParam,
             final ObjectSpecification contributeeType,
             final ObjectMemberDependencies objectMemberDependencies) {
         super(serviceAction.getFacetedMethod(), objectMemberDependencies);
-        
-        this.serviceAdapter = serviceAdapter;
+
+        this.servicePojo = servicePojo;
         this.serviceAction = serviceAction;
         this.contributeeType = contributeeType;
         this.contributeeParam = contributeeParam;
@@ -138,11 +138,11 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
                 final ObjectActionParameterContributee contributedParam;
                 if(serviceParameter instanceof ObjectActionParameterParseable) {
                     contributedParam = new ObjectActionParameterParseableContributee(
-                            serviceAdapter, serviceAction, serviceParameter, serviceParamNum, 
+                            getServiceAdapter(), serviceAction, serviceParameter, serviceParamNum,
                             contributeeParamNum, this);
                 } else if(serviceParameter instanceof OneToOneActionParameterImpl) {
                     contributedParam = new OneToOneActionParameterContributee(
-                            serviceAdapter, serviceAction, serviceParameter, serviceParamNum, 
+                            getServiceAdapter(), serviceAction, serviceParameter, serviceParamNum,
                             contributeeParamNum, this);
                 } else {
                     throw new RuntimeException("Unknown implementation of ObjectActionParameter; " + serviceParameter.getClass().getName());
@@ -162,7 +162,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
             final ObjectAdapter contributee,
             final InteractionInitiatedBy interactionInitiatedBy,
             Where where) {
-        final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(serviceAdapter,
+        final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(getServiceAdapter(),
                 interactionInitiatedBy, where);
         ic.putContributee(this.contributeeParam, contributee);
         return InteractionUtils.isVisibleResult(this, ic).createConsent();
@@ -172,7 +172,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
     public Consent isUsable(
             final ObjectAdapter contributee,
             final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
-        final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(serviceAdapter,
+        final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(getServiceAdapter(),
                 interactionInitiatedBy, where);
         ic.putContributee(this.contributeeParam, contributee);
         return InteractionUtils.isUsableResult(this, ic).createConsent();
@@ -180,7 +180,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
 
     @Override
     public ObjectAdapter[] getDefaults(final ObjectAdapter target) {
-        final ObjectAdapter[] contributorDefaults = serviceAction.getDefaults(serviceAdapter);
+        final ObjectAdapter[] contributorDefaults = serviceAction.getDefaults(getServiceAdapter());
         return removeElementFromArray(contributorDefaults, contributeeParam, new ObjectAdapter[]{});
     }
 
@@ -188,7 +188,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
     public ObjectAdapter[][] getChoices(
             final ObjectAdapter target,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(serviceAdapter,
+        final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(getServiceAdapter(),
                 interactionInitiatedBy);
         return removeElementFromArray(serviceChoices, contributeeParam, new ObjectAdapter[][]{});
     }
@@ -198,7 +198,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
             final ObjectAdapter[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
         ObjectAdapter[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
-        return serviceAction.isProposedArgumentSetValid(serviceAdapter, serviceArguments, interactionInitiatedBy);
+        return serviceAction.isProposedArgumentSetValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy);
     }
 
     @Override
@@ -250,7 +250,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
             }
         }
         
-        return serviceAction.execute(serviceAdapter, argsPlusContributee(contributee, arguments),
+        return serviceAction.execute(getServiceAdapter(), argsPlusContributee(contributee, arguments),
                 interactionInitiatedBy);
     }
 
@@ -332,4 +332,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
         return list.toArray(t);
     }
 
+    public ObjectAdapter getServiceAdapter() {
+        return getAdapterManager().adapterFor(servicePojo);
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 9422e67..8718912 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
@@ -46,7 +46,6 @@ import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
@@ -55,7 +54,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet;
 import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.core.metamodel.facets.all.help.HelpFacet;
@@ -124,7 +122,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     private final ServicesInjector servicesInjector;
     private final SpecificationLoader specificationLoader;
     private final FacetProcessor facetProcessor;
-    private final AdapterManager adapterManager;
 
     /**
      * Only populated once {@link #introspectTypeHierarchyAndMembers()} is called.
@@ -193,7 +190,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         this.servicesInjector = objectSpecificationDependencies.getServicesInjector();
         this.specificationLoader = objectSpecificationDependencies.getSpecificationLoader();
         this.facetProcessor = objectSpecificationDependencies.getFacetProcessor();
-        this.adapterManager = objectSpecificationDependencies.getAdapterManager();
 
         this.objectMemberDependencies = objectMemberDependencies;
     }
@@ -856,55 +852,11 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     // getServiceActionsReturning
     // //////////////////////////////////////////////////////////////////////
 
-    @Override
-    public List<ObjectAction> getServiceActionsReturning(final List<ActionType> types) {
-        final List<ObjectAction> serviceActions = Lists.newArrayList();
-        final Iterable<ObjectAdapter> serviceAdapters = getServiceAdapters();
-        for (final ObjectAdapter serviceAdapter : serviceAdapters) {
-            appendServiceActionsReturning(serviceAdapter, types, serviceActions);
-        }
-        return serviceActions;
-    }
-
-    private Iterable<ObjectAdapter> getServiceAdapters() {
-        final List<Object> servicePojos = getServicesInjector().getRegisteredServices();
-        return Iterables.transform(servicePojos, ObjectAdapter.Functions.adapterForUsing(adapterManager));
-    }
-
-    private void appendServiceActionsReturning(final ObjectAdapter serviceAdapter, final List<ActionType> types, final List<ObjectAction> relatedActionsToAppendTo) {
-        final List<ObjectAction> matchingActionsToAppendTo = Lists.newArrayList();
-        for (final ActionType type : types) {
-            final List<ObjectAction> serviceActions = serviceAdapter.getSpecification().getObjectActions(type, Contributed.INCLUDED, Filters.<ObjectAction>any());
-            for (final ObjectAction serviceAction : serviceActions) {
-                addIfReturnsSubtype(serviceAction, matchingActionsToAppendTo);
-            }
-        }
-        relatedActionsToAppendTo.addAll(matchingActionsToAppendTo);
+    private Iterable<Object> getServicePojos() {
+        return getServicesInjector().getRegisteredServices();
     }
 
-    private void addIfReturnsSubtype(final ObjectAction serviceAction, final List<ObjectAction> matchingActionsToAppendTo) {
-        final ObjectSpecification returnType = serviceAction.getReturnType();
-        if (returnType == null) {
-            return;
-        }
-        if (returnType.isParentedOrFreeCollection()) {
-            final TypeOfFacet facet = serviceAction.getFacet(TypeOfFacet.class);
-            if (facet != null) {
-                final ObjectSpecification elementType = facet.valueSpec();
-                addIfReturnsSubtype(serviceAction, elementType, matchingActionsToAppendTo);
-            }
-        } else {
-            addIfReturnsSubtype(serviceAction, returnType, matchingActionsToAppendTo);
-        }
-    }
-
-    private void addIfReturnsSubtype(final ObjectAction serviceAction, final ObjectSpecification actionType, final List<ObjectAction> matchingActionsToAppendTo) {
-        if (actionType.isOfType(this)) {
-            matchingActionsToAppendTo.add(serviceAction);
-        }
-    }
 
-    
     // //////////////////////////////////////////////////////////////////////
     // contributee associations (properties and collections)
     // //////////////////////////////////////////////////////////////////////
@@ -915,20 +867,20 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         }
         
         final List<ObjectAssociation> contributeeAssociations = Lists.newArrayList();
-        for (final ObjectAdapter serviceAdapter : getServiceAdapters()) {
-            addContributeeAssociationsIfAny(serviceAdapter, contributeeAssociations);
+        for (final Object servicePojo : getServicePojos()) {
+            addContributeeAssociationsIfAny(servicePojo, contributeeAssociations);
         }
         return contributeeAssociations;
     }
 
     private void addContributeeAssociationsIfAny(
-            final ObjectAdapter serviceAdapter, 
-            final List<ObjectAssociation> contributeeAssociationsToAppendTo) {
-        final ObjectSpecification specification = serviceAdapter.getSpecification();
+            final Object servicePojo, final List<ObjectAssociation> contributeeAssociationsToAppendTo) {
+        final Class<?> serviceClass = servicePojo.getClass();
+        final ObjectSpecification specification = specificationLoader.loadSpecification(serviceClass);
         if (specification == this) {
             return;
         }
-        final List<ObjectAssociation> contributeeAssociations = createContributeeAssociations(serviceAdapter);
+        final List<ObjectAssociation> contributeeAssociations = createContributeeAssociations(servicePojo);
         contributeeAssociationsToAppendTo.addAll(contributeeAssociations);
     }
 
@@ -936,11 +888,19 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
      * Synthesises {@link ObjectAssociation}s from matching {@link ObjectAction}s of any of the services
      * that accept one parameter
      */
-    private List<ObjectAssociation> createContributeeAssociations(final ObjectAdapter serviceAdapter) {
-        
-        final ObjectSpecification specification = serviceAdapter.getSpecification();
-        final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());
-        
+    private List<ObjectAssociation> createContributeeAssociations(
+            final ObjectAdapter serviceAdapter) {
+
+        final Object servicePojo = serviceAdapter.getObject();
+        return createContributeeAssociations(servicePojo);
+    }
+
+    private List<ObjectAssociation> createContributeeAssociations(final Object servicePojo) {
+        final Class<?> serviceClass = servicePojo.getClass();
+        final ObjectSpecification specification = specificationLoader.loadSpecification(serviceClass);
+        final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters
+                .<ObjectAction>any());
+
         final List<ObjectActionImpl> contributedActions = Lists.newArrayList();
         for (final ObjectAction serviceAction : serviceActions) {
             if (isAlwaysHidden(serviceAction)) {
@@ -964,21 +924,28 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
             }
             contributedActions.add((ObjectActionImpl) serviceAction);
         }
-        
-        return Lists.newArrayList(Iterables.transform(contributedActions, createContributeeAssociationFunctor(serviceAdapter, this)));
-    }
 
+        return Lists.newArrayList(Iterables.transform(contributedActions, createContributeeAssociationFunctor(
+                servicePojo, this)));
+    }
 
     private Function<ObjectActionImpl, ObjectAssociation> createContributeeAssociationFunctor(
             final ObjectAdapter serviceAdapter, final ObjectSpecification contributeeType) {
+        final Object servicePojo = serviceAdapter.getObject();
+        return createContributeeAssociationFunctor(servicePojo, contributeeType);
+    }
+
+    private Function<ObjectActionImpl, ObjectAssociation> createContributeeAssociationFunctor(
+            final Object servicePojo,
+            final ObjectSpecification contributeeType) {
         return new Function<ObjectActionImpl, ObjectAssociation>(){
             @Override
             public ObjectAssociation apply(ObjectActionImpl input) {
                 final ObjectSpecification returnType = input.getReturnType();
-                final ObjectAssociationAbstract association = returnType.isNotCollection() 
-                        ? new OneToOneAssociationContributee(serviceAdapter, input, contributeeType,
+                final ObjectAssociationAbstract association = returnType.isNotCollection()
+                        ? new OneToOneAssociationContributee(servicePojo, input, contributeeType,
                         objectMemberDependencies)
-                        : new OneToManyAssociationContributee(serviceAdapter, input, contributeeType,
+                        : new OneToManyAssociationContributee(servicePojo, input, contributeeType,
                         objectMemberDependencies);
                 facetProcessor.processMemberOrder(metadataProperties, association);
                 return association;
@@ -986,7 +953,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         };
     }
 
-
     // //////////////////////////////////////////////////////////////////////
     // contributee actions
     // //////////////////////////////////////////////////////////////////////
@@ -1004,21 +970,23 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         }
         final List<ObjectAction> contributeeActions = Lists.newArrayList();
             
-        for (final ObjectAdapter serviceAdapter : getServiceAdapters()) {
-            addContributeeActionsIfAny(serviceAdapter, contributeeActions);
+        for (final Object servicePojo : getServicePojos()) {
+            addContributeeActionsIfAny(servicePojo, contributeeActions);
         }
         return contributeeActions;
     }
 
     private void addContributeeActionsIfAny(
-            final ObjectAdapter serviceAdapter, 
+            final Object servicePojo,
             final List<ObjectAction> contributeeActionsToAppendTo) {
-        final ObjectSpecification specification = serviceAdapter.getSpecification();
+        final Class<?> serviceType = servicePojo.getClass();
+        final ObjectSpecification specification = getSpecificationLoader().loadSpecification(serviceType);
         if (specification == this) {
             return;
         }
         final List<ObjectAction> contributeeActions = Lists.newArrayList();
-        final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.ALL, Contributed.INCLUDED, Filters.<ObjectAction>any());
+        final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.ALL, Contributed.INCLUDED, Filters
+                .<ObjectAction>any());
         for (final ObjectAction serviceAction : serviceActions) {
             if (isAlwaysHidden(serviceAction)) {
                 continue;
@@ -1031,12 +999,12 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
                 continue;
             }
             final ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;
-        
+
             // see if qualifies by inspecting all parameters
             final int contributeeParam = contributeeParameterMatchOf(contributedAction);
             if (contributeeParam != -1) {
-                ObjectActionContributee contributeeAction = 
-                        new ObjectActionContributee(serviceAdapter, contributedAction, contributeeParam, this,
+                ObjectActionContributee contributeeAction =
+                        new ObjectActionContributee(servicePojo, contributedAction, contributeeParam, this,
                                 objectMemberDependencies);
                 facetProcessor.processMemberOrder(metadataProperties, contributeeAction);
                 contributeeActions.add(contributeeAction);
@@ -1044,7 +1012,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         }
         contributeeActionsToAppendTo.addAll(contributeeActions);
     }
-    
+
     private boolean isAlwaysHidden(final FacetHolder holder) {
         final HiddenFacet hiddenFacet = holder.getFacet(HiddenFacet.class);
         return hiddenFacet != null && hiddenFacet.when() == When.ALWAYS && hiddenFacet.where() == Where.ANYWHERE;

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index 6e21a37..6906338 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -46,7 +46,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 
 public class OneToManyAssociationContributee extends OneToManyAssociationImpl implements ContributeeMember {
 
-    private final ObjectAdapter serviceAdapter;
+    private final Object servicePojo;
     private final ObjectAction serviceAction;
     
 
@@ -68,13 +68,13 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
     }
     
     public OneToManyAssociationContributee(
-            final ObjectAdapter serviceAdapter, 
+            final Object servicePojo,
             final ObjectActionImpl serviceAction,
             final ObjectSpecification contributeeType,
             final ObjectMemberDependencies objectMemberDependencies) {
         super(serviceAction.getFacetedMethod(), typeOfSpec(serviceAction, objectMemberDependencies),
                 objectMemberDependencies);
-        this.serviceAdapter = serviceAdapter;
+        this.servicePojo = servicePojo;
         this.serviceAction = serviceAction;
 
         //
@@ -97,13 +97,13 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
         // CollectionAnnotationFacetFactory is also run against actions.
         //
         FacetUtil.copyFacets(serviceAction.getFacetedMethod(), facetHolder);
-        
+
 
         // calculate the identifier
         final Identifier contributorIdentifier = serviceAction.getFacetedMethod().getIdentifier();
         final String memberName = contributorIdentifier.getMemberName();
         List<String> memberParameterNames = contributorIdentifier.getMemberParameterNames();
-        
+
         identifier = Identifier.actionIdentifier(contributeeType.getCorrespondingClass().getName(), memberName, memberParameterNames);
     }
 
@@ -120,7 +120,7 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
 
     @Override
     public ObjectAdapter get(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
-        return serviceAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
+        return serviceAction.execute(getServiceAdapter(), new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
     }
 
     @Override
@@ -145,7 +145,7 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
             final InteractionInitiatedBy interactionInitiatedBy,
             Where where) {
         final VisibilityContext<?> ic = ((ObjectMemberAbstract)serviceAction).createVisibleInteractionContext(
-                serviceAdapter, interactionInitiatedBy, where);
+                getServiceAdapter(), interactionInitiatedBy, where);
         ic.putContributee(0, contributee); // by definition, the contributee will be the first arg of the service action
         return InteractionUtils.isVisibleResult(this, ic).createConsent();
     }
@@ -156,7 +156,7 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
             final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
         final ObjectMemberAbstract serviceAction = (ObjectMemberAbstract) this.serviceAction;
         final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(
-                serviceAdapter, interactionInitiatedBy, where);
+                getServiceAdapter(), interactionInitiatedBy, where);
         ic.putContributee(0, contributee); // by definition, the contributee will be the first arg of the service action
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }
@@ -211,4 +211,7 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
         facetHolder.removeFacet(facetType);
     }
 
+    public ObjectAdapter getServiceAdapter() {
+        return getAdapterManager().adapterFor(servicePojo);
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index 24f58ad..b57b7f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -17,6 +17,7 @@
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
@@ -43,9 +44,8 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
 
 public class OneToOneAssociationContributee extends OneToOneAssociationImpl implements ContributeeMember {
 
-    private final ObjectAdapter serviceAdapter;
+    private final Object servicePojo;
     private final ObjectAction serviceAction;
-    
 
     /**
      * Hold facets rather than delegate to the contributed action (different types might
@@ -56,12 +56,14 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
     private final Identifier identifier;
 
     public OneToOneAssociationContributee(
-            final ObjectAdapter serviceAdapter, 
-            final ObjectActionImpl serviceAction, 
+            final Object servicePojo,
+            final ObjectActionImpl serviceAction,
             final ObjectSpecification contributeeType,
             final ObjectMemberDependencies objectMemberDependencies) {
         super(serviceAction.getFacetedMethod(), serviceAction.getReturnType(), objectMemberDependencies);
-        this.serviceAdapter = serviceAdapter;
+
+        this.servicePojo = servicePojo;
+
         this.serviceAction = serviceAction;
 
         //
@@ -69,7 +71,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
         //
         final NotPersistedFacet notPersistedFacet = new NotPersistedFacetAbstract(this) {};
         final DisabledFacet disabledFacet = disabledFacet();
-        
+
         FacetUtil.addFacet(notPersistedFacet);
         FacetUtil.addFacet(disabledFacet);
 
@@ -86,7 +88,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
         final Identifier contributorIdentifier = contributor.getIdentifier();
         final String memberName = contributorIdentifier.getMemberName();
         List<String> memberParameterNames = contributorIdentifier.getMemberParameterNames();
-        
+
         identifier = Identifier.actionIdentifier(contributeeType.getCorrespondingClass().getName(), memberName, memberParameterNames);
     }
 
@@ -103,7 +105,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
 
     @Override
     public ObjectAdapter get(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
-        return serviceAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
+        return serviceAction.execute(getServiceAdapter(), new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
     }
 
     @Override
@@ -128,7 +130,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
             final InteractionInitiatedBy interactionInitiatedBy,
             Where where) {
         final VisibilityContext<?> ic = ((ObjectMemberAbstract)serviceAction).createVisibleInteractionContext(
-                serviceAdapter, interactionInitiatedBy, where);
+                getServiceAdapter(), interactionInitiatedBy, where);
         ic.putContributee(0, contributee); // by definition, the contributee will be the first arg of the service action
         return InteractionUtils.isVisibleResult(this, ic).createConsent();
     }
@@ -138,7 +140,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
             final ObjectAdapter contributee,
             final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
         final UsabilityContext<?> ic = ((ObjectMemberAbstract)serviceAction).createUsableInteractionContext(
-                serviceAdapter, interactionInitiatedBy, where);
+                getServiceAdapter(), interactionInitiatedBy, where);
         ic.putContributee(0, contributee); // by definition, the contributee will be the first arg of the service action
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }
@@ -193,4 +195,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
         facetHolder.removeFacet(facetType);
     }
 
+    private ObjectAdapter getServiceAdapter() {
+        return getAdapterManager().adapterFor(servicePojo);
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
index a7f88c3..87a521b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
@@ -169,17 +169,6 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
         return null;
     }
 
-    // /////////////////////////////////////////////////////
-    // Service Actions
-    // /////////////////////////////////////////////////////
-
-    /**
-     * Review: is it necessary to override for this subclass?
-     */
-    @Override
-    public List<ObjectAction> getServiceActionsReturning(final List<ActionType> type) {
-        return Collections.emptyList();
-    }
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b8fb1747/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 8abeac7..3116df6 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
@@ -100,11 +100,6 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
-    public List<ObjectAction> getServiceActionsReturning(final List<ActionType> types) {
-        return null;
-    }
-
-    @Override
     public boolean isAbstract() {
         return false;
     }