package org.mockserver.model; import com.google.common.base.Charsets; import com.google.common.net.MediaType; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Arrays; import java.util.List; /** * @author jamesdbloom */ public class ParameterBody extends Body<List<Parameter>> { public static final MediaType DEFAULT_CONTENT_TYPE = MediaType.FORM_DATA; private final List<Parameter> parameters; public ParameterBody(Parameter... parameters) { this(Arrays.asList(parameters)); } public ParameterBody(List<Parameter> parameters) { super(Type.PARAMETERS, DEFAULT_CONTENT_TYPE); this.parameters = parameters; } public static ParameterBody params(Parameter... parameters) { return new ParameterBody(parameters); } public static ParameterBody params(List<Parameter> parameters) { return new ParameterBody(parameters); } public List<Parameter> getValue() { return parameters; } @Override public String toString() { StringBuilder body = new StringBuilder(); List<Parameter> bodyParameters = parameters; for (int i = 0; i < bodyParameters.size(); i++) { Parameter parameter = bodyParameters.get(i); if (parameter.getValues().isEmpty()) { body.append(parameter.getName().getValue()); body.append('='); } else { List<NottableString> values = parameter.getValues(); for (int j = 0; j < values.size(); j++) { String value = values.get(j).getValue(); body.append(parameter.getName().getValue()); body.append('='); try { body.append(URLEncoder.encode(value, Charsets.UTF_8.name())); } catch (UnsupportedEncodingException uee) { throw new RuntimeException("UnsupportedEncodingException while encoding body parameters for " + parameters, uee); } if (j < (values.size() - 1)) { body.append('&'); } } } if (i < (bodyParameters.size() - 1)) { body.append('&'); } } return body.toString(); } }