001: /*
002: * Copyright 2005-2007 Noelios Consulting.
003: *
004: * The contents of this file are subject to the terms of the Common Development
005: * and Distribution License (the "License"). You may not use this file except in
006: * compliance with the License.
007: *
008: * You can obtain a copy of the license at
009: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
010: * language governing permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL HEADER in each file and
013: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
014: * applicable, add the following below this CDDL HEADER, with the fields
015: * enclosed by brackets "[]" replaced with your own identifying information:
016: * Portions Copyright [yyyy] [name of copyright owner]
017: */
018:
019: package com.noelios.restlet.ext.net;
020:
021: import java.io.IOException;
022: import java.util.logging.Level;
023:
024: import org.restlet.Client;
025: import org.restlet.data.Protocol;
026: import org.restlet.data.Request;
027:
028: import com.noelios.restlet.http.HttpClientCall;
029:
030: /**
031: * HTTP client connector using the HttpUrlConnectionCall. Here is the list of
032: * parameters that are supported: <table>
033: * <tr>
034: * <th>Parameter name</th>
035: * <th>Value type</th>
036: * <th>Default value</th>
037: * <th>Description</th>
038: * </tr>
039: * <tr>
040: * <td>chunkLength</td>
041: * <td>int</td>
042: * <td>0 (uses HttpURLConnection's default)</td>
043: * <td>The chunk-length when using chunked encoding streaming mode for response
044: * entities. A value of -1 means chunked encoding is disabled for response
045: * entities.</td>
046: * </tr>
047: * <tr>
048: * <td>followRedirects</td>
049: * <td>boolean</td>
050: * <td>false</td>
051: * <td>If true, the protocol will automatically follow redirects. If false, the
052: * protocol will not automatically follow redirects.</td>
053: * </tr>
054: * <tr>
055: * <td>allowUserInteraction</td>
056: * <td>boolean</td>
057: * <td>false</td>
058: * <td>If true, this URL is being examined in a context in which it makes sense
059: * to allow user interactions such as popping up an authentication dialog.</td>
060: * </tr>
061: * <tr>
062: * <td>useCaches</td>
063: * <td>boolean</td>
064: * <td>false</td>
065: * <td>If true, the protocol is allowed to use caching whenever it can.</td>
066: * </tr>
067: * <tr>
068: * <td>connectTimeout</td>
069: * <td>int</td>
070: * <td>0</td>
071: * <td>Sets a specified timeout value, in milliseconds, to be used when opening
072: * a communications link to the resource referenced. 0 means infinite timeout.</td>
073: * </tr>
074: * <tr>
075: * <td>readTimeout</td>
076: * <td>int</td>
077: * <td>0</td>
078: * <td>Sets the read timeout to a specified timeout, in milliseconds. A timeout
079: * of zero is interpreted as an infinite timeout.</td>
080: * </tr>
081: * </table>
082: *
083: * @see <a
084: * href="http://java.sun.com/j2se/1.5.0/docs/guide/net/index.html">Networking
085: * Features</a>
086: * @author Jerome Louvel (contact@noelios.com)
087: */
088: public class HttpClientHelper extends
089: com.noelios.restlet.http.HttpClientHelper {
090: /**
091: * Constructor.
092: *
093: * @param client
094: * The client to help.
095: */
096: public HttpClientHelper(Client client) {
097: super (client);
098: getProtocols().add(Protocol.HTTP);
099: getProtocols().add(Protocol.HTTPS);
100: }
101:
102: /**
103: * Creates a low-level HTTP client call from a high-level uniform call.
104: *
105: * @param request
106: * The high-level request.
107: * @return A low-level HTTP client call.
108: */
109: @Override
110: public HttpClientCall create(Request request) {
111: HttpClientCall result = null;
112:
113: try {
114: result = new HttpUrlConnectionCall(this , request
115: .getMethod().toString(), request.getResourceRef()
116: .toString(), request.isEntityAvailable());
117: } catch (IOException ioe) {
118: getLogger().log(Level.WARNING,
119: "Unable to create the HTTP client call", ioe);
120: }
121:
122: return result;
123: }
124:
125: /**
126: * Returns the chunk-length when using chunked encoding streaming mode for
127: * response entities. A value of -1 means chunked encoding is disabled for
128: * response entities.
129: *
130: * @return The chunk-length when using chunked encoding streaming mode for
131: * response entities.
132: */
133: public int getChunkLength() {
134: return Integer.parseInt(getParameters().getFirstValue(
135: "chunkLength", "0"));
136: }
137:
138: /**
139: * Indicates if the protocol will automatically follow redirects.
140: *
141: * @return True if the protocol will automatically follow redirects.
142: */
143: public boolean isFollowRedirects() {
144: return Boolean.parseBoolean(getParameters().getFirstValue(
145: "followRedirects", "false"));
146: }
147:
148: /**
149: * Indicates if this URL is being examined in a context in which it makes
150: * sense to allow user interactions such as popping up an authentication
151: * dialog.
152: *
153: * @return True if it makes sense to allow user interactions.
154: */
155: public boolean isAllowUserInteraction() {
156: return Boolean.parseBoolean(getParameters().getFirstValue(
157: "allowUserInteraction", "false"));
158: }
159:
160: /**
161: * Indicates if the protocol is allowed to use caching whenever it can.
162: *
163: * @return True if the protocol is allowed to use caching whenever it can.
164: */
165: public boolean isUseCaches() {
166: return Boolean.parseBoolean(getParameters().getFirstValue(
167: "useCaches", "false"));
168: }
169:
170: /**
171: * Returns the timeout value, in milliseconds, to be used when opening a
172: * communications link to the resource referenced. 0 means infinite timeout.
173: *
174: * @return The connection timeout value.
175: */
176: public int getConnectTimeout() {
177: return Integer.parseInt(getParameters().getFirstValue(
178: "connectTimeout", "0"));
179: }
180:
181: /**
182: * Returns the read timeout value. A timeout of zero is interpreted as an
183: * infinite timeout.
184: *
185: * @return The read timeout value.
186: */
187: public int getReadTimeout() {
188: return Integer.parseInt(getParameters().getFirstValue(
189: "readTimeout", "0"));
190: }
191: }
|