You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2016/09/12 07:31:34 UTC

[3/4] tapestry-5 git commit: TAP5-2478: short-circuit in getIfExists if there is no active session

TAP5-2478: short-circuit in getIfExists if there is no active session


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/1a8f0864
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/1a8f0864
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/1a8f0864

Branch: refs/heads/master
Commit: 1a8f0864dd3632fdb911f59e3c9fc0a1d487c84e
Parents: 2ed0a7c
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Wed Jul 20 14:47:53 2016 +0200
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Mon Sep 12 09:31:23 2016 +0200

----------------------------------------------------------------------
 .../services/ApplicationStateManagerImpl.java     |  9 ++++++---
 ...essionApplicationStatePersistenceStrategy.java | 18 +++++++++++++++++-
 .../ApplicationStatePersistenceStrategy.java      |  7 +++++++
 .../apache/tapestry5/test/TapestryTestCase.java   |  6 ++++++
 .../services/ApplicationStateManagerImplTest.java |  5 ++---
 5 files changed, 38 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1a8f0864/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImpl.java
index 660911f..631f5af 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImpl.java
@@ -59,6 +59,11 @@ public class ApplicationStateManagerImpl implements ApplicationStateManager
         {
             return strategy.exists(ssoClass);
         }
+
+        T getIfExists()
+        {
+            return strategy.getIfExists(ssoClass);
+        }
     }
 
     /**
@@ -135,9 +140,7 @@ public class ApplicationStateManagerImpl implements ApplicationStateManager
 
     public <T> T getIfExists(Class<T> ssoClass)
     {
-        ApplicationStateAdapter<T> adapter = getAdapter(ssoClass);
-
-        return adapter.exists() ? adapter.getOrCreate() : null;
+        return getAdapter(ssoClass).getIfExists();
     }
 
     public <T> void set(Class<T> ssoClass, T sso)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1a8f0864/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
index bd33e35..a459ae0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
@@ -43,7 +43,7 @@ public class SessionApplicationStatePersistenceStrategy implements ApplicationSt
     {
         return (T) getOrCreate(ssoClass, creator);
     }
-    
+
     protected <T> Object getOrCreate(Class<T> ssoClass, ApplicationStateCreator<T> creator)
     {
         Session session = getSession();
@@ -61,6 +61,22 @@ public class SessionApplicationStatePersistenceStrategy implements ApplicationSt
         return sso;
     }
 
+    public <T> T getIfExists(Class<T> ssoClass)
+    {
+        Session session = request.getSession(false);
+
+        if (session != null)
+        {
+
+            String key = buildKey(ssoClass);
+
+            Object sso = session.getAttribute(key);
+
+            return sso != null ? (T)sso : null;
+        }
+        return null;
+    }
+
     protected <T> String buildKey(Class<T> ssoClass)
     {
         return PREFIX + ssoClass.getName();

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1a8f0864/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationStatePersistenceStrategy.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationStatePersistenceStrategy.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationStatePersistenceStrategy.java
index d6eefb6..c6f5e87 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationStatePersistenceStrategy.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/ApplicationStatePersistenceStrategy.java
@@ -40,4 +40,11 @@ public interface ApplicationStatePersistenceStrategy
      * Returns true if the SSO already exists, false if null.
      */
     <T> boolean exists(Class<T> ssoClass);
+
+    /**
+     * Returns the SSO if it exists or null.
+     */
+    default <T> T getIfExists(Class<T> ssoClass) {
+        return exists(ssoClass) ? get(ssoClass, () -> null) : null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1a8f0864/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java b/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
index b615489..692a826 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
@@ -354,6 +354,12 @@ public abstract class TapestryTestCase extends IOCTestCase
         expect(binding.get()).andReturn(value);
     }
 
+    protected final <T> void train_getIfExists(ApplicationStatePersistenceStrategy strategy, Class<T> asoClass,
+           T aso)
+    {
+        expect(strategy.getIfExists(asoClass)).andReturn(aso);
+    }
+
     protected void train_getAttribute(HttpSession session, String attributeName, Object value)
     {
         expect(session.getAttribute(attributeName)).andReturn(value);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/1a8f0864/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
index df27034..f9c69a2 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ApplicationStateManagerImplTest.java
@@ -196,7 +196,7 @@ public class ApplicationStateManagerImplTest extends InternalBaseTestCase
                 new ApplicationStateContribution(strategyName, creator));
 
         train_get(source, strategyName, strategy);
-        train_exists(strategy, asoClass, false);
+        train_getIfExists(strategy, asoClass, null);
 
         replay();
 
@@ -222,8 +222,7 @@ public class ApplicationStateManagerImplTest extends InternalBaseTestCase
                 new ApplicationStateContribution(strategyName, creator));
 
         train_get(source, strategyName, strategy);
-        train_exists(strategy, asoClass, true);
-        train_get(strategy, asoClass, creator, aso);
+        train_getIfExists(strategy, asoClass, aso);
 
         replay();