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(); - } - - - -}