001: /*
002: * Copyright 2005 Joe Walker
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.directwebremoting.dwrp;
017:
018: import java.util.Map;
019:
020: import javax.servlet.http.HttpServletRequest;
021:
022: import org.directwebremoting.extend.FormField;
023: import org.directwebremoting.extend.ServerException;
024: import org.directwebremoting.util.Messages;
025:
026: /**
027: * A container for the information passed in by an Poll request
028: * @author Joe Walker [joe at getahead dot ltd dot uk]
029: */
030: public class PollBatch {
031: /**
032: * @param request The request to parse to fill out this batch
033: * @throws ServerException
034: */
035: public PollBatch(HttpServletRequest request) throws ServerException {
036: debug = request.getHeader("User-Agent");
037: get = "GET".equals(request.getMethod());
038:
039: ParseUtil parseUtil = new ParseUtil();
040: allParameters = parseUtil.parseRequest(request);
041:
042: parseParameters();
043: }
044:
045: /**
046: * Fish out the important parameters
047: */
048: protected void parseParameters() {
049: batchId = extractParameter(allParameters,
050: ProtocolConstants.INBOUND_KEY_BATCHID);
051: scriptSessionId = extractParameter(allParameters,
052: ProtocolConstants.INBOUND_KEY_SCRIPT_SESSIONID);
053: page = extractParameter(allParameters,
054: ProtocolConstants.INBOUND_KEY_PAGE);
055: windowName = extractParameter(allParameters,
056: ProtocolConstants.INBOUND_KEY_WINDOWNAME);
057: String prString = extractParameter(allParameters,
058: ProtocolConstants.INBOUND_KEY_PARTIAL_RESPONSE);
059: partialResponse = PartialResponse.fromOrdinal(prString);
060: }
061:
062: /**
063: * Extract a parameter and ensure it is in the request.
064: * This is needed to cope with Jetty continuations that are not real
065: * continuations.
066: * @param parameters The parameter list parsed out of the request
067: * @param paramName The name of the parameter sent
068: * @return The found value
069: */
070: protected String extractParameter(
071: Map<String, FormField> parameters, String paramName) {
072: FormField formField = parameters.remove(paramName);
073: if (formField == null) {
074: throw new IllegalArgumentException(Messages.getString(
075: "PollHandler.MissingParameter", paramName));
076: }
077:
078: return formField.getString();
079: }
080:
081: /**
082: * @return the batchId
083: */
084: public String getBatchId() {
085: return batchId;
086: }
087:
088: /**
089: * @return the partialResponse
090: */
091: public PartialResponse getPartialResponse() {
092: return partialResponse;
093: }
094:
095: /**
096: * @return the scriptSessionId
097: */
098: public String getScriptSessionId() {
099: return scriptSessionId;
100: }
101:
102: /**
103: * @return the page
104: */
105: public String getPage() {
106: return page;
107: }
108:
109: /**
110: * @return the window name
111: */
112: public String getWindowName() {
113: return windowName;
114: }
115:
116: /**
117: * Is this request from a GET?
118: * @return true if the request is a GET request
119: */
120: public boolean isGet() {
121: return get;
122: }
123:
124: /* (non-Javadoc)
125: * @see java.lang.Object#toString()
126: */
127: @Override
128: public String toString() {
129: return "PollBatch[partResp=" + partialResponse + ",debug="
130: + debug + "]";
131: }
132:
133: /**
134: * The ID of this batch from the browser
135: */
136: private String batchId;
137:
138: /**
139: * Does the browser want partial responses?
140: */
141: private PartialResponse partialResponse;
142:
143: /**
144: * A quick string for debug purposes
145: */
146: private String debug;
147:
148: /**
149: * The page that the request was sent from
150: */
151: private String page;
152:
153: /**
154: * Window name is used by reverse ajax to get around the 2 connection limit
155: */
156: private String windowName;
157:
158: /**
159: * The unique ID sent to the current page
160: */
161: private String scriptSessionId;
162:
163: /**
164: * Is it a GET request?
165: */
166: private boolean get;
167:
168: /**
169: * All the parameters sent by the browser
170: */
171: private Map<String, FormField> allParameters;
172: }
|