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