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 7ba1392 ISIS-2340: remove support for (deprecated) service contributed actions 7ba1392 is described below commit 7ba13927249dfa20fe5208b4b6e90035a9c904c6 Author: Andi Huber <ahu...@apache.org> AuthorDate: Fri May 1 09:37:52 2020 +0200 ISIS-2340: remove support for (deprecated) service contributed actions --- ...nChoicesForCollectionParameterFacetFactory.java | 6 +- .../core/metamodel/spec/feature/ObjectAction.java | 13 ++ .../spec/feature/ObjectActionParameter.java | 14 +- .../metamodel/specloader/specimpl/Factories.java | 14 -- .../specimpl/ObjectActionContributee.java | 253 --------------------- .../specloader/specimpl/ObjectActionDefault.java | 8 + .../specloader/specimpl/ObjectActionMixedIn.java | 8 + .../specimpl/ObjectActionParameterAbstract.java | 63 ++--- .../ObjectActionParameterContributeeAbstract.java | 92 -------- .../ObjectActionParameterMixedInAbstract.java | 35 +-- .../specimpl/ObjectSpecificationAbstract.java | 16 +- .../OneToManyActionParameterContributee.java | 43 ---- ...Contributee.java => PendingParameterModel.java} | 35 +-- .../handlers/DomainObjectInvocationHandler.java | 6 - .../domainobjects/ObjectActionReprRenderer.java | 7 +- .../viewer/wicket/model/models/ScalarModel.java | 59 ++--- 16 files changed, 130 insertions(+), 542 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java index ca78e49..175dd7c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java @@ -32,7 +32,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; -import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionContributee; import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionMixedIn; import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator; import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting; @@ -81,9 +80,8 @@ implements MetaModelRefiner { objectSpec.streamObjectActions(Contributed.INCLUDED) .forEach(objectAction->{ - if(objectAction instanceof ObjectActionMixedIn - || objectAction instanceof ObjectActionContributee) { - // we'll report only the mixin or contributor + if(objectAction instanceof ObjectActionMixedIn) { + // we'll report only the mixin return; } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java index 3264957..8ad07d5 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java @@ -55,9 +55,11 @@ import org.apache.isis.core.metamodel.spec.ActionType; import org.apache.isis.core.metamodel.spec.ManagedObject; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember; +import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel; import static org.apache.isis.core.commons.internal.base._NullSafe.stream; +import lombok.NonNull; import lombok.val; public interface ObjectAction extends ObjectMember { @@ -157,7 +159,18 @@ public interface ObjectAction extends ObjectMember { InteractionInitiatedBy interactionInitiatedBy); + // -- Model for Parameter Negotiation + + + PendingParameterModel newPendingParameterModel( + @NonNull ManagedObject actionOwner, + @NonNull Can<ManagedObject> paramValues); + default PendingParameterModel newPendingParameterModel( + @NonNull ManagedObject actionOwner) { + return newPendingParameterModel(actionOwner, Can.empty()); // init defaults + } + // -- Parameters (declarative) /** diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java index 78a7404..db45efb 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java @@ -31,6 +31,7 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacet; import org.apache.isis.core.metamodel.interactions.ActionArgValidityContext; import org.apache.isis.core.metamodel.spec.ManagedObject; import org.apache.isis.core.metamodel.spec.ObjectSpecification; +import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel; /** * Analogous to {@link ObjectAssociation}. @@ -91,8 +92,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder { * user can choose from, based on the input search argument. */ Can<ManagedObject> getAutoComplete( - ManagedObject adapter, - Can<ManagedObject> pendingArgs, + PendingParameterModel pendingArgs, String searchArg, InteractionInitiatedBy interactionInitiatedBy); @@ -110,16 +110,18 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder { * user can choose from. */ Can<ManagedObject> getChoices( - ManagedObject adapter, - Can<ManagedObject> pendingArgs, + PendingParameterModel pendingArgs, InteractionInitiatedBy interactionInitiatedBy); ManagedObject getDefault( - ManagedObject adapter, - Can<ManagedObject> pendingArgs, + PendingParameterModel pendingArgs, Integer paramNumUpdated); + default ManagedObject getDefault(ManagedObject actionOnwer) { + return getDefault(getAction().newPendingParameterModel(actionOnwer), null); + } + /** * Whether this parameter is visible given the entered previous arguments 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 0811362..ebd10dc 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 @@ -48,20 +48,6 @@ final class Factories { }; } - public static Function<ObjectActionDefault, ObjectActionContributee> contributeeAction( - final ObjectSpecification typeSpec, - final Object servicePojo) { - - return contributedAction -> { - // see if qualifies by inspecting all parameters - val contributeeParam = Utils.contributeeParameterIndexOf(typeSpec, contributedAction); - if(contributeeParam == -1) { - return null; // should not happen if filtered correctly before - } - return new ObjectActionContributee(servicePojo, contributedAction, contributeeParam, typeSpec); - }; - } - // -- MIXINS static Function<ObjectActionDefault, ObjectActionMixedIn> mixedInAction( 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 deleted file mode 100644 index ce9419e..0000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java +++ /dev/null @@ -1,253 +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.collections._Lists; -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.facetapi.FeatureType; -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 org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; - -import lombok.val; - -public class ObjectActionContributee extends ObjectActionDefault implements ContributeeMember { - - private final Object servicePojo; - private final ObjectActionDefault serviceAction; - private final int contributeeParamIndex; - private final ObjectSpecification contributeeType; - - /** - * Hold facets rather than delegate to the contributed action (different types might - * use layout metadata to position the contributee in different ways) - */ - private final FacetHolder facetHolder = new FacetHolderImpl(); - - private final Identifier identifier; - - public ObjectActionContributee( - final Object servicePojo, - final ObjectActionDefault serviceAction, - final int contributeeParam, - final ObjectSpecification contributeeType) { - - super(serviceAction.getFacetedMethod()); - - this.servicePojo = servicePojo; - this.serviceAction = serviceAction; - this.contributeeType = contributeeType; - this.contributeeParamIndex = contributeeParam; - - // copy over facets from contributed to own. - 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(getOnType().getCorrespondingClass().getName(), memberName, memberParameterNames); - } - - @Override - public ObjectSpecification getOnType() { - return contributeeType; - } - - @Override - public int getParameterCount() { - return serviceAction.getParameterCount() - 1; - } - - @Override - public boolean isContributedBy(final ObjectAction serviceAction) { - return serviceAction == this.serviceAction; - } - - @Override - public int getContributeeParamIndex() { - return contributeeParamIndex; - } - - @Override - protected synchronized Can<ObjectActionParameter> determineParameters() { - - val serviceParameters = serviceAction.getParameters(); - //final List<FacetedMethodParameter> paramPeers = getFacetedMethod().getParameters(); //side effects? - - final List<ObjectActionParameter> contributeeParameters = _Lists.newArrayList(); - int contributeeParamNum = 0; - - for (int serviceParamNum = 0; serviceParamNum < serviceParameters.size(); serviceParamNum++ ) { - if(serviceParamNum == contributeeParamIndex) { - // skip so is omitted from the Contributed action - continue; - } - - final ObjectActionParameterAbstract serviceParameter = - (ObjectActionParameterAbstract) serviceParameters.getElseFail(serviceParamNum); - - final ObjectActionParameterContributee contributedParam = - serviceParameter.getPeer().getFeatureType() == FeatureType.ACTION_PARAMETER_SCALAR - ? new OneToOneActionParameterContributee( - servicePojo, serviceParameter, contributeeParamNum, this) - : new OneToManyActionParameterContributee( - servicePojo, serviceParameter, contributeeParamNum, this); - - contributeeParameters.add(contributedParam); - - contributeeParamNum++; - } - return Can.ofCollection(contributeeParameters); - } - - @Override - public Consent isVisible( - final ManagedObject contributee, - final InteractionInitiatedBy interactionInitiatedBy, - Where where) { - final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(getServiceAdapter(), - interactionInitiatedBy, where); - ic.putContributee(this.contributeeParamIndex, contributee); - return InteractionUtils.isVisibleResult(this, ic).createConsent(); - } - - @Override - public Consent isUsable( - final ManagedObject contributee, - final InteractionInitiatedBy interactionInitiatedBy, final Where where) { - final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(getServiceAdapter(), - interactionInitiatedBy, where); - ic.putContributee(this.contributeeParamIndex, contributee); - return InteractionUtils.isUsableResult(this, ic).createConsent(); - } - - @Override - public Can<ManagedObject> getDefaults(final ManagedObject target) { - val contributorDefaults = serviceAction.getDefaults(getServiceAdapter()); - return contributorDefaults.remove(contributeeParamIndex); - } - - @Override - public Can<Can<ManagedObject>> getChoices( - final ManagedObject target, - final InteractionInitiatedBy interactionInitiatedBy) { - val serviceChoices = serviceAction.getChoices(getServiceAdapter(), interactionInitiatedBy); - return serviceChoices.remove(contributeeParamIndex); - } - - @Override - public Consent isProposedArgumentSetValid( - final ManagedObject contributee, - final Can<ManagedObject> proposedArguments, - final InteractionInitiatedBy interactionInitiatedBy) { - - val serviceArguments = argsPlusContributee(contributee, proposedArguments); - return serviceAction - .isProposedArgumentSetValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy); - } - - @Override - public Consent isEachIndividualArgumentValid( - final ManagedObject contributee, - final Can<ManagedObject> proposedArguments, - final InteractionInitiatedBy interactionInitiatedBy) { - - val serviceArguments = argsPlusContributee(contributee, proposedArguments); - return serviceAction - .isEachIndividualArgumentValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy); - } - - @Override - public Consent isArgumentSetValid( - final ManagedObject contributee, - final Can<ManagedObject> proposedArguments, - final InteractionInitiatedBy interactionInitiatedBy) { - - val serviceArguments = argsPlusContributee(contributee, proposedArguments); - return serviceAction - .isArgumentSetValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy); - } - - @Override - public ManagedObject execute( - final ManagedObject targetAdapter, - final ManagedObject mixedInAdapter, - final Can<ManagedObject> argumentAdapters, - final InteractionInitiatedBy interactionInitiatedBy) { - - setupCommand(targetAdapter, argumentAdapters); - - val serviceArguments = argsPlusContributee(targetAdapter, argumentAdapters); - return serviceAction.executeInternal( - getServiceAdapter(), mixedInAdapter, serviceArguments, interactionInitiatedBy); - } - - - private Can<ManagedObject> argsPlusContributee( - final ManagedObject contributee, - final Can<ManagedObject> arguments) { - - arguments.add(contributeeParamIndex, contributee); - return arguments; - } - - // ////////////////////////////////////// - // FacetHolder - // ////////////////////////////////////// - - @Override - public FacetHolder getFacetHolder() { - return facetHolder; - } - - // ////////////////////////////////////// - - /* (non-Javadoc) - * @see ObjectMemberAbstract#getIdentifier() - */ - @Override - public Identifier getIdentifier() { - return identifier; - } - - // ////////////////////////////////////// - - public ManagedObject getServiceAdapter() { - return getObjectManager().adapt(servicePojo); - } - - @Override - public ObjectSpecification getServiceContributedBy() { - return getServiceAdapter().getSpecification(); - } -} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java index bdb40d3..6f023c3 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java @@ -67,6 +67,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; +import lombok.NonNull; import lombok.val; public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectAction { @@ -148,6 +149,13 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA } + @Override + public PendingParameterModel newPendingParameterModel( + @NonNull ManagedObject actionOwner, + @NonNull Can<ManagedObject> paramValues) { + return PendingParameterModel.of(this, actionOwner, actionOwner, paramValues); + } + // -- Parameters @Override diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java index 3dcf065..4354c1a 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java @@ -45,6 +45,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; import lombok.Getter; +import lombok.NonNull; import lombok.val; public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInMember { @@ -136,6 +137,13 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM } @Override + public PendingParameterModel newPendingParameterModel( + @NonNull ManagedObject actionOwner, + @NonNull Can<ManagedObject> paramValues) { + return PendingParameterModel.of(this, actionOwner, mixinAdapterFor(actionOwner), paramValues); + } + + @Override protected synchronized Can<ObjectActionParameter> determineParameters() { if (parameters != null) { // because possible race condition (caller isn't synchronized) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java index 57acb44..26ba3f9 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java @@ -207,17 +207,16 @@ implements ObjectActionParameter, FacetHolder.Delegating { @Override public Can<ManagedObject> getAutoComplete( - final ManagedObject adapter, - final Can<ManagedObject> pendingArgs, + final PendingParameterModel pendingArgs, final String searchArg, final InteractionInitiatedBy interactionInitiatedBy) { - final List<ManagedObject> adapters = _Lists.newArrayList(); - final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class); + val adapters = _Lists.<ManagedObject>newArrayList(); + val autoCompleteFacet = getFacet(ActionParameterAutoCompleteFacet.class); - if (facet != null) { - final Object[] choices = facet - .autoComplete(adapter, pendingArgs, searchArg, interactionInitiatedBy); + if (autoCompleteFacet != null) { + final Object[] choices = autoCompleteFacet + .autoComplete(pendingArgs.getActionTarget(), pendingArgs.getParamValues(), searchArg, interactionInitiatedBy); checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification()); for (final Object choice : choices) { adapters.add(getObjectManager().adapt(choice)); @@ -244,26 +243,21 @@ implements ObjectActionParameter, FacetHolder.Delegating { @Override public Can<ManagedObject> getChoices( - final ManagedObject adapter, - final Can<ManagedObject> pendingArgs, + final PendingParameterModel pendingArgs, final InteractionInitiatedBy interactionInitiatedBy) { - val args = argsForDefaultOrChoices(adapter, pendingArgs); - val target = targetForDefaultOrChoices(adapter); - - return findChoices(target, args, interactionInitiatedBy); + return findChoices(pendingArgs, interactionInitiatedBy); } private Can<ManagedObject> findChoices( - final ManagedObject target, - final Can<ManagedObject> pendingArgs, + final PendingParameterModel pendingArgs, final InteractionInitiatedBy interactionInitiatedBy) { final List<ManagedObject> adapters = _Lists.newArrayList(); final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class); if (facet != null) { - final Object[] choices = facet.getChoices(target, pendingArgs, interactionInitiatedBy); + final Object[] choices = facet.getChoices(pendingArgs.getActionTarget(), pendingArgs.getParamValues(), interactionInitiatedBy); checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification()); for (final Object choice : choices) { ManagedObject adapter = choice != null? getObjectManager().adapt(choice) : null; @@ -277,51 +271,30 @@ implements ObjectActionParameter, FacetHolder.Delegating { @Override public ManagedObject getDefault( - final ManagedObject adapter, - final Can<ManagedObject> pendingArgs, + final PendingParameterModel pendingArgs, final Integer paramNumUpdated) { - final ManagedObject target = targetForDefaultOrChoices(adapter); - val args = argsForDefaultOrChoices(adapter, pendingArgs); - - return findDefault(target, args, paramNumUpdated); + return findDefault(pendingArgs, paramNumUpdated); } private ManagedObject findDefault( - final ManagedObject target, - final Can<ManagedObject> args, + final PendingParameterModel pendingArgs, final Integer paramNumUpdated) { - final ActionParameterDefaultsFacet defaultsFacet = getFacet(ActionParameterDefaultsFacet.class); + val defaultsFacet = getFacet(ActionParameterDefaultsFacet.class); if (defaultsFacet != null) { - final Object dflt = defaultsFacet.getDefault(target, args, paramNumUpdated); - if (dflt == null) { + final Object defaultValue = defaultsFacet + .getDefault(pendingArgs.getActionTarget(), pendingArgs.getParamValues(), paramNumUpdated); + if (defaultValue == null) { // it's possible that even though there is a default facet, when // invoked it is unable to return a default. return null; } - return getObjectManager().adapt(dflt); + return getObjectManager().adapt(defaultValue); } return null; } - /** - * Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override. - */ - protected ManagedObject targetForDefaultOrChoices(final ManagedObject adapter) { - return adapter; - } - - /** - * Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override. - */ - protected Can<ManagedObject> argsForDefaultOrChoices( - final ManagedObject adapter, - final Can<ManagedObject> argumentsIfAvailable) { - return argumentsIfAvailable; - } - - // helpers static void checkChoicesOrAutoCompleteType( final SpecificationLoader specificationLookup, diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java deleted file mode 100644 index 829a4ce..0000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java +++ /dev/null @@ -1,92 +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.core.commons.collections.Can; -import org.apache.isis.core.metamodel.commons.ListExtensions; -import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; -import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.spec.ManagedObject; -import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; - -/** - * - * @deprecated contributed actions from services are deprecated, use mixins instead - * - */ -@Deprecated -public abstract class ObjectActionParameterContributeeAbstract -extends ObjectActionParameterAbstract -implements ObjectActionParameterContributee { - - private final Object servicePojo; - private final ObjectActionParameter serviceActionParameter; - private final ObjectActionContributee contributeeAction; - - public ObjectActionParameterContributeeAbstract( - final FeatureType featureType, - final Object servicePojo, - final ObjectActionParameterAbstract serviceActionParameter, - final int contributeeParamNumber, - final ObjectActionContributee contributeeAction) { - - super(featureType, contributeeParamNumber, contributeeAction, serviceActionParameter.getPeer()); - this.servicePojo = servicePojo; - this.serviceActionParameter = serviceActionParameter; - this.contributeeAction = contributeeAction; - } - - @Override - public Can<ManagedObject> getAutoComplete( - final ManagedObject adapter, - final Can<ManagedObject> pendingArgs, - final String searchArg, - final InteractionInitiatedBy interactionInitiatedBy) { - - return serviceActionParameter.getAutoComplete( - getServiceAdapter(), - pendingArgs, - searchArg, - interactionInitiatedBy); - } - - protected ManagedObject getServiceAdapter() { - return getObjectManager().adapt(servicePojo); - } - - @Override - protected ManagedObject targetForDefaultOrChoices(final ManagedObject adapter) { - return getServiceAdapter(); - } - - - @Override - protected Can<ManagedObject> argsForDefaultOrChoices( - final ManagedObject contributee, - final Can<ManagedObject> pendingArgs) { - - final List<ManagedObject> suppliedArgs = pendingArgs.toList(); - final int contributeeParam = contributeeAction.getContributeeParamIndex(); - ListExtensions.insert(suppliedArgs, contributeeParam, contributee); - return Can.ofCollection(suppliedArgs); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java index 5f866d9..9c0ef0c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java @@ -23,13 +23,13 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; import org.apache.isis.core.metamodel.facetapi.FeatureType; import org.apache.isis.core.metamodel.interactions.ActionArgValidityContext; import org.apache.isis.core.metamodel.spec.ManagedObject; -import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; + +import lombok.val; public abstract class ObjectActionParameterMixedInAbstract extends ObjectActionParameterAbstract implements ObjectActionParameterMixedIn { - private final ObjectActionParameter mixinParameter; private final ObjectActionMixedIn mixedInAction; public ObjectActionParameterMixedInAbstract( @@ -38,44 +38,21 @@ implements ObjectActionParameterMixedIn { final ObjectActionMixedIn mixedInAction) { super(featureType, mixinParameter.getNumber(), mixedInAction, mixinParameter.getPeer()); - this.mixinParameter = mixinParameter; this.mixedInAction = mixedInAction; } @Override - public Can<ManagedObject> getAutoComplete( - final ManagedObject mixedInAdapter, - final Can<ManagedObject> pendingArgs, - final String searchArg, - final InteractionInitiatedBy interactionInitiatedBy) { - - return mixinParameter.getAutoComplete( - mixinAdapterFor(mixedInAdapter), - pendingArgs, - searchArg, - interactionInitiatedBy); - } - - @Override - protected ManagedObject targetForDefaultOrChoices(final ManagedObject mixedInAdapter) { - return mixinAdapterFor(mixedInAdapter); - } - - private ManagedObject mixinAdapterFor(final ManagedObject mixedInAdapter) { - return mixedInAction.mixinAdapterFor(mixedInAdapter); - } - - @Override public ActionArgValidityContext createProposedArgumentInteractionContext( final ManagedObject mixedInAdapter, final Can<ManagedObject> proposedArguments, final int position, final InteractionInitiatedBy interactionInitiatedBy) { - final ManagedObject targetObject = mixinAdapterFor(mixedInAdapter); + val targetObject = mixedInAction.mixinAdapterFor(mixedInAdapter); - final ActionArgValidityContext actionArgValidityContext = new ActionArgValidityContext( - targetObject, mixedInAction.mixinAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy); + val actionArgValidityContext = new ActionArgValidityContext( + targetObject, mixedInAction.mixinAction, getIdentifier(), + proposedArguments, position, interactionInitiatedBy); actionArgValidityContext.setMixedIn(mixedInAdapter); return actionArgValidityContext; } 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 f617845..6133ec7 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 @@ -842,6 +842,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem * If this specification {@link #isManagedBean() is actually for} a service, * then returns an empty list. */ + @Deprecated private List<ObjectAction> createContributeeActions() { if (isManagedBean() || isValue()) { return Collections.emptyList(); @@ -853,7 +854,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem } - + @Deprecated private void forEachContributeeAction( final Object servicePojo, final Consumer<ObjectAction> onNewContributeeAction) { @@ -875,10 +876,15 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem serviceActions .filter(Predicates.isContributeeAction(this)) - .map(ObjectActionDefault.class::cast) - .map(Factories.contributeeAction(this, servicePojo)) - .peek(facetProcessor::processMemberOrder) - .forEach(onNewContributeeAction); + + .findAny().ifPresent(action->_Exceptions + .unrecoverableFormatted("ContributeeActions like %s are no longer supported", action)); + + +// .map(ObjectActionDefault.class::cast) +// .map(Factories.contributeeAction(this, servicePojo)) +// .peek(facetProcessor::processMemberOrder) +// .forEach(onNewContributeeAction); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java deleted file mode 100644 index 20fe317..0000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java +++ /dev/null @@ -1,43 +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 org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics; -import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet; -import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter; - -public class OneToManyActionParameterContributee -extends ObjectActionParameterContributeeAbstract -implements OneToManyActionParameter { - - public OneToManyActionParameterContributee( - final Object servicePojo, - final ObjectActionParameterAbstract serviceActionParameter, - final int contributeeParamNumber, - final ObjectActionContributee contributeeAction) { - super(FeatureType.ACTION_PARAMETER_COLLECTION, servicePojo, - serviceActionParameter, contributeeParamNumber, contributeeAction); - } - - @Override - public CollectionSemantics getCollectionSemantics() { - return getFacet(CollectionSemanticsFacet.class).value(); - } -} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/PendingParameterModel.java similarity index 53% rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/PendingParameterModel.java index a452bb8..17c89cf 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/PendingParameterModel.java @@ -18,21 +18,28 @@ */ package org.apache.isis.core.metamodel.specloader.specimpl; -import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter; +import org.apache.isis.core.commons.collections.Can; +import org.apache.isis.core.metamodel.spec.ManagedObject; +import org.apache.isis.core.metamodel.spec.feature.ObjectAction; -public class OneToOneActionParameterContributee -extends ObjectActionParameterContributeeAbstract -implements OneToOneActionParameter { - - public OneToOneActionParameterContributee( - final Object servicePojo, - final ObjectActionParameterAbstract serviceActionParameter, - final int contributeeParamNumber, - final ObjectActionContributee contributeeAction) { - super(FeatureType.ACTION_PARAMETER_SCALAR, servicePojo, - serviceActionParameter, contributeeParamNumber, contributeeAction); - } +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +/** + * Model used to negotiate the paramValues of an action by means of a UI dialog. + * + * @since 2.0.0 + */ +@Getter +@RequiredArgsConstructor(staticName = "of") +public class PendingParameterModel { + @NonNull private final ObjectAction action; + @NonNull private final ManagedObject actionOwner; + /** typically equal to {@code actionOwner}, except for mixins and contributees*/ + @NonNull private final ManagedObject actionTarget; + @NonNull private final Can<ManagedObject> paramValues; + + } diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java index 363f96d..907ddb2 100644 --- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java +++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java @@ -63,7 +63,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.isis.core.metamodel.specloader.SpecificationLoader; import org.apache.isis.core.metamodel.specloader.specimpl.ContributeeMember; import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember; -import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionContributee; import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault; import lombok.SneakyThrows; @@ -634,11 +633,6 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle checkVisibility(contributeeAdapter, contributeeMember); checkUsability(contributeeAdapter, contributeeMember); - if(contributeeMember instanceof ObjectActionContributee) { - val objectActionContributee = (ObjectActionContributee) contributeeMember; - val contributeeArgAdapters = asObjectAdaptersUnderlying(contributeeArgs); - checkValidity(contributeeAdapter, objectActionContributee, contributeeArgAdapters); - } // nothing to do for contributed properties or collections } else { diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java index 5a908d7..db821da 100644 --- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java +++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java @@ -172,7 +172,9 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O final ObjectActionParameter param, final InteractionInitiatedBy interactionInitiatedBy) { - val choiceAdapters = param.getChoices(objectAdapter, null, interactionInitiatedBy); + val pendingArgs = param.getAction().newPendingParameterModel(objectAdapter); + + val choiceAdapters = param.getChoices(pendingArgs, interactionInitiatedBy); if (choiceAdapters == null || choiceAdapters.isEmpty()) { return null; } @@ -186,7 +188,8 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O } private Object defaultFor(final ObjectActionParameter param) { - final ManagedObject defaultAdapter = param.getDefault(objectAdapter, null, null); + + final ManagedObject defaultAdapter = param.getDefault(objectAdapter); if (defaultAdapter == null) { return null; } diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java index 96d5868..15d76e6 100644 --- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java +++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java @@ -22,6 +22,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.BiFunction; import org.apache.isis.applib.annotation.PromptStyle; import org.apache.isis.applib.annotation.Where; @@ -48,6 +49,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter; import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation; +import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel; import org.apache.isis.core.webapp.context.memento.ObjectMemento; import org.apache.isis.viewer.wicket.model.links.LinkAndLabel; import org.apache.isis.viewer.wicket.model.links.LinksProvider; @@ -420,13 +422,11 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel { final ScalarModel scalarModel, final Can<ManagedObject> pendingArgs, final int paramNumUpdated) { - - final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento(); - final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader()); - - //XXX lombok issue, no val - ManagedObject parentAdapter = scalarModel.getParentEntityModel().load(); - return actionParameter.getDefault(parentAdapter, pendingArgs, paramNumUpdated); + + return withPendingParamsDo(scalarModel, pendingArgs, (pendingParamsModel, actionParameter)-> + actionParameter.getDefault( + pendingParamsModel, + paramNumUpdated)); } @Override @@ -440,18 +440,11 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel { final ScalarModel scalarModel, final Can<ManagedObject> pendingArgs) { - final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento(); - final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader()); - - //XXX lombok issue, no val - ManagedObject parentAdapter = scalarModel.getParentEntityModel().load(); - - final Can<ManagedObject> choices = - actionParameter.getChoices( - parentAdapter, - pendingArgs, - InteractionInitiatedBy.USER); - return choices; + return withPendingParamsDo(scalarModel, pendingArgs, (pendingParamsModel, actionParameter)-> + actionParameter.getChoices( + pendingParamsModel, + InteractionInitiatedBy.USER)); + } @Override @@ -466,18 +459,26 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel { final Can<ManagedObject> pendingArgs, final String searchArg) { - final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento(); - final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader()); - - ManagedObject parentAdapter = scalarModel.getParentEntityModel().load(); - final Can<ManagedObject> choices = actionParameter.getAutoComplete( - parentAdapter, - pendingArgs, + return withPendingParamsDo(scalarModel, pendingArgs, (pendingParamsModel, actionParameter)-> + actionParameter.getAutoComplete( + pendingParamsModel, searchArg, - InteractionInitiatedBy.USER); - return choices; + InteractionInitiatedBy.USER)); } + // pending args helper + private <T> T withPendingParamsDo( + final ScalarModel scalarModel, + final Can<ManagedObject> pendingArgs, + final BiFunction<PendingParameterModel, ObjectActionParameter, T> function) { + + val parameterMemento = scalarModel.getParameterMemento(); + val actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader()); + val actionOwner = scalarModel.getParentEntityModel().load(); + val pendingParamsModel = actionParameter.getAction().newPendingParameterModel(actionOwner, pendingArgs); + return function.apply(pendingParamsModel, actionParameter); + } + @Override public int getAutoCompleteOrChoicesMinLength(ScalarModel scalarModel) { if (scalarModel.hasAutoComplete()) { @@ -541,7 +542,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel { scalarModel.getSpecificationLoader()); final ManagedObject parentAdapter = scalarModel.getParentEntityModel().load(); - final ManagedObject defaultAdapter = actionParameter.getDefault(parentAdapter, Can.empty(), null); + final ManagedObject defaultAdapter = actionParameter.getDefault(parentAdapter); scalarModel.setObject(defaultAdapter); }