private Parameters extractParameters(FilterableRequestSpecification requestSpec) { Parameters parameters = new Parameters(); for (Entry<String, ?> entry : requestSpec.getQueryParams().entrySet()) { if (entry.getValue() instanceof Collection) { Collection<?> queryParams = ((Collection<?>) entry.getValue()); for (Object queryParam : queryParams) { parameters.add(entry.getKey(), queryParam.toString()); } } else { parameters.add(entry.getKey(), entry.getValue().toString()); } } for (Entry<String, ?> entry : requestSpec.getRequestParams().entrySet()) { parameters.add(entry.getKey(), entry.getValue().toString()); } for (Entry<String, ?> entry : requestSpec.getFormParams().entrySet()) { parameters.add(entry.getKey(), entry.getValue().toString()); } return parameters; }
@Test public void queryStringForMutipleParameters() { this.parameters.add("a", "alpha"); this.parameters.add("b", "bravo"); assertThat(this.parameters.toQueryString()).isEqualTo("a=alpha&b=bravo"); }
private void addIfUnique(Map.Entry<String, List<String>> parameter, Parameters queryStringParameters, Parameters uniqueParameters) { if (!queryStringParameters.containsKey(parameter.getKey())) { uniqueParameters.put(parameter.getKey(), parameter.getValue()); } else { List<String> candidates = parameter.getValue(); List<String> existing = queryStringParameters.get(parameter.getKey()); for (String candidate : candidates) { if (!existing.contains(candidate)) { uniqueParameters.add(parameter.getKey(), candidate); } } } }
/** * Returns a new {@code Parameters} containing only the parameters that do no appear * in the query string of the given {@code uri}. * @param uri the uri * @return the unique parameters */ public Parameters getUniqueParameters(URI uri) { Parameters queryStringParameters = new QueryStringParser().parse(uri); Parameters uniqueParameters = new Parameters(); for (Map.Entry<String, List<String>> parameter : entrySet()) { addIfUnique(parameter, queryStringParameters, uniqueParameters); } return uniqueParameters; }
private void writeContentUsingParameters(OperationRequest request, List<String> lines) { Parameters uniqueParameters = request.getParameters() .getUniqueParameters(request.getUri()); String queryString = uniqueParameters.toQueryString(); if (StringUtils.hasText(queryString)) { lines.add(String.format("-d '%s'", queryString)); } }
private Parameters parse(String query) { Parameters parameters = new Parameters(); try (Scanner scanner = new Scanner(query)) { scanner.useDelimiter("&"); while (scanner.hasNext()) { processParameter(scanner.next(), parameters); } } return parameters; }
@Test public void removeParameterValueWithSingleValueRemovesEntryEntirely() { Parameters parameters = new Parameters(); parameters.add("a", "apple"); assertThat(this.preprocessor.remove("a", "apple") .preprocess(createRequest(parameters)).getParameters().size()) .isEqualTo(0); }
@Test public void removeParameterValueForNonExistentParameter() { Parameters parameters = new Parameters(); assertThat(this.preprocessor.remove("a", "apple") .preprocess(createRequest(parameters)).getParameters().size()) .isEqualTo(0); }
private String getPath(OperationRequest request) { String path = request.getUri().getRawPath(); String queryString = request.getUri().getRawQuery(); Parameters uniqueParameters = request.getParameters() .getUniqueParameters(request.getUri()); if (!uniqueParameters.isEmpty() && includeParametersInUri(request)) { if (StringUtils.hasText(queryString)) { queryString = queryString + "&" + uniqueParameters.toQueryString(); } else { queryString = uniqueParameters.toQueryString(); } } if (StringUtils.hasText(queryString)) { path = path + "?" + queryString; } return path; }
private void processParameter(String parameter, Parameters parameters) { String[] components = parameter.split("="); if (components.length > 0 && components.length < 3) { if (components.length == 2) { String name = components[0]; String value = components[1]; parameters.add(decode(name), decode(value)); } else { List<String> values = parameters.get(components[0]); if (values == null) { parameters.put(components[0], new LinkedList<String>()); } } } else { throw new IllegalArgumentException( "The parameter '" + parameter + "' is malformed"); } }
@Override public OperationRequest preprocess(OperationRequest request) { Parameters parameters = new Parameters(); parameters.putAll(request.getParameters()); for (Modification modification : this.modifications) { modification.apply(parameters); } return this.requestFactory.createFrom(request, parameters); }
private Parameters extractParameters(ExchangeResult result) { Parameters parameters = new Parameters(); parameters.addAll(this.queryStringParser.parse(result.getUrl())); if (MediaType.APPLICATION_FORM_URLENCODED .isCompatibleWith(result.getRequestHeaders().getContentType())) { parameters.addAll(this.formDataReader .readMono(FORM_DATA_TYPE, new ExchangeResultReactiveHttpInputMessage(result), null) .block()); } return parameters; }
private String getRequestBody(OperationRequest request) { StringWriter httpRequest = new StringWriter(); PrintWriter writer = new PrintWriter(httpRequest); String content = request.getContentAsString(); if (StringUtils.hasText(content)) { writer.printf("%n%s", content); } else if (isPutOrPost(request)) { if (request.getParts().isEmpty()) { String queryString = request.getParameters().toQueryString(); if (StringUtils.hasText(queryString)) { writer.println(); writer.print(queryString); } } else { writeParts(request, writer); } } return httpRequest.toString(); }
@Override public void apply(Parameters parameters) { parameters.add(this.name, this.value); }
@Test public void noParameters() { Parameters parameters = this.queryStringParser .parse(URI.create("http://localhost")); assertThat(parameters.size()).isEqualTo(0); }
@Override public void apply(Parameters parameters) { parameters.put(this.name, this.values); }
/** * Parses the query string of the given {@code uri} and returns the resulting * {@link Parameters}. * @param uri the uri to parse * @return the parameters parsed from the query string */ public Parameters parse(URI uri) { String query = uri.getRawQuery(); if (query != null) { return parse(query); } return new Parameters(); }
@Test public void removeNonExistentParameter() { Parameters parameters = new Parameters(); assertThat(this.preprocessor.remove("a").preprocess(createRequest(parameters)) .getParameters().size()).isEqualTo(0); }
private String getUrl(OperationRequest request) { Parameters uniqueParameters = request.getParameters() .getUniqueParameters(request.getUri()); if (!uniqueParameters.isEmpty() && includeParametersInUri(request)) { return String.format("'%s%s%s'", request.getUri(), StringUtils.hasText(request.getUri().getRawQuery()) ? "&" : "?", uniqueParameters.toQueryString()); } return String.format("'%s'", request.getUri()); }