1/*
2 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/AbstractPooledConnAdapter.java $
3 * $Revision: 658775 $
4 * $Date: 2008-05-21 10:30:45 -0700 (Wed, 21 May 2008) $
5 *
6 * ====================================================================
7 *
8 *  Licensed to the Apache Software Foundation (ASF) under one or more
9 *  contributor license agreements.  See the NOTICE file distributed with
10 *  this work for additional information regarding copyright ownership.
11 *  The ASF licenses this file to You under the Apache License, Version 2.0
12 *  (the "License"); you may not use this file except in compliance with
13 *  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, software
18 *  distributed under the License is distributed on an "AS IS" BASIS,
19 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 *  See the License for the specific language governing permissions and
21 *  limitations under the License.
22 * ====================================================================
23 *
24 * This software consists of voluntary contributions made by many
25 * individuals on behalf of the Apache Software Foundation.  For more
26 * information on the Apache Software Foundation, please see
27 * <http://www.apache.org/>.
28 *
29 */
30
31package org.apache.http.impl.conn;
32
33
34import java.io.IOException;
35
36import org.apache.http.HttpHost;
37import org.apache.http.params.HttpParams;
38import org.apache.http.protocol.HttpContext;
39import org.apache.http.conn.routing.HttpRoute;
40import org.apache.http.conn.ClientConnectionManager;
41import org.apache.http.conn.OperatedClientConnection;
42
43
44
45/**
46 * Abstract adapter from pool {@link AbstractPoolEntry entries} to
47 * {@link org.apache.http.conn.ManagedClientConnection managed}
48 * client connections.
49 * The connection in the pool entry is used to initialize the base class.
50 * In addition, methods to establish a route are delegated to the
51 * pool entry. {@link #shutdown shutdown} and {@link #close close}
52 * will clear the tracked route in the pool entry and call the
53 * respective method of the wrapped connection.
54 *
55 * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
56 *
57 *
58 * <!-- empty lines to avoid svn diff problems -->
59 * @version   $Revision: 658775 $ $Date: 2008-05-21 10:30:45 -0700 (Wed, 21 May 2008) $
60 *
61 * @since 4.0
62 *
63 * @deprecated Please use {@link java.net.URL#openConnection} instead.
64 *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
65 *     for further details.
66 */
67@Deprecated
68public abstract class AbstractPooledConnAdapter extends AbstractClientConnAdapter {
69
70    /** The wrapped pool entry. */
71    protected volatile AbstractPoolEntry poolEntry;
72
73
74    /**
75     * Creates a new connection adapter.
76     *
77     * @param manager   the connection manager
78     * @param entry     the pool entry for the connection being wrapped
79     */
80    protected AbstractPooledConnAdapter(ClientConnectionManager manager,
81                                        AbstractPoolEntry entry) {
82        super(manager, entry.connection);
83        this.poolEntry = entry;
84    }
85
86
87    /**
88     * Asserts that this adapter is still attached.
89     *
90     * @throws IllegalStateException
91     *      if it is {@link #detach detach}ed
92     */
93    protected final void assertAttached() {
94        if (poolEntry == null) {
95            throw new IllegalStateException("Adapter is detached.");
96        }
97    }
98
99    /**
100     * Detaches this adapter from the wrapped connection.
101     * This adapter becomes useless.
102     */
103    @Override
104    protected void detach() {
105        super.detach();
106        poolEntry = null;
107    }
108
109
110    // non-javadoc, see interface ManagedHttpConnection
111    public HttpRoute getRoute() {
112
113        assertAttached();
114        return (poolEntry.tracker == null) ?
115            null : poolEntry.tracker.toRoute();
116    }
117
118    // non-javadoc, see interface ManagedHttpConnection
119    public void open(HttpRoute route,
120                     HttpContext context, HttpParams params)
121        throws IOException {
122
123        assertAttached();
124        poolEntry.open(route, context, params);
125    }
126
127
128    // non-javadoc, see interface ManagedHttpConnection
129    public void tunnelTarget(boolean secure, HttpParams params)
130        throws IOException {
131
132        assertAttached();
133        poolEntry.tunnelTarget(secure, params);
134    }
135
136
137    // non-javadoc, see interface ManagedHttpConnection
138    public void tunnelProxy(HttpHost next, boolean secure, HttpParams params)
139        throws IOException {
140
141        assertAttached();
142        poolEntry.tunnelProxy(next, secure, params);
143    }
144
145
146    // non-javadoc, see interface ManagedHttpConnection
147    public void layerProtocol(HttpContext context, HttpParams params)
148        throws IOException {
149
150        assertAttached();
151        poolEntry.layerProtocol(context, params);
152    }
153
154
155
156    // non-javadoc, see interface HttpConnection
157    public void close() throws IOException {
158        if (poolEntry != null)
159            poolEntry.shutdownEntry();
160
161        OperatedClientConnection conn = getWrappedConnection();
162        if (conn != null) {
163            conn.close();
164        }
165    }
166
167    // non-javadoc, see interface HttpConnection
168    public void shutdown() throws IOException {
169        if (poolEntry != null)
170            poolEntry.shutdownEntry();
171
172        OperatedClientConnection conn = getWrappedConnection();
173        if (conn != null) {
174            conn.shutdown();
175        }
176    }
177
178
179    // non-javadoc, see interface ManagedClientConnection
180    public Object getState() {
181        assertAttached();
182        return poolEntry.getState();
183    }
184
185
186    // non-javadoc, see interface ManagedClientConnection
187    public void setState(final Object state) {
188        assertAttached();
189        poolEntry.setState(state);
190    }
191
192
193} // class AbstractPooledConnAdapter
194