package org.jboss.resteasy.util; import javax.ws.rs.core.MultivaluedMap; import java.util.HashSet; import java.util.List; import java.util.Set; /** * {@link javax.ws.rs.core.MultivaluedMap} implementation that wraps another instance and only returns values that are prefixed with the given {@link #prefix}. * * @param <K> The type of the keys in the map. * @param <V> The type of the values in the lists in the map. */ public class PrefixedMultivaluedMap<V> extends DelegatingMultivaluedMap<String, V> { private final String prefixWithDot; /** * Constructor setting the prefix and the delegate. */ public PrefixedMultivaluedMap(String prefix, MultivaluedMap<String, V> delegate) { super(delegate); this.prefixWithDot = prefix + "."; } /** * Returns the value assigned to "<i>prefix</i>.<i>key</i>" implicitly converts the key to {@link String} */ @Override public List<V> get(Object key) { return super.get(prefixWithDot + key); } @Override public Set<String> keySet() { HashSet<String> result = new HashSet<String>(); for (String key : super.keySet()) { if (key.startsWith(prefixWithDot)) { result.add(key.substring(prefixWithDot.length())); } } return result; } }