package com.github.dreamhead.moco.rest; import com.github.dreamhead.moco.HttpMethod; import com.github.dreamhead.moco.HttpRequest; import com.github.dreamhead.moco.RequestMatcher; import com.github.dreamhead.moco.ResponseHandler; import com.github.dreamhead.moco.RestIdMatcher; import com.github.dreamhead.moco.RestSetting; import com.google.common.base.Optional; import static com.github.dreamhead.moco.Moco.and; import static com.google.common.base.Optional.absent; import static com.google.common.base.Optional.of; public abstract class SimpleRestSetting implements RestSetting { private final HttpMethod method; private final Optional<RequestMatcher> matcher; private final ResponseHandler handler; protected abstract RequestMatcher getBaseRequestMatcher(final RestIdMatcher resourceName); public SimpleRestSetting(final HttpMethod method, final Optional<RequestMatcher> matcher, final ResponseHandler handler) { this.method = method; this.matcher = matcher; this.handler = handler; } public ResponseHandler getHandler() { return handler; } public RequestMatcher getRequestMatcher(final RestIdMatcher resourceName) { RequestMatcher rootMatcher = getBaseRequestMatcher(resourceName); if (this.matcher.isPresent()) { return and(rootMatcher, this.matcher.get()); } return rootMatcher; } public boolean isFor(final HttpMethod method) { return this.method == method; } @Override public boolean isSimple() { return true; } @Override public Optional<ResponseHandler> getMatched(final RestIdMatcher resourceName, final HttpRequest httpRequest) { if (getRequestMatcher(resourceName).match(httpRequest)) { return of(handler); } return absent(); } }