package org.etk.core.rest.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.core.MultivaluedMap; public final class OutputHeadersMap extends HashMap<String, List<Object>> implements MultivaluedMap<String, Object> { /** * Generated by Eclipse. */ private static final long serialVersionUID = 7932373258809348405L; /** * Default constructor. */ public OutputHeadersMap() { } // MultivaluedMap /** * {@inheritDoc} */ public void add(String key, Object value) { if (value == null) return; List<Object> l = getList(key); l.add(value); } /** * {@inheritDoc} */ public Object getFirst(String key) { List<Object> l = get(key); return l != null && l.size() > 0 ? l.get(0) : null; } /** * {@inheritDoc} */ public void putSingle(String key, Object value) { if (value == null) return; List<Object> l = getList(key); l.clear(); l.add(value); } /** * Get List with specified key. If List does not exist new one be created. * * @param key a key. * @return List<Object> */ private List<Object> getList(String key) { List<Object> l = get(key); if (l == null) { l = new ArrayList<Object>(); put(key, l); } return l; } // HashMap /** * {@inheritDoc} */ @Override public boolean containsKey(Object key) { if (key != null) return super.containsKey(((String) key).toLowerCase()); return super.containsKey(key); } /** * {@inheritDoc} */ @Override public List<Object> get(Object key) { if (key != null) return super.get(((String) key).toLowerCase()); return super.get(key); } /** * {@inheritDoc} */ @Override public List<Object> put(String key, List<Object> value) { if (key != null) key = key.toLowerCase(); return super.put(key, value); } /** * {@inheritDoc} */ @Override public void putAll(Map<? extends String, ? extends List<Object>> t) { for (Map.Entry<? extends String, ? extends List<Object>> e : t.entrySet()) put(e.getKey(), e.getValue()); } /** * {@inheritDoc} */ @Override public List<Object> remove(Object key) { if (key != null) return super.remove(((String) key).toLowerCase()); return super.remove(key); } }