package restx.endpoint; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.Lists; import restx.RestxRequest; import restx.RestxRequestMatch; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Created by fcamblor on 06/02/15. */ public enum EndpointParameterKind { QUERY { @Override public Optional<String> extractQueryParamStringedValueFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match) { return request.getQueryParam(parameter.getName()); } @Override public List<String> extractQueryParamStringedValuesFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match) { return request.getQueryParams(parameter.getName()); } }, PATH { @Override public Optional<String> extractQueryParamStringedValueFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match) { return Optional.of(match.getPathParam(parameter.getName())); } @Override public List<String> extractQueryParamStringedValuesFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match) { return extractQueryParamStringedValueFor(parameter, request, match).transform(new Function<String, List<String>>() { @Override public List<String> apply(String pathParam) { return Lists.newArrayList(pathParam); } }).or(Collections.<String>emptyList()); } }; public abstract Optional<String> extractQueryParamStringedValueFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match); public abstract List<String> extractQueryParamStringedValuesFor(EndpointParamDef parameter, RestxRequest request, RestxRequestMatch match); }