package org.jboss.resteasy.core;
import org.jboss.resteasy.annotations.Form;
import org.jboss.resteasy.resteasy_jaxrs.i18n.Messages;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import java.lang.annotation.Annotation;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Pattern;
public class MapFormInjector extends AbstractCollectionFormInjector<Map>
{
private final StringParameterInjector keyInjector;
public MapFormInjector(final Class collectionType, final Class keyType, final Class valueType, final String prefix, final ResteasyProviderFactory factory)
{
super(collectionType, valueType, prefix, Pattern.compile("^" + prefix + "\\[([0-9a-zA-Z_\\-\\.~]+)\\]"), factory);
keyInjector = new StringParameterInjector(keyType, keyType, null, Form.class, null, null, new Annotation[0], factory);
}
@SuppressWarnings(value = "unchecked")
@Override
protected Map createInstance(Class collectionType)
{
if (collectionType.isAssignableFrom(LinkedHashMap.class))
{
return new LinkedHashMap();
}
if (collectionType.isAssignableFrom(TreeMap.class))
{
return new TreeMap();
}
throw new RuntimeException(Messages.MESSAGES.unsupportedCollectionType(collectionType));
}
@SuppressWarnings(value = "unchecked")
@Override
protected void addTo(Map collection, String key, Object value)
{
collection.put(keyInjector.extractValue(key), value);
}
}