package com.griddynamics.jagger.engine.e1.collector;
import com.griddynamics.jagger.coordinator.NodeContext;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import java.util.stream.IntStream;
import static com.google.common.collect.Sets.newHashSet;
import static java.util.stream.Collectors.toSet;
/**
* Provides default response status validator {@link JHttpResponseStatusValidator}.
*
* @ingroup Main_Validators_group
* @ingroup Main_Http_group */
public class JHttpResponseStatusValidatorProvider implements ResponseValidatorProvider {
private Set<Integer> validStatusCodes = newHashSet();
private Pattern validStatusCodesRegexp;
private JHttpResponseStatusValidatorProvider(Collection<Integer> validStatusCodes) {
this.validStatusCodes.addAll(validStatusCodes);
}
private JHttpResponseStatusValidatorProvider(Pattern validStatusCodesRegexp) {
this.validStatusCodesRegexp = validStatusCodesRegexp;
}
@Override
public ResponseValidator<?, ?, ?> provide(String sessionId, String taskId, NodeContext kernelContext) {
JHttpResponseStatusValidator jHttpResponseStatusValidator = new JHttpResponseStatusValidator(taskId, sessionId, kernelContext);
jHttpResponseStatusValidator.setValidStatusCodes(validStatusCodes);
jHttpResponseStatusValidator.setValidStatusCodesRegexp(validStatusCodesRegexp);
return jHttpResponseStatusValidator;
}
/**
* @param codes valid codes
* @return new JHttpResponseStatusValidatorProvider with valid codes provided in codes
* Usage: <pre>
* {@code
* JHttpResponseStatusValidatorProvider validator = JHttpResponseStatusValidatorProvider.of(200, 201, 202);
* }
* </pre>
*/
public static JHttpResponseStatusValidatorProvider of(Integer... codes) {
return new JHttpResponseStatusValidatorProvider(Arrays.asList(codes));
}
/**
* @param codes valid codes
* @return new JHttpResponseStatusValidatorProvider with valid codes provided in codes
* Usage: <pre>
* {@code
* JHttpResponseStatusValidatorProvider validator = JHttpResponseStatusValidatorProvider.of(newArrayList(200, 201, 202));
* }
* </pre>
*/
public static JHttpResponseStatusValidatorProvider of(List<Integer> codes) {
return new JHttpResponseStatusValidatorProvider(codes);
}
/**
* @param range IntStream of valid codes
* @return new JHttpResponseStatusValidatorProvider with valid codes provided in range
* Usage: <pre>
* {@code
* JHttpResponseStatusValidatorProvider validator = JHttpResponseStatusValidatorProvider.of(IntStream.range(200, 399)); // from 200 inclusive to 399 exclusive
* // or
* JHttpResponseStatusValidatorProvider validator = JHttpResponseStatusValidatorProvider.of(IntStream.rangeClosed(200, 399)); // from 200 inclusive to 399 inclusive
* }
* </pre>
*/
public static JHttpResponseStatusValidatorProvider of(IntStream range) {
return new JHttpResponseStatusValidatorProvider(range.boxed().collect(toSet()));
}
/**
* @param stringRegExp RegExp defining valid codes
* @return new JHttpResponseStatusValidatorProvider with valid codes regExp provided in stringRegExp
* @throws PatternSyntaxException If the expression's syntax is invalid
*
* Usage: <pre>
* {@code
* JHttpResponseStatusValidatorProvider validator = JHttpResponseStatusValidatorProvider.of("(200|201|202)");
* }
* </pre>
*/
public static JHttpResponseStatusValidatorProvider of(String stringRegExp) {
return new JHttpResponseStatusValidatorProvider(Pattern.compile(stringRegExp));
}
}