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 <ahu...@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();
+    }
+
+    
+}

Reply via email to