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:51 UTC
[isis] 02/06: ISIS-2340: decouple ActionModel from param memento
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();
+ }
+
+
+}