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; } }