1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHttpResponse.java $
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Revision: 573864 $
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Date: 2007-09-08 08:53:25 -0700 (Sat, 08 Sep 2007) $
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.message;
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.Locale;
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.HttpEntity;
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.HttpResponse;
38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.ProtocolVersion;
39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.StatusLine;
40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.ReasonPhraseCatalog;
41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/**
44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Basic implementation of an HTTP response that can be modified.
45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This implementation makes sure that there always is a status line.
46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Revision: 573864 $
50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 4.0
52d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *
53d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead.
54d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
55d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     for further details.
56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
57d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic class BasicHttpResponse extends AbstractHttpMessage
59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    implements HttpResponse {
60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private StatusLine          statusline;
62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private HttpEntity          entity;
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private ReasonPhraseCatalog reasonCatalog;
64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private Locale              locale;
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Creates a new response.
69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * This is the constructor to which all others map.
70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param statusline        the status line
72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param catalog           the reason phrase catalog, or
73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *                          <code>null</code> to disable automatic
74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *                          reason phrase lookup
75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param locale            the locale for looking up reason phrases, or
76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *                          <code>null</code> for the system locale
77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public BasicHttpResponse(final StatusLine statusline,
79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                             final ReasonPhraseCatalog catalog,
80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                             final Locale locale) {
81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        super();
82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (statusline == null) {
83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Status line may not be null.");
84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline    = statusline;
86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.reasonCatalog = catalog;
87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.locale        = (locale != null) ? locale : Locale.getDefault();
88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Creates a response from a status line.
92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * The response will not have a reason phrase catalog and
93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * use the system default locale.
94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param statusline        the status line
96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public BasicHttpResponse(final StatusLine statusline) {
98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this(statusline, null, null);
99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Creates a response from elements of a status line.
103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * The response will not have a reason phrase catalog and
104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * use the system default locale.
105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param ver       the protocol version of the response
107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param code      the status code of the response
108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param reason    the reason phrase to the status code, or
109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *                  <code>null</code>
110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public BasicHttpResponse(final ProtocolVersion ver,
112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                             final int code,
113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                             final String reason) {
114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this(new BasicStatusLine(ver, code, reason), null, null);
115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpMessage
119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public ProtocolVersion getProtocolVersion() {
120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.statusline.getProtocolVersion();
121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public StatusLine getStatusLine() {
125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.statusline;
126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public HttpEntity getEntity() {
130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.entity;
131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Locale getLocale() {
135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.locale;
136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setStatusLine(final StatusLine statusline) {
140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (statusline == null) {
141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Status line may not be null");
142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline = statusline;
144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setStatusLine(final ProtocolVersion ver, final int code) {
148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // arguments checked in BasicStatusLine constructor
149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline = new BasicStatusLine(ver, code, getReason(code));
150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setStatusLine(final ProtocolVersion ver, final int code,
154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                              final String reason) {
155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // arguments checked in BasicStatusLine constructor
156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline = new BasicStatusLine(ver, code, reason);
157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setStatusCode(int code) {
161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // argument checked in BasicStatusLine constructor
162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        ProtocolVersion ver = this.statusline.getProtocolVersion();
163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline = new BasicStatusLine(ver, code, getReason(code));
164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
166069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
167069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setReasonPhrase(String reason) {
168069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
169069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if ((reason != null) && ((reason.indexOf('\n') >= 0) ||
170069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                                 (reason.indexOf('\r') >= 0))
171069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            ) {
172069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Line break in reason phrase.");
173069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
174069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline = new BasicStatusLine(this.statusline.getProtocolVersion(),
175069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                                              this.statusline.getStatusCode(),
176069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                                              reason);
177069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
178069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
179069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
180069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setEntity(final HttpEntity entity) {
181069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.entity = entity;
182069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
183069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
184069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // non-javadoc, see interface HttpResponse
185069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setLocale(Locale loc) {
186069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (loc == null) {
187069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Locale may not be null.");
188069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
189069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.locale = loc;
190069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        final int code = this.statusline.getStatusCode();
191069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.statusline = new BasicStatusLine
192069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            (this.statusline.getProtocolVersion(), code, getReason(code));
193069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
194069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
195069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
196069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Looks up a reason phrase.
197069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * This method evaluates the currently set catalog and locale.
198069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * It also handles a missing catalog.
199069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
200069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param code      the status code for which to look up the reason
201069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
202069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return  the reason phrase, or <code>null</code> if there is none
203069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
204069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    protected String getReason(int code) {
205069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (this.reasonCatalog == null) ?
206069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            null : this.reasonCatalog.getReason(code, this.locale);
207069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
208069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
209069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project}
210