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 2019/10/30 15:40:35 UTC

[isis] branch v2 updated: ISIS-2158: changes the entry-point for resolving Objects by rootOid

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new 2da1b67  ISIS-2158: changes the entry-point for resolving Objects by rootOid
2da1b67 is described below

commit 2da1b67a8268c878bcc97b160074ce6856bca369
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 16:40:21 2019 +0100

    ISIS-2158: changes the entry-point for resolving Objects by rootOid
---
 .../apache/isis/metamodel/spec/ManagedObject.java  |  1 +
 .../org/apache/isis/wrapper/AsyncWrapDefault.java  |  2 +-
 .../isis/runtime/system/context/IsisContext.java   | 19 ++-----------
 .../config/internal/_Config_LifecycleResource.java |  2 +-
 .../server/resources/ResourceAbstract.java         |  2 +-
 .../integration/wicket/WebRequestCycleForIsis.java |  2 +-
 .../viewer/wicket/model/models/ActionModel.java    |  4 +--
 .../actionmenu/serviceactions/CssMenuItem.java     |  2 +-
 .../components/tree/IsisToWicketTreeAdapter.java   | 33 ++++++++++++++--------
 9 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index 349bb86..6874dcd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -461,6 +461,7 @@ public interface ManagedObject {
         return oidStr != null ? Oid.unmarshaller().splitInstanceId(oidStr): null;
     }
     
+    // move this to ObjectManager?
     static ManagedObject _adapterOfRootOid(SpecificationLoader specificationLoader, RootOid rootOid) {
         
         val mmc = ((SpecificationLoaderDefault)specificationLoader).getMetaModelContext();
diff --git a/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/AsyncWrapDefault.java b/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/AsyncWrapDefault.java
index 4f52214..163eed5 100644
--- a/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/AsyncWrapDefault.java
+++ b/core/runtime-extensions/src/main/java/org/apache/isis/wrapper/AsyncWrapDefault.java
@@ -186,7 +186,7 @@ class AsyncWrapDefault<T> implements AsyncWrap<T> {
     private <R> Future<R> submit(Supplier<R> actionInvocation) {
         
         
-        val authenticationSession = IsisContext.getAuthenticationSession().get();
+        val authenticationSession = IsisContext.getCurrentAuthenticationSession().get();
         
         Callable<R> asyncTask = ()->{
 
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
index b64d888..8343801 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
@@ -20,20 +20,15 @@ package org.apache.isis.runtime.system.context;
 
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
-import java.util.function.Function;
 import java.util.function.Supplier;
 
 import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.specloader.validator.MetaModelInvalidException;
 import org.apache.isis.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.runtime.system.session.IsisSession;
 import org.apache.isis.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.security.authentication.AuthenticationSession;
 
-import lombok.val;
-
 /**
  * Provides static access to current context's singletons
  * {@link MetaModelInvalidException} and {@link IsisSessionFactory}.
@@ -77,8 +72,8 @@ public interface IsisContext {
      * @return framework's current AuthenticationSession (if any)
      * @throws IllegalStateException - if IsisSessionFactory not resolvable
      */
-    public static Optional<AuthenticationSession> getAuthenticationSession() {
-        return getCurrentIsisSession()
+    public static Optional<AuthenticationSession> getCurrentAuthenticationSession() {
+        return IsisSession.current()
                 .map(IsisSession::getAuthenticationSession);
     }
     
@@ -94,15 +89,5 @@ public interface IsisContext {
                 .getFirst();
     }
 
-    @Deprecated
-    public static Function<RootOid, ObjectAdapter> rootOidToAdapter() {
-        return rootOid -> {
-            val ps = IsisContext.getPersistenceSession()
-                    .orElseThrow(()->new RuntimeException(new IllegalStateException(
-                            "There is no PersistenceSession on the current context.")));
-            return ps.getObjectAdapterByIdProvider().adapterFor(rootOid);
-        }; 
-    }
-
 
 }
diff --git a/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/config/internal/_Config_LifecycleResource.java b/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/config/internal/_Config_LifecycleResource.java
index a031bd6..1cff5bb 100644
--- a/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/config/internal/_Config_LifecycleResource.java
+++ b/core/testsupport/unittestsupport/src/main/java/org/apache/isis/unittestsupport/config/internal/_Config_LifecycleResource.java
@@ -76,7 +76,7 @@ class _Config_LifecycleResource {
                 _Config_Parsers::parseFont,
                 _Config_Parsers::parseList);
 
-        log.info("=== Config Finalized ===");
+        log.debug("=== Config Finalized ===");
 
         return config;
 
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index f3f48d9..0773275 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -96,7 +96,7 @@ public abstract class ResourceAbstract {
         if (!IsisSession.isInSession()) {
             throw RestfulObjectsApplicationException.create(HttpStatusCode.UNAUTHORIZED);
         }
-        if (IsisContext.getAuthenticationSession() == null) {
+        if (IsisContext.getCurrentAuthenticationSession() == null) {
             throw RestfulObjectsApplicationException.create(HttpStatusCode.UNAUTHORIZED);
         }
 
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
index c0023cf..0211bae 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
@@ -390,7 +390,7 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
     }
 
     private AuthenticationSession getAuthenticationSession() {
-        return IsisContext.getAuthenticationSession().orElse(null);
+        return IsisContext.getCurrentAuthenticationSession().orElse(null);
     }
 
     private MessageBroker getMessageBroker() {
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 7883bd1..43043cf 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -67,7 +67,6 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.system.context.IsisContext;
 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;
@@ -399,8 +398,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
 
         try {
             val rootOid = RootOid.deStringEncoded(encoded);
-            val rootOidToAdapter = IsisContext.rootOidToAdapter();
-            return rootOidToAdapter.apply(rootOid);			
+            return ManagedObject._adapterOfRootOid(super.getSpecificationLoader(), rootOid);
         } catch (final Exception e) {
             return null;
         }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index 763fb52..ec49717 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -498,7 +498,7 @@ class CssMenuItem implements Serializable {
     // //////////////////////////////////////////////////////////////
 
     AuthenticationSession getAuthenticationSession() {
-        return IsisContext.getAuthenticationSession().orElse(null);
+        return IsisContext.getCurrentAuthenticationSession().orElse(null);
     }
 
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index 36f724f..50c81cf 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -48,7 +48,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.functions._Functions;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.spec.ManagedObject;
-import org.apache.isis.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ModelAbstract;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -233,20 +233,23 @@ class IsisToWicketTreeAdapter {
         private static final long serialVersionUID = 1L;
 
         private final Class<? extends TreeAdapter> treeAdapterClass;
+
         private transient TreeAdapter wrappedTreeAdapter;
-        
-        private final transient IsisWebAppCommonContext commonContext;
-        private final transient FactoryService factoryService;
-        private final transient Function<Object, ManagedObject> pojoToAdapter;
+        private transient IsisWebAppCommonContext commonContext;
+        private transient FactoryService factoryService;
+        private transient Function<Object, ManagedObject> pojoToAdapter;
         
 
         private TreeModelTreeAdapter(
                 IsisWebAppCommonContext commonContext, 
                 Class<? extends TreeAdapter> treeAdapterClass) {
-
-            this.commonContext = commonContext;
-            this.treeAdapterClass = treeAdapterClass;
             
+            this.treeAdapterClass = treeAdapterClass;
+            init(commonContext);
+        }
+        
+        private void init(IsisWebAppCommonContext commonContext) {
+            this.commonContext = commonContext;
             this.factoryService = commonContext.lookupServiceElseFail(FactoryService.class);
             this.pojoToAdapter = pojo ->
                 ManagedObject.of(commonContext.getSpecificationLoader()::loadSpecification, pojo);
@@ -257,6 +260,7 @@ class IsisToWicketTreeAdapter {
                 return wrappedTreeAdapter;
             }
             try {
+                ensureInit(); // in case we were de-serialzed
                 return wrappedTreeAdapter = factoryService.instantiate(treeAdapterClass);
             } catch (Exception e) {
                 throw new RuntimeException("failed to instantiate tree adapter", e);
@@ -291,6 +295,7 @@ class IsisToWicketTreeAdapter {
 
         private TreeModel wrap(Object pojo, TreePath treePath) {
             requires(pojo, "pojo");
+            ensureInit(); // in case we were de-serialzed
             val objectAdapter = pojoToAdapter.apply(pojo);
             return new TreeModel(commonContext, objectAdapter, treePath);
         }
@@ -304,7 +309,13 @@ class IsisToWicketTreeAdapter {
             return _Functions.indexAwareToFunction((indexWithinSiblings, pojo)->
             wrap(pojo, parent.getTreePath().append(indexWithinSiblings)));
         }
-
+        
+        // in case we were de-serialzed
+        private void ensureInit() {
+            if(commonContext!=null) return;
+            init(CommonContextUtils.getCommonContext());
+        }
+        
     }
 
     // -- WICKET'S TREE PROVIDER (FOR TREES OF TREE-MODEL NODES)
@@ -402,9 +413,7 @@ class IsisToWicketTreeAdapter {
         protected TreeModel load() {
 
             val rootOid = id;
-            val rootOidToAdapter = IsisContext.rootOidToAdapter();
-
-            val objAdapter = rootOidToAdapter.apply(rootOid);
+            val objAdapter = ManagedObject._adapterOfRootOid(commonContext.getSpecificationLoader(), rootOid);
             if(objAdapter==null) {
                 throw new NoSuchElementException(
                         String.format("Tree creation: could not recreate TreeModel from Oid: '%s'", id));