/**
* Copyright (c) 2009 - 2011 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org>
*
* This file is part of org.appwork.utils.net
*
* This software is licensed under the Artistic License 2.0,
* see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php
* for details
*/
package org.appwork.utils.net;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import org.appwork.utils.logging.Log;
/**
* @author daniel
*
*/
public class HeaderCollection implements Iterable<HTTPHeader> {
private final LinkedList<HTTPHeader> headers;
private final HashMap<String, HTTPHeader> headersMap;
private static HashMap<String, Boolean> DUPES_ALLOWED = new HashMap<String, Boolean>();
static {
HeaderCollection.DUPES_ALLOWED.put("Set-Cookies", true);
}
public HeaderCollection() {
this.headers = new LinkedList<HTTPHeader>();
this.headersMap = new HashMap<String, HTTPHeader>();
}
public void add(final HTTPHeader header) {
if (!HeaderCollection.DUPES_ALLOWED.containsKey(header.getKey()) && this.headersMap.containsKey(header.getKey())) {
// overwrite
Log.L.warning("Overwrite Header: " + header);
for (final Iterator<HTTPHeader> it = this.headers.iterator(); it.hasNext();) {
if (it.next().getKey().equals(header.getKey())) {
it.remove();
break;
}
}
}
this.headers.add(header);
this.headersMap.put(header.getKey(), header);
}
public HTTPHeader get(final String key) {
return this.headersMap.get(key);
}
public String getValue(final String key) {
final HTTPHeader ret = this.headersMap.get(key);
if (ret != null) { return ret.getValue(); }
return null;
}
@Override
public Iterator<HTTPHeader> iterator() {
return this.headers.iterator();
}
}