1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  package org.apache.commons.httpclient.params;
32  
33  import java.util.HashMap;
34  import java.util.Map;
35  
36  import org.apache.commons.httpclient.HostConfiguration;
37  import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
38  
39  /**
40   * This class represents a collection of HTTP protocol parameters applicable to 
41   * {@link org.apache.commons.httpclient.HttpConnectionManager HTTP connection managers}. 
42   * Protocol parameters may be linked together to form a hierarchy. If a particular 
43   * parameter value has not been explicitly defined in the collection itself, its 
44   * value will be drawn from the parent collection of parameters.
45   * 
46   * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
47   * @author Michael Becke
48   * 
49   * @version $Revision: 480424 $
50   * 
51   * @since 3.0
52   */
53  public class HttpConnectionManagerParams extends HttpConnectionParams {
54  
55      /** 
56       * Defines the maximum number of connections allowed per host configuration. 
57       * These values only apply to the number of connections from a particular instance 
58       * of HttpConnectionManager.
59       * <p>
60       * This parameter expects a value of type {@link java.util.Map}.  The value
61       * should map instances of {@link org.apache.commons.httpclient.HostConfiguration}
62       * to {@link Integer integers}.  The default value can be specified using
63       * {@link org.apache.commons.httpclient.HostConfiguration#ANY_HOST_CONFIGURATION}.
64       * </p>
65       */
66      public static final String MAX_HOST_CONNECTIONS = "http.connection-manager.max-per-host";
67  
68      /** 
69       * Defines the maximum number of connections allowed overall. This value only applies
70       * to the number of connections from a particular instance of HttpConnectionManager.
71       * <p>
72       * This parameter expects a value of type {@link Integer}.
73       * </p>
74       */
75      public static final String MAX_TOTAL_CONNECTIONS = "http.connection-manager.max-total";
76      
77      /**
78       * Sets the default maximum number of connections allowed for a given
79       * host config.
80       *
81       * @param maxHostConnections The default maximum.
82       * 
83       * @see #MAX_HOST_CONNECTIONS
84       */
85      public void setDefaultMaxConnectionsPerHost(int maxHostConnections) {
86          setMaxConnectionsPerHost(HostConfiguration.ANY_HOST_CONFIGURATION, maxHostConnections);
87      }
88  
89      /**
90       * Sets the maximum number of connections to be used for the given host config.
91       * 
92       * @param hostConfiguration The host config to set the maximum for.  Use 
93       * {@link HostConfiguration#ANY_HOST_CONFIGURATION} to configure the default value
94       * per host.
95       * @param maxHostConnections The maximum number of connections, <code>> 0</code>
96       * 
97       * @see #MAX_HOST_CONNECTIONS
98       */
99      public void setMaxConnectionsPerHost(
100         HostConfiguration hostConfiguration,
101         int maxHostConnections) {
102         
103         if (maxHostConnections <= 0) {
104             throw new IllegalArgumentException("maxHostConnections must be greater than 0");
105         }
106         
107         Map currentValues = (Map) getParameter(MAX_HOST_CONNECTIONS);
108         
109         
110         Map newValues = null;
111         if (currentValues == null) {
112             newValues = new HashMap();
113         } else {
114             newValues = new HashMap(currentValues);
115         }
116         newValues.put(hostConfiguration, new Integer(maxHostConnections));
117         setParameter(MAX_HOST_CONNECTIONS, newValues);
118     }
119     
120     /**
121      * Gets the default maximum number of connections allowed for a given
122      * host config.
123      *
124      * @return The default maximum.
125      * 
126      * @see #MAX_HOST_CONNECTIONS
127      */
128     public int getDefaultMaxConnectionsPerHost() {
129         return getMaxConnectionsPerHost(HostConfiguration.ANY_HOST_CONFIGURATION);
130     }
131 
132     /**
133      * Gets the maximum number of connections to be used for a particular host config.  If
134      * the value has not been specified for the given host the default value will be
135      * returned.
136      * 
137      * @param hostConfiguration The host config.
138      * @return The maximum number of connections to be used for the given host config.
139      * 
140      * @see #MAX_HOST_CONNECTIONS
141      */
142     public int getMaxConnectionsPerHost(HostConfiguration hostConfiguration) {
143         
144         Map m = (Map) getParameter(MAX_HOST_CONNECTIONS);
145         if (m == null) {
146             
147             return MultiThreadedHttpConnectionManager.DEFAULT_MAX_HOST_CONNECTIONS;
148         } else {
149             Integer max = (Integer) m.get(hostConfiguration);
150             if (max == null && hostConfiguration != HostConfiguration.ANY_HOST_CONFIGURATION) {
151                 
152                 
153                 return getMaxConnectionsPerHost(HostConfiguration.ANY_HOST_CONFIGURATION);
154             } else {
155                 return (
156                         max == null 
157                         ? MultiThreadedHttpConnectionManager.DEFAULT_MAX_HOST_CONNECTIONS 
158                         : max.intValue()
159                     );
160             }
161         }
162     }
163 
164     /**
165      * Sets the maximum number of connections allowed.
166      *
167      * @param maxTotalConnections The maximum number of connections allowed.
168      * 
169      * @see #MAX_TOTAL_CONNECTIONS
170      */
171     public void setMaxTotalConnections(int maxTotalConnections) {
172         setIntParameter(
173             HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS,
174             maxTotalConnections);
175     }
176 
177     /**
178      * Gets the maximum number of connections allowed.
179      *
180      * @return The maximum number of connections allowed.
181      * 
182      * @see #MAX_TOTAL_CONNECTIONS
183      */
184     public int getMaxTotalConnections() {
185         return getIntParameter(
186             HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS,
187             MultiThreadedHttpConnectionManager.DEFAULT_MAX_TOTAL_CONNECTIONS);
188     }
189 
190 }