Home | History | Annotate | Download | only in conn
      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 
     31 package org.apache.http.impl.conn;
     32 
     33 
     34 import java.io.IOException;
     35 
     36 import org.apache.http.HttpHost;
     37 import org.apache.http.params.HttpParams;
     38 import org.apache.http.protocol.HttpContext;
     39 import org.apache.http.conn.routing.HttpRoute;
     40 import org.apache.http.conn.ClientConnectionManager;
     41 import 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
     68 public 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