package org.mortbay.util; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Set; /** * A multi valued Map. * Simple I2P replacement for org.eclipse.jetty.util.MultiMap * so we don't depend on Jetty utils. * * Contains only the methods required by MultiPartRequest. * Does not implement Map. Unsynchronized. * * @since 0.9.12 */ public class MultiMap<T> { private final HashMap<T, LinkedList<Object>> data; public MultiMap(int capacity) { data = new HashMap<T, LinkedList<Object>>(capacity); } public Set<T> keySet() { return data.keySet(); } /** * This returns the first item or null. * The Jetty version appears to return the item if only one, * or the entire list if more than one. * Only used by MultiPartRequest.contains() which is unused. * contains() would fail with a ClassCastException if we returned a list here, * which is a bug in MultiPartRequest? */ public Object get(T key) { List<Object> tmp = getValues(key); return tmp != null ? tmp.get( 0 ) : null; } public List<Object> getValues(T key) { return data.get( key ); } public void add(T key, Object value ) { LinkedList<Object> list = data.get( key ); if( list == null ) { list = new LinkedList<Object>(); data.put( key, list ); } list.add( value ); } }