You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2007/09/05 21:23:13 UTC
svn commit: r573034 - in /tiles/framework/trunk/tiles-core/src:
main/java/org/apache/tiles/servlet/context/ test/java/org/apache/tiles/impl/
test/java/org/apache/tiles/servlet/context/
Author: apetrelli
Date: Wed Sep 5 12:23:13 2007
New Revision: 573034
URL: http://svn.apache.org/viewvc?rev=573034&view=rev
Log:
TILES-207
Now ServletSessionScopeMap points to a request and creates a session only if needed.
Added:
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java (with props)
Modified:
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletSessionScopeMap.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletSessionScopeMap.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletSessionScopeMap.java?rev=573034&r1=573033&r2=573034&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletSessionScopeMap.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletSessionScopeMap.java Wed Sep 5 12:23:13 2007
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@@ -46,30 +47,36 @@
/**
* Constructor.
*
- * @param session The session object to use.
+ * @param request The request object to use.
*/
- public ServletSessionScopeMap(HttpSession session) {
- this.session = session;
+ public ServletSessionScopeMap(HttpServletRequest request) {
+ this.request = request;
}
-
/**
- * The session object to use.
+ * The request object to use.
*/
- private HttpSession session = null;
-
+ private HttpServletRequest request = null;
/** {@inheritDoc} */
public void clear() {
- Iterator<String> keys = keySet().iterator();
- while (keys.hasNext()) {
- session.removeAttribute(keys.next());
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ Iterator<String> keys = keySet().iterator();
+ while (keys.hasNext()) {
+ session.removeAttribute(keys.next());
+ }
}
}
/** {@inheritDoc} */
public boolean containsKey(Object key) {
+ HttpSession session = request.getSession(false);
+ if (session == null) {
+ return false;
+ }
+
return (session.getAttribute(key(key)) != null);
}
@@ -77,7 +84,8 @@
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
public boolean containsValue(Object value) {
- if (value == null) {
+ HttpSession session = request.getSession(false);
+ if (session == null || value == null) {
return (false);
}
Enumeration<String> keys = session.getAttributeNames();
@@ -94,13 +102,16 @@
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
public Set<Map.Entry<String, Object>> entrySet() {
+ HttpSession session = request.getSession(false);
Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String, Object>>();
- Enumeration<String> keys = session.getAttributeNames();
- String key;
- while (keys.hasMoreElements()) {
- key = keys.nextElement();
- set.add(new MapEntry<String, Object>(key,
- session.getAttribute(key), true));
+ if (session != null) {
+ Enumeration<String> keys = session.getAttributeNames();
+ String key;
+ while (keys.hasMoreElements()) {
+ key = keys.nextElement();
+ set.add(new MapEntry<String, Object>(key,
+ session.getAttribute(key), true));
+ }
}
return (set);
}
@@ -108,18 +119,33 @@
/** {@inheritDoc} */
public boolean equals(Object o) {
- return (session.equals(o));
+ HttpSession session = request.getSession(false);
+ if (session == null) {
+ return o == null;
+ } else {
+ return (session.equals(o));
+ }
}
/** {@inheritDoc} */
public Object get(Object key) {
+ HttpSession session = request.getSession(false);
+ if (session == null) {
+ return null;
+ }
+
return (session.getAttribute(key(key)));
}
/** {@inheritDoc} */
public int hashCode() {
+ HttpSession session = request.getSession(false);
+ if (session == null) {
+ return 0;
+ }
+
return (session.hashCode());
}
@@ -133,10 +159,13 @@
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
public Set<String> keySet() {
+ HttpSession session = request.getSession(false);
Set<String> set = new HashSet<String>();
- Enumeration<String> keys = session.getAttributeNames();
- while (keys.hasMoreElements()) {
- set.add(keys.nextElement());
+ if (session != null) {
+ Enumeration<String> keys = session.getAttributeNames();
+ while (keys.hasMoreElements()) {
+ set.add(keys.nextElement());
+ }
}
return (set);
}
@@ -144,6 +173,7 @@
/** {@inheritDoc} */
public Object put(String key, Object value) {
+ HttpSession session = request.getSession();
if (value == null) {
return (remove(key));
}
@@ -156,6 +186,7 @@
/** {@inheritDoc} */
public void putAll(Map<? extends String, ? extends Object> map) {
+ HttpSession session = request.getSession();
Iterator<? extends String> keys = map.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
@@ -166,6 +197,11 @@
/** {@inheritDoc} */
public Object remove(Object key) {
+ HttpSession session = request.getSession(false);
+ if (session == null) {
+ return null;
+ }
+
String skey = key(key);
Object previous = session.getAttribute(skey);
session.removeAttribute(skey);
@@ -176,11 +212,14 @@
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
public int size() {
+ HttpSession session = request.getSession(false);
int n = 0;
- Enumeration<String> keys = session.getAttributeNames();
- while (keys.hasMoreElements()) {
- keys.nextElement();
- n++;
+ if (session != null) {
+ Enumeration<String> keys = session.getAttributeNames();
+ while (keys.hasMoreElements()) {
+ keys.nextElement();
+ n++;
+ }
}
return (n);
}
@@ -189,10 +228,13 @@
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
public Collection<Object> values() {
+ HttpSession session = request.getSession(false);
List<Object> list = new ArrayList<Object>();
- Enumeration<String> keys = session.getAttributeNames();
- while (keys.hasMoreElements()) {
- list.add(session.getAttribute(keys.nextElement()));
+ if (session != null) {
+ Enumeration<String> keys = session.getAttributeNames();
+ while (keys.hasMoreElements()) {
+ list.add(session.getAttribute(keys.nextElement()));
+ }
}
return (list);
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java?rev=573034&r1=573033&r2=573034&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java Wed Sep 5 12:23:13 2007
@@ -171,7 +171,7 @@
public Map<String, Object> getSessionScope() {
if ((sessionScope == null) && (request != null)) {
- sessionScope = new ServletSessionScopeMap(request.getSession());
+ sessionScope = new ServletSessionScopeMap(request);
}
return (sessionScope);
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java?rev=573034&r1=573033&r2=573034&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainerTest.java Wed Sep 5 12:23:13 2007
@@ -188,7 +188,7 @@
EasyMock.reset(request);
EasyMock.reset(session);
EasyMock.reset(response);
- EasyMock.expect(request.getSession()).andReturn(session).anyTimes();
+ EasyMock.expect(request.getSession(false)).andReturn(session).anyTimes();
EasyMock.expect(session.getAttribute(DefaultLocaleResolver.LOCALE_KEY)).andReturn(null).anyTimes();
EasyMock.expect(request.getLocale()).andReturn(null).anyTimes();
EasyMock.expect(request.getAttribute(
@@ -207,7 +207,7 @@
EasyMock.expect(request.getAttribute(
DefaultKeyExtractor.DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME))
.andReturn("one").anyTimes();
- EasyMock.expect(request.getSession()).andReturn(session).anyTimes();
+ EasyMock.expect(request.getSession(false)).andReturn(session).anyTimes();
EasyMock.expect(session.getAttribute(DefaultLocaleResolver.LOCALE_KEY)).andReturn(null).anyTimes();
EasyMock.expect(request.getLocale()).andReturn(null).anyTimes();
EasyMock.replay(request);
@@ -223,7 +223,7 @@
EasyMock.expect(request.getAttribute(
DefaultKeyExtractor.DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME))
.andReturn("two").anyTimes();
- EasyMock.expect(request.getSession()).andReturn(session).anyTimes();
+ EasyMock.expect(request.getSession(false)).andReturn(session).anyTimes();
EasyMock.expect(session.getAttribute(DefaultLocaleResolver.LOCALE_KEY)).andReturn(null).anyTimes();
EasyMock.expect(request.getLocale()).andReturn(null).anyTimes();
EasyMock.replay(request);
Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java?rev=573034&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java Wed Sep 5 12:23:13 2007
@@ -0,0 +1,71 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tiles.servlet.context;
+
+import java.util.Vector;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+
+/**
+ * Tests {@link ServletSessionScopeMap} behaviour.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ServletSessionScopeMapTest extends TestCase {
+
+ /**
+ * Constructor.
+ *
+ * @param testName The name of the test.
+ */
+ public ServletSessionScopeMapTest(String testName) {
+ super(testName);
+ }
+
+ /**
+ * Tests if the session object is used correctly inside
+ * {@link ServletSessionScopeMap}.
+ */
+ public void testSessionUse() {
+ HttpServletRequest request = EasyMock.createMock(
+ HttpServletRequest.class);
+ HttpSession session = EasyMock.createMock(HttpSession.class);
+ EasyMock.expect(request.getSession(false)).andReturn(null);
+ EasyMock.expect(request.getSession()).andReturn(session).anyTimes();
+ EasyMock.expect(session.getAttribute("testAttribute")).andReturn(null);
+ session.setAttribute("testAttribute", "testValue");
+ EasyMock.expect(request.getSession(false)).andReturn(session).anyTimes();
+ Vector<String> v = new Vector<String>();
+ v.add("testAttribute");
+ EasyMock.expect(session.getAttributeNames()).andReturn(v.elements());
+ EasyMock.replay(request);
+ EasyMock.replay(session);
+
+ Map<String, Object> map = new ServletSessionScopeMap(request);
+ assertEquals("The map is not empty", 0, map.size());
+ map.put("testAttribute", "testValue");
+ assertEquals("The map has not one attribute", 1, map.size());
+ }
+}
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/servlet/context/ServletSessionScopeMapTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL