package net.sf.sahi; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; import net.sf.sahi.util.CaseInsensitiveString; /** * Sahi - Web Automation and Test Tool * <p/> * Copyright 2006 V Narayan Raman * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class HttpHeaders { LinkedHashMap<CaseInsensitiveString, List<String>> headers = new LinkedHashMap<CaseInsensitiveString, List<String>>(15); public void addHeader(String key, String value) { CaseInsensitiveString keyIgnoreCase = new CaseInsensitiveString(key); List<String> entry = (List<String>) headers.get(keyIgnoreCase); if (entry == null) { entry = new ArrayList<String>(); headers.put(keyIgnoreCase, entry); } entry.add(value); } public void setHeader(String key, String value) { CaseInsensitiveString keyIgnoreCase = new CaseInsensitiveString(key); List<String> entry = new ArrayList<String>(); entry.add(value); headers.put(keyIgnoreCase, entry); } public boolean hasHeader(String key) { return headers.containsKey(new CaseInsensitiveString(key)); } public String getHeader(String key) { CaseInsensitiveString keyIgnoreCase = new CaseInsensitiveString(key); List<String> values = headers.get(keyIgnoreCase); if (values == null) return null; StringBuffer sb = new StringBuffer(); int size = values.size(); for (int i = 0; i < size; i++) { String value = (String) values.get(i); if (i > 0) sb.append(","); sb.append(value); } return sb.toString(); } public List<String> getHeaders(String key) { CaseInsensitiveString keyIgnoreCase = new CaseInsensitiveString(key); return headers.get(keyIgnoreCase); } public void addHeaders(String key, List<String> newHeaders) { if (newHeaders == null) return; CaseInsensitiveString keyIgnoreCase = new CaseInsensitiveString(key); List<String> entry = headers.get(keyIgnoreCase); if (entry == null || entry.size() == 0) { entry = new ArrayList<String>(); headers.put(keyIgnoreCase, entry); } entry.addAll(newHeaders); } public String getLastHeader(String key) { List<String> entry = headers.get(new CaseInsensitiveString(key)); if (entry == null || entry.size() == 0) return null; return (String) entry.get(entry.size() - 1); } public byte[] getBytes() { return null; } public String toString() { StringBuffer sb = new StringBuffer(); Iterator<CaseInsensitiveString> keys = headers.keySet().iterator(); while (keys.hasNext()) { CaseInsensitiveString key = (CaseInsensitiveString) keys.next(); if (key.isNull()) continue; List<String> values = headers.get(key); int size = values.size(); for (int i = 0; i < size; i++) { String value = (String) values.get(i); sb.append(key).append(": ").append(value).append("\r\n"); } } return sb.toString(); } public void removeHeader(String key) { headers.remove(new CaseInsensitiveString(key)); } public Set<CaseInsensitiveString> keySet() { return headers.keySet(); } class HttpHeadersIterator implements Iterator<String> { private Iterator<CaseInsensitiveString> iterator; public HttpHeadersIterator(Iterator<CaseInsensitiveString> iterator) { this.iterator = iterator; } public boolean hasNext() { return iterator.hasNext(); } public String next() { return iterator.next().toString(); } public void remove() { iterator.remove(); } } public Iterator<String> keysIterator() { return new HttpHeadersIterator(keySet().iterator()); } }