KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > winstone > auth > CachedRequest


1 /*
2  * Copyright 2003-2006 Rick Knowles <winstone-devel at lists sourceforge net>
3  * Distributed under the terms of either:
4  * - the common development and distribution license (CDDL), v1.0; or
5  * - the GNU Lesser General Public License, v2.1 or later
6  */

7 package winstone.auth;
8
9 import java.io.ByteArrayOutputStream JavaDoc;
10 import java.io.IOException JavaDoc;
11 import java.io.InputStream JavaDoc;
12
13 import winstone.WinstoneInputStream;
14 import winstone.WinstoneRequest;
15
16 /**
17  * This class has been included so that we can handle caching a request object
18  * without taking it out of circulation. This class just caches and replays the
19  * crucial data from a request, making sure the original request is ok to be
20  * returned to the pool.
21  *
22  * @author <a HREF="mailto:rick_knowles@hotmail.com">Rick Knowles</a>
23  * @version $Id: CachedRequest.java,v 1.9 2006/08/25 14:27:02 rickknowles Exp $
24  */

25 public class CachedRequest extends WinstoneRequest {
26     /**
27      * Constructor - dumps the input request contents here, so that they can be
28      * retrieved by transferContent() later.
29      *
30      * @param resources
31      * Resource bundle for error messages
32      * @param request
33      * The source request to copy from
34      * @throws IOException
35      * If there are any problems with reading from the stream
36      */

37     public CachedRequest(WinstoneRequest request) throws IOException JavaDoc {
38         super();
39
40         // Stash the relevant pieces of info
41
this.attributesStack.addAll(request.getAttributesStack());
42         this.parametersStack.addAll(request.getParametersStack());
43         this.attributes.putAll(request.getAttributes());
44         this.parameters.putAll(request.getParameters());
45 // this.forwardedParameters.putAll(request.getForwardedParameters());
46
this.locales = request.getListLocales();
47         this.method = request.getMethod();
48         this.scheme = request.getScheme();
49         this.serverName = request.getServerName();
50         this.requestURI = request.getRequestURI();
51         this.servletPath = request.getServletPath();
52         this.pathInfo = request.getPathInfo();
53         this.queryString = request.getQueryString();
54         this.protocol = request.getProtocol();
55         this.contentLength = request.getContentLength();
56         this.contentType = request.getContentType();
57         this.serverPort = request.getServerPort();
58         this.requestedSessionIds.putAll(request.getRequestedSessionIds());
59         this.currentSessionIds.putAll(request.getCurrentSessionIds());
60         this.deadRequestedSessionId = request.getDeadRequestedSessionId();
61         this.servletConfig = request.getServletConfig();
62         this.webappConfig = request.getWebAppConfig();
63         this.hostGroup = request.getHostGroup();
64         this.encoding = request.getEncoding();
65         this.parsedParameters = request.getParsedParameters();
66         InputStream JavaDoc in = request.getInputStream();
67         ByteArrayOutputStream JavaDoc inBackup = new ByteArrayOutputStream JavaDoc();
68         if (this.method.equals("POST")) {
69             byte buffer[] = new byte[8192];
70             int inputCounter = 0;
71             int readBytes = in.read(buffer);
72             while ((readBytes != -1)
73                     && ((inputCounter < this.contentLength) || (this.contentLength == -1))) {
74                 inputCounter += readBytes;
75                 inBackup.write(buffer, 0, readBytes);
76                 readBytes = in.read(buffer);
77             }
78         }
79         this.inputData = new WinstoneInputStream(inBackup.toByteArray());
80     }
81
82     /**
83      * Copies the contents we stashed earlier into a new request
84      * @param request The request to write to
85      */

86     public void transferContent(WinstoneRequest request) {
87         request.getAttributesStack().clear();
88         request.getAttributesStack().addAll(this.attributesStack);
89         request.getParametersStack().clear();
90         request.getParametersStack().addAll(this.parametersStack);
91         request.getParameters().clear();
92         request.getParameters().putAll(this.parameters);
93 // request.getForwardedParameters().clear();
94
// request.getForwardedParameters().putAll(this.forwardedParameters);
95
request.getAttributes().clear();
96         request.getAttributes().putAll(this.attributes);
97         request.setLocales(this.locales);
98         request.setMethod(this.method);
99         request.setScheme(this.scheme);
100         request.setServerName(this.serverName);
101         request.setRequestURI(this.requestURI);
102         request.setServletPath(this.servletPath);
103         request.setPathInfo(this.pathInfo);
104         request.setQueryString(this.queryString);
105         request.setProtocol(this.protocol);
106         request.setContentLength(this.contentLength);
107         request.setContentType(this.contentType);
108         request.setServerPort(this.serverPort);
109         request.getRequestedSessionIds().clear();
110         request.getRequestedSessionIds().putAll(this.requestedSessionIds);
111         request.getCurrentSessionIds().clear();
112         request.getCurrentSessionIds().putAll(this.currentSessionIds);
113         request.setDeadRequestedSessionId(this.deadRequestedSessionId);
114         request.setEncoding(this.encoding);
115         request.setParsedParameters(this.parsedParameters);
116         request.setInputStream(this.inputData);
117         request.setServletConfig(this.servletConfig);
118         request.setWebAppConfig(this.webappConfig);
119         request.setHostGroup(this.hostGroup);
120     }
121 }
122
Popular Tags