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 2021/12/07 07:27:46 UTC

[isis] 02/03: ISIS-2911: cleaning up IsisWicketApplication a bit

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 00967d1c4207178aa6b3463ea8701f107ff1a422
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 7 08:18:08 2021 +0100

    ISIS-2911: cleaning up IsisWicketApplication a bit
    
    - also keeping some of the recent experiments for future reference
---
 .../viewer/wicketapp/IsisWicketApplication.java    |  33 ++--
 .../IsisWicketApplication_experimental.java        | 191 +++++++++++++++++++++
 2 files changed, 209 insertions(+), 15 deletions(-)

diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
index 901c076..876a1f5 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
@@ -170,6 +170,7 @@ implements
         newPageFactoryMixin = new IsisWicketApplication_newPageFactory(this);
     }
 
+
     /**
      * Although there are warnings about not overriding this method, it doesn't seem possible
      * to call {@link #setResourceSettings(org.apache.wicket.settings.ResourceSettings)} in the
@@ -187,6 +188,9 @@ implements
 
         super.internalInit();
 
+        // entity page experiments, kept for reference or future experiments
+        //IsisWicketApplication_experimental.setRootRequestMapper(this);
+
     }
 
     private AjaxRequestTarget decorate(final AjaxRequestTarget ajaxRequestTarget) {
@@ -280,26 +284,25 @@ implements
             //  side-effects?
             //  SharedResources sharedResources = getSharedResources();
 
-            if(systemEnvironment.isPrototyping()) {
+            if(systemEnvironment.isPrototyping()
+                    && configuration.getViewer().getWicket().getDevelopmentUtilities().isEnable()) {
+
                 DebugDiskDataStore.register(this);
                 log.debug("DebugDiskDataStore registered; access via ~/wicket/internal/debug/diskDataStore");
                 log.debug("DebugDiskDataStore: eg, http://localhost:8080/wicket/wicket/internal/debug/diskDataStore");
 
                 if(!getDebugSettings().isDevelopmentUtilitiesEnabled()) {
-                    boolean enableDevUtils = configuration.getViewer().getWicket().getDevelopmentUtilities().isEnable();
-                    if(enableDevUtils) {
-                        getDebugSettings().setDevelopmentUtilitiesEnabled(true);
-
-                        // copied from DebugBarInitializer
-                        // this is hacky, but need to do this because IInitializer#init() called before
-                        // the Application's #init() is called.
-                        // an alternative, better, design might be to move Isis' own initialization into an
-                        // implementation of IInitializer?
-                        DebugBar.registerContributor(VersionDebugContributor.DEBUG_BAR_CONTRIB, this);
-                        DebugBar.registerContributor(InspectorDebugPanel.DEBUG_BAR_CONTRIB, this);
-                        DebugBar.registerContributor(SessionSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
-                        DebugBar.registerContributor(PageSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
-                    }
+                    getDebugSettings().setDevelopmentUtilitiesEnabled(true);
+
+                    // copied from DebugBarInitializer
+                    // this is hacky, but need to do this because IInitializer#init() called before
+                    // the Application's #init() is called.
+                    // an alternative, better, design might be to move Isis' own initialization into an
+                    // implementation of IInitializer?
+                    DebugBar.registerContributor(VersionDebugContributor.DEBUG_BAR_CONTRIB, this);
+                    DebugBar.registerContributor(InspectorDebugPanel.DEBUG_BAR_CONTRIB, this);
+                    DebugBar.registerContributor(SessionSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
+                    DebugBar.registerContributor(PageSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
                 }
             }
 
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication_experimental.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication_experimental.java
index 0fdc9ec..5140d19 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication_experimental.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication_experimental.java
@@ -24,19 +24,36 @@ import java.util.Set;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
+import org.apache.wicket.SystemMapper;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.AjaxRequestTarget.IListener;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.attributes.IAjaxCallListener;
+import org.apache.wicket.core.request.handler.ListenerRequestHandler;
+import org.apache.wicket.core.request.mapper.PageInstanceMapper;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.IRequestMapper;
+import org.apache.wicket.request.Request;
 import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import org.apache.isis.commons.internal._Constants;
+import org.apache.isis.commons.internal.base._Refs;
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.interactions.managed.nonscalar.DataTableModel;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.runtime.context.IsisAppCommonContext;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.ui.components.collection.CollectionPanel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanel;
+import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 
 import lombok.NonNull;
 import lombok.val;
@@ -166,6 +183,180 @@ final class IsisWicketApplication_experimental {
                 references.toArray(new CssResourceReference[]{}));
     }
 
+    // -- ENTITY PAGE EXPERIMENTS
+
+    static void setRootRequestMapper(final IsisWicketApplication app) {
+        app.setRootRequestMapper(new SystemMapper(app) {
+            @Override
+            protected IRequestMapper newPageInstanceMapper() {
+                return new PageInstanceMapper() {
+                    @Override
+                    public IRequestHandler mapRequest(final Request request) {
+                        var handler = super.mapRequest(request);
+                        return reattachingHandler(app.getCommonContext(), handler);
+                    }
+                };
+            }
+        });
+
+    }
+
+    private static String keyFor(final Component component) {
+        val ref = _Refs.stringRef(component.getPath());
+        ref.cutAtIndexOfAndDrop(":theme:");
+        return ref.getValue();
+    }
+
+    private static IRequestHandler reattachingHandler(
+            final IsisAppCommonContext commonContext, final IRequestHandler handler) {
+        if(handler!=null) {
+            return handler;
+        }
+        if(handler instanceof ListenerRequestHandler) {
+            val lirqh = (ListenerRequestHandler)handler;
+            val page = lirqh.getPage();
+            if(!(page instanceof EntityPage)) {
+                return lirqh;
+            }
+
+            val entityPage = (EntityPage) page;
+            val entityModel = (EntityModel)entityPage.getUiHintContainerIfAny();
+            val spec = entityModel.getObject().getSpecification();
+
+            if(!spec.getCorrespondingClass()
+            .getSimpleName().contains("InventoryJaxb")) {
+                return lirqh;
+            };
+
+            val pageParams = entityPage.getPageParameters();
+            val pageWithAttachedEntities = EntityPage.ofPageParameters(commonContext, pageParams);
+            pageWithAttachedEntities.internalInitialize();
+
+            final Map<String, ManagedObject> entityByPath = _Maps.newHashMap();
+            final Map<String, DataTableModel> dataTableByPath = _Maps.newHashMap();
+
+            System.err.println("===================================================");
+
+            pageWithAttachedEntities.visitChildren(new IVisitor<Component, Void>() {
+
+                @Override
+                public void component(final Component component, final IVisit<Void> visit) {
+
+                    //System.err.printf("+ %s%n", component);
+
+                    if(component.getClass().equals(ReferencePanel.class)) {
+                        val scalarModel = ((ReferencePanel)component).getModel();
+                        val value = scalarModel.getObject();
+                        entityByPath.put(keyFor(component), value);
+
+                        System.err.printf("AAA-value %s%n", value.getPojo());
+                        System.err.printf("AAA-value@ %s%n", keyFor(component));
+                        return;
+                    }
+                    if(component.getClass().equals(CollectionPanel.class)) {
+                        val collectionModel = ((CollectionPanel)component).getModel();
+                        val dataTableModel = collectionModel.getDataTableModel();
+                        dataTableByPath.put(keyFor(component), dataTableModel);
+                        System.err.printf("AAA-coll %s%n", dataTableModel);
+                        System.err.printf("AAA-coll@ %s%n", keyFor(component));
+                    }
+
+//                    if(component.getClass().equals(EntityCollectionPanel.class)) {
+//                        val entityModel = ((EntityCollectionPanel)component).getModel();
+//                        val dataTableModel = EntityCollectionModelParented
+//                                .forParentObjectModel(entityModel)
+//                                .getDataTableModel();
+//                        dataTableByPath.put(keyFor(component), dataTableModel);
+//
+//                        System.err.printf("AAA-coll %s%n", dataTableModel);
+//                        System.err.printf("AAA-coll@ %s%n", keyFor(component));
+//                    }
+
+                }
+            });
+
+
+            //TODO re-attach all entities in the object graph
+
+            if(entityModel.getCommonContext().getInteractionProvider().isInInteraction()) {
+
+                System.err.println("===================================================");
+
+                entityPage.visitChildren((component, visit) -> {
+                    //System.err.printf("+ %s%n", component);
+                    if(component.getClass().getSimpleName().equals("ReferencePanel")) {
+                        var scalarModel = ((ReferencePanel)component).getModel();
+                        scalarModel.setObject(entityByPath.get(keyFor(component)));
+                        var value = scalarModel.getObject();
+                        //getObjectManager().attachObject(value);
+                        System.err.printf("BBB-value@ %s%n", keyFor(component));
+                        System.err.printf("BBB-value %s%n", value.getPojo());
+                        return;
+                    }
+
+                    if(component.getClass().equals(CollectionPanel.class)) {
+                        val collectionModel = ((CollectionPanel)component).getModel();
+                        val dataTableModel = dataTableByPath.get(keyFor(component));
+
+                        collectionModel.setDataTableModel(dataTableModel);
+
+                        System.err.printf("BBB-coll@ %s%n", keyFor(component));
+                        System.err.printf("BBB-coll %s%n", collectionModel.getDataTableModel());
+//                        System.err.printf("path %s%n", keyFor(component));
+
+//                        collectionModel.getDataTableModel().getDataElements().getValue().forEach(mo->{
+//                            System.err.printf("element %s%n", mo);
+//
+//                            mo.getPojo();
+//                        });
+
+
+                        dataTableModel.getDataElements().getValue().forEach(mo->{
+                            System.err.printf("element %s%n", mo.getBookmark());
+                        });
+
+                    }
+
+                });
+            }
+
+//            if(false) {
+//                Url url = request.getUrl();
+//                PageComponentInfo info = getPageComponentInfo(url);
+////                            Integer renderCount = info.getComponentInfo() != null ? info.getComponentInfo()
+////                                    .getRenderCount() : null;
+//                ComponentInfo componentInfo = info.getComponentInfo();
+////                            PageAndComponentProvider provider = new PageAndComponentProvider(
+////                                    info.getPageInfo().getPageId(), renderCount,
+////                                    componentInfo.getComponentPath());
+////                            provider.setPageSource(getContext());
+//
+//                val pageParams = entityPage.getPageParameters();
+//
+//                PageAndComponentProvider provider2 = new PageAndComponentProvider(
+//                        EntityPage.class, pageParams,
+//                        componentInfo.getComponentPath());
+//
+//                System.err.printf("***ComponentPath %s%n", componentInfo.getComponentPath());
+//
+//                provider2.setPageSource(getContext());
+//
+//                return new ListenerRequestHandler(provider2, componentInfo.getBehaviorId()) {
+//                    @Override
+//                    public IRequestableComponent getComponent() {
+//                        dumpComponentTree((EntityPage)getPage(), _Predicates.alwaysTrue());
+//                        return super.getComponent();
+//                    }
+//                };
+//            }
+
+            return lirqh;
+
+        }
+        return handler;
+    }
+
+
 
 
 }