1 /*
2  * ====================================================================
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  * ====================================================================
20  *
21  * This software consists of voluntary contributions made by many
22  * individuals on behalf of the Apache Software Foundation.  For more
23  * information on the Apache Software Foundation, please see
24  * <http://www.apache.org/>.
25  *
26  */

27
28 package org.apache.http.message;
29
30 import org.apache.http.Header;
31 import org.apache.http.HeaderIterator;
32 import org.apache.http.HttpMessage;
33 import org.apache.http.params.BasicHttpParams;
34 import org.apache.http.params.HttpParams;
35 import org.apache.http.util.Args;
36
37 /**
38  * Basic implementation of {@link HttpMessage}.
39  *
40  * @since 4.0
41  */

42 @SuppressWarnings("deprecation")
43 public abstract class AbstractHttpMessage implements HttpMessage {
44
45     protected HeaderGroup headergroup;
46
47     /**
48      * @deprecated Do not use.
49      */

50     @Deprecated
51     protected HttpParams params;
52
53     /**
54      * @deprecated (4.3) use {@link AbstractHttpMessage#AbstractHttpMessage()}
55      */

56     @Deprecated
57     protected AbstractHttpMessage(final HttpParams params) {
58         super();
59         this.headergroup = new HeaderGroup();
60         this.params = params;
61     }
62
63     protected AbstractHttpMessage() {
64         this(null);
65     }
66
67     // non-javadoc, see interface HttpMessage
68     @Override
69     public boolean containsHeader(final String name) {
70         return this.headergroup.containsHeader(name);
71     }
72
73     // non-javadoc, see interface HttpMessage
74     @Override
75     public Header[] getHeaders(final String name) {
76         return this.headergroup.getHeaders(name);
77     }
78
79     // non-javadoc, see interface HttpMessage
80     @Override
81     public Header getFirstHeader(final String name) {
82         return this.headergroup.getFirstHeader(name);
83     }
84
85     // non-javadoc, see interface HttpMessage
86     @Override
87     public Header getLastHeader(final String name) {
88         return this.headergroup.getLastHeader(name);
89     }
90
91     // non-javadoc, see interface HttpMessage
92     @Override
93     public Header[] getAllHeaders() {
94         return this.headergroup.getAllHeaders();
95     }
96
97     // non-javadoc, see interface HttpMessage
98     @Override
99     public void addHeader(final Header header) {
100         this.headergroup.addHeader(header);
101     }
102
103     // non-javadoc, see interface HttpMessage
104     @Override
105     public void addHeader(final String name, final String value) {
106         Args.notNull(name, "Header name");
107         this.headergroup.addHeader(new BasicHeader(name, value));
108     }
109
110     // non-javadoc, see interface HttpMessage
111     @Override
112     public void setHeader(final Header header) {
113         this.headergroup.updateHeader(header);
114     }
115
116     // non-javadoc, see interface HttpMessage
117     @Override
118     public void setHeader(final String name, final String value) {
119         Args.notNull(name, "Header name");
120         this.headergroup.updateHeader(new BasicHeader(name, value));
121     }
122
123     // non-javadoc, see interface HttpMessage
124     @Override
125     public void setHeaders(final Header[] headers) {
126         this.headergroup.setHeaders(headers);
127     }
128
129     // non-javadoc, see interface HttpMessage
130     @Override
131     public void removeHeader(final Header header) {
132         this.headergroup.removeHeader(header);
133     }
134
135     // non-javadoc, see interface HttpMessage
136     @Override
137     public void removeHeaders(final String name) {
138         if (name == null) {
139             return;
140         }
141         for (final HeaderIterator i = this.headergroup.iterator(); i.hasNext(); ) {
142             final Header header = i.nextHeader();
143             if (name.equalsIgnoreCase(header.getName())) {
144                 i.remove();
145             }
146         }
147     }
148
149     // non-javadoc, see interface HttpMessage
150     @Override
151     public HeaderIterator headerIterator() {
152         return this.headergroup.iterator();
153     }
154
155     // non-javadoc, see interface HttpMessage
156     @Override
157     public HeaderIterator headerIterator(final String name) {
158         return this.headergroup.iterator(name);
159     }
160
161     /**
162      * @deprecated (4.3) use constructor parameters of configuration API provided by HttpClient
163      */

164     @Override
165     @Deprecated
166     public HttpParams getParams() {
167         if (this.params == null) {
168             this.params = new BasicHttpParams();
169         }
170         return this.params;
171     }
172
173     /**
174      * @deprecated (4.3) use constructor parameters of configuration API provided by HttpClient
175      */

176     @Override
177     @Deprecated
178     public void setParams(final HttpParams params) {
179         this.params = Args.notNull(params, "HTTP parameters");
180     }
181 }
182