001: /*
002: * RequestInfo.java
003: *
004: * Version: $Revision: 1189 $
005: *
006: * Date: $Date: 2005-04-20 09:23:44 -0500 (Wed, 20 Apr 2005) $
007: *
008: * Copyright (c) 2002-2005, Hewlett-Packard Company and Massachusetts
009: * Institute of Technology. All rights reserved.
010: *
011: * Redistribution and use in source and binary forms, with or without
012: * modification, are permitted provided that the following conditions are
013: * met:
014: *
015: * - Redistributions of source code must retain the above copyright
016: * notice, this list of conditions and the following disclaimer.
017: *
018: * - Redistributions in binary form must reproduce the above copyright
019: * notice, this list of conditions and the following disclaimer in the
020: * documentation and/or other materials provided with the distribution.
021: *
022: * - Neither the name of the Hewlett-Packard Company nor the name of the
023: * Massachusetts Institute of Technology nor the names of their
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
028: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
029: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
030: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
031: * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
032: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
033: * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
034: * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
035: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
036: * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
037: * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
038: * DAMAGE.
039: */
040: package org.dspace.app.webui.util;
041:
042: import java.util.Enumeration;
043: import java.util.HashMap;
044: import java.util.Iterator;
045: import java.util.Map;
046:
047: import javax.servlet.http.HttpServletRequest;
048: import javax.servlet.http.HttpServletRequestWrapper;
049:
050: /**
051: * Stores information about an HTTP request. This is used so that the request
052: * can be replicated during a later request, once authentication has
053: * successfully occurred.
054: *
055: * @author Robert Tansley
056: * @version $Revision: 1189 $
057: */
058: public class RequestInfo {
059: /** The original parameters */
060: private Map originalParameterMap;
061:
062: /** The original method */
063: private String originalMethod;
064:
065: /** The original query */
066: private String originalQueryString;
067:
068: /**
069: * Construct a request info object storing information about the given
070: * request
071: *
072: * @param request
073: * the request to get information from
074: */
075: public RequestInfo(HttpServletRequest request) {
076: originalParameterMap = new HashMap(request.getParameterMap());
077: originalMethod = request.getMethod();
078: originalQueryString = request.getQueryString();
079: }
080:
081: /**
082: * Wrap an incoming request to make it look like the request that the
083: * constructor was called with
084: *
085: * @param request
086: * the request to wrap
087: *
088: * @return a wrapper around the request passed into this method, wrapped so
089: * that it looks like the request passed into the constructor
090: */
091: public HttpServletRequest wrapRequest(HttpServletRequest request) {
092: return new MyWrapper(request);
093: }
094:
095: /**
096: * Our own flavour of HTTP request wrapper, that uses information from= this
097: * RequestInfo object
098: */
099: class MyWrapper extends HttpServletRequestWrapper {
100: public MyWrapper(HttpServletRequest request) {
101: super (request);
102: }
103:
104: // ====== Methods below here are the wrapped methods ======
105: public String getParameter(String name) {
106: String[] vals = (String[]) originalParameterMap.get(name);
107:
108: if (vals == null) {
109: // Delegate to wrapped object
110: // FIXME: This is possibly a bug in Tomcat
111: return super .getParameter(name);
112: } else {
113: return vals[0];
114: }
115: }
116:
117: public Map getParameterMap() {
118: return originalParameterMap;
119: }
120:
121: public Enumeration getParameterNames() {
122: Iterator i = originalParameterMap.keySet().iterator();
123:
124: return new EnumIterator(i);
125: }
126:
127: public String[] getParameterValues(String name) {
128: return ((String[]) originalParameterMap.get(name));
129: }
130:
131: public String getMethod() {
132: return originalMethod;
133: }
134:
135: public String getQueryString() {
136: return originalQueryString;
137: }
138:
139: /**
140: * This class converts an interator into an enumerator. This is done
141: * because we have the parameters as a Map (JDK 1.2 style), but for some
142: * weird reason the HttpServletRequest interface returns an Enumeration
143: * from getParameterNames() (JDK1.0 style.) JDK apparently offers no way
144: * of simply changing between the new styles.
145: */
146: class EnumIterator implements Enumeration {
147: private Iterator iterator;
148:
149: public EnumIterator(Iterator i) {
150: iterator = i;
151: }
152:
153: public boolean hasMoreElements() {
154: return iterator.hasNext();
155: }
156:
157: public Object nextElement() {
158: return iterator.next();
159: }
160: }
161: }
162: }
|