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/27 05:56:23 UTC
[isis] branch master updated: ISIS-2340: refactor and simplify page
parameter logic
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 9aeee16 ISIS-2340: refactor and simplify page parameter logic
9aeee16 is described below
commit 9aeee16f7ea328220f49a35528096e6c14f4b528
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 27 07:56:12 2020 +0200
ISIS-2340: refactor and simplify page parameter logic
---
.../viewer/wicket/model/models/ActionModel.java | 2 +-
...ference.java => AdapterForObjectReference.java} | 82 ++++++++++------------
.../viewer/wicket/model/models/EntityModel.java | 35 ++-------
.../model/models/HintPageParameterSerializer.java | 23 +++---
.../wicket/model/models/PageParameterUtil.java | 26 ++++++-
.../icontitle/EntityIconAndTitlePanelFactory.java | 6 +-
.../viewer/services/DeepLinkServiceWicket.java | 4 +-
7 files changed, 83 insertions(+), 95 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 e8bcc26..7affbd5 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
@@ -97,7 +97,7 @@ implements FormUiModel, FormExecutorContext, BookmarkableModel {
public PageParameters getPageParametersWithoutUiHints() {
val adapter = getOwner();
val objectAction = getMetaModel();
- return PageParameterUtil.createPageParameters(adapter, objectAction, argCache().snapshot());
+ return PageParameterUtil.createPageParametersForAction(adapter, objectAction, argCache().snapshot());
}
@Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/AdapterForObjectReference.java
similarity index 66%
rename from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
rename to viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/AdapterForObjectReference.java
index d63bfb5..765cdba 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/AdapterForObjectReference.java
@@ -20,27 +20,32 @@ package org.apache.isis.viewer.wicket.model.models;
import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.isis.applib.services.hint.HintStore;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.common.model.object.ObjectUiModel.Mode;
+import org.apache.isis.viewer.common.model.object.ObjectUiModel.RenderingHint;
-import static org.apache.isis.viewer.wicket.model.models.EntityModel.createPageParameters;
-
+import lombok.Getter;
+import lombok.Setter;
import lombok.val;
-public class EntityModelForReference implements ObjectAdapterModel {
+/**
+ *
+ * Wraps a {@link ScalarModel} to act as an {@link ObjectAdapterModel}.
+ *
+ */
+public class AdapterForObjectReference implements ObjectAdapterModel {
private static final long serialVersionUID = 1L;
private final ScalarModel scalarModel;
+ @Getter(onMethod = @__(@Override))
+ @Setter(onMethod = @__(@Override))
private ObjectMemento contextAdapterIfAny;
- private EntityModel.RenderingHint renderingHint;
-
-
- public EntityModelForReference(final ScalarModel scalarModel) {
+
+ public AdapterForObjectReference(final ScalarModel scalarModel) {
this.scalarModel = scalarModel;
}
@@ -48,40 +53,15 @@ public class EntityModelForReference implements ObjectAdapterModel {
public ManagedObject getObject() {
return scalarModel.getPendingElseCurrentAdapter();
}
-
- @Override
- public void setObject(final ManagedObject adapter) {
- // no-op
- }
-
- @Override
- public void detach() {
- // no-op
- }
-
- @Override
- public ObjectMemento getContextAdapterIfAny() {
- return contextAdapterIfAny;
- }
-
- @Override
- public void setContextAdapterIfAny(ObjectMemento contextAdapterIfAny) {
- this.contextAdapterIfAny = contextAdapterIfAny;
- }
-
- @Override
- public EntityModel.RenderingHint getRenderingHint() {
- return renderingHint;
- }
-
+
@Override
- public void setRenderingHint(final EntityModel.RenderingHint renderingHint) {
- this.renderingHint = renderingHint;
+ public RenderingHint getRenderingHint() {
+ return scalarModel.getRenderingHint();
}
-
+
@Override
- public PageParameters getPageParametersWithoutUiHints() {
- return createPageParameters(getObject());
+ public void setRenderingHint(RenderingHint renderingHint) {
+ scalarModel.setRenderingHint(renderingHint);
}
@Override
@@ -98,18 +78,28 @@ public class EntityModelForReference implements ObjectAdapterModel {
public void setMode(Mode mode) {
// no-op
}
+
+ @Override
+ public void setObject(final ManagedObject adapter) {
+ // no-op
+ }
+
+ @Override
+ public void detach() {
+ // no-op
+ }
@Override
public PageParameters getPageParameters() {
- val mementoService = scalarModel.getMementoService();
- val hintStore = scalarModel.getCommonContext().lookupServiceElseFail(HintStore.class);
-
- val pageParameters = createPageParameters(getObject());
- val objectAdapterMemento = mementoService.mementoForObject(getObject());
-
- HintPageParameterSerializer.hintStoreToPageParameters(pageParameters, objectAdapterMemento, hintStore);
+ val pageParameters = getPageParametersWithoutUiHints();
+ HintPageParameterSerializer.hintStoreToPageParameters(pageParameters, scalarModel);
return pageParameters;
}
+
+ @Override
+ public PageParameters getPageParametersWithoutUiHints() {
+ return PageParameterUtil.createPageParametersForObject(getObject());
+ }
@Override
public boolean isInlinePrompt() {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 1b6b530..bd2db2c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -38,7 +38,6 @@ import org.apache.isis.core.webapp.context.IsisWebAppCommonContext;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.common.model.object.ObjectUiModel;
import org.apache.isis.viewer.common.model.object.ObjectUiModel.HasRenderingHints;
-import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
@@ -64,28 +63,6 @@ implements HasRenderingHints, ObjectAdapterModel, UiHintContainer, ObjectUiModel
private static final long serialVersionUID = 1L;
- // -- FACTORY METHODS FOR PAGE PARAMETERS
-
- /**
- * Factory method for creating {@link PageParameters} to represent an
- * entity.
- */
- public static PageParameters createPageParameters(ManagedObject adapter) {
-
- val pageParameters = PageParametersUtils.newPageParameters();
- val isEntity = ManagedObject.isIdentifiable(adapter);
-
- if (isEntity) {
- ManagedObject.stringify(adapter)
- .ifPresent(oidStr->PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr));
- } else {
- // don't do anything; instead the page should be redirected back to
- // an EntityPage so that the underlying EntityModel that contains
- // the memento for the transient ObjectAdapter can be accessed.
- }
- return pageParameters;
- }
-
private final Map<PropertyMemento, ScalarModel> propertyScalarModels;
private ObjectMemento contextAdapterIfAny;
@@ -184,19 +161,19 @@ implements HasRenderingHints, ObjectAdapterModel, UiHintContainer, ObjectUiModel
@Override
public PageParameters getPageParameters() {
- PageParameters pageParameters = createPageParameters(getObject());
+ val pageParameters = getPageParametersWithoutUiHints();
HintPageParameterSerializer.hintStoreToPageParameters(pageParameters, this);
return pageParameters;
}
@Override
- public boolean isInlinePrompt() {
- return false;
+ public PageParameters getPageParametersWithoutUiHints() {
+ return PageParameterUtil.createPageParametersForObject(getObject());
}
-
+
@Override
- public PageParameters getPageParametersWithoutUiHints() {
- return createPageParameters(getObject());
+ public boolean isInlinePrompt() {
+ return false;
}
// //////////////////////////////////////////////////////////
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/HintPageParameterSerializer.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/HintPageParameterSerializer.java
index 6610283..264dceb 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/HintPageParameterSerializer.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/HintPageParameterSerializer.java
@@ -19,14 +19,12 @@
package org.apache.isis.viewer.wicket.model.models;
import java.io.Serializable;
-import java.util.Set;
import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.hint.HintStore;
-import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
+import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
import lombok.val;
@@ -38,15 +36,17 @@ class HintPageParameterSerializer implements Serializable {
private HintPageParameterSerializer() {}
public static void hintStoreToPageParameters(
- final PageParameters pageParameters,
- final EntityModel entityModel) {
+ final PageParameters pageParameters,
+ final ManagedObjectModel objectModel) {
- val hintStore = entityModel.getCommonContext().lookupServiceElseFail(HintStore.class);
- val objectAdapterMemento = entityModel.memento();
+ val hintStore = objectModel.getCommonContext().lookupServiceElseFail(HintStore.class);
+ val objectAdapterMemento = objectModel.memento();
hintStoreToPageParameters(pageParameters, objectAdapterMemento, hintStore);
}
-
- static void hintStoreToPageParameters(
+
+ // -- HELPER
+
+ private static void hintStoreToPageParameters(
final PageParameters pageParameters,
final ObjectMemento objectAdapterMemento,
final HintStore hintStore) {
@@ -54,9 +54,8 @@ class HintPageParameterSerializer implements Serializable {
if(objectAdapterMemento == null) {
return;
}
- final Bookmark bookmark = objectAdapterMemento.asHintingBookmarkIfSupported();
- Set<String> hintKeys = hintStore.findHintKeys(bookmark);
- for (String hintKey : hintKeys) {
+ val bookmark = objectAdapterMemento.asHintingBookmarkIfSupported();
+ for (val hintKey : hintStore.findHintKeys(bookmark)) {
ComponentHintKey.create(hintStore, hintKey).hintTo(bookmark, pageParameters, PREFIX);
}
}
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 9950788..e4c1ecd 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
@@ -47,7 +47,7 @@ import lombok.val;
import lombok.experimental.UtilityClass;
@UtilityClass
-class PageParameterUtil {
+public class PageParameterUtil {
public static ActionModel actionModelFor(IsisWebAppCommonContext commonContext, PageParameters pageParameters) {
val entityModel = newEntityModelFrom(commonContext, pageParameters);
@@ -59,7 +59,29 @@ class PageParameterUtil {
return actionModel;
}
- public static PageParameters createPageParameters(
+ // -- FACTORY METHODS FOR PAGE PARAMETERS
+
+ /**
+ * Factory method for creating {@link PageParameters} to represent an
+ * object.
+ */
+ public static PageParameters createPageParametersForObject(ManagedObject adapter) {
+
+ val pageParameters = PageParametersUtils.newPageParameters();
+ val isEntity = ManagedObject.isIdentifiable(adapter);
+
+ if (isEntity) {
+ ManagedObject.stringify(adapter)
+ .ifPresent(oidStr->PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr));
+ } else {
+ // don't do anything; instead the page should be redirected back to
+ // an EntityPage so that the underlying EntityModel that contains
+ // the memento for the transient ObjectAdapter can be accessed.
+ }
+ return pageParameters;
+ }
+
+ public static PageParameters createPageParametersForAction(
ManagedObject adapter,
ObjectAction objectAction,
Can<ManagedObject> paramValues) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanelFactory.java
index eafcb61..e16f2ae 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanelFactory.java
@@ -25,7 +25,7 @@ import org.apache.wicket.model.IModel;
import org.apache.isis.core.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.wicket.model.models.EntityModelForReference;
+import org.apache.isis.viewer.wicket.model.models.AdapterForObjectReference;
import org.apache.isis.viewer.wicket.model.models.ObjectAdapterModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -38,7 +38,7 @@ import lombok.val;
* {@link ComponentFactory} for {@link EntityIconAndTitlePanel}.
*
* @implNote Knows how to deal with {@link ObjectAdapterModel}. And for
- * {@link ScalarModel} we have an adapter {@link EntityModelForReference}
+ * {@link ScalarModel} we have an adapter {@link AdapterForObjectReference}
* that implements {@link ObjectAdapterModel}, such that it can also deal
* with {@link ScalarModel}.
*
@@ -95,7 +95,7 @@ public class EntityIconAndTitlePanelFactory extends ComponentFactoryAbstract {
val scalarModel = (ScalarModel) model;
// effectively acts as an adapter from ScalarModel to ObjectAdapterModel
- objectAdapterModel = new EntityModelForReference(scalarModel);
+ objectAdapterModel = new AdapterForObjectReference(scalarModel);
objectAdapterModel.setRenderingHint(scalarModel.getRenderingHint());
} else {
throw _Exceptions.unexpectedCodeReach();
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java
index b944a3b..913cee2 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/DeepLinkServiceWicket.java
@@ -36,7 +36,7 @@ import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.applib.services.linking.DeepLinkService;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.PageParameterUtil;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
@@ -58,7 +58,7 @@ public class DeepLinkServiceWicket implements DeepLinkService {
final ManagedObject objectAdapter = ManagedObject.of(specificationLoader::loadSpecification, domainObject);
- final PageParameters pageParameters = EntityModel.createPageParameters(objectAdapter);
+ final PageParameters pageParameters = PageParameterUtil.createPageParametersForObject(objectAdapter);
final Class<? extends Page> pageClass = pageClassRegistry.getPageClass(PageType.ENTITY);