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/07 10:21:49 UTC

[isis] branch master updated (3929aba -> ffa030c)

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

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


    from 3929aba  ISIS-2361: some fixes, also prepares demo so can reproduce the issue
     new 24fa5de  ISIS-2361: minor formating
     new 6036035  ISIS-2340: decouple ActionModel from param memento
     new c887208  ISIS-2340: refactor, reducing exposed pending param setters
     new 699fb89  ISIS-2340: introduces HasTitle as common interface
     new 1b7ab67  ISIS-2340: introduces HasParentUiModel
     new ffa030c  ISIS-2340: further simplify the ActionModel

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../dom/actions/assoc/AssociatedActionDemo.java    |   7 +-
 .../DependentArgsActionDemo_bulkAction.java        |   7 +-
 .../pdfjs/ui/components/PdfJsViewerPanel.java      |   2 +-
 .../{HasUiComponent.java => HasParentUiModel.java} |   5 +-
 .../apache/isis/viewer/common/model/HasTitle.java  |   7 +
 .../model/action/form/ActionFormUiModel.java       |   5 +-
 .../model/action/form/PendingParameterManager.java |   9 +-
 .../wicket/model/models/ActionArgumentCache.java   |  48 ++--
 .../viewer/wicket/model/models/ActionModel.java    | 300 ++++-----------------
 .../wicket/model/models/BookmarkableModel.java     |   7 +-
 .../wicket/model/models/FormExecutorContext.java   |   3 +-
 .../wicket/model/models/PageParameterUtil.java     | 261 ++++++++++++++++++
 .../model/models/ParentEntityModelProvider.java    |  26 --
 .../viewer/wicket/model/models/ScalarModel.java    |   2 +-
 .../wicket/model/models/ScalarParameterModel.java  |   6 +-
 .../wicket/model/models/ScalarPropertyModel.java   |  22 +-
 .../wicket/model/models/ActionModelTest.java       |   4 +-
 .../actionmenu/entityactions/LinkAndLabelUtil.java |   2 +-
 .../actionprompt/ActionPromptHeaderPanel.java      |   2 +-
 .../components/actions/ActionParametersPanel.java  |   2 +-
 .../ui/components/property/PropertyEditPanel.java  |   4 +-
 .../property/PropertyFormExecutorStrategy.java     |   4 +-
 .../PropertyEditPromptHeaderPanel.java             |   2 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |   2 +-
 .../components/scalars/ScalarPanelAbstract2.java   |   2 +-
 .../linkandlabel/LinkAndLabelFactoryAbstract.java  |   2 +-
 .../ui/components/widgets/select2/Select2.java     |  12 +-
 .../widgets/select2/Select2MultiChoiceExt.java     |   2 +-
 .../ui/pages/actionprompt/ActionPromptPage.java    |   5 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |   6 +-
 .../wicket/ui/panels/FormExecutorStrategy.java     |   5 +-
 .../wicket/ui/panels/PromptFormAbstract.java       |   5 +-
 32 files changed, 419 insertions(+), 359 deletions(-)
 copy viewers/common/src/main/java/org/apache/isis/viewer/common/model/{HasUiComponent.java => HasParentUiModel.java} (85%)
 create mode 100644 viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasTitle.java
 copy api/applib/src/main/adoc/modules/applib-classes/examples/layout/component/Owner.java => viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/ActionFormUiModel.java (89%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java => viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/PendingParameterManager.java (73%)
 create mode 100644 viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
 delete mode 100644 viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java


[isis] 05/06: ISIS-2340: introduces HasParentUiModel

Posted by ah...@apache.org.
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

commit 1b7ab67d3b91385b6c3cf5de95908ebbaf8fea8e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 11:33:22 2020 +0200

    ISIS-2340: introduces HasParentUiModel
---
 .../pdfjs/ui/components/PdfJsViewerPanel.java      |  2 +-
 .../viewer/common/model/HasParentUiModel.java}     | 10 ++--
 .../model/action/form/ActionFormUiModel.java}      |  7 +--
 .../{param => form}/PendingParameterManager.java   |  2 +-
 .../wicket/model/models/ActionArgumentCache.java   |  2 +-
 .../viewer/wicket/model/models/ActionModel.java    | 55 +++-------------------
 .../wicket/model/models/FormExecutorContext.java   |  3 +-
 .../wicket/model/models/PageParameterUtil.java     | 50 +++++++++++++++++++-
 .../viewer/wicket/model/models/ScalarModel.java    |  2 +-
 .../wicket/model/models/ScalarParameterModel.java  |  6 +--
 .../wicket/model/models/ScalarPropertyModel.java   | 22 ++++-----
 .../wicket/model/models/ActionModelTest.java       |  4 +-
 .../actionmenu/entityactions/LinkAndLabelUtil.java |  2 +-
 .../actionprompt/ActionPromptHeaderPanel.java      |  2 +-
 .../components/actions/ActionParametersPanel.java  |  2 +-
 .../ui/components/property/PropertyEditPanel.java  |  4 +-
 .../property/PropertyFormExecutorStrategy.java     |  4 +-
 .../PropertyEditPromptHeaderPanel.java             |  2 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |  2 +-
 .../components/scalars/ScalarPanelAbstract2.java   |  2 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |  6 +--
 .../wicket/ui/panels/FormExecutorStrategy.java     |  5 +-
 .../wicket/ui/panels/PromptFormAbstract.java       |  5 +-
 23 files changed, 104 insertions(+), 97 deletions(-)

diff --git a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
index cc67420..7fc2c9b 100644
--- a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
+++ b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
@@ -205,7 +205,7 @@ class PdfJsViewerPanel extends ScalarPanelAbstract<ScalarPropertyModel> implemen
 
         val model = getModel();
         val propertyId = model.getPropertyMemento().getIdentifier();
-        val bookmark = model.getParentEntityModel().getObjectAdapterMemento().asBookmarkIfSupported();
+        val bookmark = model.getParentUiModel().getObjectAdapterMemento().asBookmarkIfSupported();
         val objectType = bookmark.getObjectType();
         val identifier = bookmark.getIdentifier();
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasParentUiModel.java
similarity index 80%
copy from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
copy to viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasParentUiModel.java
index 61f4b6f..4cc135c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasParentUiModel.java
@@ -16,11 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.viewer.common.model;
 
-package org.apache.isis.viewer.wicket.model.models;
-
-public interface ParentEntityModelProvider {
-
-    EntityModel getParentEntityModel();
+import org.apache.isis.viewer.common.model.object.ObjectUiModel;
 
+public interface HasParentUiModel<T extends ObjectUiModel> {
+    
+    T getParentUiModel();
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/ActionFormUiModel.java
similarity index 85%
rename from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/ActionFormUiModel.java
index 61f4b6f..28d551a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/ActionFormUiModel.java
@@ -16,11 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.viewer.common.model.action.form;
 
-package org.apache.isis.viewer.wicket.model.models;
-
-public interface ParentEntityModelProvider {
-
-    EntityModel getParentEntityModel();
+public interface ActionFormUiModel {
 
 }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/param/PendingParameterManager.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/PendingParameterManager.java
similarity index 95%
rename from viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/param/PendingParameterManager.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/PendingParameterManager.java
index 0b371c3..1261ddc 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/param/PendingParameterManager.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/form/PendingParameterManager.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.common.model.action.param;
+package org.apache.isis.viewer.common.model.action.form;
 
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
index a03977c..2397cca 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
@@ -29,7 +29,7 @@ import org.apache.isis.core.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.viewer.common.model.action.param.PendingParameterManager;
+import org.apache.isis.viewer.common.model.action.form.PendingParameterManager;
 import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 85cbbef..aec362e 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -24,8 +24,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
-import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
 import org.apache.wicket.request.IRequestHandler;
@@ -48,8 +46,6 @@ import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.applib.value.NamedWithMimeType;
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.base._NullSafe;
-import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.commons.internal.primitives._Ints;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.consent.Consent;
@@ -81,8 +77,6 @@ implements FormExecutorContext {
     private static final long serialVersionUID = 1L;
 
     private static final String NULL_ARG = "$nullArg$";
-    private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
-
 
     public ActionModel copy() {
         return new ActionModel(this);
@@ -111,39 +105,7 @@ implements FormExecutorContext {
         actionModel.setContextArgumentIfPossible(pageParameters);
         return actionModel;
     }
-
-
-
-    @Value(staticConstructor = "of")
-    public static class ParamNumAndOidString {
-        int paramNum;
-        String oidString;
-    }
-
-    public static Optional<ParamNumAndOidString> parse(final String paramContext) {
-        val matcher = KEY_VALUE_PATTERN.matcher(paramContext);
-        if (!matcher.matches()) {
-            return Optional.empty();
-        }
-
-        try {
-
-            val intLiteral = matcher.group(1);
-            val oidStr = matcher.group(2);
-
-            val parseResult = _Ints.parseInt(intLiteral, 10);
-            if(parseResult.isPresent()) {
-                val paramNum = parseResult.getAsInt();
-                return Optional.of(ParamNumAndOidString.of(paramNum, oidStr));
-            }
-
-        } catch (final Exception e) {
-            // ignore and fall through
-        }
-
-        return Optional.empty();
-
-    }
+  
 
     //////////////////////////////////////////////////
     // BookmarkableModel
@@ -253,7 +215,7 @@ implements FormExecutorContext {
     }
 
     @Override
-    public EntityModel getParentEntityModel() {
+    public EntityModel getParentUiModel() {
         return entityModel;
     }
 
@@ -291,17 +253,14 @@ implements FormExecutorContext {
     }
 
     private boolean setContextArgumentIfPossible(final PageParameters pageParameters) {
-        final String paramContext = PageParameterNames.ACTION_PARAM_CONTEXT.getStringFrom(pageParameters);
-        if (paramContext == null) {
+        
+        val paramNumAndOidString = PageParameterUtil.parseParamContext(pageParameters)
+                .orElse(null);
+        if(paramNumAndOidString==null) {
             return false;
         }
-
-        val action = actionMemento.getAction(getSpecificationLoader());
-
-        val paramNumAndOidString = parse(paramContext)
-                .orElseThrow(()->_Exceptions
-                        .unrecoverableFormatted("failed to parse param context '%s'", paramContext));
         
+        val action = actionMemento.getAction(getSpecificationLoader());
         val actionParamIfAny = action.getParameters().get(paramNumAndOidString.getParamNum());
         if(!actionParamIfAny.isPresent()) {
             return false;
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
index f1577b2..faa9409 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
@@ -20,8 +20,9 @@
 package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.viewer.common.model.HasParentUiModel;
 
-public interface FormExecutorContext extends ParentEntityModelProvider {
+public interface FormExecutorContext extends HasParentUiModel<EntityModel> {
 
     PromptStyle getPromptStyle();
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
index b4e7397..85bbc65 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
@@ -18,20 +18,27 @@
  */
 package org.apache.isis.viewer.wicket.model.models;
 
+import java.util.Optional;
+import java.util.regex.Pattern;
+
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.commons.internal.primitives._Ints;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
+import lombok.Value;
 import lombok.val;
 import lombok.experimental.UtilityClass;
 
 @UtilityClass
-class PageParameterUtil {
 
+
+class PageParameterUtil {
+    
     /**
      * Factory method for creating {@link PageParameters}.
      */
@@ -57,6 +64,47 @@ class PageParameterUtil {
 
         return pageParameters;
     }
+
+    @Value(staticConstructor = "of")
+    public static class ParamNumAndOidString {
+        int paramNum;
+        String oidString;
+    }
+
+    public static Optional<ParamNumAndOidString> parseParamContext(PageParameters pageParameters) {
+        final String paramContext = PageParameterNames.ACTION_PARAM_CONTEXT.getStringFrom(pageParameters);
+        if (paramContext == null) {
+            return Optional.empty();
+        }
+        return parseParamContext(paramContext);
+    }
+    
+    private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
+    
+    static Optional<ParamNumAndOidString> parseParamContext(final String paramContext) {
+        val matcher = KEY_VALUE_PATTERN.matcher(paramContext);
+        if (!matcher.matches()) {
+            return Optional.empty();
+        }
+
+        try {
+
+            val intLiteral = matcher.group(1);
+            val oidStr = matcher.group(2);
+
+            val parseResult = _Ints.parseInt(intLiteral, 10);
+            if(parseResult.isPresent()) {
+                val paramNum = parseResult.getAsInt();
+                return Optional.of(ParamNumAndOidString.of(paramNum, oidStr));
+            }
+
+        } catch (final Exception e) {
+            // ignore and fall through
+        }
+
+        return Optional.empty();
+
+    }
     
     private static String determineActionId(final ObjectAction objectAction) {
         final Identifier identifier = objectAction.getIdentifier();
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 3c03448..0a0f8b1 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
@@ -130,7 +130,7 @@ implements LinksProvider, FormExecutorContext {
     }
 
     @Override
-    public EntityModel getParentEntityModel() {
+    public EntityModel getParentUiModel() {
         return parentEntityModel;
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index 45486c7..7ed4154 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -118,7 +118,7 @@ implements ActionArgumentModel {
         final ObjectActionParameter parameter = getParameterMemento().getActionParameter(
                 getSpecificationLoader());
         try {
-            ManagedObject parentAdapter = getParentEntityModel().load();
+            ManagedObject parentAdapter = getParentUiModel().load();
             final String invalidReasonIfAny = parameter.isValid(parentAdapter, proposedPojoAsStr,
                     InteractionInitiatedBy.USER
                     );
@@ -133,7 +133,7 @@ implements ActionArgumentModel {
         final ObjectActionParameter parameter = getParameterMemento().getActionParameter(
                 getSpecificationLoader());
         try {
-            ManagedObject parentAdapter = getParentEntityModel().load();
+            ManagedObject parentAdapter = getParentUiModel().load();
             final String invalidReasonIfAny = parameter.isValid(parentAdapter, proposedAdapter.getPojo(),
                     InteractionInitiatedBy.USER
                     );
@@ -297,7 +297,7 @@ implements ActionArgumentModel {
     
     public PendingParameterModelHead getPendingParamHead() {
         val actionParameter = getParameter();
-        val actionOwner = getParentEntityModel().load();
+        val actionOwner = getParentUiModel().load();
         return actionParameter.getAction().newPendingParameterModelHead(actionOwner);
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index f352888..43b68a4 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -95,14 +95,14 @@ public class ScalarPropertyModel extends ScalarModel {
     @Override
     public String getCssClass() {
         final String objectSpecId =
-                getParentEntityModel().getTypeOfSpecification().getSpecId().asString().replace(".", "-");
+                getParentUiModel().getTypeOfSpecification().getSpecId().asString().replace(".", "-");
         final String propertyId = getIdentifier();
         return "isis-" + objectSpecId + "-" + propertyId;
     }
 
     @Override
     public boolean whetherHidden(final Where where) {
-        final ManagedObject parentAdapter = getParentEntityModel().load();
+        final ManagedObject parentAdapter = getParentUiModel().load();
         final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
         try {
             final Consent visibility = property.isVisible(parentAdapter, InteractionInitiatedBy.USER, where);
@@ -114,7 +114,7 @@ public class ScalarPropertyModel extends ScalarModel {
 
     @Override
     public String whetherDisabled(final Where where) {
-        final ManagedObject parentAdapter = getParentEntityModel().load();
+        final ManagedObject parentAdapter = getParentUiModel().load();
         final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
         try {
             final Consent usable = property.isUsable(parentAdapter, InteractionInitiatedBy.USER, where);
@@ -132,7 +132,7 @@ public class ScalarPropertyModel extends ScalarModel {
             parseableFacet = property.getSpecification().getFacet(ParseableFacet.class);
         }
         try {
-            final ManagedObject parentAdapter = getParentEntityModel().load();
+            final ManagedObject parentAdapter = getParentUiModel().load();
             final ManagedObject currentValue = property.get(parentAdapter, InteractionInitiatedBy.USER);
             final ManagedObject proposedAdapter =
                     parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, InteractionInitiatedBy.USER);
@@ -150,7 +150,7 @@ public class ScalarPropertyModel extends ScalarModel {
 
     @Override
     public String validate(final ManagedObject proposedAdapter) {
-        final ManagedObject parentAdapter = getParentEntityModel().load();
+        final ManagedObject parentAdapter = getParentUiModel().load();
         final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
         try {
             final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter,
@@ -180,7 +180,7 @@ public class ScalarPropertyModel extends ScalarModel {
         final PropertyMemento propertyMemento = getPropertyMemento();
         final OneToOneAssociation property = propertyMemento
                 .getProperty(getSpecificationLoader());
-        ManagedObject parentAdapter = getParentEntityModel().load();
+        ManagedObject parentAdapter = getParentUiModel().load();
         return property.getDefault(parentAdapter);
     }
 
@@ -198,7 +198,7 @@ public class ScalarPropertyModel extends ScalarModel {
         final PropertyMemento propertyMemento = getPropertyMemento();
         final OneToOneAssociation property = propertyMemento
                 .getProperty(getSpecificationLoader());
-        ManagedObject parentAdapter = getParentEntityModel().load();
+        ManagedObject parentAdapter = getParentUiModel().load();
         final Can<ManagedObject> choices = property.getChoices(
                 parentAdapter,
                 InteractionInitiatedBy.USER);
@@ -221,7 +221,7 @@ public class ScalarPropertyModel extends ScalarModel {
         final PropertyMemento propertyMemento = getPropertyMemento();
         final OneToOneAssociation property = propertyMemento.getProperty(getSpecificationLoader());
         final ManagedObject parentAdapter =
-                getParentEntityModel().load();
+                getParentUiModel().load();
         final Can<ManagedObject> choices =
                 property.getAutoComplete(
                         parentAdapter, 
@@ -284,7 +284,7 @@ public class ScalarPropertyModel extends ScalarModel {
     public void reset() {
         final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
 
-        val parentAdapter = getParentEntityModel().load();
+        val parentAdapter = getParentUiModel().load();
 
         setObjectFromPropertyIfVisible(this, property, parentAdapter);
     }
@@ -306,7 +306,7 @@ public class ScalarPropertyModel extends ScalarModel {
     
     public String getReasonInvalidIfAny() {
         val property = getPropertyMemento().getProperty(getSpecificationLoader());
-        val adapter = getParentEntityModel().load();
+        val adapter = getParentUiModel().load();
         val associate = getObject();
         Consent validity = property.isAssociationValid(adapter, associate, InteractionInitiatedBy.USER);
         return validity.isAllowed() ? null : validity.getReason();
@@ -357,7 +357,7 @@ public class ScalarPropertyModel extends ScalarModel {
     @Override
     protected List<ObjectAction> calcAssociatedActions() {
 
-        final EntityModel parentEntityModel1 = this.getParentEntityModel();
+        final EntityModel parentEntityModel1 = this.getParentUiModel();
         final ManagedObject parentAdapter = parentEntityModel1.load();
 
         final OneToOneAssociation oneToOneAssociation =
diff --git a/viewers/wicket/model/src/test/java/org/apache/isis/viewer/wicket/model/models/ActionModelTest.java b/viewers/wicket/model/src/test/java/org/apache/isis/viewer/wicket/model/models/ActionModelTest.java
index ead634b..86bdffe 100644
--- a/viewers/wicket/model/src/test/java/org/apache/isis/viewer/wicket/model/models/ActionModelTest.java
+++ b/viewers/wicket/model/src/test/java/org/apache/isis/viewer/wicket/model/models/ActionModelTest.java
@@ -27,13 +27,13 @@ import static org.hamcrest.Matchers.nullValue;
 import static org.junit.Assert.assertThat;
 
 import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.viewer.wicket.model.models.ActionModel.ParamNumAndOidString;
+import org.apache.isis.viewer.wicket.model.models.PageParameterUtil.ParamNumAndOidString;
 
 public class ActionModelTest {
 
     @Test
     public void whenParseThenParses() throws Exception {
-        final ParamNumAndOidString parsed = ActionModel.parse("3=OBJECT_OID:123")
+        final ParamNumAndOidString parsed = PageParameterUtil.parseParamContext("3=OBJECT_OID:123")
                 .orElseThrow(()->_Exceptions.unrecoverable("parsing failed"));
         
         assertThat(parsed, is(not(nullValue())));
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
index 586832c..998cb07 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
@@ -39,7 +39,7 @@ public final class LinkAndLabelUtil {
             final ScalarModel scalarModel,
             final List<ObjectAction> associatedActions) {
 
-        final EntityModel parentEntityModel = scalarModel.getParentEntityModel();
+        final EntityModel parentEntityModel = scalarModel.getParentUiModel();
         return asActionLinksForAdditionalLinksPanel(parentEntityModel, associatedActions, scalarModel);
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
index 0d918eb..d4561be 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
@@ -41,7 +41,7 @@ public class ActionPromptHeaderPanel extends PanelAbstract<ActionModel> {
 
         _Blackhole.consume(model.getTargetAdapter()); // side-effect: loads the model
 
-        getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ENTITY_ICON_AND_TITLE, model.getParentEntityModel());
+        getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ENTITY_ICON_AND_TITLE, model.getParentUiModel());
 
 
         final Label label = new Label(ID_ACTION_NAME, new IModel<String>() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
index c0bf71a..61328e7 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
@@ -95,7 +95,7 @@ public class ActionParametersPanel extends PanelAbstract<ActionModel> {
 
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PARAMETERS, getActionModel());
             getComponentFactoryRegistry().addOrReplaceComponent(header, ComponentType.ENTITY_ICON_AND_TITLE, actionModel
-                    .getParentEntityModel());
+                    .getParentUiModel());
 
             final String actionName = getActionModel().getAction().getName();
             header.add(new Label(ID_ACTION_NAME, Model.of(actionName)));
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
index 59ead05..e93f2ac 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
@@ -51,7 +51,7 @@ public class PropertyEditPanel extends PanelAbstract<ScalarPropertyModel> {
     public PropertyEditPanel(
             final String id,
             final ScalarPropertyModel scalarModel) {
-        super(id, new ScalarPropertyModel(scalarModel.getParentEntityModel(), scalarModel.getPropertyMemento(),
+        super(id, new ScalarPropertyModel(scalarModel.getParentUiModel(), scalarModel.getPropertyMemento(),
                 EntityModel.Mode.EDIT, EntityModel.RenderingHint.REGULAR));
 
         buildGui(scalarModel);
@@ -83,7 +83,7 @@ public class PropertyEditPanel extends PanelAbstract<ScalarPropertyModel> {
 
         {
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PROPERTY_EDIT_FORM, getScalarModel());
-            getComponentFactoryRegistry().addOrReplaceComponent(header, ComponentType.ENTITY_ICON_AND_TITLE, scalarModel.getParentEntityModel());
+            getComponentFactoryRegistry().addOrReplaceComponent(header, ComponentType.ENTITY_ICON_AND_TITLE, scalarModel.getParentUiModel());
 
             final OneToOneAssociation property = getScalarModel().getPropertyMemento().getProperty(scalarModel.getSpecificationLoader());
             final String propertyName = property.getName();
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
index 894390d..a88af1e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
@@ -44,7 +44,7 @@ public class PropertyFormExecutorStrategy implements FormExecutorStrategy<Scalar
 
     @Override
     public ManagedObject obtainTargetAdapter() {
-        return model.getParentEntityModel().load();
+        return model.getParentUiModel().load();
     }
 
     @Override
@@ -65,7 +65,7 @@ public class PropertyFormExecutorStrategy implements FormExecutorStrategy<Scalar
         val resultAdapter = this.model.applyValue(targetAdapter);
 
         if (resultAdapter != targetAdapter) {
-            this.model.getParentEntityModel().setObject(targetAdapter);
+            this.model.getParentUiModel().setObject(targetAdapter);
         }
         return resultAdapter;
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java
index 507202c..e7e6768 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java
@@ -38,7 +38,7 @@ public class PropertyEditPromptHeaderPanel extends PanelAbstract<ScalarPropertyM
     public PropertyEditPromptHeaderPanel(String id, final ScalarPropertyModel model) {
         super(id, model);
 
-        val targetAdapter = model.getParentEntityModel().load();
+        val targetAdapter = model.getParentUiModel().load();
 
         getComponentFactoryRegistry().addOrReplaceComponent(
                 this, 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 5d40103..1408c23 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -269,7 +269,7 @@ implements ScalarModelProvider {
         ScalarModel model = getModel();
         final CssClassFacet facet = model.getFacet(CssClassFacet.class);
         if(facet != null) {
-            val parentAdapter = model.getParentEntityModel().load();
+            val parentAdapter = model.getParentUiModel().load();
             final String cssClass = facet.cssClass(parentAdapter);
             CssClassAppender.appendCssClassTo(this, cssClass);
         }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 2568281..e047423 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -459,7 +459,7 @@ implements ScalarModelSubscriber2 {
         if(facet != null) {
 
             val parentAdapter =
-                    model.getParentEntityModel().load();
+                    model.getParentUiModel().load();
 
             final String cssClass = facet.cssClass(parentAdapter);
             CssClassAppender.appendCssClassTo(this, cssClass);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index a419889..6f659fd 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -56,12 +56,12 @@ import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.core.security.authentication.MessageBroker;
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
 import org.apache.isis.core.webapp.context.memento.ObjectMemento;
+import org.apache.isis.viewer.common.model.HasParentUiModel;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
-import org.apache.isis.viewer.wicket.model.models.ParentEntityModelProvider;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOrClobPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
@@ -72,7 +72,7 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
-public final class FormExecutorDefault<M extends BookmarkableModel<ManagedObject> & ParentEntityModelProvider>
+public final class FormExecutorDefault<M extends BookmarkableModel<ManagedObject> & HasParentUiModel<EntityModel>>
 implements FormExecutor {
 
     private static final long serialVersionUID = 1L;
@@ -106,7 +106,7 @@ implements FormExecutor {
         Command command = null;
         ManagedObject targetAdapter = null;
 
-        final EntityModel targetEntityModel = model.getParentEntityModel();
+        final EntityModel targetEntityModel = model.getParentUiModel();
 
         try {
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java
index 01242cf..633840c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java
@@ -21,10 +21,11 @@ package org.apache.isis.viewer.wicket.ui.panels;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.viewer.common.model.HasParentUiModel;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
-import org.apache.isis.viewer.wicket.model.models.ParentEntityModelProvider;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
 
-public interface FormExecutorStrategy<M extends BookmarkableModel<ManagedObject> & ParentEntityModelProvider> {
+public interface FormExecutorStrategy<M extends BookmarkableModel<ManagedObject> & HasParentUiModel<EntityModel>> {
 
     M getModel();
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index c37833d..c625bef 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -40,13 +40,14 @@ import org.apache.wicket.util.string.AppendingStringBuffer;
 
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.viewer.common.model.HasParentUiModel;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.FormExecutorContext;
-import org.apache.isis.viewer.wicket.model.models.ParentEntityModelProvider;
 import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber2;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
@@ -57,7 +58,7 @@ import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.util.Components;
 
 public abstract class PromptFormAbstract<T extends BookmarkableModel<ManagedObject>
-& ParentEntityModelProvider
+& HasParentUiModel<EntityModel>
 & IModel<ManagedObject>
 & FormExecutorContext>
 extends FormAbstract<ManagedObject>


[isis] 03/06: ISIS-2340: refactor, reducing exposed pending param setters

Posted by ah...@apache.org.
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

commit c88720808af239e8b88554480525784388a17964
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 10:47:44 2020 +0200

    ISIS-2340: refactor, reducing exposed pending param setters
---
 .../action/param/PendingParameterManager.java      | 30 ++++++++++++++++
 .../wicket/model/models/ActionArgumentCache.java   | 39 ++++++++++----------
 .../viewer/wicket/model/models/ActionModel.java    | 42 +++++++++++-----------
 3 files changed, 71 insertions(+), 40 deletions(-)

diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/param/PendingParameterManager.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/param/PendingParameterManager.java
new file mode 100644
index 0000000..0b371c3
--- /dev/null
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/param/PendingParameterManager.java
@@ -0,0 +1,30 @@
+/*
+ *  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.viewer.common.model.action.param;
+
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+
+public interface PendingParameterManager {
+
+    void setParameterValue(ObjectActionParameter actionParameter, ManagedObject newParamValue);
+
+    void clearParameterValue(ObjectActionParameter actionParameter);
+
+}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
index 6677fbe..a03977c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.viewer.common.model.action.param.PendingParameterManager;
 import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 
@@ -37,7 +38,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @RequiredArgsConstructor
-class ActionArgumentCache {
+class ActionArgumentCache implements PendingParameterManager {
     
     @NonNull private final EntityModel entityModel;
     @NonNull private final ActionMemento actionMemento;
@@ -45,24 +46,6 @@ class ActionArgumentCache {
 
     private final Map<Integer, ActionArgumentModel> arguments = _Maps.newHashMap();
     
-    public ActionArgumentModel computeIfAbsent(final ActionParameterMemento apm) {
-        final int i = apm.getNumber();
-        ActionArgumentModel actionArgumentModel = arguments.get(i);
-        if (actionArgumentModel == null) {
-            actionArgumentModel = new ScalarParameterModel(entityModel, apm);
-            final int number = actionArgumentModel.getParameterMemento().getNumber();
-            arguments.put(number, actionArgumentModel);
-        }
-        return actionArgumentModel;
-    }
-    
-    public void putArgumentValue(final int paramNum, final ManagedObject argumentAdapter) {
-        final ObjectActionParameter actionParam = action.getParameters().getElseFail(paramNum);
-        final ActionParameterMemento apm = new ActionParameterMemento(actionParam);
-        final ActionArgumentModel actionArgumentModel = computeIfAbsent(apm);
-        actionArgumentModel.setObject(argumentAdapter);
-    }
-    
     public ActionArgumentCache copy() {
         val copy = new ActionArgumentCache(
                 entityModel, 
@@ -109,12 +92,14 @@ class ActionArgumentCache {
                     arguments.computeIfAbsent(paramIndex, this::createArgumentModel));
     }
     
+    @Override
     public void setParameterValue(ObjectActionParameter actionParameter, ManagedObject newParamValue) {
         val actionParameterMemento = new ActionParameterMemento(actionParameter);
         val actionArgumentModel = computeIfAbsent(actionParameterMemento);
         actionArgumentModel.setObject(newParamValue);
     }
     
+    @Override
     public void clearParameterValue(ObjectActionParameter actionParameter) {
         setParameterValue(actionParameter, null);
     }
@@ -138,8 +123,22 @@ class ActionArgumentCache {
                 action.getParameterCount(),
                 (int)streamActionArgumentModels().count());
     }
+    
+    private ActionArgumentModel computeIfAbsent(final ActionParameterMemento apm) {
+        final int i = apm.getNumber();
+        ActionArgumentModel actionArgumentModel = arguments.get(i);
+        if (actionArgumentModel == null) {
+            actionArgumentModel = new ScalarParameterModel(entityModel, apm);
+            final int number = actionArgumentModel.getParameterMemento().getNumber();
+            arguments.put(number, actionArgumentModel);
+        }
+        return actionArgumentModel;
+    }
 
-
+    private void putArgumentValue(final int paramNum, final ManagedObject argumentAdapter) {
+        val actionParam = action.getParameters().getElseFail(paramNum);
+        setParameterValue(actionParam, argumentAdapter);
+    }
 
     
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 93b54f9..7a691fb 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -209,10 +209,13 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
     private ActionArgumentCache argCache() {
         return argCache!=null
                 ? argCache
-                        : (argCache = new ActionArgumentCache(
-                                entityModel, 
-                                actionMemento, 
-                                getActionMemento().getAction(getSpecificationLoader())));
+                : (argCache = createActionArgumentCache());
+    }
+    private ActionArgumentCache createActionArgumentCache() {
+        return new ActionArgumentCache(
+                entityModel, 
+                actionMemento, 
+                getActionMemento().getAction(getSpecificationLoader()));
     }
 
     private static ActionMemento newActionMementoFrom(
@@ -264,14 +267,15 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
 
     private void setArgumentsIfPossible(final PageParameters pageParameters) {
 
-        final List<String> args = PageParameterNames.ACTION_ARGS.getListFrom(pageParameters);
+        final List<String> argsAsEncodedOidStrings = PageParameterNames.ACTION_ARGS.getListFrom(pageParameters);
 
         val action = actionMemento.getAction(getSpecificationLoader());
-        val parameterTypes = action.getParameterTypes();
+        val parameters = action.getParameters();
 
-        for (int paramNum = 0; paramNum < args.size(); paramNum++) {
-            final String encoded = args.get(paramNum);
-            setArgument(paramNum, parameterTypes.getElseFail(paramNum), encoded);
+        for (int paramNum = 0; paramNum < argsAsEncodedOidStrings.size(); paramNum++) {
+            val oidStrEncoded = argsAsEncodedOidStrings.get(paramNum);
+            parameters.get(paramNum)
+            .ifPresent(param->decodeAndSetArgument(param, oidStrEncoded));
         }
     }
 
@@ -291,27 +295,25 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         }
 
         val action = actionMemento.getAction(getSpecificationLoader());
-        val parameterTypes = action.getParameterTypes();
-        final int parameterCount = parameterTypes.size();
 
         val paramNumAndOidString = parse(paramContext)
                 .orElseThrow(()->_Exceptions
                         .unrecoverableFormatted("failed to parse param context '%s'", paramContext));
-
-        final int paramNum = paramNumAndOidString.getParamNum();
-        if (paramNum >= parameterCount) {
+        
+        val actionParamIfAny = action.getParameters().get(paramNumAndOidString.getParamNum());
+        if(!actionParamIfAny.isPresent()) {
             return false;
         }
+        val actionParam = actionParamIfAny.get();
 
-        final String oidStrEncoded = paramNumAndOidString.getOidString();
-        setArgument(paramNum, parameterTypes.getElseFail(paramNum), oidStrEncoded);
-
+        val oidStrEncoded = paramNumAndOidString.getOidString();
+        decodeAndSetArgument(actionParam, oidStrEncoded);
         return true;
     }
 
-    private void setArgument(final int paramNum, final ObjectSpecification argSpec, final String encoded) {
-        val argumentAdapter = decodeArg(argSpec, encoded);
-        argCache().putArgumentValue(paramNum, argumentAdapter);
+    private void decodeAndSetArgument(ObjectActionParameter actionParam, String oidStrEncoded) {
+        val paramValue = decodeArg(actionParam.getSpecification(), oidStrEncoded);
+        argCache().setParameterValue(actionParam, paramValue);
     }
 
     private String encodeArg(ManagedObject adapter) {


[isis] 04/06: ISIS-2340: introduces HasTitle as common interface

Posted by ah...@apache.org.
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

commit 699fb89850b880d58d89696774b0d7882949989e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 11:02:24 2020 +0200

    ISIS-2340: introduces HasTitle as common interface
---
 .../java/org/apache/isis/viewer/common/model/HasTitle.java   |  7 +++++++
 .../apache/isis/viewer/wicket/model/models/ActionModel.java  | 12 +++++++-----
 .../isis/viewer/wicket/model/models/BookmarkableModel.java   |  7 ++++---
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasTitle.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasTitle.java
new file mode 100644
index 0000000..dbe1201
--- /dev/null
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/HasTitle.java
@@ -0,0 +1,7 @@
+package org.apache.isis.viewer.common.model;
+
+public interface HasTitle {
+
+    String getTitle();
+    
+}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 7a691fb..85cbbef 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -74,7 +74,9 @@ import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import lombok.Value;
 import lombok.val;
 
-public class ActionModel extends BookmarkableModel<ManagedObject> implements FormExecutorContext {
+public class ActionModel 
+extends BookmarkableModel<ManagedObject> 
+implements FormExecutorContext {
 
     private static final long serialVersionUID = 1L;
 
@@ -169,10 +171,10 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
 
     @Override
     public String getTitle() {
-        val adapter = getTargetAdapter();
-        final ObjectAction objectAction = getAction();
+        val target = getTargetAdapter();
+        val objectAction = getAction();
 
-        final StringBuilder buf = new StringBuilder();
+        val buf = new StringBuilder();
         for(val argumentAdapter: argCache().snapshot()) {
             if(buf.length() > 0) {
                 buf.append(",");
@@ -180,7 +182,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
             buf.append(abbreviated(titleOf(argumentAdapter), 8));
         }
 
-        return adapter.titleString(null) + "." + objectAction.getName() + (buf.length()>0?"(" + buf.toString() + ")":"");
+        return target.titleString(null) + "." + objectAction.getName() + (buf.length()>0?"(" + buf.toString() + ")":"");
     }
 
     @Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
index 0753fdb..cbbdf90 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
@@ -22,8 +22,11 @@ package org.apache.isis.viewer.wicket.model.models;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
+import org.apache.isis.viewer.common.model.HasTitle;
 
-public abstract class BookmarkableModel<T> extends ModelAbstract<T>  {
+public abstract class BookmarkableModel<T> 
+extends ModelAbstract<T>  
+implements HasTitle {
 
     private static final long serialVersionUID = 1L;
 
@@ -45,6 +48,4 @@ public abstract class BookmarkableModel<T> extends ModelAbstract<T>  {
 
     public abstract boolean hasAsRootPolicy();
 
-    public abstract String getTitle();
-
 }


[isis] 01/06: ISIS-2361: minor formating

Posted by ah...@apache.org.
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

commit 24fa5def8d7c1a285ca13d06d9b225910c1fd210
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 07:26:12 2020 +0200

    ISIS-2361: minor formating
---
 .../java/demoapp/dom/actions/assoc/AssociatedActionDemo.java |  7 ++++---
 .../actions/depargs/DependentArgsActionDemo_bulkAction.java  |  7 ++++++-
 .../viewer/wicket/ui/components/widgets/select2/Select2.java | 12 ++++++------
 .../ui/components/widgets/select2/Select2MultiChoiceExt.java |  2 +-
 4 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java b/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java
index 11e7345..72a4fc9 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java
@@ -54,9 +54,10 @@ public class AssociatedActionDemo extends DemoStub {
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
     @Action(associateWith="items")
     public AssociatedActionDemo doSomethingWithItems(
-            Set<DemoItem> items,
-            int test
-            ) {
+            
+            // bulk selection
+            Set<DemoItem> items) {
+        
         if(items!=null) {
             items.forEach(item->messageService.informUser(item.getName()));    
         }
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_bulkAction.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_bulkAction.java
index 60514f0..318a9b0 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_bulkAction.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_bulkAction.java
@@ -69,7 +69,7 @@ public class DependentArgsActionDemo_bulkAction {
             int b,
             
             // PARAM 3
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.OPTIONAL)
             int c,
             
             // PARAM 4
@@ -105,6 +105,11 @@ public class DependentArgsActionDemo_bulkAction {
         return _Lists.of(1,2,3,4);
     }
     
+    @Model
+    public String validate3Act(Parameters params) {
+        return params.c() < 2 ? "please specify c>=2" : null;
+    }
+    
 //    @Model
 //    public int default3Act(Parameters params) {
 //        _Probe.sysOut("p2: %d %d %d %d", params.a, params.b, params.c, params.d);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
index 05da7b6..17a6897 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -53,10 +53,10 @@ public class Select2 implements Serializable {
                         null,
                         Select2MultiChoiceExt.create(id,
                                 ScalarModelWithMultiPending.Util.createModel(scalarModel), scalarModel))
-                        : new Select2(
-                                Select2ChoiceExt.create(id,
-                                        ScalarModelWithPending.Util.createModel(scalarModel), scalarModel),
-                                null);
+                : new Select2(
+                        Select2ChoiceExt.create(id,
+                                ScalarModelWithPending.Util.createModel(scalarModel), scalarModel),
+                        null);
     }
 
     private Select2(
@@ -69,13 +69,13 @@ public class Select2 implements Serializable {
     public AbstractSelect2Choice component() {
         return select2Choice != null
                 ? select2Choice
-                        : select2MultiChoice;
+                : select2MultiChoice;
     }
 
     public ChoiceExt choiceExt() {
         return select2Choice != null
                 ? select2Choice
-                        : select2MultiChoice;
+                : select2MultiChoice;
     }
 
     public void clearInput() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java
index de50859..eac3bf3 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java
@@ -25,9 +25,9 @@ import org.apache.wicket.model.IModel;
 import org.wicketstuff.select2.Select2MultiChoice;
 
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.webapp.context.memento.ObjectMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.EmptyChoiceProvider;
-import org.apache.isis.core.webapp.context.memento.ObjectMemento;
 
 public class Select2MultiChoiceExt
 extends Select2MultiChoice<ObjectMemento>


[isis] 02/06: ISIS-2340: decouple ActionModel from param memento

Posted by ah...@apache.org.
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

commit 6036035db659a2f9fd7099a374038061b12b6522
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 09:46:16 2020 +0200

    ISIS-2340: decouple ActionModel from param memento
---
 .../wicket/model/models/ActionArgumentCache.java   | 11 ++++
 .../viewer/wicket/model/models/ActionModel.java    | 77 +++++-----------------
 .../wicket/model/models/PageParameterUtil.java     | 71 ++++++++++++++++++++
 3 files changed, 100 insertions(+), 59 deletions(-)

diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
index b105330..6677fbe 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
@@ -109,6 +109,16 @@ class ActionArgumentCache {
                     arguments.computeIfAbsent(paramIndex, this::createArgumentModel));
     }
     
+    public void setParameterValue(ObjectActionParameter actionParameter, ManagedObject newParamValue) {
+        val actionParameterMemento = new ActionParameterMemento(actionParameter);
+        val actionArgumentModel = computeIfAbsent(actionParameterMemento);
+        actionArgumentModel.setObject(newParamValue);
+    }
+    
+    public void clearParameterValue(ObjectActionParameter actionParameter) {
+        setParameterValue(actionParameter, null);
+    }
+    
     // //////////////////////////////////////
     
     private IntStream streamParamNumbers() {
@@ -130,5 +140,6 @@ class ActionArgumentCache {
     }
 
 
+
     
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 20cee03..93b54f9 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -38,7 +38,6 @@ import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.resource.StringResourceStream;
 
-import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
@@ -69,9 +68,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
 import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModelHead;
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
-import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
-import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
 import lombok.Value;
@@ -97,8 +94,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
      * @return
      */
     public static ActionModel create(EntityModel entityModel, ObjectAction action) {
-        val homePageActionMemento = new ActionMemento(action);
-        val actionModel = new ActionModel(entityModel, homePageActionMemento);
+        val actionModel = new ActionModel(entityModel, new ActionMemento(action));
         return actionModel;
     }
 
@@ -114,31 +110,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         return actionModel;
     }
 
-    /**
-     * Factory method for creating {@link PageParameters}.
-     */
-    public static PageParameters createPageParameters(ManagedObject adapter, ObjectAction objectAction) {
-
-        val pageParameters = PageParametersUtils.newPageParameters();
 
-        ManagedObject.stringify(adapter)
-        .ifPresent(oidStr->
-        PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr)
-                );
-
-        val actionType = objectAction.getType();
-        PageParameterNames.ACTION_TYPE.addEnumTo(pageParameters, actionType);
-
-        val actionOnTypeSpec = objectAction.getOnType();
-        if (actionOnTypeSpec != null) {
-            PageParameterNames.ACTION_OWNING_SPEC.addStringTo(pageParameters, actionOnTypeSpec.getFullIdentifier());
-        }
-
-        val actionId = determineActionId(objectAction);
-        PageParameterNames.ACTION_ID.addStringTo(pageParameters, actionId);
-
-        return pageParameters;
-    }
 
     @Value(staticConstructor = "of")
     public static class ParamNumAndOidString {
@@ -179,14 +151,13 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
     public PageParameters getPageParametersWithoutUiHints() {
         val adapter = getTargetAdapter();
         val objectAction = getAction();
-        val pageParameters = createPageParameters(adapter, objectAction);
+        val pageParameters = PageParameterUtil.createPageParameters(adapter, objectAction);
 
         // capture argument values
         for(val argumentAdapter: argCache().snapshot()) {
             val encodedArg = encodeArg(argumentAdapter);
             PageParameterNames.ACTION_ARGS.addStringTo(pageParameters, encodedArg);
         }
-
         return pageParameters;
     }
 
@@ -230,16 +201,6 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "...";
     }
 
-
-    private static String determineActionId(final ObjectAction objectAction) {
-        final Identifier identifier = objectAction.getIdentifier();
-        if (identifier != null) {
-            return identifier.toNameParmsIdentityString();
-        }
-        // fallback (used for action sets)
-        return objectAction.getId();
-    }
-
     private final EntityModel entityModel;
     private final ActionMemento actionMemento;
 
@@ -650,14 +611,12 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         this.inlinePromptContext = inlinePromptContext;
     }
 
-    public void setParameterValue(ObjectActionParameter actionParameter, ManagedObject defaultIfAny) {
-        val actionParameterMemento = new ActionParameterMemento(actionParameter);
-        val actionArgumentModel = argCache().computeIfAbsent(actionParameterMemento);
-        actionArgumentModel.setObject(defaultIfAny);
+    public void setParameterValue(ObjectActionParameter actionParameter, ManagedObject newParamValue) {
+        argCache().setParameterValue(actionParameter, newParamValue);
     }
 
     public void clearParameterValue(ObjectActionParameter actionParameter) {
-        setParameterValue(actionParameter, null);
+        argCache().clearParameterValue(actionParameter);
     }
 
     @Value(staticConstructor = "of")
@@ -679,25 +638,25 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         val pendingArgValues = pendingArgs.getParamValues();
 
         return argCache()
-                .streamActionArgumentModels()
-                .map(actionArgumentModel->{
+        .streamActionArgumentModels()
+        .map(actionArgumentModel->{
 
-                    actionArgumentModel.setActionArgsHint(pendingArgs);
+            actionArgumentModel.setActionArgsHint(pendingArgs);
 
-                    val objectActionParamter = actionArgumentModel.getActionParameter(specificationLoader);
+            val objectActionParamter = actionArgumentModel.getActionParameter(specificationLoader);
 
-                    // visibility
-                    val visibilityConsent = objectActionParamter
-                            .isVisible(realTargetAdapter, pendingArgValues, InteractionInitiatedBy.USER);
+            // visibility
+            val visibilityConsent = objectActionParamter
+                    .isVisible(realTargetAdapter, pendingArgValues, InteractionInitiatedBy.USER);
 
-                    // usability
-                    val usabilityConsent = objectActionParamter
-                            .isUsable(realTargetAdapter, pendingArgValues, InteractionInitiatedBy.USER);
+            // usability
+            val usabilityConsent = objectActionParamter
+                    .isUsable(realTargetAdapter, pendingArgValues, InteractionInitiatedBy.USER);
 
-                    return ActionArgumentModelAndConsents.of(
-                            pendingArgs, actionArgumentModel, visibilityConsent, usabilityConsent);
+            return ActionArgumentModelAndConsents.of(
+                    pendingArgs, actionArgumentModel, visibilityConsent, usabilityConsent);
 
-                });
+        });
 
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
new file mode 100644
index 0000000..b4e7397
--- /dev/null
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
@@ -0,0 +1,71 @@
+/*
+ *  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.viewer.wicket.model.models;
+
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
+import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
+
+import lombok.val;
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+class PageParameterUtil {
+
+    /**
+     * Factory method for creating {@link PageParameters}.
+     */
+    public static PageParameters createPageParameters(ManagedObject adapter, ObjectAction objectAction) {
+
+        val pageParameters = PageParametersUtils.newPageParameters();
+
+        ManagedObject.stringify(adapter)
+        .ifPresent(oidStr->
+        PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr)
+                );
+
+        val actionType = objectAction.getType();
+        PageParameterNames.ACTION_TYPE.addEnumTo(pageParameters, actionType);
+
+        val actionOnTypeSpec = objectAction.getOnType();
+        if (actionOnTypeSpec != null) {
+            PageParameterNames.ACTION_OWNING_SPEC.addStringTo(pageParameters, actionOnTypeSpec.getFullIdentifier());
+        }
+
+        val actionId = determineActionId(objectAction);
+        PageParameterNames.ACTION_ID.addStringTo(pageParameters, actionId);
+
+        return pageParameters;
+    }
+    
+    private static String determineActionId(final ObjectAction objectAction) {
+        final Identifier identifier = objectAction.getIdentifier();
+        if (identifier != null) {
+            return identifier.toNameParmsIdentityString();
+        }
+        // fallback (used for action sets)
+        return objectAction.getId();
+    }
+
+    
+}


[isis] 06/06: ISIS-2340: further simplify the ActionModel

Posted by ah...@apache.org.
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

commit ffa030cf351da6438c3f52da1ea491e6376b71eb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 12:21:35 2020 +0200

    ISIS-2340: further simplify the ActionModel
---
 .../viewer/wicket/model/models/ActionModel.java    | 162 +++------------------
 .../wicket/model/models/PageParameterUtil.java     | 160 ++++++++++++++++++--
 .../linkandlabel/LinkAndLabelFactoryAbstract.java  |   2 +-
 .../ui/pages/actionprompt/ActionPromptPage.java    |   5 +-
 4 files changed, 171 insertions(+), 158 deletions(-)

diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index aec362e..6ebc06d 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -22,7 +22,6 @@ package org.apache.isis.viewer.wicket.model.models;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.List;
 import java.util.Objects;
 import java.util.stream.Stream;
 
@@ -46,18 +45,13 @@ import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.applib.value.NamedWithMimeType;
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.base._NullSafe;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
-import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 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;
@@ -65,7 +59,6 @@ import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
 import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModelHead;
 import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
 import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
-import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
 import lombok.Value;
 import lombok.val;
@@ -76,34 +69,25 @@ implements FormExecutorContext {
 
     private static final long serialVersionUID = 1L;
 
-    private static final String NULL_ARG = "$nullArg$";
-
     public ActionModel copy() {
         return new ActionModel(this);
     }
 
     // -- FACTORY METHODS
 
-    /**
-     * @param entityModel
-     * @param action
-     * @return
-     */
-    public static ActionModel create(EntityModel entityModel, ObjectAction action) {
-        val actionModel = new ActionModel(entityModel, new ActionMemento(action));
-        return actionModel;
+    public static ActionModel of(EntityModel actionOwner, ObjectAction action) {
+        return of(actionOwner, new ActionMemento(action));
+    }
+    
+    public static ActionModel of(EntityModel actionOwner, ActionMemento actionMemento) {
+        return new ActionModel(actionOwner, actionMemento);
     }
 
-    public static ActionModel createForPersistent(
+    public static ActionModel ofPageParameters(
             IsisWebAppCommonContext commonContext, 
             PageParameters pageParameters) {
-
-        val entityModel = newEntityModelFrom(commonContext, pageParameters);
-        val actionMemento = newActionMementoFrom(commonContext, pageParameters);
-        val actionModel = new ActionModel(entityModel, actionMemento);
-        actionModel.setArgumentsIfPossible(pageParameters);
-        actionModel.setContextArgumentIfPossible(pageParameters);
-        return actionModel;
+        
+        return PageParameterUtil.actionModelFor(commonContext, pageParameters);
     }
   
 
@@ -115,14 +99,7 @@ implements FormExecutorContext {
     public PageParameters getPageParametersWithoutUiHints() {
         val adapter = getTargetAdapter();
         val objectAction = getAction();
-        val pageParameters = PageParameterUtil.createPageParameters(adapter, objectAction);
-
-        // capture argument values
-        for(val argumentAdapter: argCache().snapshot()) {
-            val encodedArg = encodeArg(argumentAdapter);
-            PageParameterNames.ACTION_ARGS.addStringTo(pageParameters, encodedArg);
-        }
-        return pageParameters;
+        return PageParameterUtil.createPageParameters(adapter, objectAction, argCache().snapshot());
     }
 
     @Override
@@ -152,10 +129,7 @@ implements FormExecutorContext {
         return true;
     }
 
-    //////////////////////////////////////////////////
-    // helpers
-    //////////////////////////////////////////////////
-
+    // -- HELPERS
 
     private static String titleOf(ManagedObject argumentAdapter) {
         return argumentAdapter!=null?argumentAdapter.titleString(null):"";
@@ -179,35 +153,9 @@ implements FormExecutorContext {
         return new ActionArgumentCache(
                 entityModel, 
                 actionMemento, 
-                getActionMemento().getAction(getSpecificationLoader()));
+                getAction());
     }
 
-    private static ActionMemento newActionMementoFrom(
-            IsisWebAppCommonContext commonContext,
-            PageParameters pageParameters) {
-
-        final ObjectSpecId owningSpec = ObjectSpecId.of(PageParameterNames.ACTION_OWNING_SPEC.getStringFrom(pageParameters));
-        final ActionType actionType = PageParameterNames.ACTION_TYPE.getEnumFrom(pageParameters, ActionType.class);
-        final String actionNameParms = PageParameterNames.ACTION_ID.getStringFrom(pageParameters);
-        return new ActionMemento(owningSpec, actionType, actionNameParms, commonContext.getSpecificationLoader());
-    }
-
-
-    private static EntityModel newEntityModelFrom(
-            IsisWebAppCommonContext commonContext,
-            PageParameters pageParameters) {
-
-        val rootOid = oidFor(pageParameters);
-        val memento = commonContext.mementoFor(rootOid);
-        return EntityModel.ofMemento(commonContext, memento);
-    }
-
-    private static RootOid oidFor(final PageParameters pageParameters) {
-        final String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
-        return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
-    }
-
-
     private ActionModel(EntityModel entityModel, ActionMemento actionMemento) {
         super(entityModel.getCommonContext());
         this.entityModel = entityModel;
@@ -229,95 +177,22 @@ implements FormExecutorContext {
         this.argCache = actionModel.argCache().copy(); 
     }
 
-    private void setArgumentsIfPossible(final PageParameters pageParameters) {
-
-        final List<String> argsAsEncodedOidStrings = PageParameterNames.ACTION_ARGS.getListFrom(pageParameters);
-
-        val action = actionMemento.getAction(getSpecificationLoader());
-        val parameters = action.getParameters();
-
-        for (int paramNum = 0; paramNum < argsAsEncodedOidStrings.size(); paramNum++) {
-            val oidStrEncoded = argsAsEncodedOidStrings.get(paramNum);
-            parameters.get(paramNum)
-            .ifPresent(param->decodeAndSetArgument(param, oidStrEncoded));
-        }
-    }
-
+    private transient ObjectAction objectAction;
     public ObjectAction getAction() {
-        return getActionMemento().getAction(getSpecificationLoader());
+        if(objectAction==null) {
+            objectAction = actionMemento.getAction(getSpecificationLoader()); 
+        }
+        return objectAction;
     }
 
-
     public boolean hasParameters() {
         return getAction().getParameterCount() > 0;
     }
 
-    private boolean setContextArgumentIfPossible(final PageParameters pageParameters) {
-        
-        val paramNumAndOidString = PageParameterUtil.parseParamContext(pageParameters)
-                .orElse(null);
-        if(paramNumAndOidString==null) {
-            return false;
-        }
-        
-        val action = actionMemento.getAction(getSpecificationLoader());
-        val actionParamIfAny = action.getParameters().get(paramNumAndOidString.getParamNum());
-        if(!actionParamIfAny.isPresent()) {
-            return false;
-        }
-        val actionParam = actionParamIfAny.get();
-
-        val oidStrEncoded = paramNumAndOidString.getOidString();
-        decodeAndSetArgument(actionParam, oidStrEncoded);
-        return true;
-    }
-
-    private void decodeAndSetArgument(ObjectActionParameter actionParam, String oidStrEncoded) {
-        val paramValue = decodeArg(actionParam.getSpecification(), oidStrEncoded);
-        argCache().setParameterValue(actionParam, paramValue);
-    }
-
-    private String encodeArg(ManagedObject adapter) {
-        if(adapter == null) {
-            return NULL_ARG;
-        }
-
-        final ObjectSpecification objSpec = adapter.getSpecification();
-        if(objSpec.isEncodeable()) {
-            final EncodableFacet encodeable = objSpec.getFacet(EncodableFacet.class);
-            return encodeable.toEncodedString(adapter);
-        }
-
-        return ManagedObject.stringify(adapter).orElse(null);
-    }
-
-    private ManagedObject decodeArg(final ObjectSpecification objSpec, final String encoded) {
-        if(NULL_ARG.equals(encoded)) {
-            return null;
-        }
-
-        if(objSpec.isEncodeable()) {
-            final EncodableFacet encodeable = objSpec.getFacet(EncodableFacet.class);
-            return encodeable.fromEncodedString(encoded);
-        }
-
-        try {
-            val rootOid = RootOid.deStringEncoded(encoded);
-            return ManagedObject._adapterOfRootOid(super.getSpecificationLoader(), rootOid);
-        } catch (final Exception e) {
-            return null;
-        }
-    }
-
-
     public ManagedObject getTargetAdapter() {
         return entityModel.load();
     }
 
-    private ActionMemento getActionMemento() {
-        return actionMemento;
-    }
-
     @Override
     protected ManagedObject load() {
 
@@ -594,8 +469,7 @@ implements FormExecutorContext {
 
         val specificationLoader = getSpecificationLoader();
         val targetAdapter = this.getTargetAdapter();
-        val realTargetAdapter = this.getActionMemento()
-                .getAction(specificationLoader)
+        val realTargetAdapter = this.getAction()
                 .realTargetAdapter(targetAdapter);
         val pendingArgs = getArgumentsAsParamModel();
         val pendingArgValues = pendingArgs.getParamValues();
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
index 85bbc65..ca9861f 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
@@ -18,16 +18,28 @@
  */
 package org.apache.isis.viewer.wicket.model.models;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.regex.Pattern;
 
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.primitives._Ints;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+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.specloader.SpecificationLoader;
+import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
+import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
 import lombok.Value;
@@ -35,21 +47,43 @@ import lombok.val;
 import lombok.experimental.UtilityClass;
 
 @UtilityClass
-
-
 class PageParameterUtil {
     
-    /**
-     * Factory method for creating {@link PageParameters}.
-     */
-    public static PageParameters createPageParameters(ManagedObject adapter, ObjectAction objectAction) {
+    public static ActionModel actionModelFor(IsisWebAppCommonContext commonContext, PageParameters pageParameters) {
+        val entityModel = newEntityModelFrom(commonContext, pageParameters);
+        val actionMemento = newActionMementoFrom(commonContext, pageParameters);
+        val actionModel = ActionModel.of(entityModel, actionMemento);
+        val specLoader = commonContext.getSpecificationLoader();
+        setArgumentsIfPossible(specLoader, actionModel, pageParameters);
+        setContextArgumentIfPossible(specLoader, actionModel, pageParameters);
+        return actionModel;
+    }
+    
+    public static PageParameters createPageParameters(
+            ManagedObject adapter, 
+            ObjectAction objectAction,
+            Can<ManagedObject> paramValues) {
+        
+        val pageParameters = createPageParameters(adapter, objectAction);
+        
+        // capture argument values
+        for(val argumentAdapter: paramValues) {
+            val encodedArg = encodeArg(argumentAdapter);
+            PageParameterNames.ACTION_ARGS.addStringTo(pageParameters, encodedArg);
+        }
+        
+        return pageParameters;
+    }
+    
+    // -- HELPERS
+    
+    private static PageParameters createPageParameters(ManagedObject adapter, ObjectAction objectAction) {
 
         val pageParameters = PageParametersUtils.newPageParameters();
 
         ManagedObject.stringify(adapter)
         .ifPresent(oidStr->
-        PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr)
-                );
+            PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr));
 
         val actionType = objectAction.getType();
         PageParameterNames.ACTION_TYPE.addEnumTo(pageParameters, actionType);
@@ -71,13 +105,23 @@ class PageParameterUtil {
         String oidString;
     }
 
-    public static Optional<ParamNumAndOidString> parseParamContext(PageParameters pageParameters) {
+    private static Optional<ParamNumAndOidString> parseParamContext(PageParameters pageParameters) {
         final String paramContext = PageParameterNames.ACTION_PARAM_CONTEXT.getStringFrom(pageParameters);
         if (paramContext == null) {
             return Optional.empty();
         }
         return parseParamContext(paramContext);
     }
+
+    private static ActionMemento newActionMementoFrom(
+            IsisWebAppCommonContext commonContext,
+            PageParameters pageParameters) {
+
+        final ObjectSpecId owningSpec = ObjectSpecId.of(PageParameterNames.ACTION_OWNING_SPEC.getStringFrom(pageParameters));
+        final ActionType actionType = PageParameterNames.ACTION_TYPE.getEnumFrom(pageParameters, ActionType.class);
+        final String actionNameParms = PageParameterNames.ACTION_ID.getStringFrom(pageParameters);
+        return new ActionMemento(owningSpec, actionType, actionNameParms, commonContext.getSpecificationLoader());
+    }
     
     private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
     
@@ -114,6 +158,104 @@ class PageParameterUtil {
         // fallback (used for action sets)
         return objectAction.getId();
     }
+    
+    private static EntityModel newEntityModelFrom(
+            IsisWebAppCommonContext commonContext,
+            PageParameters pageParameters) {
+
+        val rootOid = oidFor(pageParameters);
+        val memento = commonContext.mementoFor(rootOid);
+        return EntityModel.ofMemento(commonContext, memento);
+    }
+
+    private static RootOid oidFor(final PageParameters pageParameters) {
+        final String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
+        return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
+    }
+
+    private static final String NULL_ARG = "$nullArg$";
+    private String encodeArg(ManagedObject adapter) {
+        if(adapter == null) {
+            return NULL_ARG;
+        }
+
+        final ObjectSpecification objSpec = adapter.getSpecification();
+        if(objSpec.isEncodeable()) {
+            final EncodableFacet encodeable = objSpec.getFacet(EncodableFacet.class);
+            return encodeable.toEncodedString(adapter);
+        }
+
+        return ManagedObject.stringify(adapter).orElse(null);
+    }
+    
+    private ManagedObject decodeArg(
+            final SpecificationLoader specificationLoader,
+            final ObjectSpecification objSpec, 
+            final String encoded) {
+        if(NULL_ARG.equals(encoded)) {
+            return null;
+        }
+
+        if(objSpec.isEncodeable()) {
+            final EncodableFacet encodeable = objSpec.getFacet(EncodableFacet.class);
+            return encodeable.fromEncodedString(encoded);
+        }
+
+        try {
+            val rootOid = RootOid.deStringEncoded(encoded);
+            return ManagedObject._adapterOfRootOid(specificationLoader, rootOid);
+        } catch (final Exception e) {
+            return null;
+        }
+    }
+    
+    private static void setArgumentsIfPossible(
+            final SpecificationLoader specLoader, 
+            final ActionModel actionModel,
+            final PageParameters pageParameters) {
+
+        final List<String> argsAsEncodedOidStrings = PageParameterNames.ACTION_ARGS.getListFrom(pageParameters);
+
+        val action = actionModel.getAction();
+        val parameters = action.getParameters();
+
+        for (int paramNum = 0; paramNum < argsAsEncodedOidStrings.size(); paramNum++) {
+            val oidStrEncoded = argsAsEncodedOidStrings.get(paramNum);
+            parameters.get(paramNum)
+            .ifPresent(param->decodeAndSetArgument(specLoader, actionModel, param, oidStrEncoded));
+        }
+    }
+    
+    private static boolean setContextArgumentIfPossible(
+            final SpecificationLoader specLoader, 
+            final ActionModel actionModel, 
+            final PageParameters pageParameters) {
+        
+        val paramNumAndOidString = parseParamContext(pageParameters)
+                .orElse(null);
+        if(paramNumAndOidString==null) {
+            return false;
+        }
+        
+        val action = actionModel.getAction();
+        val actionParamIfAny = action.getParameters().get(paramNumAndOidString.getParamNum());
+        if(!actionParamIfAny.isPresent()) {
+            return false;
+        }
+        val actionParam = actionParamIfAny.get();
 
+        val oidStrEncoded = paramNumAndOidString.getOidString();
+        decodeAndSetArgument(specLoader, actionModel, actionParam, oidStrEncoded);
+        return true;
+    }
+    
+    private static void decodeAndSetArgument(
+            final SpecificationLoader specLoader, 
+            final ActionModel actionModel, 
+            final ObjectActionParameter actionParam, 
+            final String oidStrEncoded) {
+        val paramValue = decodeArg(specLoader, actionParam.getSpecification(), oidStrEncoded);
+        actionModel.setParameterValue(actionParam, paramValue);
+    }
     
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
index 543864f..e6379c8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
@@ -95,7 +95,7 @@ implements Serializable {
             final ObjectAction action,
             final ToggledMementosProvider toggledMementosProviderIfAny) {
 
-        val actionModel = ActionModel.create(this.targetEntityModel, action);
+        val actionModel = ActionModel.of(this.targetEntityModel, action);
         val commonContext = actionModel.getCommonContext();
 
         final ActionLink link = new ActionLink(commonContext, linkId, actionModel, action) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
index 029fcf6..8fae257 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
@@ -27,8 +27,6 @@ import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 
-import lombok.val;
-
 /**
  * Web page representing an action invocation.
  */
@@ -74,7 +72,6 @@ public class ActionPromptPage extends PageAbstract {
             IsisWebAppCommonContext commonContext,
             PageParameters pageParameters) {
         
-        val actionModel = ActionModel.createForPersistent(commonContext, pageParameters);
-        return actionModel;
+        return ActionModel.ofPageParameters(commonContext, pageParameters);
     }
 }