package eu.codearte.resteeth.core; import eu.codearte.resteeth.handlers.RestInvocationHandler; import java.lang.reflect.Method; import java.util.List; import org.springframework.http.HttpHeaders; /** * @author Tomasz Nurkiewicz */ public class RestInvocation { private final MethodMetadata metadata; private final List<RestInvocationHandler> handlers; private final Object[] arguments; private final Method method; private final HttpHeaders dynamicHeaders; public RestInvocation( Method method, Object[] arguments, MethodMetadata metadata, List<RestInvocationHandler> handlers, HttpHeaders dynamicHeaders) { this.method = method; this.arguments = arguments; this.metadata = metadata; this.handlers = handlers; this.dynamicHeaders = dynamicHeaders; } public Method getMethod() { return method; } public Object[] getArguments() { return arguments; } public MethodMetadata getMetadata() { return metadata; } public HttpHeaders getDynamicHeaders() { return dynamicHeaders; } public Object proceed() { return currentHandler().proceed(nextHandlers()); } private RestInvocationHandler currentHandler() { return handlers.get(0); } private RestInvocation nextHandlers() { final List<RestInvocationHandler> withoutCurrent = handlers.subList(1, handlers.size()); return new RestInvocation(method, arguments, metadata, withoutCurrent, dynamicHeaders); } }