001/*
002 * ====================================================================
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *   http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing,
014 * software distributed under the License is distributed on an
015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
016 * KIND, either express or implied.  See the License for the
017 * specific language governing permissions and limitations
018 * under the License.
019 * ====================================================================
020 *
021 * This software consists of voluntary contributions made by many
022 * individuals on behalf of the Apache Software Foundation.  For more
023 * information on the Apache Software Foundation, please see
024 * <http://www.apache.org/>.
025 *
026 */
027
028package org.apache.http.message;
029
030import org.apache.http.Header;
031import org.apache.http.HeaderIterator;
032import org.apache.http.HttpMessage;
033import org.apache.http.params.BasicHttpParams;
034import org.apache.http.params.HttpParams;
035import org.apache.http.util.Args;
036
037/**
038 * Basic implementation of {@link HttpMessage}.
039 *
040 * @since 4.0
041 */
042@SuppressWarnings("deprecation")
043public abstract class AbstractHttpMessage implements HttpMessage {
044
045    protected HeaderGroup headergroup;
046
047    @Deprecated
048    protected HttpParams params;
049
050    /**
051     * @deprecated (4.3) use {@link AbstractHttpMessage#AbstractHttpMessage()}
052     */
053    @Deprecated
054    protected AbstractHttpMessage(final HttpParams params) {
055        super();
056        this.headergroup = new HeaderGroup();
057        this.params = params;
058    }
059
060    protected AbstractHttpMessage() {
061        this(null);
062    }
063
064    // non-javadoc, see interface HttpMessage
065    @Override
066    public boolean containsHeader(final String name) {
067        return this.headergroup.containsHeader(name);
068    }
069
070    // non-javadoc, see interface HttpMessage
071    @Override
072    public Header[] getHeaders(final String name) {
073        return this.headergroup.getHeaders(name);
074    }
075
076    // non-javadoc, see interface HttpMessage
077    @Override
078    public Header getFirstHeader(final String name) {
079        return this.headergroup.getFirstHeader(name);
080    }
081
082    // non-javadoc, see interface HttpMessage
083    @Override
084    public Header getLastHeader(final String name) {
085        return this.headergroup.getLastHeader(name);
086    }
087
088    // non-javadoc, see interface HttpMessage
089    @Override
090    public Header[] getAllHeaders() {
091        return this.headergroup.getAllHeaders();
092    }
093
094    // non-javadoc, see interface HttpMessage
095    @Override
096    public void addHeader(final Header header) {
097        this.headergroup.addHeader(header);
098    }
099
100    // non-javadoc, see interface HttpMessage
101    @Override
102    public void addHeader(final String name, final String value) {
103        Args.notNull(name, "Header name");
104        this.headergroup.addHeader(new BasicHeader(name, value));
105    }
106
107    // non-javadoc, see interface HttpMessage
108    @Override
109    public void setHeader(final Header header) {
110        this.headergroup.updateHeader(header);
111    }
112
113    // non-javadoc, see interface HttpMessage
114    @Override
115    public void setHeader(final String name, final String value) {
116        Args.notNull(name, "Header name");
117        this.headergroup.updateHeader(new BasicHeader(name, value));
118    }
119
120    // non-javadoc, see interface HttpMessage
121    @Override
122    public void setHeaders(final Header[] headers) {
123        this.headergroup.setHeaders(headers);
124    }
125
126    // non-javadoc, see interface HttpMessage
127    @Override
128    public void removeHeader(final Header header) {
129        this.headergroup.removeHeader(header);
130    }
131
132    // non-javadoc, see interface HttpMessage
133    @Override
134    public void removeHeaders(final String name) {
135        if (name == null) {
136            return;
137        }
138        for (final HeaderIterator i = this.headergroup.iterator(); i.hasNext(); ) {
139            final Header header = i.nextHeader();
140            if (name.equalsIgnoreCase(header.getName())) {
141                i.remove();
142            }
143        }
144    }
145
146    // non-javadoc, see interface HttpMessage
147    @Override
148    public HeaderIterator headerIterator() {
149        return this.headergroup.iterator();
150    }
151
152    // non-javadoc, see interface HttpMessage
153    @Override
154    public HeaderIterator headerIterator(final String name) {
155        return this.headergroup.iterator(name);
156    }
157
158    /**
159     * @deprecated (4.3) use constructor parameters of configuration API provided by HttpClient
160     */
161    @Override
162    @Deprecated
163    public HttpParams getParams() {
164        if (this.params == null) {
165            this.params = new BasicHttpParams();
166        }
167        return this.params;
168    }
169
170    /**
171     * @deprecated (4.3) use constructor parameters of configuration API provided by HttpClient
172     */
173    @Override
174    @Deprecated
175    public void setParams(final HttpParams params) {
176        this.params = Args.notNull(params, "HTTP parameters");
177    }
178}