package io.airlift.jaxrs.testing; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ForwardingMap; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import javax.ws.rs.core.MultivaluedMap; import java.util.List; import java.util.Map; public class GuavaMultivaluedMap<K, V> extends ForwardingMap<K, List<V>> implements MultivaluedMap<K, V> { private final ListMultimap<K, V> multimap = ArrayListMultimap.create(); public GuavaMultivaluedMap() { } public GuavaMultivaluedMap(Multimap<K, V> multimap) { this.multimap.putAll(multimap); } @Override public void putSingle(K key, V value) { multimap.removeAll(key); multimap.put(key, value); } @Override protected Map<K, List<V>> delegate() { return Multimaps.asMap(multimap); } @Override public void add(K key, V value) { multimap.put(key, value); } @SafeVarargs @Override public final void addAll(K key, V... newValues) { multimap.putAll(key, ImmutableList.copyOf(newValues)); } @Override public void addAll(K key, List<V> valueList) { multimap.putAll(key, valueList); } @Override public V getFirst(K key) { return Iterables.getFirst(multimap.get(key), null); } @Override public void addFirst(K key, V value) { throw new UnsupportedOperationException(); } @Override public boolean equalsIgnoreValueOrder(MultivaluedMap<K, V> otherMap) { throw new UnsupportedOperationException(); } }