package org.jboss.resteasy.plugins.providers;
import java.lang.reflect.Constructor;
import java.util.Collection;
import javax.ws.rs.ext.ParamConverter;
import org.jboss.resteasy.core.StringParameterInjector;
import org.jboss.resteasy.resteasy_jaxrs.i18n.Messages;
Author: Marek Kopecky mkopecky@redhat.com, Ron Sigal rsigal@redhat.com
/**
* @author Marek Kopecky mkopecky@redhat.com
* @author Ron Sigal rsigal@redhat.com
*/
public class MultiValuedCollectionParamConverter extends MultiValuedAbstractParamConverter implements ParamConverter<Collection<?>>
{
private Constructor<?> constructor;
public MultiValuedCollectionParamConverter(final StringParameterInjector stringParameterInjector, final String separator, final Constructor<?> constructor)
{
super(stringParameterInjector, separator);
this.constructor = constructor;
}
@Override
public String toString(Collection<?> value)
{
if (value == null)
{
return null;
}
return stringify(value);
}
@Override
public Collection<?> fromString(String param)
{
try
{
Collection<?> c = (Collection<?>) constructor.newInstance();
return parse(c, param.split(separator));
}
catch (Exception e)
{
throw new RuntimeException(Messages.MESSAGES.unableToParse(param));
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
@SuppressWarnings({ "unchecked", "rawtypes" })
private Collection<?> parse(Collection c, String[] params) throws Exception
{
for (String param : params)
{
c.add(stringParameterInjector.extractValue(param));
}
return c;
}
}