/* * Copyright (c) 2012 - 2016 Jadler contributors * This program is made available under the terms of the MIT License. */ package net.jadler.matchers; import java.util.List; import net.jadler.Request; import org.apache.commons.lang.Validate; import org.hamcrest.Factory; import org.hamcrest.Matcher; /** * A {@link RequestMatcher} used for matching a request parameter. */ public class ParameterRequestMatcher extends RequestMatcher<List<String>> { private final String paramName; private final String desc; /** * Protected constructor useful only when subtyping. For creating instances of this class use * {@link #requestParameter(java.lang.String, org.hamcrest.Matcher)} instead. * @param pred a predicate to be applied on the given request parameter * @param paramName name of a request parameter (case sensitive) */ public ParameterRequestMatcher(final Matcher<? super List<String>> pred, final String paramName) { super(pred); Validate.notEmpty(paramName, "paramName cannot be empty"); this.paramName = paramName; this.desc = "parameter \"" + paramName + "\" is"; } /** * Retrieves a parameter (defined in {@link #ParameterRequestMatcher(org.hamcrest.Matcher, java.lang.String)}) * of the given request. The values are percent-encoded. * @param req request to retrieve the parameter from * @return the request parameter as a list of values or {@code null} if there is no such a parameter in the request */ @Override protected List<String> retrieveValue(final Request req) { return req.getParameters().getValues(this.paramName); } /** * {@inheritDoc} */ @Override protected String provideDescription() { return this.desc; } /** * Factory method to create new instance of this matcher. * @param paramName name of a request parameter * @param pred a predicate to be applied on the request parameter * @return new instance of this matcher */ @Factory public static ParameterRequestMatcher requestParameter(final String paramName, final Matcher<? super List<String>> pred) { return new ParameterRequestMatcher(pred, paramName); } }