package org.jboss.resteasy.test.cdi.basic.resource; import org.jboss.resteasy.test.cdi.util.Constants; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Logger; @Path("/") @RequestScoped public class DecoratorsResource implements DecoratorsResourceIntf { private static Map<Integer, EJBBook> collection = new HashMap<Integer, EJBBook>(); private static AtomicInteger counter = new AtomicInteger(); @Inject private Logger log; @Override @POST @Path("create") @Consumes(Constants.MEDIA_TYPE_TEST_XML) @Produces(MediaType.TEXT_PLAIN) @DecoratorsFilterBinding @DecoratorsResourceBinding public Response createBook(EJBBook book) { log.info("entering DecoratorsResource.createBook()"); DecoratorsVisitList.add(DecoratorsVisitList.RESOURCE_ENTER); int id = counter.getAndIncrement(); book.setId(id); collection.put(id, book); log.info("stored: " + id + "->" + book); DecoratorsVisitList.add(DecoratorsVisitList.RESOURCE_LEAVE); log.info("leaving DecoratorsResource.createBook()"); return Response.ok(id).build(); } @Override @GET @Path("book/{id:[0-9][0-9]*}") @Produces(Constants.MEDIA_TYPE_TEST_XML) @DecoratorsFilterBinding @DecoratorsResourceBinding public EJBBook lookupBookById(@PathParam("id") int id) { log.info("entering DecoratorsResource.lookupBookById(" + id + ")"); DecoratorsVisitList.add(DecoratorsVisitList.RESOURCE_ENTER); log.info("books: " + collection); EJBBook book = collection.get(id); if (book == null) { throw new WebApplicationException(Response.Status.NOT_FOUND); } DecoratorsVisitList.add(DecoratorsVisitList.RESOURCE_LEAVE); log.info("leaving DecoratorsResource.lookupBookById(" + id + ")"); return book; } @Override @POST @Path("test") @Produces(MediaType.TEXT_PLAIN) public Response test() { log.info("entering DecoratorsResource.test()"); ArrayList<String> expectedList = new ArrayList<String>(); // Call to createBook() expectedList.add(DecoratorsVisitList.REQUEST_FILTER_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.REQUEST_FILTER_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.READER_INTERCEPTOR_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.READER_INTERCEPTOR_ENTER); expectedList.add(DecoratorsVisitList.READER_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.READER_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.READER_INTERCEPTOR_LEAVE); expectedList.add(DecoratorsVisitList.READER_INTERCEPTOR_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.RESOURCE_INTERCEPTOR_ENTER); expectedList.add(DecoratorsVisitList.RESOURCE_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.RESOURCE_ENTER); expectedList.add(DecoratorsVisitList.RESOURCE_LEAVE); expectedList.add(DecoratorsVisitList.RESOURCE_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.RESOURCE_INTERCEPTOR_LEAVE); expectedList.add(DecoratorsVisitList.RESPONSE_FILTER_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.RESPONSE_FILTER_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_ENTER); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_LEAVE); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_DECORATOR_LEAVE); // Call to lookupBookById() expectedList.add(DecoratorsVisitList.REQUEST_FILTER_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.REQUEST_FILTER_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.RESOURCE_INTERCEPTOR_ENTER); expectedList.add(DecoratorsVisitList.RESOURCE_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.RESOURCE_ENTER); expectedList.add(DecoratorsVisitList.RESOURCE_LEAVE); expectedList.add(DecoratorsVisitList.RESOURCE_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.RESOURCE_INTERCEPTOR_LEAVE); expectedList.add(DecoratorsVisitList.RESPONSE_FILTER_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.RESPONSE_FILTER_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_ENTER); expectedList.add(DecoratorsVisitList.WRITER_DECORATOR_ENTER); expectedList.add(DecoratorsVisitList.WRITER_DECORATOR_LEAVE); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_LEAVE); expectedList.add(DecoratorsVisitList.WRITER_INTERCEPTOR_DECORATOR_LEAVE); ArrayList<String> visitList = DecoratorsVisitList.getList(); boolean status = expectedList.size() == visitList.size(); if (!status) { log.info("expectedList.size() [" + expectedList.size() + "] != visitList.size() [" + visitList.size() + "]"); } else { for (int i = 0; i < expectedList.size(); i++) { if (!expectedList.get(i).equals(visitList.get(i))) { status = false; log.info("visitList.get(" + i + ") incorrect: should be: " + expectedList.get(i) + ", is: " + visitList.get(i)); break; } } } if (!status) { log.info("\rexpectedList: "); for (int i = 0; i < expectedList.size(); i++) { log.info(i + ": " + expectedList.get(i).toString()); } log.info("\rvisitList:"); for (int i = 0; i < visitList.size(); i++) { log.info(i + ": " + visitList.get(i).toString()); } } log.info("leaving DecoratorsResource.test()"); return status ? Response.ok().build() : Response.serverError().build(); } }