package br.com.caelum.restfulie.request;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import br.com.caelum.restfulie.Response;
import br.com.caelum.restfulie.RestClient;
import br.com.caelum.restfulie.feature.RequestFeature;
import br.com.caelum.restfulie.feature.ResponseFeature;
import br.com.caelum.restfulie.http.Request;
public class RequestStack implements RequestFeature {
private final List<ResponseFeature> responses = new ArrayList<ResponseFeature>();
private final List<RequestFeature> requests = new ArrayList<RequestFeature>();
private final RestClient client;
public RequestStack(RestClient client) {
this.client = client;
}
public void with(ResponseFeature feature) {
this.responses.add(feature);
}
public Response process(Request request, String verb, URI uri, Object payload) {
requests.add(this);
return new RequestChain(requests).next(request, verb, uri, payload);
}
public void with(RequestFeature feature) {
this.requests.add(feature);
}
public Response process(RequestChain chain, Request request, String verb,
URI uri, Object payload) {
Response response = client.getProvider().process(request, verb, uri, payload);
return new ResponseChain(responses, client).next(response);
}
}