package org.jboss.resteasy.plugins.providers;


import java.util.Collection;

import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;

import org.jboss.resteasy.core.StringParameterInjector;

Author:Marek Kopecky mkopecky@redhat.com, Ron Sigal rsigal@redhat.com
/** * @author Marek Kopecky mkopecky@redhat.com * @author Ron Sigal rsigal@redhat.com */
public abstract class MultiValuedAbstractParamConverter { protected StringParameterInjector stringParameterInjector; @SuppressWarnings("rawtypes") protected ParamConverter paramConverter; @SuppressWarnings("rawtypes") protected HeaderDelegate headerDelegate; protected String separator; public MultiValuedAbstractParamConverter(final StringParameterInjector stringParameterInjector, final String separator) { this.stringParameterInjector = stringParameterInjector; this.paramConverter = stringParameterInjector.getParamConverter(); this.headerDelegate = stringParameterInjector.getHeaderDelegate(); this.separator = separator; } //////////////////////////////////////////////////////////////////////////////////////////////////////////// @SuppressWarnings({ "unchecked" }) protected String stringify(Collection<?> value) { char separatorChar = getSeparatorChar(); StringBuilder sb = new StringBuilder(); boolean first = true; for (Object v : value) { if (first) { first = false; } else { sb.append(separatorChar); } if (v instanceof String) { sb.append(v); } else if (paramConverter != null) { sb.append(paramConverter.toString(v)); } else if (headerDelegate != null) { sb.append(headerDelegate.toString(v)); } else { sb.append(v.toString()); } } return sb.toString(); } protected char getSeparatorChar() { if (separator.charAt(0) == '[') { return separator.charAt(1); } else { return separator.charAt(0); } } }