/*
* Copyright (C) 2014 Stefan Niederhauser (nidin@gmx.ch)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package guru.nidi.ramltester.jaxrs;
import guru.nidi.ramltester.core.DummyReportAggragator;
import guru.nidi.ramltester.core.RamlChecker;
import guru.nidi.ramltester.core.RamlReport;
import guru.nidi.ramltester.core.ReportAggregator;
import guru.nidi.ramltester.model.RamlRequest;
import guru.nidi.ramltester.model.RamlResponse;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Configuration;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
import java.util.Map;
/**
*
*/
public class CheckingWebTarget implements WebTarget {
private final RamlChecker checker;
private final WebTarget target;
private RamlReport report;
private ReportAggregator aggregator = new DummyReportAggragator();
public CheckingWebTarget(RamlChecker checker, WebTarget target) {
this.checker = checker;
this.target = target;
if (target.getConfiguration().getProperty("checked") != null) {
throw new IllegalStateException("This WebTarget is already checking");
}
target.property("checked", true);
target.register(new CheckingClientFilter(this));
}
void check(RamlRequest request, RamlResponse response) {
report = checker.check(request, response);
aggregator.addReport(report);
}
public RamlReport getLastReport() {
return report;
}
public CheckingWebTarget aggregating(ReportAggregator aggregator) {
this.aggregator = aggregator;
return this;
}
@Override
public URI getUri() {
return target.getUri();
}
@Override
public UriBuilder getUriBuilder() {
return target.getUriBuilder();
}
@Override
public WebTarget path(String path) {
return target.path(path);
}
@Override
public WebTarget resolveTemplate(String name, Object value) {
return target.resolveTemplate(name, value);
}
@Override
public WebTarget resolveTemplate(String name, Object value, boolean encodeSlashInPath) {
return target.resolveTemplate(name, value, encodeSlashInPath);
}
@Override
public WebTarget resolveTemplateFromEncoded(String name, Object value) {
return target.resolveTemplateFromEncoded(name, value);
}
@Override
public WebTarget resolveTemplates(Map<String, Object> templateValues) {
return target.resolveTemplates(templateValues);
}
@Override
public WebTarget resolveTemplates(Map<String, Object> templateValues, boolean encodeSlashInPath) {
return target.resolveTemplates(templateValues, encodeSlashInPath);
}
@Override
public WebTarget resolveTemplatesFromEncoded(Map<String, Object> templateValues) {
return target.resolveTemplatesFromEncoded(templateValues);
}
@Override
public WebTarget matrixParam(String name, Object... values) {
return target.matrixParam(name, values);
}
@Override
public WebTarget queryParam(String name, Object... values) {
return target.queryParam(name, values);
}
@Override
public Invocation.Builder request() {
return target.request();
}
@Override
public Invocation.Builder request(String... acceptedResponseTypes) {
return target.request(acceptedResponseTypes);
}
@Override
public Invocation.Builder request(MediaType... acceptedResponseTypes) {
return target.request(acceptedResponseTypes);
}
@Override
public Configuration getConfiguration() {
return target.getConfiguration();
}
@Override
public WebTarget property(String name, Object value) {
return target.property(name, value);
}
@Override
public WebTarget register(Class<?> componentClass) {
return target.register(componentClass);
}
@Override
public WebTarget register(Class<?> componentClass, int priority) {
return target.register(componentClass, priority);
}
@Override
public WebTarget register(Class<?> componentClass, Class<?>... contracts) {
return target.register(componentClass, contracts);
}
@Override
public WebTarget register(Class<?> componentClass, Map<Class<?>, Integer> contracts) {
return target.register(componentClass, contracts);
}
@Override
public WebTarget register(Object component) {
return target.register(component);
}
@Override
public WebTarget register(Object component, int priority) {
return target.register(component, priority);
}
@Override
public WebTarget register(Object component, Class<?>... contracts) {
return target.register(component, contracts);
}
@Override
public WebTarget register(Object component, Map<Class<?>, Integer> contracts) {
return target.register(component, contracts);
}
}