1 /*
2  * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/protocol/BasicHttpProcessor.java $
3  * $Revision: 613298 $
4  * $Date: 2008-01-18 14:09:22 -0800 (Fri, 18 Jan 2008) $
5  *
6  * ====================================================================
7  * Licensed to the Apache Software Foundation (ASF) under one
8  * or more contributor license agreements.  See the NOTICE file
9  * distributed with this work for additional information
10  * regarding copyright ownership.  The ASF licenses this file
11  * to you under the Apache License, Version 2.0 (the
12  * "License"); you may not use this file except in compliance
13  * with the License.  You may obtain a copy of the License at
14  *
15  *   http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing,
18  * software distributed under the License is distributed on an
19  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20  * KIND, either express or implied.  See the License for the
21  * specific language governing permissions and limitations
22  * under the License.
23  * ====================================================================
24  *
25  * This software consists of voluntary contributions made by many
26  * individuals on behalf of the Apache Software Foundation.  For more
27  * information on the Apache Software Foundation, please see
28  * <http://www.apache.org/>.
29  *
30  */
31 
32 package org.apache.http.protocol;
33 
34 import java.io.IOException;
35 import java.util.ArrayList;
36 import java.util.Iterator;
37 import java.util.List;
38 
39 import org.apache.http.HttpException;
40 import org.apache.http.HttpRequest;
41 import org.apache.http.HttpRequestInterceptor;
42 import org.apache.http.HttpResponse;
43 import org.apache.http.HttpResponseInterceptor;
44 
45 /**
46  * Keeps lists of interceptors for processing requests and responses.
47  *
48  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
49  * @author Andrea Selva
50  *
51  * @version $Revision: 613298 $
52  *
53  * @since 4.0
54  *
55  * @deprecated Please use {@link java.net.URL#openConnection} instead.
56  *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
57  *     for further details.
58  */
59 @Deprecated
60 public final class BasicHttpProcessor implements
61     HttpProcessor, HttpRequestInterceptorList, HttpResponseInterceptorList, Cloneable {
62 
63     protected List requestInterceptors = null;
64     protected List responseInterceptors = null;
65 
66 
67     // non-Javadoc, see interface HttpRequestInterceptorList
addRequestInterceptor(final HttpRequestInterceptor itcp)68     public void addRequestInterceptor(final HttpRequestInterceptor itcp) {
69 
70         if (itcp == null) {
71             return;
72         }
73         if (this.requestInterceptors == null) {
74             this.requestInterceptors = new ArrayList();
75         }
76         this.requestInterceptors.add(itcp);
77     }
78 
79     // non-Javadoc, see interface HttpRequestInterceptorList
addRequestInterceptor(final HttpRequestInterceptor itcp, int index)80     public void addRequestInterceptor(final HttpRequestInterceptor itcp,
81                                       int index) {
82         if (index < 0) {
83             throw new IndexOutOfBoundsException(String.valueOf(index));
84         }
85         if (itcp == null) {
86             return;
87         }
88 
89         if (this.requestInterceptors == null) {
90             if (index > 0) {
91                 throw new IndexOutOfBoundsException(String.valueOf(index));
92             }
93             this.requestInterceptors = new ArrayList();
94         }
95         this.requestInterceptors.add(index, itcp);
96     }
97 
98 
addResponseInterceptor(HttpResponseInterceptor itcp, int index)99     public void addResponseInterceptor(HttpResponseInterceptor itcp,
100                                        int index) {
101         if (index < 0) {
102             throw new IndexOutOfBoundsException(String.valueOf(index));
103         }
104         if (itcp == null) {
105             return;
106         }
107 
108         if (this.responseInterceptors == null) {
109             if (index > 0) {
110                 throw new IndexOutOfBoundsException(String.valueOf(index));
111             }
112             this.responseInterceptors = new ArrayList();
113         }
114         this.responseInterceptors.add(index, itcp);
115     }
116 
117 
118     // non-Javadoc, see interface HttpRequestInterceptorList
removeRequestInterceptorByClass(final Class clazz)119     public void removeRequestInterceptorByClass(final Class clazz) {
120         if (this.requestInterceptors == null) {
121             return;
122         }
123         for (Iterator it = this.requestInterceptors.iterator();
124              it.hasNext(); ) {
125             Object request = it.next();
126             if (request.getClass().equals(clazz)) {
127                 it.remove();
128             }
129         }
130     }
131 
132     // non-Javadoc, see interface HttpResponseInterceptorList
removeResponseInterceptorByClass(final Class clazz)133     public void removeResponseInterceptorByClass(final Class clazz) {
134         if (this.responseInterceptors == null) {
135             return;
136         }
137         for (Iterator it = this.responseInterceptors.iterator();
138              it.hasNext(); ) {
139             Object request = it.next();
140             if (request.getClass().equals(clazz)) {
141                 it.remove();
142             }
143         }
144     }
145 
146     /**
147      * Same as {@link #addRequestInterceptor(HttpRequestInterceptor) addRequestInterceptor}.
148      *
149      * @param interceptor       the interceptor to add
150      */
151     public final
addInterceptor(final HttpRequestInterceptor interceptor)152             void addInterceptor(final HttpRequestInterceptor interceptor) {
153         addRequestInterceptor(interceptor);
154     }
155 
156      public final
addInterceptor(final HttpRequestInterceptor interceptor, int index)157             void addInterceptor(final HttpRequestInterceptor interceptor,
158                                 int index) {
159         addRequestInterceptor(interceptor, index);
160     }
161 
162 
163     // non-Javadoc, see interface HttpRequestInterceptorList
getRequestInterceptorCount()164     public int getRequestInterceptorCount() {
165         return (this.requestInterceptors == null) ?
166             0 : this.requestInterceptors.size();
167     }
168 
169 
170     // non-Javadoc, see interface HttpRequestInterceptorList
getRequestInterceptor(int index)171     public HttpRequestInterceptor getRequestInterceptor(int index) {
172 
173         if ((this.requestInterceptors == null) ||
174                 (index < 0) || (index >= this.requestInterceptors.size()))
175             return null;
176 
177         return (HttpRequestInterceptor) this.requestInterceptors.get(index);
178     }
179 
180 
181     // non-Javadoc, see interface HttpRequestInterceptorList
clearRequestInterceptors()182     public void clearRequestInterceptors() {
183         this.requestInterceptors = null;
184     }
185 
186 
187 
188     // non-Javadoc, see interface HttpResponseInterceptorList
addResponseInterceptor(final HttpResponseInterceptor itcp)189     public void addResponseInterceptor(final HttpResponseInterceptor itcp) {
190         if (itcp == null) {
191             return;
192         }
193         if (this.responseInterceptors == null) {
194             this.responseInterceptors = new ArrayList();
195         }
196         this.responseInterceptors.add(itcp);
197     }
198 
199     /**
200      * Same as {@link #addResponseInterceptor(HttpResponseInterceptor) addResponseInterceptor}.
201      *
202      * @param interceptor       the interceptor to add
203      */
204     public final
addInterceptor(final HttpResponseInterceptor interceptor)205             void addInterceptor(final HttpResponseInterceptor interceptor) {
206         addResponseInterceptor(interceptor);
207     }
208 
addInterceptor(final HttpResponseInterceptor interceptor, int index)209     public final void addInterceptor(final HttpResponseInterceptor interceptor,
210                                      int index) {
211         addResponseInterceptor(interceptor, index);
212     }
213 
214 
215 
216     // non-Javadoc, see interface HttpResponseInterceptorList
getResponseInterceptorCount()217     public int getResponseInterceptorCount() {
218         return (this.responseInterceptors == null) ?
219             0 : this.responseInterceptors.size();
220     }
221 
222 
223     // non-Javadoc, see interface HttpResponseInterceptorList
getResponseInterceptor(int index)224     public HttpResponseInterceptor getResponseInterceptor(int index) {
225 
226         if ((this.responseInterceptors == null) ||
227                 (index < 0) || (index >= this.responseInterceptors.size()))
228             return null;
229 
230         return (HttpResponseInterceptor) this.responseInterceptors.get(index);
231     }
232 
233 
234     // non-Javadoc, see interface HttpResponseInterceptorList
clearResponseInterceptors()235     public void clearResponseInterceptors() {
236         this.responseInterceptors = null;
237     }
238 
239 
240     /**
241      * Sets the interceptor lists.
242      * First, both interceptor lists maintained by this processor
243      * will be cleared.
244      * Subsequently,
245      * elements of the argument list that are request interceptors will be
246      * added to the request interceptor list.
247      * Elements that are response interceptors will be
248      * added to the response interceptor list.
249      * Elements that are both request and response interceptor will be
250      * added to both lists.
251      * Elements that are neither request nor response interceptor
252      * will be ignored.
253      *
254      * @param list      the list of request and response interceptors
255      *                  from which to initialize
256      */
setInterceptors(final List list)257     public void setInterceptors(final List list) {
258         if (list == null) {
259             throw new IllegalArgumentException("List must not be null.");
260         }
261         if (this.requestInterceptors != null) {
262             this.requestInterceptors.clear();
263         }
264         if (this.responseInterceptors != null) {
265             this.responseInterceptors.clear();
266         }
267         for (int i = 0; i < list.size(); i++) {
268             Object obj = list.get(i);
269             if (obj instanceof HttpRequestInterceptor) {
270                 addInterceptor((HttpRequestInterceptor)obj);
271             }
272             if (obj instanceof HttpResponseInterceptor) {
273                 addInterceptor((HttpResponseInterceptor)obj);
274             }
275         }
276     }
277 
278     /**
279      * Clears both interceptor lists maintained by this processor.
280      */
clearInterceptors()281     public void clearInterceptors() {
282         clearRequestInterceptors();
283         clearResponseInterceptors();
284     }
285 
286     // non-Javadoc, see interface HttpRequestInterceptor (via HttpProcessor)
process( final HttpRequest request, final HttpContext context)287     public void process(
288             final HttpRequest request,
289             final HttpContext context)
290             throws IOException, HttpException {
291         if (this.requestInterceptors != null) {
292             for (int i = 0; i < this.requestInterceptors.size(); i++) {
293                 HttpRequestInterceptor interceptor =
294                     (HttpRequestInterceptor) this.requestInterceptors.get(i);
295                 interceptor.process(request, context);
296             }
297         }
298     }
299 
300     // non-Javadoc, see interface HttpResponseInterceptor (via HttpProcessor)
process( final HttpResponse response, final HttpContext context)301     public void process(
302             final HttpResponse response,
303             final HttpContext context)
304             throws IOException, HttpException {
305         if (this.responseInterceptors != null) {
306             for (int i = 0; i < this.responseInterceptors.size(); i++) {
307                 HttpResponseInterceptor interceptor =
308                     (HttpResponseInterceptor) this.responseInterceptors.get(i);
309                 interceptor.process(response, context);
310             }
311         }
312     }
313 
copyInterceptors(final BasicHttpProcessor target)314     protected void copyInterceptors(final BasicHttpProcessor target) {
315         if (this.requestInterceptors != null) {
316             target.requestInterceptors =
317                 new ArrayList(this.requestInterceptors);
318         }
319         if (this.responseInterceptors != null) {
320             target.responseInterceptors =
321                 new ArrayList(this.responseInterceptors);
322         }
323     }
324 
325     /**
326      * Creates a copy of this instance
327      *
328      * @return new instance of the BasicHttpProcessor
329      */
copy()330     public BasicHttpProcessor copy() {
331         BasicHttpProcessor clone = new BasicHttpProcessor();
332         copyInterceptors(clone);
333         return clone;
334     }
335 
clone()336     public Object clone() throws CloneNotSupportedException {
337         BasicHttpProcessor clone = (BasicHttpProcessor) super.clone();
338         copyInterceptors(clone);
339         return clone;
340     }
341 
342 }
343