1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderGroup.java $
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Revision: 659185 $
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Date: 2008-05-22 11:07:36 -0700 (Thu, 22 May 2008) $
5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one
8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * or more contributor license agreements.  See the NOTICE file
9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed with this work for additional information
10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * regarding copyright ownership.  The ASF licenses this file
11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * to you under the Apache License, Version 2.0 (the
12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "License"); you may not use this file except in compliance
13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * with the License.  You may obtain a copy of the License at
14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *   http://www.apache.org/licenses/LICENSE-2.0
16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing,
18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * software distributed under the License is distributed on an
19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * KIND, either express or implied.  See the License for the
21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * specific language governing permissions and limitations
22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * under the License.
23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This software consists of voluntary contributions made by many
26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * individuals on behalf of the Apache Software Foundation.  For more
27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * information on the Apache Software Foundation, please see
28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <http://www.apache.org/>.
29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.http.message;
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.ArrayList;
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.List;
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.Locale;
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.Header;
39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.HeaderIterator;
40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.util.CharArrayBuffer;
41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/**
43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A class for combining a set of headers.
44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This class allows for multiple headers with the same name and
45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * keeps track of the order in which headers were added.
46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author Michael Becke
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 4.0
50d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *
51d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead.
52d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
53d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     for further details.
54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
55d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated
56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic class HeaderGroup implements Cloneable {
57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** The list of headers for this group, in the order in which they were added */
59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private List headers;
60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Constructor for HeaderGroup.
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public HeaderGroup() {
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.headers = new ArrayList(16);
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Removes any contained headers.
70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void clear() {
72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        headers.clear();
73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Adds the given header to the group.  The order in which this header was
77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * added is preserved.
78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param header the header to add
80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void addHeader(Header header) {
82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (header == null) {
83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        headers.add(header);
86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Removes the given header.
90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param header the header to remove
92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void removeHeader(Header header) {
94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (header == null) {
95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        headers.remove(header);
98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Replaces the first occurence of the header with the same name. If no header with
102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * the same name is found the given header is added to the end of the list.
103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param header the new header that should replace the first header with the same
105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * name if present in the list.
106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void updateHeader(Header header) {
108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (header == null) {
109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = 0; i < this.headers.size(); i++) {
112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            Header current = (Header) this.headers.get(i);
113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (current.getName().equalsIgnoreCase(header.getName())) {
114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                this.headers.set(i, header);
115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                return;
116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.headers.add(header);
119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Sets all of the headers contained within this group overriding any
123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * existing headers. The headers are added in the order in which they appear
124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * in the array.
125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param headers the headers to set
127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setHeaders(Header[] headers) {
129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        clear();
130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (headers == null) {
131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = 0; i < headers.length; i++) {
134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.headers.add(headers[i]);
135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets a header representing all of the header values with the given name.
140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * If more that one header with the given name exists the values will be
141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * combined with a "," as per RFC 2616.
142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p>Header name comparison is case insensitive.
144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the name of the header(s) to get
146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return a header with a condensed value or <code>null</code> if no
147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * headers by the given name are present
148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Header getCondensedHeader(String name) {
150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        Header[] headers = getHeaders(name);
151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (headers.length == 0) {
153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return null;
154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if (headers.length == 1) {
155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return headers[0];
156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else {
157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            CharArrayBuffer valueBuffer = new CharArrayBuffer(128);
158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            valueBuffer.append(headers[0].getValue());
159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            for (int i = 1; i < headers.length; i++) {
160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                valueBuffer.append(", ");
161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                valueBuffer.append(headers[i].getValue());
162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return new BasicHeader(name.toLowerCase(Locale.ENGLISH), valueBuffer.toString());
165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
166069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
167069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
168069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
169069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets all of the headers with the given name.  The returned array
170069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * maintains the relative order in which the headers were added.
171069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
172069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p>Header name comparison is case insensitive.
173069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
174069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the name of the header(s) to get
175069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
176069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return an array of length >= 0
177069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
178069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Header[] getHeaders(String name) {
179069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        ArrayList headersFound = new ArrayList();
180069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
181069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = 0; i < headers.size(); i++) {
182069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            Header header = (Header) headers.get(i);
183069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (header.getName().equalsIgnoreCase(name)) {
184069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                headersFound.add(header);
185069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
186069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
187069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
188069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (Header[]) headersFound.toArray(new Header[headersFound.size()]);
189069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
190069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
191069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
192069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets the first header with the given name.
193069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
194069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p>Header name comparison is case insensitive.
195069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
196069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the name of the header to get
197069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return the first header or <code>null</code>
198069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
199069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Header getFirstHeader(String name) {
200069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = 0; i < headers.size(); i++) {
201069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            Header header = (Header) headers.get(i);
202069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (header.getName().equalsIgnoreCase(name)) {
203069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                return header;
204069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
205069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
206069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return null;
207069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
208069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
209069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
210069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets the last header with the given name.
211069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
212069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p>Header name comparison is case insensitive.
213069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
214069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the name of the header to get
215069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return the last header or <code>null</code>
216069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
217069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Header getLastHeader(String name) {
218069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // start at the end of the list and work backwards
219069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = headers.size() - 1; i >= 0; i--) {
220069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            Header header = (Header) headers.get(i);
221069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (header.getName().equalsIgnoreCase(name)) {
222069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                return header;
223069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
224069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
225069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
226069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return null;
227069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
228069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
229069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
230069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets all of the headers contained within this group.
231069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
232069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return an array of length >= 0
233069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
234069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Header[] getAllHeaders() {
235069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (Header[]) headers.toArray(new Header[headers.size()]);
236069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
237069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
238069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
239069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Tests if headers with the given name are contained within this group.
240069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
241069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p>Header name comparison is case insensitive.
242069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
243069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the header name to test for
244069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return <code>true</code> if at least one header with the name is
245069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * contained, <code>false</code> otherwise
246069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
247069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public boolean containsHeader(String name) {
248069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = 0; i < headers.size(); i++) {
249069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            Header header = (Header) headers.get(i);
250069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (header.getName().equalsIgnoreCase(name)) {
251069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                return true;
252069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
253069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
254069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
255069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return false;
256069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
257069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
258069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
259069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Returns an iterator over this group of headers.
260069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
261069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return iterator over this group of headers.
262069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
263069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @since 4.0
264069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
265069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public HeaderIterator iterator() {
266069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new BasicListHeaderIterator(this.headers, null);
267069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
268069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
269069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
270069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Returns an iterator over the headers with a given name in this group.
271069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
272069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name      the name of the headers over which to iterate, or
273069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *                  <code>null</code> for all headers
274069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
275069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return iterator over some headers in this group.
276069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
277069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @since 4.0
278069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
279069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public HeaderIterator iterator(final String name) {
280069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new BasicListHeaderIterator(this.headers, name);
281069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
282069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
283069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
284069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Returns a copy of this object
285069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
286069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return copy of this object
287069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
288069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public HeaderGroup copy() {
289069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        HeaderGroup clone = new HeaderGroup();
290069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        clone.headers.addAll(this.headers);
291069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return clone;
292069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
293069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
294069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public Object clone() throws CloneNotSupportedException {
295069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        HeaderGroup clone = (HeaderGroup) super.clone();
296069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        clone.headers = new ArrayList(this.headers);
297069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return clone;
298069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
299069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
300069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project}
301