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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new c795aea  ISIS-2340: further remove contributee leftovers
c795aea is described below

commit c795aea4d79ffcbaa3606ce43a97fabbcd050175
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Sun May 10 10:00:17 2020 +0200

    ISIS-2340: further remove contributee leftovers
---
 .../invocation/ActionDomainEventFacetAbstract.java |  14 +-
 .../members/disabled/DisabledFacetAbstract.java    |   7 -
 .../method/DisableForContextFacetViaMethod.java    |   4 +-
 .../method/HideForContextFacetViaMethod.java       |   4 +-
 .../metamodel/interactions/InteractionContext.java |  25 +--
 .../isis/core/metamodel/spec/ManagedObject.java    |  21 +--
 .../metamodel/specloader/specimpl/Factories.java   |  17 --
 .../specimpl/OneToManyAssociationContributee.java  | 191 ---------------------
 .../specimpl/OneToOneAssociationContributee.java   | 174 -------------------
 9 files changed, 7 insertions(+), 450 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
index 38cd4e5..0b22107 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
@@ -44,7 +44,6 @@ import 
org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 
 import lombok.Getter;
 import lombok.Setter;
-import lombok.val;
 
 public abstract class ActionDomainEventFacetAbstract
 extends SingleClassValueFacetAbstract 
@@ -146,20 +145,9 @@ implements ActionDomainEventFacet {
         return ((ActionInteractionContext) ic).getObjectAction();
     }
 
+    @Deprecated
     private static Can<ManagedObject> argumentAdaptersFrom(
             final InteractionContext<? extends InteractionEvent> ic) {
-        
-        val contributee = ic.getContributeeWithParamIndex();
-
-        if(contributee!=null) {
-
-            val adapter = contributee.getIndex() == 0
-                    ? contributee.getValue()
-                    : ManagedObject.unspecified();
-            
-            return Can.ofSingleton(adapter);
-                
-        }
 
         return Can.empty();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
index 1524db7..fddf865 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
@@ -26,11 +26,8 @@ import 
org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.WhereValueFacetAbstract;
-import org.apache.isis.core.metamodel.interactions.ActionUsabilityContext;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import 
org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationContributee;
-import 
org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationContributee;
 
 public abstract class DisabledFacetAbstract extends WhereValueFacetAbstract 
implements DisabledFacet {
 
@@ -71,10 +68,6 @@ public abstract class DisabledFacetAbstract extends 
WhereValueFacetAbstract impl
             return null;
         }
 
-        if(ic instanceof ActionUsabilityContext && (getFacetHolder() 
instanceof OneToOneAssociationContributee || getFacetHolder() instanceof 
OneToManyAssociationContributee)) {
-            // otherwise ends up vetoing the invocation of the contributing 
action
-            return null;
-        }
         final ManagedObject target = ic.getTarget();
         final String disabledReason = disabledReason(target);
         if (disabledReason != null) {
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
index 4752df3..4beb180 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
-import org.apache.isis.core.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
@@ -74,8 +73,7 @@ implements ImperativeFacet {
         if (target == null) {
             return null;
         }
-        final Object returnValue = ManagedObject.InvokeUtil.invokeC(method, 
target, 
-                _NullSafe.streamNullable(ic.getContributeeWithParamIndex()));
+        final Object returnValue = ManagedObject.InvokeUtil.invokeC(method, 
target);
         if(returnValue instanceof String) {
             return (String) returnValue;
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
index 2e63c07..64dd903 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
-import org.apache.isis.core.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -60,8 +59,7 @@ public class HideForContextFacetViaMethod extends 
HideForContextFacetAbstract im
         if (target == null) {
             return null;
         }
-        final Boolean isHidden = (Boolean) 
ManagedObject.InvokeUtil.invokeC(method, target, 
-                _NullSafe.streamNullable(ic.getContributeeWithParamIndex()));
+        final Boolean isHidden = (Boolean) 
ManagedObject.InvokeUtil.invokeC(method, target);
         return isHidden.booleanValue() ? "Hidden" : null;
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
index cb73161..778ff21 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
@@ -19,12 +19,8 @@
 
 package org.apache.isis.core.metamodel.interactions;
 
-import javax.annotation.Nullable;
-
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
-import org.apache.isis.core.commons.internal.base._Tuples;
-import org.apache.isis.core.commons.internal.base._Tuples.Indexed;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -50,7 +46,7 @@ import 
org.apache.isis.core.security.authentication.AuthenticationSession;
  * code-smell. However, it is required because the {@link InteractionContext
  * context} hierarchy is internal to the framework (with references to
  * {@link ManagedObject}s, {@link AuthenticationSession}s and so forth), 
whereas
- * the {@link InteractionEvent event} hierarchy is part of the corelib, that is
+ * the {@link InteractionEvent event} hierarchy is part of AppLib, that is
  * public API.
  *
  * <p>
@@ -64,9 +60,6 @@ public abstract class InteractionContext<T extends 
InteractionEvent> {
     private final Identifier identifier;
     private final ManagedObject target;
 
-    private int contributeeParam = -1; // no contributee
-    private ManagedObject contributee = null;
-    
     private ManagedObject mixedInAdapter = null; // for mixin members only, 
obviously
 
     public InteractionContext(
@@ -135,20 +128,6 @@ public abstract class InteractionContext<T extends 
InteractionEvent> {
 
     // //////////////////////////////////////
 
-    public void putContributee(int contributeeParam, ManagedObject 
contributee) {
-        this.contributeeParam = contributeeParam;
-        this.contributee = contributee;
-    }
-
-    public @Nullable Indexed<ManagedObject> getContributeeWithParamIndex() {
-        if(contributee==null) {
-            return null;
-        }
-        return _Tuples.indexed(contributeeParam, contributee);
-    }
-
-    // //////////////////////////////////////
-
     public void setMixedIn(final ManagedObject mixedInAdapter) {
         this.mixedInAdapter = mixedInAdapter;
     }
@@ -159,8 +138,6 @@ public abstract class InteractionContext<T extends 
InteractionEvent> {
 
     // //////////////////////////////////////
 
-
-
     /**
      * Factory method to create corresponding {@link InteractionEvent}.
      *
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index a8bc77a..185836e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -39,7 +39,6 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.base._Lazy;
-import org.apache.isis.core.commons.internal.base._Tuples.Indexed;
 import org.apache.isis.core.commons.internal.collections._Arrays;
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.internal.collections._Sets;
@@ -655,25 +654,11 @@ public interface ManagedObject {
             return MethodExtensions.invoke(method, unwrapSingle(adapter), 
unwrapMultipleAsArray(argumentAdapters));
         }
     
+        @Deprecated
         public static Object invokeC(
                 Method method, 
-                ManagedObject adapter, 
-                Stream<Indexed<? extends ManagedObject>> paramsAndIndexes) {
-            return invoke(method, adapter, asArray(paramsAndIndexes, 
method.getParameterTypes().length));
-        }
-    
-        private static ManagedObject[] asArray(
-                Stream<Indexed<? extends ManagedObject>> paramsAndIndexes, 
-                int length) {
-            
-            final ManagedObject[] args = new ManagedObject[length];
-            paramsAndIndexes.forEach(entry->{
-                final int paramNum = entry.getIndex();
-                if(paramNum < length) {
-                    args[paramNum] = entry.getValue();
-                }
-            });
-            return args;
+                ManagedObject adapter) {
+            return invoke(method, adapter, new 
ManagedObject[method.getParameterTypes().length]);
         }
     
         /**
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/Factories.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/Factories.java
index ebd10dc..f8f3b0a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/Factories.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/Factories.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import java.util.function.Function;
 
-import org.apache.isis.core.commons.internal.ioc.ManagedBeanAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 
@@ -32,22 +31,6 @@ import lombok.val;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 final class Factories {
 
-    // -- CONTRIBUTED
-    
-    static Function<ObjectActionDefault, ObjectAssociation> 
contributeeAssociation(
-            final ManagedBeanAdapter serviceBean,
-            final ObjectSpecification contributeeType) {
-
-        return objectAction -> {
-            val returnType = objectAction.getReturnType();
-            if (returnType.isNotCollection()) {
-                return new OneToOneAssociationContributee(serviceBean, 
objectAction, contributeeType);
-            } 
-            return new OneToManyAssociationContributee(serviceBean, 
objectAction, contributeeType);
-            
-        };
-    }
-    
     // -- MIXINS
     
     static Function<ObjectActionDefault, ObjectActionMixedIn> mixedInAction(
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
deleted file mode 100644
index b660b85..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.specloader.specimpl;
-
-import java.util.List;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.collections.Can;
-import org.apache.isis.core.commons.internal.ioc.ManagedBeanAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import 
org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
-import 
org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-
-import lombok.Getter;
-import lombok.val;
-
-public class OneToManyAssociationContributee 
-extends OneToManyAssociationDefault implements ContributeeMember {
-
-    private final ManagedBeanAdapter serviceBean;
-    private final ObjectAction serviceAction;
-
-
-    /**
-     * Hold facets rather than delegate to the contributed action (different 
types might
-     * use layout metadata to position the contributee in different ways)
-     */
-    @Getter(onMethod = @__(@Override))
-    private final FacetHolder facetHolder = new FacetHolderImpl();
-
-    private final Identifier identifier;
-
-    private static ObjectSpecification typeOfSpec(final ObjectActionDefault 
objectAction) {
-
-        val actionTypeOfFacet = objectAction.getFacet(TypeOfFacet.class);
-        val specLoader = 
objectAction.getMetaModelContext().getSpecificationLoader();
-        // TODO: a bit of a hack; ought really to set up a fallback 
TypeOfFacetDefault which ensures that there is always
-        // a TypeOfFacet for any contributee associations created from 
contributed actions.
-        val type = actionTypeOfFacet != null? actionTypeOfFacet.value(): 
(Class)Object.class;
-        return specLoader.loadSpecification(type);
-    }
-
-    public OneToManyAssociationContributee(
-            final ManagedBeanAdapter serviceBean,
-            final ObjectActionDefault serviceAction,
-            final ObjectSpecification contributeeType) {
-
-        super(serviceAction.getFacetedMethod(),
-                typeOfSpec(serviceAction));
-        this.serviceBean = serviceBean;
-        this.serviceAction = serviceAction;
-
-        //
-        // ensure the contributed collection cannot be modified, and derive 
its TypeOfFaccet
-        //
-        final NotPersistedFacet notPersistedFacet = new 
NotPersistedFacetAbstract(this) {};
-        final DisabledFacet disabledFacet = disabledFacet();
-        final TypeOfFacet typeOfFacet = new 
TypeOfFacetAbstract(getSpecification().getCorrespondingClass(), this) {};
-
-        FacetUtil.addFacet(notPersistedFacet);
-        FacetUtil.addFacet(disabledFacet);
-        FacetUtil.addFacet(typeOfFacet);
-
-
-        //
-        // in addition, copy over facets from contributed to own.
-        //
-        // These could include everything under @Collection(...) because the
-        // 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);
-    }
-
-    private DisabledFacet disabledFacet() {
-        final DisabledFacet originalFacet = 
facetHolder.getFacet(DisabledFacet.class);
-        if( originalFacet != null &&
-                originalFacet.where() == Where.ANYWHERE) {
-            return originalFacet;
-        }
-        // ensure that the contributed association is always disabled
-        return new DisabledFacetForContributee("Contributed collection", this);
-    }
-
-    @Override
-    public ManagedObject get(
-            final ManagedObject ownerAdapter, 
-            final InteractionInitiatedBy interactionInitiatedBy) {
-        
-        val params = Can.ofSingleton(ownerAdapter);
-        
-        return serviceAction.execute(getServiceAdapter(), /*mixin*/null, 
params, interactionInitiatedBy);
-    }
-
-    @Override
-    public ObjectSpecification getOnType() {
-        return serviceAction.getOnType();
-    }
-
-    @Override
-    public Identifier getIdentifier() {
-        return identifier;
-    }
-
-    @Override
-    public boolean isContributedBy(final ObjectAction serviceAction) {
-        return serviceAction == this.serviceAction;
-    }
-
-    @Override
-    public int getContributeeParamIndex() {
-        // always 0 for contributed collections
-        return 0;
-    }
-
-    @Override
-    public Consent isVisible(
-            final ManagedObject contributee,
-            final InteractionInitiatedBy interactionInitiatedBy,
-            Where where) {
-        final VisibilityContext<?> ic = 
((ObjectMemberAbstract)serviceAction).createVisibleInteractionContext(
-                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();
-    }
-
-    @Override
-    public Consent isUsable(
-            final ManagedObject contributee,
-            final InteractionInitiatedBy interactionInitiatedBy, final Where 
where) {
-        final ObjectMemberAbstract serviceAction = (ObjectMemberAbstract) 
this.serviceAction;
-        final UsabilityContext<?> ic = 
serviceAction.createUsableInteractionContext(
-                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();
-    }
-
-    // -- FacetHolder
-
-    private ManagedObject getServiceAdapter() {
-        return getObjectManager().adapt(serviceBean);
-    }
-
-    // -- ContributeeMember2 impl (getServiceContributedBy)
-
-    @Override
-    public ObjectSpecification getServiceContributedBy() {
-        return getServiceAdapter().getSpecification();
-    }
-
-
-
-}
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
deleted file mode 100644
index 75bb665..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.specloader.specimpl;
-
-import java.util.List;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.collections.Can;
-import org.apache.isis.core.commons.internal.ioc.ManagedBeanAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
-import 
org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-
-import lombok.Getter;
-import lombok.val;
-
-public class OneToOneAssociationContributee 
-extends OneToOneAssociationDefault 
-implements ContributeeMember {
-
-    private final ManagedBeanAdapter serviceBean;
-    private final ObjectAction serviceAction;
-
-    /**
-     * Hold facets rather than delegate to the contributed action (different 
types might
-     * use layout metadata to position the contributee in different ways)
-     */
-    @Getter(onMethod = @__(@Override))
-    private final FacetHolder facetHolder = new FacetHolderImpl();
-
-    private final Identifier identifier;
-
-    public OneToOneAssociationContributee(
-            final ManagedBeanAdapter serviceBean,
-            final ObjectActionDefault serviceAction,
-            final ObjectSpecification contributeeType) {
-
-        super(serviceAction.getFacetedMethod(), serviceAction.getReturnType());
-
-        this.serviceBean = serviceBean;
-
-        this.serviceAction = serviceAction;
-
-        //
-        // ensure the contributed property cannot be modified
-        //
-        final NotPersistedFacet notPersistedFacet = new 
NotPersistedFacetAbstract(this) {};
-        final DisabledFacet disabledFacet = disabledFacet();
-
-        FacetUtil.addFacet(notPersistedFacet);
-        FacetUtil.addFacet(disabledFacet);
-
-        //
-        // in addition, copy over facets from contributed to own.
-        //
-        // These could include everything under @Property(...) because the
-        // PropertyAnnotationFacetFactory is also run against actions.
-        //
-        final FacetedMethod contributor = serviceAction.getFacetedMethod();
-        FacetUtil.copyFacets(contributor, facetHolder);
-
-        // calculate the identifier
-        final Identifier contributorIdentifier = contributor.getIdentifier();
-        final String memberName = contributorIdentifier.getMemberName();
-        List<String> memberParameterNames = 
contributorIdentifier.getMemberParameterNames();
-
-        identifier = 
Identifier.actionIdentifier(contributeeType.getCorrespondingClass().getName(), 
memberName, memberParameterNames);
-    }
-
-    private DisabledFacet disabledFacet() {
-        final DisabledFacet originalFacet = 
facetHolder.getFacet(DisabledFacet.class);
-        if( originalFacet != null &&
-                originalFacet.where() == Where.ANYWHERE) {
-            return originalFacet;
-        }
-        // ensure that the contributed association is always disabled
-        return new DisabledFacetForContributee("Contributed property", this);
-    }
-
-    @Override
-    public ManagedObject get(
-            final ManagedObject ownerAdapter, 
-            final InteractionInitiatedBy interactionInitiatedBy) {
-        
-        val params = Can.ofSingleton(ownerAdapter);
-        
-        return serviceAction.execute(getServiceAdapter(), /*mixin*/null, 
params, interactionInitiatedBy);
-    }
-
-    @Override
-    public ObjectSpecification getOnType() {
-        return serviceAction.getOnType();
-    }
-
-    @Override
-    public Identifier getIdentifier() {
-        return identifier;
-    }
-
-    @Override
-    public boolean isContributedBy(final ObjectAction serviceAction) {
-        return serviceAction == this.serviceAction;
-    }
-
-    @Override
-    public int getContributeeParamIndex() {
-        // always 0 for contributed properties
-        return 0;
-    }
-
-    @Override
-    public Consent isVisible(
-            final ManagedObject contributee,
-            final InteractionInitiatedBy interactionInitiatedBy,
-            Where where) {
-        final VisibilityContext<?> ic = 
((ObjectMemberAbstract)serviceAction).createVisibleInteractionContext(
-                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();
-    }
-
-    @Override
-    public Consent isUsable(
-            final ManagedObject contributee,
-            final InteractionInitiatedBy interactionInitiatedBy, final Where 
where) {
-        final UsabilityContext<?> ic = 
((ObjectMemberAbstract)serviceAction).createUsableInteractionContext(
-                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();
-    }
-
-    private ManagedObject getServiceAdapter() {
-        return getObjectManager().adapt(serviceBean);
-    }
-
-    // -- Contributee impl - getServiceContributedBy()
-    @Override
-    public ObjectSpecification getServiceContributedBy() {
-        return getServiceAdapter().getSpecification();
-    }
-
-
-
-}

Reply via email to