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