You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ni...@apache.org on 2006/06/06 01:29:03 UTC
svn commit: r411948 - in /jakarta/commons/proper/chain/trunk:
src/java/org/apache/commons/chain/web/
src/java/org/apache/commons/chain/web/faces/
src/java/org/apache/commons/chain/web/portlet/
src/java/org/apache/commons/chain/web/servlet/ src/test/org...
Author: niallp
Date: Mon Jun 5 16:29:02 2006
New Revision: 411948
URL: http://svn.apache.org/viewvc?rev=411948&view=rev
Log:
CHAIN-28 - Provide a Map of Cookies in the WebContext
Added:
jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java (with props)
Modified:
jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/WebContext.java
jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/faces/FacesWebContext.java
jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/portlet/PortletWebContext.java
jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletWebContext.java
jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/MockHttpServletRequest.java
jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/ServletWebContextTestCase.java
jakarta/commons/proper/chain/trunk/xdocs/changes.xml
Modified: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/WebContext.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/WebContext.java?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/WebContext.java (original)
+++ jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/WebContext.java Mon Jun 5 16:29:02 2006
@@ -101,6 +101,16 @@
/**
+ * <p>Return an immutable <code>Map</code> that maps cookie names to
+ * the set of cookies specified in the request.
+ *
+ * @return Map of Cookies.
+ * @since Chain 1.1
+ */
+ public abstract Map getCookies();
+
+
+ /**
* <p>Return a mutable <code>Map</code> that maps request scope
* attribute names to their values.</p>
*
Modified: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/faces/FacesWebContext.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/faces/FacesWebContext.java?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/faces/FacesWebContext.java (original)
+++ jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/faces/FacesWebContext.java Mon Jun 5 16:29:02 2006
@@ -188,6 +188,19 @@
/**
* See the {@link WebContext}'s Javadoc.
*
+ * @return Map of Cookies.
+ * @since Chain 1.1
+ */
+ public Map getCookies() {
+
+ return (context.getExternalContext().getRequestCookieMap());
+
+ }
+
+
+ /**
+ * See the {@link WebContext}'s Javadoc.
+ *
* @return Request scope Map.
*/
public Map getRequestScope() {
Modified: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/portlet/PortletWebContext.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/portlet/PortletWebContext.java?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/portlet/PortletWebContext.java (original)
+++ jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/portlet/PortletWebContext.java Mon Jun 5 16:29:02 2006
@@ -325,6 +325,19 @@
/**
+ * Returns an empty Map - portlets don't support Cookies.
+ *
+ * @return An empty Map.
+ * @since Chain 1.1
+ */
+ public Map getCookies() {
+
+ return Collections.EMPTY_MAP;
+
+ }
+
+
+ /**
* See the {@link WebContext}'s Javadoc.
*
* @return Request scope Map.
Added: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java?rev=411948&view=auto
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java (added)
+++ jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java Mon Jun 5 16:29:02 2006
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.commons.chain.web.servlet;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.Cookie;
+import org.apache.commons.chain.web.MapEntry;
+
+
+/**
+ * <p>Private implementation of <code>Map</code> for servlet cookies</p>
+ *
+ * @author Niall Pemberton
+ * @version $Revision$ $Date$
+ * @since Chain 1.1
+ */
+
+final class ServletCookieMap implements Map {
+
+
+ public ServletCookieMap(HttpServletRequest request) {
+ this.request = request;
+ }
+
+
+ private HttpServletRequest request = null;
+
+
+ public void clear() {
+ throw new UnsupportedOperationException();
+ }
+
+
+ public boolean containsKey(Object key) {
+ return (get(key) != null);
+ }
+
+
+ public boolean containsValue(Object value) {
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (int i = 0; i < cookies.length; i++) {
+ if (cookies[i].equals(value)) {
+ return true;
+ }
+ }
+ }
+ return (false);
+ }
+
+
+ public Set entrySet() {
+ Set set = new HashSet();
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (int i = 0; i < cookies.length; i++) {
+ set.add(new MapEntry(cookies[i].getName(), cookies[i], false));
+ }
+ }
+ return (set);
+ }
+
+
+ public boolean equals(Object o) {
+ return (request.equals(o));
+ }
+
+
+ public Object get(Object key) {
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (int i = 0; i < cookies.length; i++) {
+ if (cookies[i].getName().equals(key(key))) {
+ return cookies[i];
+ }
+ }
+ }
+ return null;
+ }
+
+
+ public int hashCode() {
+ return (request.hashCode());
+ }
+
+
+ public boolean isEmpty() {
+ return (size() < 1);
+ }
+
+
+ public Set keySet() {
+ Set set = new HashSet();
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (int i = 0; i < cookies.length; i++) {
+ set.add(cookies[i].getName());
+ }
+ }
+ return (set);
+ }
+
+
+ public Object put(Object key, Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+
+ public void putAll(Map map) {
+ throw new UnsupportedOperationException();
+ }
+
+
+ public Object remove(Object key) {
+ throw new UnsupportedOperationException();
+ }
+
+
+ public int size() {
+ Cookie[] cookies = request.getCookies();
+ return (cookies == null ? 0 : cookies.length);
+ }
+
+
+ public Collection values() {
+ List list = new ArrayList(size());
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (int i = 0; i < cookies.length; i++) {
+ list.add(cookies[i]);
+ }
+ }
+ return (list);
+ }
+
+
+ private String key(Object key) {
+ if (key == null) {
+ throw new IllegalArgumentException();
+ } else if (key instanceof String) {
+ return ((String) key);
+ } else {
+ return (key.toString());
+ }
+ }
+
+
+}
Propchange: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletCookieMap.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletWebContext.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletWebContext.java?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletWebContext.java (original)
+++ jakarta/commons/proper/chain/trunk/src/java/org/apache/commons/chain/web/servlet/ServletWebContext.java Mon Jun 5 16:29:02 2006
@@ -101,6 +101,12 @@
/**
+ * <p>The lazily instantiated <code>Map</code> of cookies.</p>
+ */
+ private Map cookieValues = null;
+
+
+ /**
* <p>The lazily instantiated <code>Map</code> of request
* parameter name-value.</p>
*/
@@ -216,6 +222,7 @@
initParam = null;
param = null;
paramValues = null;
+ cookieValues = null;
requestScope = null;
sessionScope = null;
@@ -317,6 +324,22 @@
paramValues = new ServletParamValuesMap(request);
}
return (paramValues);
+
+ }
+
+
+ /**
+ * See the {@link WebContext}'s Javadoc.
+ *
+ * @return Map of Cookies.
+ * @since Chain 1.1
+ */
+ public Map getCookies() {
+
+ if ((cookieValues == null) && (request != null)) {
+ cookieValues = new ServletCookieMap(request);
+ }
+ return (cookieValues);
}
Modified: jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/MockHttpServletRequest.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/MockHttpServletRequest.java?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/MockHttpServletRequest.java (original)
+++ jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/MockHttpServletRequest.java Mon Jun 5 16:29:02 2006
@@ -65,6 +65,7 @@
protected HashMap attributes = new HashMap();
protected String contextPath = null;
protected HashMap headers = new HashMap();
+ protected Cookie[] cookies = new Cookie[0];
protected Locale locale = null;
protected HashMap parameters = new HashMap();
protected String pathInfo = null;
@@ -104,6 +105,17 @@
parameters.put(name, results);
}
+ public void addCookie(String name, String value) {
+ addCookie(new Cookie(name, value));
+ }
+
+ public void addCookie(Cookie cookie) {
+ Cookie[] newValues = new Cookie[cookies.length + 1];
+ System.arraycopy(cookies, 0, newValues, 0, cookies.length);
+ cookies = newValues;
+ cookies[cookies.length - 1] = cookie;
+ }
+
public void setHttpSession(HttpSession session) {
this.session = session;
@@ -146,7 +158,7 @@
public Cookie[] getCookies() {
- throw new UnsupportedOperationException();
+ return cookies;
}
Modified: jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/ServletWebContextTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/ServletWebContextTestCase.java?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/ServletWebContextTestCase.java (original)
+++ jakarta/commons/proper/chain/trunk/src/test/org/apache/commons/chain/web/servlet/ServletWebContextTestCase.java Mon Jun 5 16:29:02 2006
@@ -26,6 +26,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import javax.servlet.http.Cookie;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -92,6 +93,8 @@
((MockHttpServletRequest) request).addParameter("pkey1", "pvalue1");
((MockHttpServletRequest) request).addParameter("pkey2", "pvalue2a");
((MockHttpServletRequest) request).addParameter("pkey2", "pvalue2b");
+ ((MockHttpServletRequest) request).addCookie("ckey1", "cvalue1");
+ ((MockHttpServletRequest) request).addCookie("ckey2", "cvalue2");
response = new MockHttpServletResponse();
context = createContext();
}
@@ -458,6 +461,53 @@
}
+ // Test getCookies()
+ public void testCookies() {
+
+ Map map = ((WebContext) context).getCookies();
+ assertNotNull(map);
+
+ // Initial contents
+ checkMapSize(map, 2);
+ Cookie cookie1 = (Cookie)map.get("ckey1");
+ assertNotNull(cookie1);
+ assertEquals("cvalue1", cookie1.getValue());
+ Cookie cookie2 = (Cookie)map.get("ckey2");
+ assertNotNull(cookie2);
+ assertEquals("cvalue2", cookie2.getValue());
+ assertTrue(map.containsKey("ckey1"));
+ assertTrue(map.containsKey("ckey2"));
+ assertTrue(map.containsValue(cookie1));
+ assertTrue(map.containsValue(cookie2));
+
+ // Unsupported operations on read-only map
+ try {
+ map.clear();
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ ; // expected result
+ }
+ try {
+ map.put("ckey3", "XXX");
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ ; // expected result
+ }
+ try {
+ map.putAll(new HashMap());
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ ; // expected result
+ }
+ try {
+ map.remove("ckey1");
+ fail("Should have thrown UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {
+ ; // expected result
+ }
+
+ }
+
// Test state of newly created instance
public void testPristine() {
@@ -471,6 +521,7 @@
assertNotNull(swcontext.getInitParam());
assertNotNull(swcontext.getParam());
assertNotNull(swcontext.getParamValues());
+ assertNotNull(swcontext.getCookies());
assertNotNull(swcontext.getRequestScope());
assertNotNull(swcontext.getSessionScope());
@@ -487,6 +538,8 @@
swcontext.get("param"));
assertTrue(swcontext.getParamValues() ==
swcontext.get("paramValues"));
+ assertTrue(swcontext.getCookies() ==
+ swcontext.get("cookies"));
assertTrue(swcontext.getRequestScope() ==
swcontext.get("requestScope"));
assertTrue(swcontext.getSessionScope() ==
@@ -508,6 +561,7 @@
assertNull(swcontext.getInitParam());
assertNull(swcontext.getParam());
assertNull(swcontext.getParamValues());
+ assertNull(swcontext.getCookies());
assertNull(swcontext.getRequestScope());
assertNull(swcontext.getSessionScope());
@@ -518,6 +572,7 @@
assertNull(swcontext.get("initParam"));
assertNull(swcontext.get("param"));
assertNull(swcontext.get("paramValues"));
+ assertNull(swcontext.get("cookies"));
assertNull(swcontext.get("requestScope"));
assertNull(swcontext.get("sessionScope"));
Modified: jakarta/commons/proper/chain/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/chain/trunk/xdocs/changes.xml?rev=411948&r1=411947&r2=411948&view=diff
==============================================================================
--- jakarta/commons/proper/chain/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/chain/trunk/xdocs/changes.xml Mon Jun 5 16:29:02 2006
@@ -39,6 +39,9 @@
<body>
<release version="1.1-SNAPSHOT" date="in SVN">
+ <action dev="niallp" type="add" issue="CHAIN-28">
+ Provide a Map of Cookies in the WebContext.
+ </action>
<action dev="niallp" type="fix" issue="CHAIN-29">
Remove Static <code>Log</code> instances - see
<a href="http://wiki.apache.org/jakarta-commons/Logging/StaticLog">here</a>.
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org