package org.jboss.seam.example.restbay;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import javax.persistence.EntityManager;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.List;
/**
* @author Christian Bauer
*/
@Name("auctionService")
@Path("/auction")
public class AuctionService
{
@Context
private UriInfo uriInfo;
private HttpHeaders headers;
@Context
public void setHeaders(HttpHeaders headers) {
this.headers = headers;
}
@In
EntityManager entityManager;
@GET
@Produces("text/plain")
public String getAuctions()
{
URI builtURI = uriInfo.getAbsolutePathBuilder().path("3").build();
// We can't test for /<context> prefix here, as we don't have a context in unit tests but we
// have it when the application is deployed... so use endsWith()
assert builtURI.getPath().endsWith("/seam/resource/restv1/auction/3");
// This is supposed to test field and setter injection for @Context
assert uriInfo.getPath().equals("/auction");
assert headers.getAcceptableMediaTypes().size() == 1;
assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
List<Object[]> auctions =
entityManager.createQuery("select a.auctionId, a.title from Auction a order by a.auctionId asc").getResultList();
StringBuilder s = new StringBuilder();
for (Object[] auction : auctions)
{
s.append(auction[0]).append(",").append(auction[1]).append("\n");
}
return s.toString();
}
@GET
@Path("/{auctionId}")
@Produces("text/plain")
public String getAuction(@Context HttpHeaders httpHeaders, @PathParam("auctionId") int auctionId)
{
assert httpHeaders.getAcceptableMediaTypes().size() == 1;
assert httpHeaders.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
return entityManager.find(Auction.class, auctionId).getTitle();
}
}