package org.jboss.resteasy.test.core.basic.resource;
import org.jboss.resteasy.core.MessageBodyParameterInjector;
import org.jboss.resteasy.spi.BadRequestException;
import org.jboss.resteasy.spi.InternalDispatcher;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.jboss.resteasy.test.core.basic.InternalDispatcherTest;
import org.junit.Assert;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.util.Stack;
@Path("/")
public class InternalDispatcherForwardingResource {
public Stack<String> uriStack = new Stack<String>();
String basic = "basic";
@Context
UriInfo uriInfo;
@GET
@Produces("text/plain")
@Path("/basic")
public String getBasic() {
uriStack.push(uriInfo.getAbsolutePath().toString());
return basic;
}
@GET
@Produces("text/plain")
@Path("/forward/basic")
public String forwardBasic(@Context InternalDispatcher dispatcher) {
uriStack.push(uriInfo.getAbsolutePath().toString());
return (String) dispatcher.getEntity("/basic");
}
@PUT
@POST
@Consumes("text/plain")
@Path("/basic")
public void putBasic(String basic) {
uriStack.push(uriInfo.getAbsolutePath().toString());
this.basic = basic;
}
@DELETE
@Path("/basic")
public void deleteBasic() {
uriStack.push(uriInfo.getAbsolutePath().toString());
this.basic = "basic";
}
@PUT
@Consumes("text/plain")
@Path("/forward/basic")
public void putForwardBasic(String basic,
@Context InternalDispatcher dispatcher) {
uriStack.push(uriInfo.getAbsolutePath().toString());
dispatcher.putEntity("/basic", basic);
}
@POST
@Consumes("text/plain")
@Path("/forward/basic")
public void postForwardBasic(String basic,
@Context InternalDispatcher dispatcher) {
uriStack.push(uriInfo.getAbsolutePath().toString());
dispatcher.postEntity("/basic", basic);
}
@DELETE
@Path("/forward/basic")
public void deleteForwardBasic(@Context InternalDispatcher dispatcher) {
uriStack.push(uriInfo.getAbsolutePath().toString());
dispatcher.delete("/basic");
}
@GET
@Produces("text/plain")
@Path("/object/{id}")
public Response getObject(@PathParam("id") Integer id) {
uriStack.push(uriInfo.getAbsolutePath().toString());
if (id == 0) {
return Response.noContent().build();
} else {
return Response.ok("object" + id).build();
}
}
@GET
@Path("/forward/object/{id}")
public Response forwardObject(@PathParam("id") Integer id,
@Context InternalDispatcher dispatcher) {
uriStack.push(uriInfo.getAbsolutePath().toString());
return dispatcher.getResponse("/object/" + id);
}
@GET
@Path("/infinite-forward")
@Produces("text/plain")
public int infinitFoward(@Context InternalDispatcher dispatcher,
@QueryParam("count") @DefaultValue("0") int count) {
uriStack.push(uriInfo.getAbsolutePath().toString());
try {
dispatcher.getEntity("/infinite-forward?count=" + (count + 1));
// we'll never reach 20, since the max count of times through the
// system is 20, and first time through is 0
Assert.assertNotSame(20, count);
} catch (BadRequestException e) {
} finally {
Assert.assertEquals(count, MessageBodyParameterInjector.bodyCount());
Assert.assertEquals(count + 1, ResteasyProviderFactory.getContextDataLevelCount());
}
return ResteasyProviderFactory.getContextDataLevelCount();
}
@GET
@Path(InternalDispatcherTest.PATH + "/basic")
@Produces("text/plain")
public String getComplexBasic() {
uriStack.push(uriInfo.getAbsolutePath().toString());
return InternalDispatcherTest.PATH + basic;
}
@GET
@Produces("text/plain")
@Path(InternalDispatcherTest.PATH + "/forward/basic")
public String complexForwardBasic(@Context InternalDispatcher dispatcher) {
uriStack.push(uriInfo.getAbsolutePath().toString());
return (String) dispatcher.getEntity(InternalDispatcherTest.PATH + "/basic");
}
}