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);