Index: source/org/jasig/portal/container/servlet/PortletAttributeRequestWrapper.java =================================================================== RCS file: source/org/jasig/portal/container/servlet/PortletAttributeRequestWrapper.java diff -N source/org/jasig/portal/container/servlet/PortletAttributeRequestWrapper.java --- source/org/jasig/portal/container/servlet/PortletAttributeRequestWrapper.java 7 Jun 2005 22:34:00 -0000 1.1.2.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,87 +0,0 @@ -/* Copyright 2004 The JA-SIG Collaborative. All rights reserved. -* See license distributed with this file and -* available online at http://www.uportal.org/license.html -*/ - -package org.jasig.portal.container.servlet; - -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Map; -import java.util.Set; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; - -import org.apache.commons.collections.iterators.IteratorEnumeration; - - -/** - * HttpServletRequest wrapper that tracks a set of request attributes - * that are local to this request. - * - * @author Eric Dalquist edalquist@unicon.net - * @version $Id: PortletAttributeRequestWrapper.java,v 1.1.2.1 2005/06/07 22:34:00 edalquist Exp $ - */ -public class PortletAttributeRequestWrapper extends HttpServletRequestWrapper { - private final Map scopedAttributes = new Hashtable(); - - public PortletAttributeRequestWrapper(HttpServletRequest request) { - super(request); - } - - /** - * @see javax.servlet.ServletRequest#getAttribute(java.lang.String) - */ - public Object getAttribute(String name) { - if (name == null) - throw new IllegalArgumentException("Attribute name cannot be null"); - - final Object value = this.scopedAttributes.get(name); - - if (value != null) - return value; - else - return super.getAttribute(name); - } - - /** - * @see javax.servlet.ServletRequest#getAttributeNames() - */ - public Enumeration getAttributeNames() { - final Set namesSet = new HashSet(); - - for (final Enumeration parentNames = super.getAttributeNames(); parentNames.hasMoreElements();) { - namesSet.add(parentNames.nextElement()); - } - - namesSet.addAll(this.scopedAttributes.keySet()); - - return new IteratorEnumeration(namesSet.iterator()); - } - - /** - * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String) - */ - public void removeAttribute(String name) { - if (name == null) - throw new IllegalArgumentException("Attribute name cannot be null"); - - this.scopedAttributes.remove(name); - super.removeAttribute(name); - } - - /** - * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, java.lang.Object) - */ - public void setAttribute(String name, Object value) { - if (name == null) - throw new IllegalArgumentException("Attribute name cannot be null"); - - if (value == null) - this.scopedAttributes.remove(name); - else - this.scopedAttributes.put(name, value); - } -} Index: source/org/jasig/portal/channels/portlet/CPortletAdapter.java =================================================================== RCS file: /home/cvs/jasig/portal/source/org/jasig/portal/channels/portlet/CPortletAdapter.java,v retrieving revision 1.67.2.5 diff -u -r1.67.2.5 CPortletAdapter.java --- source/org/jasig/portal/channels/portlet/CPortletAdapter.java 12 Jul 2006 22:42:55 -0000 1.67.2.5 +++ source/org/jasig/portal/channels/portlet/CPortletAdapter.java 12 Dec 2006 01:24:17 -0000 @@ -66,7 +66,6 @@ import org.jasig.portal.container.services.log.LogServiceImpl; import org.jasig.portal.container.services.property.PropertyManagerServiceImpl; import org.jasig.portal.container.servlet.DummyParameterRequestWrapper; -import org.jasig.portal.container.servlet.PortletAttributeRequestWrapper; import org.jasig.portal.container.servlet.PortletParameterRequestWrapper; import org.jasig.portal.container.servlet.ServletObjectAccess; import org.jasig.portal.container.servlet.ServletRequestImpl; @@ -76,6 +75,7 @@ import org.jasig.portal.security.IPerson; import org.jasig.portal.security.ISecurityContext; import org.jasig.portal.security.provider.NotSoOpaqueCredentials; +import org.jasig.portal.servlet.AttributeScopingRequestWrapper; import org.jasig.portal.utils.NullOutputStream; import org.jasig.portal.utils.SAXHelper; import org.xml.sax.ContentHandler; @@ -424,7 +424,7 @@ HttpServletRequest wrappedRequest = new ServletRequestImpl(baseRequest, sd.getPerson(), portletDef.getInitSecurityRoleRefSet()); //Wrap the request to scope attributes to this portlet instance - wrappedRequest = new PortletAttributeRequestWrapper(wrappedRequest); + wrappedRequest = new AttributeScopingRequestWrapper(wrappedRequest); //Set up request attributes (user info, portal session, etc...) setupRequestAttributes(wrappedRequest, uid); @@ -571,7 +571,7 @@ HttpServletRequest wrappedRequest = new ServletRequestImpl(baseRequest, sd.getPerson(), portletDef.getInitSecurityRoleRefSet()); //Wrap the request to scope attributes to this portlet instance - wrappedRequest = new PortletAttributeRequestWrapper(wrappedRequest); + wrappedRequest = new AttributeScopingRequestWrapper(wrappedRequest); //Set up request attributes (user info, portal session, etc...) setupRequestAttributes(wrappedRequest, uid); @@ -751,7 +751,7 @@ HttpServletRequest wrappedRequest = new ServletRequestImpl(baseRequest, sd.getPerson(), portletDef.getInitSecurityRoleRefSet()); //Wrap the request to scope attributes to this portlet instance - wrappedRequest = new PortletAttributeRequestWrapper(wrappedRequest); + wrappedRequest = new AttributeScopingRequestWrapper(wrappedRequest); //Set up request attributes (user info, portal session, etc...) setupRequestAttributes(wrappedRequest, uid); Index: source/org/jasig/portal/servlet/AttributeScopingRequestWrapper.java =================================================================== RCS file: source/org/jasig/portal/servlet/AttributeScopingRequestWrapper.java diff -N source/org/jasig/portal/servlet/AttributeScopingRequestWrapper.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ source/org/jasig/portal/servlet/AttributeScopingRequestWrapper.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,518 @@ +/* Copyright 2006 The JA-SIG Collaborative. All rights reserved. +* See license distributed with this file and +* available online at http://www.uportal.org/license.html +*/ + +package org.jasig.portal.servlet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.Principal; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletInputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.commons.collections.iterators.IteratorEnumeration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + + +/** + * HttpServletRequest wrapper that tracks a set of request attributes that are local to + * this request wrapper. + * + * @author Eric Dalquist eric.dalquist@doit.wisc.edu + * @version $Id: AttributeScopingRequestWrapper.java,v 1.1 2006/04/25 22:15:26 dalquist Exp $ + */ +public class AttributeScopingRequestWrapper implements HttpServletRequest { + private static final Log LOG = LogFactory.getLog(AttributeScopingRequestWrapper.class); + + private final Map scopedAttributes = new Hashtable(); + private final HttpServletRequest delegate; + + public AttributeScopingRequestWrapper(HttpServletRequest request) { + if (request == null) { + throw new IllegalArgumentException("Wrapped request can no be null."); + } + + this.delegate = request; + } + + /** + * Provides access to the attributes stored in this wrapper. + * @return A READ-ONLY Map of the attributes stored in this wrapper. + */ + public Map getScopedAttributeMap() { + return Collections.unmodifiableMap(this.scopedAttributes); + } + + + //********************************************* + // Over-ridden methods to scope attributes. + //********************************************* + + /** + * If the attribute isn't in the Map for this wrapper the wrapped request is + * consulted. + * + * @see javax.servlet.ServletRequest#getAttribute(java.lang.String) + */ + public Object getAttribute(String name) { + if (name == null) { + throw new IllegalArgumentException("Attribute name cannot be null"); + } + + Object value = this.scopedAttributes.get(name); + if (value != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("getAttribute(" + name + ") - from scoped Map with value='" + value + "'"); + } + } + else { + value = this.delegate.getAttribute(name); + + if (LOG.isDebugEnabled()) { + LOG.debug("getAttribute(" + name + ") - from parent request with value='" + value + "'"); + } + } + + return value; + } + + /** + * The set of attribute names is merged from the attributes stored in this request and the + * attributes from the parent requests. + * + * @see javax.servlet.ServletRequest#getAttributeNames() + */ + public Enumeration getAttributeNames() { + final Set namesSet = new HashSet(); + + for (final Enumeration parentNames = this.delegate.getAttributeNames(); parentNames.hasMoreElements();) { + namesSet.add(parentNames.nextElement()); + } + + if (LOG.isDebugEnabled()) { + LOG.debug("getAttributeNames() - parent request attribute names=" + namesSet + ""); + } + + namesSet.addAll(this.scopedAttributes.keySet()); + + if (LOG.isDebugEnabled()) { + LOG.debug("getAttributeNames() - all attribute names=" + namesSet + ""); + } + + return new IteratorEnumeration(namesSet.iterator()); + } + + /** + * Removes the attribute from this request and the wrapped request. + * + * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String) + */ + public void removeAttribute(String name) { + if (name == null) { + throw new IllegalArgumentException("Attribute name cannot be null"); + } + + if (LOG.isDebugEnabled()) { + LOG.debug("removeAttribute(" + name + ")"); + } + + this.scopedAttributes.remove(name); + this.delegate.removeAttribute(name); + } + + /** + * Stores the attribute in the request wrapper. + * + * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, java.lang.Object) + */ + public void setAttribute(String name, Object value) { + if (name == null) { + throw new IllegalArgumentException("Attribute name cannot be null"); + } + + if (LOG.isDebugEnabled()) { + LOG.debug("setAttribute(" + name + ", " + value + ")"); + } + + if (value == null) + this.scopedAttributes.remove(name); + else + this.scopedAttributes.put(name, value); + } + + + + + + //********************************************* + // Delegating methods + //********************************************* + + /** + * @see javax.servlet.http.HttpServletRequest#getAuthType() + */ + public String getAuthType() { + return this.delegate.getAuthType(); + } + + /** + * @see javax.servlet.ServletRequest#getCharacterEncoding() + */ + public String getCharacterEncoding() { + return this.delegate.getCharacterEncoding(); + } + + /** + * @see javax.servlet.ServletRequest#getContentLength() + */ + public int getContentLength() { + return this.delegate.getContentLength(); + } + + /** + * @see javax.servlet.ServletRequest#getContentType() + */ + public String getContentType() { + return this.delegate.getContentType(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getContextPath() + */ + public String getContextPath() { + return this.delegate.getContextPath(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getCookies() + */ + public Cookie[] getCookies() { + return this.delegate.getCookies(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getDateHeader(java.lang.String) + */ + public long getDateHeader(String arg0) { + return this.delegate.getDateHeader(arg0); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getHeader(java.lang.String) + */ + public String getHeader(String arg0) { + return this.delegate.getHeader(arg0); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getHeaderNames() + */ + public Enumeration getHeaderNames() { + return this.delegate.getHeaderNames(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getHeaders(java.lang.String) + */ + public Enumeration getHeaders(String arg0) { + return this.delegate.getHeaders(arg0); + } + + /** + * @see javax.servlet.ServletRequest#getInputStream() + */ + public ServletInputStream getInputStream() throws IOException { + return this.delegate.getInputStream(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getIntHeader(java.lang.String) + */ + public int getIntHeader(String arg0) { + return this.delegate.getIntHeader(arg0); + } + +// Not supported until Servlet 2.4 +// /** +// * @see javax.servlet.ServletRequest#getLocalAddr() +// */ +// public String getLocalAddr() { +// return this.delegate.getLocalAddr(); +// } + + /** + * @see javax.servlet.ServletRequest#getLocale() + */ + public Locale getLocale() { + return this.delegate.getLocale(); + } + + /** + * @see javax.servlet.ServletRequest#getLocales() + */ + public Enumeration getLocales() { + return this.delegate.getLocales(); + } + +// Not supported until Servlet 2.4 +// /** +// * @see javax.servlet.ServletRequest#getLocalName() +// */ +// public String getLocalName() { +// return this.delegate.getLocalName(); +// } + +// Not supported until Servlet 2.4 +// /** +// * @see javax.servlet.ServletRequest#getLocalPort() +// */ +// public int getLocalPort() { +// return this.delegate.getLocalPort(); +// } + + /** + * @see javax.servlet.http.HttpServletRequest#getMethod() + */ + public String getMethod() { + return this.delegate.getMethod(); + } + + /** + * @see javax.servlet.ServletRequest#getParameter(java.lang.String) + */ + public String getParameter(String arg0) { + return this.delegate.getParameter(arg0); + } + + /** + * @see javax.servlet.ServletRequest#getParameterMap() + */ + public Map getParameterMap() { + return this.delegate.getParameterMap(); + } + + /** + * @see javax.servlet.ServletRequest#getParameterNames() + */ + public Enumeration getParameterNames() { + return this.delegate.getParameterNames(); + } + + /** + * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String) + */ + public String[] getParameterValues(String arg0) { + return this.delegate.getParameterValues(arg0); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getPathInfo() + */ + public String getPathInfo() { + return this.delegate.getPathInfo(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getPathTranslated() + */ + public String getPathTranslated() { + return this.delegate.getPathTranslated(); + } + + /** + * @see javax.servlet.ServletRequest#getProtocol() + */ + public String getProtocol() { + return this.delegate.getProtocol(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getQueryString() + */ + public String getQueryString() { + return this.delegate.getQueryString(); + } + + /** + * @see javax.servlet.ServletRequest#getReader() + */ + public BufferedReader getReader() throws IOException { + return this.delegate.getReader(); + } + + /** + * @see javax.servlet.ServletRequest#getRealPath(java.lang.String) + */ + public String getRealPath(String arg0) { + return this.delegate.getRealPath(arg0); + } + + /** + * @see javax.servlet.ServletRequest#getRemoteAddr() + */ + public String getRemoteAddr() { + return this.delegate.getRemoteAddr(); + } + + /** + * @see javax.servlet.ServletRequest#getRemoteHost() + */ + public String getRemoteHost() { + return this.delegate.getRemoteHost(); + } + +// Not supported until Servlet 2.4 +// /** +// * @see javax.servlet.ServletRequest#getRemotePort() +// */ +// public int getRemotePort() { +// return this.delegate.getRemotePort(); +// } + + /** + * @see javax.servlet.http.HttpServletRequest#getRemoteUser() + */ + public String getRemoteUser() { + return this.delegate.getRemoteUser(); + } + + /** + * @see javax.servlet.ServletRequest#getRequestDispatcher(java.lang.String) + */ + public RequestDispatcher getRequestDispatcher(String arg0) { + return this.delegate.getRequestDispatcher(arg0); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() + */ + public String getRequestedSessionId() { + return this.delegate.getRequestedSessionId(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getRequestURI() + */ + public String getRequestURI() { + return this.delegate.getRequestURI(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getRequestURL() + */ + public StringBuffer getRequestURL() { + return this.delegate.getRequestURL(); + } + + /** + * @see javax.servlet.ServletRequest#getScheme() + */ + public String getScheme() { + return this.delegate.getScheme(); + } + + /** + * @see javax.servlet.ServletRequest#getServerName() + */ + public String getServerName() { + return this.delegate.getServerName(); + } + + /** + * @see javax.servlet.ServletRequest#getServerPort() + */ + public int getServerPort() { + return this.delegate.getServerPort(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getServletPath() + */ + public String getServletPath() { + return this.delegate.getServletPath(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getSession() + */ + public HttpSession getSession() { + return this.delegate.getSession(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getSession(boolean) + */ + public HttpSession getSession(boolean arg0) { + return this.delegate.getSession(arg0); + } + + /** + * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() + */ + public Principal getUserPrincipal() { + return this.delegate.getUserPrincipal(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie() + */ + public boolean isRequestedSessionIdFromCookie() { + return this.delegate.isRequestedSessionIdFromCookie(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl() + */ + public boolean isRequestedSessionIdFromUrl() { + return this.delegate.isRequestedSessionIdFromUrl(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL() + */ + public boolean isRequestedSessionIdFromURL() { + return this.delegate.isRequestedSessionIdFromURL(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() + */ + public boolean isRequestedSessionIdValid() { + return this.delegate.isRequestedSessionIdValid(); + } + + /** + * @see javax.servlet.ServletRequest#isSecure() + */ + public boolean isSecure() { + return this.delegate.isSecure(); + } + + /** + * @see javax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String) + */ + public boolean isUserInRole(String arg0) { + return this.delegate.isUserInRole(arg0); + } + + /** + * @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String) + */ + public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException { + this.delegate.setCharacterEncoding(arg0); + } +}