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.io.Serializable;
34 import java.util.HashMap;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38
39 /***
40 * This class represents a collection of HTTP protocol parameters. Protocol parameters
41 * may be linked together to form a hierarchy. If a particular parameter value has not been
42 * explicitly defined in the collection itself, its value will be drawn from the parent
43 * collection of parameters.
44 *
45 * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
46 *
47 * @version $Revision$
48 *
49 * @since 3.0
50 */
51 public class DefaultHttpParams implements HttpParams, Serializable, Cloneable {
52
53 /*** Log object for this class. */
54 private static final Log LOG = LogFactory.getLog(DefaultHttpParams.class);
55
56 /*** HttpParams class factory. */
57 private static HttpParamsFactory httpParamsFactory = new DefaultHttpParamsFactory();
58
59 /***
60 * Gets the default HttpParams to be used.
61 *
62 * @return the value returned from <code>HttpParamsFactory#getDefaultParams()</code>
63 *
64 * @see HttpParamsFactory#getDefaultParams()
65 */
66 public static HttpParams getDefaultParams() {
67 return httpParamsFactory.getDefaultParams();
68 }
69
70 /***
71 * Sets the factory that will provide the default HttpParams.
72 *
73 * @param httpParamsFactory an instance of HttpParamsFactory
74 *
75 * @see #getDefaultParams()
76 */
77 public static void setHttpParamsFactory(HttpParamsFactory httpParamsFactory) {
78 if (httpParamsFactory == null) {
79 throw new IllegalArgumentException("httpParamsFactory may not be null");
80 }
81 DefaultHttpParams.httpParamsFactory = httpParamsFactory;
82 }
83
84 /*** The set of default values to defer to */
85 private HttpParams defaults = null;
86
87 /*** Hash map of HTTP parameters that this collection contains */
88 private HashMap parameters = null;
89
90 /***
91 * Creates a new collection of parameters with the given parent.
92 * The collection will defer to its parent for a default value
93 * if a particular parameter is not explicitly set in the collection
94 * itself.
95 *
96 * @param defaults the parent collection to defer to, if a parameter
97 * is not explictly set in the collection itself.
98 */
99 public DefaultHttpParams(final HttpParams defaults) {
100 super();
101 this.defaults = defaults;
102 }
103
104 /***
105 * Creates a new collection of parameters with the collection returned
106 * by {@link #getDefaultParams()} as a parent. The collection will defer
107 * to its parent for a default value if a particular parameter is not
108 * explicitly set in the collection itself.
109 *
110 * @see #getDefaultParams()
111 */
112 public DefaultHttpParams() {
113 this(getDefaultParams());
114 }
115
116 public synchronized HttpParams getDefaults() {
117 return this.defaults;
118 }
119
120 public synchronized void setDefaults(final HttpParams params) {
121 this.defaults = params;
122 }
123
124 public synchronized Object getParameter(final String name) {
125
126 Object param = null;
127 if (this.parameters != null) {
128 param = this.parameters.get(name);
129 }
130 if (param != null) {
131
132 return param;
133 } else {
134
135 if (this.defaults != null) {
136
137 return this.defaults.getParameter(name);
138 } else {
139
140 return null;
141 }
142 }
143 }
144
145 public synchronized void setParameter(final String name, final Object value) {
146 if (this.parameters == null) {
147 this.parameters = new HashMap();
148 }
149 this.parameters.put(name, value);
150 if (LOG.isDebugEnabled()) {
151 LOG.debug("Set parameter " + name + " = " + value);
152 }
153 }
154
155 /***
156 * Assigns the value to all the parameter with the given names
157 *
158 * @param names array of parameter name
159 * @param value parameter value
160 */
161 public synchronized void setParameters(final String[] names, final Object value) {
162 for (int i = 0; i < names.length; i++) {
163 setParameter(names[i], value);
164 }
165 }
166
167 public long getLongParameter(final String name, long defaultValue) {
168 Object param = getParameter(name);
169 if (param == null) {
170 return defaultValue;
171 }
172 return ((Long)param).longValue();
173 }
174
175 public void setLongParameter(final String name, long value) {
176 setParameter(name, new Long(value));
177 }
178
179 public int getIntParameter(final String name, int defaultValue) {
180 Object param = getParameter(name);
181 if (param == null) {
182 return defaultValue;
183 }
184 return ((Integer)param).intValue();
185 }
186
187 public void setIntParameter(final String name, int value) {
188 setParameter(name, new Integer(value));
189 }
190
191 public double getDoubleParameter(final String name, double defaultValue) {
192 Object param = getParameter(name);
193 if (param == null) {
194 return defaultValue;
195 }
196 return ((Double)param).doubleValue();
197 }
198
199 public void setDoubleParameter(final String name, double value) {
200 setParameter(name, new Double(value));
201 }
202
203 public boolean getBooleanParameter(final String name, boolean defaultValue) {
204 Object param = getParameter(name);
205 if (param == null) {
206 return defaultValue;
207 }
208 return ((Boolean)param).booleanValue();
209 }
210
211 public void setBooleanParameter(final String name, boolean value) {
212 setParameter(name, value ? Boolean.TRUE : Boolean.FALSE);
213 }
214
215 public boolean isParameterSet(final String name) {
216 return getParameter(name) != null;
217 }
218
219 public boolean isParameterSetLocally(final String name) {
220 return this.parameters != null && this.parameters.get(name) != null;
221 }
222
223 public boolean isParameterTrue(final String name) {
224 return getBooleanParameter(name, false);
225 }
226
227 public boolean isParameterFalse(final String name) {
228 return !getBooleanParameter(name, false);
229 }
230
231 /***
232 * Removes all parameters from this collection.
233 */
234 public void clear() {
235 this.parameters = null;
236 }
237
238 /***
239 * Clones this collection of parameters. Please note that paramter values
240 * themselves are not cloned.
241 *
242 * @see java.io.Serializable
243 * @see java.lang.Object#clone()
244 */
245 public Object clone() throws CloneNotSupportedException
246 {
247 DefaultHttpParams clone = (DefaultHttpParams)super.clone();
248 if (this.parameters != null) {
249 clone.parameters = (HashMap)this.parameters.clone();
250 }
251 clone.setDefaults(this.defaults);
252 return clone;
253 }
254 }