package org.odata4j.producer.resources; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.core.MultivaluedMap; /** * A {@link MultivaluedMap} with String keys and values backed by a HashMap. * * Although keys are stored case-sensitive, all (internal) comparisons are done case-insensitive. * I.e. {@code get("key")} and {@code get("KEY")} return the same values. */ public class HeaderMap extends HashMap<String, List<String>> implements MultivaluedMap<String, String> { private static final long serialVersionUID = 1L; @Override public void putSingle(String key, String value) { List<String> values = new ArrayList<String>(); values.add(value); this.put(key, values); } @Override public void add(String key, String value) { List<String> values = this.get(key); if (values == null) values = new ArrayList<String>(); values.add(value); this.put(key, values); } @Override public String getFirst(String key) { List<String> values = this.get(key); if (values == null || values.size() == 0) return null; return values.get(0); } @Override public boolean containsKey(Object key) { for (String k : this.keySet()) if (k.equalsIgnoreCase((String) key)) return true; return false; } @Override public List<String> get(Object key) { for (String k : this.keySet()) if (k.equalsIgnoreCase((String) key)) return super.get(k); return null; } @Override public List<String> put(String key, List<String> value) { List<String> previous = this.remove(key); super.put(key, value); return previous; } @Override public void putAll(Map<? extends String, ? extends List<String>> map) { for (Map.Entry<? extends String, ? extends List<String>> e : map.entrySet()) this.put(e.getKey(), e.getValue()); } @Override public List<String> remove(Object key) { for (String k : this.keySet()) if (k.equalsIgnoreCase((String) key)) return super.remove(k); return null; } }