You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/05/01 07:38:06 UTC
[isis] branch master updated: ISIS-2340: remove support for
(deprecated) service contributed actions
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 <ah...@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);
}