1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/client/RequestWrapper.java $
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Revision: 674186 $
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Date: 2008-07-05 05:18:54 -0700 (Sat, 05 Jul 2008) $
5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one
8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * or more contributor license agreements.  See the NOTICE file
9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed with this work for additional information
10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * regarding copyright ownership.  The ASF licenses this file
11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * to you under the Apache License, Version 2.0 (the
12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "License"); you may not use this file except in compliance
13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * with the License.  You may obtain a copy of the License at
14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *   http://www.apache.org/licenses/LICENSE-2.0
16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing,
18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * software distributed under the License is distributed on an
19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * KIND, either express or implied.  See the License for the
21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * specific language governing permissions and limitations
22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * under the License.
23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This software consists of voluntary contributions made by many
26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * individuals on behalf of the Apache Software Foundation.  For more
27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * information on the Apache Software Foundation, please see
28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <http://www.apache.org/>.
29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.http.impl.client;
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.net.URI;
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.net.URISyntaxException;
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.HttpRequest;
38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.ProtocolException;
39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.ProtocolVersion;
40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.RequestLine;
41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.client.methods.HttpUriRequest;
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.message.AbstractHttpMessage;
43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.message.BasicRequestLine;
44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.params.HttpProtocolParams;
45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/**
47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A wrapper class for {@link HttpRequest}s that can be used to change
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * properties of the current request without modifying the original
49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * object.
50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * </p>
51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This class is also capable of resetting the request headers to
52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the state of the original request.
53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Revision: 674186 $
57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 4.0
59d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *
60d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead.
61d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
62d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     for further details.
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
64d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic class RequestWrapper extends AbstractHttpMessage implements HttpUriRequest {
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private final HttpRequest original;
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private URI uri;
70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private String method;
71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private ProtocolVersion version;
72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private int execCount;
73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public RequestWrapper(final HttpRequest request) throws ProtocolException {
75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        super();
76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (request == null) {
77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("HTTP request may not be null");
78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.original = request;
80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        setParams(request.getParams());
81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Make a copy of the original URI
82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (request instanceof HttpUriRequest) {
83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.uri = ((HttpUriRequest) request).getURI();
84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.method = ((HttpUriRequest) request).getMethod();
85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.version = null;
86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else {
87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            RequestLine requestLine = request.getRequestLine();
88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            try {
89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                this.uri = new URI(requestLine.getUri());
90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            } catch (URISyntaxException ex) {
91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                throw new ProtocolException("Invalid request URI: "
92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        + requestLine.getUri(), ex);
93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.method = requestLine.getMethod();
95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.version = request.getProtocolVersion();
96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.execCount = 0;
98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void resetHeaders() {
101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Make a copy of original headers
102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.headergroup.clear();
103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        setHeaders(this.original.getAllHeaders());
104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public String getMethod() {
107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.method;
108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setMethod(final String method) {
111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (method == null) {
112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Method name may not be null");
113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.method = method;
115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public ProtocolVersion getProtocolVersion() {
118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (this.version != null) {
119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return this.version;
120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else {
121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return HttpProtocolParams.getVersion(getParams());
122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setProtocolVersion(final ProtocolVersion version) {
126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.version = version;
127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public URI getURI() {
131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.uri;
132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setURI(final URI uri) {
135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.uri = uri;
136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public RequestLine getRequestLine() {
139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        String method = getMethod();
140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        ProtocolVersion ver = getProtocolVersion();
141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        String uritext = null;
142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (uri != null) {
143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            uritext = uri.toASCIIString();
144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (uritext == null || uritext.length() == 0) {
146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            uritext = "/";
147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new BasicRequestLine(method, uritext, ver);
149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void abort() throws UnsupportedOperationException {
152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        throw new UnsupportedOperationException();
153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public boolean isAborted() {
156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return false;
157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public HttpRequest getOriginal() {
160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.original;
161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public boolean isRepeatable() {
164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return true;
165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
166069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
167069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public int getExecCount() {
168069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.execCount;
169069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
170069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
171069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void incrementExecCount() {
172069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.execCount++;
173069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
174069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
175069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project}
176