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 42eefe2507 ISIS-3080: fixes additional actions, that are bound to
parameters
42eefe2507 is described below
commit 42eefe2507800e43ee6ef8e805deb87782cfecf9
Author: Andi Huber <[email protected]>
AuthorDate: Thu Jun 23 07:02:41 2022 +0200
ISIS-3080: fixes additional actions, that are bound to parameters
- I believe this is only valid for scalar composite value type
parameters
---
.../interactions/managed/ActionInteraction.java | 11 ++++--
.../core/metamodel/spec/ObjectSpecification.java | 8 ++++
.../core/metamodel/spec/PackedManagedObject.java | 2 +
.../javafx/model/action/ActionUiModelFx.java | 6 +++
.../vaadin/model/action/ActionUiModelVaa.java | 6 +++
.../common/model/action/HasActionInteraction.java | 3 +-
.../common/model/action/HasManagedAction.java | 13 +++---
.../viewer/wicket/model/links/LinkAndLabel.java | 10 ++++-
.../wicket/model/models/ActionModelImpl.java | 6 +++
.../interaction/act/ActionInteractionWkt.java | 4 +-
.../entityactions/LinkAndLabelFactory.java | 46 ++++++++--------------
11 files changed, 72 insertions(+), 43 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
index e582096569..5eeb8a98f2 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
@@ -264,10 +264,13 @@ extends MemberInteraction<ManagedAction,
ActionInteraction> {
return ActionInteraction.wrap(managedAction);
}
}
-
- // fallback if not a composite value
- val paramValue = parameterNegotiationModel.getParamValue(paramIndex);
- return ActionInteraction.start(paramValue, memberId, where);
+
+ //XXX[ISIS-3080] prior to this fix we returned... (which I'm not sure
why - makes no sense to me)
+ //val paramValue = parameterNegotiationModel.getParamValue(paramIndex);
+ //return ActionInteraction.start(paramValue, memberId, where);
+
+ // else if not a composite value
+ return ActionInteraction.start(actionOwner, memberId, where);
}
// -- HELPER
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 0a7c671487..b375fe54a0 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -364,6 +364,14 @@ extends
|| valueFacet().isPresent();
}
+ /**
+ * Whether objects of this type are composite values.
+ */
+ default boolean isCompositeValue() {
+ return getBeanSort().isValue()
+ &&
valueFacet().map(ValueFacet::isCompositeValueType).orElse(false);
+ }
+
/**
* Determines if objects of this type are parented (a parented collection,
or an aggregated entity).
*
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/PackedManagedObject.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/PackedManagedObject.java
index a64ad4baf7..8fdc758621 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/PackedManagedObject.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/PackedManagedObject.java
@@ -30,8 +30,10 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Lazy;
import lombok.RequiredArgsConstructor;
+import lombok.ToString;
@RequiredArgsConstructor
+@ToString
public final class PackedManagedObject implements ManagedObject {
final ObjectSpecification elementSpec;
diff --git
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
index f97d6b892a..95544e70de 100644
---
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
+++
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
@@ -19,6 +19,7 @@
package org.apache.isis.incubator.viewer.javafx.model.action;
import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
import org.apache.isis.viewer.common.model.action.ActionUiModel;
@@ -39,6 +40,11 @@ implements ActionUiModel<MenuItem, Node> {
@Getter
private final ManagedAction managedAction;
+ @Override
+ public ObjectAction getAction() {
+ return managedAction.getMetaModel();
+ }
+
@Override
public MenuItem createMenuUiComponent() {
val menuItem = new MenuItem(getManagedAction().getFriendlyName());
diff --git
a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
index d094876d46..7afd710547 100644
---
a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
+++
b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
@@ -22,6 +22,7 @@ import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.html.Label;
import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
import org.apache.isis.viewer.common.model.action.ActionUiModel;
@@ -35,6 +36,11 @@ public class ActionUiModelVaa implements
ActionUiModel<Component, Component> {
@Getter
private final ManagedAction managedAction;
+ @Override
+ public ObjectAction getAction() {
+ return managedAction.getMetaModel();
+ }
+
@Override
public Component createMenuUiComponent() {
return createRegularUiComponent();
diff --git
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasActionInteraction.java
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasActionInteraction.java
index e70d61897c..81e063d937 100644
---
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasActionInteraction.java
+++
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasActionInteraction.java
@@ -22,9 +22,8 @@ import
org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
/**
- * Functional UI mixin for {@link ActionInteraction}.
+ * UI mixin for {@link ActionInteraction}.
*/
-@FunctionalInterface
public interface HasActionInteraction
extends HasManagedAction {
diff --git
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasManagedAction.java
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasManagedAction.java
index 226f27b16c..0834e852f7 100644
---
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasManagedAction.java
+++
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/HasManagedAction.java
@@ -36,16 +36,19 @@ import
org.apache.isis.viewer.common.model.decorators.IconDecorator.FontAwesomeD
import lombok.val;
/**
- * Functional UI mixin for {@link ManagedAction}.
+ * UI mixin for {@link ManagedAction}.
*/
-@FunctionalInterface
public interface HasManagedAction {
ManagedAction getManagedAction();
- default ObjectAction getAction() {
- return getManagedAction().getAction();
- }
+ /**
+ * Metamodel of the represented {@link ManagedAction}.
+ * @apiNote implementing classes may provide this more directly
+ * than having to conjure up a ManagedAction only to provide its
metamodel;
+ * in other words: this is not strictly required but provides
optimization opportunities
+ */
+ ObjectAction getAction();
/**
* Action's owner.
diff --git
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index 3e842bb57a..8452554723 100644
---
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -25,8 +25,10 @@ import java.util.function.Predicate;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.isis.applib.annotation.ActionLayout.Position;
+import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.viewer.common.model.action.HasManagedAction;
import org.apache.isis.viewer.common.model.mixin.HasUiComponent;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
@@ -47,6 +49,7 @@ implements
public static LinkAndLabel of(
final ActionModel actionModel,
final ActionLinkUiComponentFactoryWkt uiComponentFactory) {
+ _Assert.assertNotNull(actionModel.getAction(), "LinkAndLabel requires
an Action");
return new LinkAndLabel(actionModel, uiComponentFactory);
}
@@ -58,6 +61,11 @@ implements
return actionModel.getManagedAction();
}
+ @Override
+ public ObjectAction getAction() {
+ return actionModel.getAction();
+ }
+
/**
* used when explicitly named (eg. menu bar layout file), otherwise {@code
null}
*/
@@ -71,7 +79,7 @@ implements
@Override
public String toString() {
return Optional.ofNullable(named).orElse("") +
- " ~ " +
actionModel.getAction().getFeatureIdentifier().getFullIdentityString();
+ " ~ " +
getAction().getFeatureIdentifier().getFullIdentityString();
}
// -- RULE CHECKING SHORTCUTS
diff --git
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
index 7ad4d18162..8413247f3d 100644
---
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
+++
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
@@ -30,6 +30,7 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
import
org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import
org.apache.isis.viewer.wicket.model.models.interaction.act.ActionInteractionWkt;
import
org.apache.isis.viewer.wicket.model.models.interaction.act.ParameterUiModelWkt;
@@ -82,6 +83,11 @@ implements ActionModel {
// --
+ @Override
+ public ObjectAction getAction() {
+ return delegate.getMetaModel();
+ }
+
@Override
public ActionInteraction getActionInteraction() {
return delegate.actionInteraction();
diff --git
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
index b50cc35c66..9c648b3ff8 100644
---
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
+++
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
@@ -136,7 +136,9 @@ extends HasBookmarkedOwnerAbstract<ActionInteraction> {
}
public final ObjectAction getMetaModel() {
- return actionInteraction().getMetamodel().orElseThrow();
+ return actionInteraction().getMetamodel()
+ .orElseThrow(()->_Exceptions
+ .noSuchElement("could not resolve action by memberId
'%s'", memberId));
}
public Optional<ScalarPropertyModel> associatedWithProperty() {
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
index 430ac92d7c..c9312fadf6 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
@@ -45,45 +45,37 @@ extends Function<ObjectAction, LinkAndLabel> {
public static LinkAndLabelFactory forMenu(
final EntityModel serviceModel) {
-
- val linkFactory = new MenuLinkFactory();
-
return action -> LinkAndLabel.of(
ActionModelImpl.forEntity(
serviceModel,
action.getFeatureIdentifier(),
Where.ANYWHERE,
null, null, null),
- linkFactory);
+ new MenuLinkFactory());
}
public static LinkAndLabelFactory forEntity(
final EntityModel parentEntityModel) {
-
guardAgainstNotBookmarkable(parentEntityModel.getBookmarkedOwner());
- val linkFactory = new AdditionalLinkFactory();
-
return action -> LinkAndLabel.of(
ActionModelImpl.forEntity(
parentEntityModel,
action.getFeatureIdentifier(),
Where.OBJECT_FORMS,
null, null, null),
- linkFactory);
+ new AdditionalLinkFactory());
}
public static LinkAndLabelFactory forCollection(
final EntityCollectionModelParented collectionModel) {
- val linkFactory = new AdditionalLinkFactory();
-
return action -> LinkAndLabel.of(
ActionModelImpl.forEntity(
collectionModel.getEntityModel(),
action.getFeatureIdentifier(),
Where.OBJECT_FORMS,
null, null, collectionModel),
- linkFactory);
+ new AdditionalLinkFactory());
}
public static LinkAndLabelFactory forPropertyOrParameter(
@@ -95,36 +87,30 @@ extends Function<ObjectAction, LinkAndLabel> {
public static LinkAndLabelFactory forProperty(
final ScalarPropertyModel propertyModel) {
-
- val linkFactory = new AdditionalLinkFactory();
-
return action -> LinkAndLabel.of(
ActionModelImpl.forEntity(
propertyModel.getParentUiModel(),
action.getFeatureIdentifier(),
Where.OBJECT_FORMS,
propertyModel, null, null),
- linkFactory);
+ new AdditionalLinkFactory());
}
public static LinkAndLabelFactory forParameter(
final ScalarParameterModel parameterModel) {
-
- // only supported, when parameter type is scalar and also is a
value-type
- if(!parameterModel.getMetaModel().isScalar()
- ||!parameterModel.getMetaModel().getElementType().isValue()) {
- return action -> null;
+ //XXX[ISIS-3080] only supported, when parameter type is a scalar
composite value-type
+ val param = parameterModel.getMetaModel();
+ if(param.isScalar()
+ && param.getElementType().isCompositeValue()) {
+ return action -> LinkAndLabel.of(
+ ActionModelImpl.forEntity(
+ parameterModel.getParentUiModel(),
+ action.getFeatureIdentifier(),
+ Where.OBJECT_FORMS,
+ null, parameterModel, null),
+ new AdditionalLinkFactory());
}
-
- val linkFactory = new AdditionalLinkFactory();
-
- return action -> LinkAndLabel.of(
- ActionModelImpl.forEntity(
- parameterModel.getParentUiModel(),
- action.getFeatureIdentifier(),
- Where.OBJECT_FORMS,
- null, parameterModel, null),
- linkFactory);
+ return action -> null;
}
// -- HELPER