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