package org.jboss.resteasy.test.response.resource; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.POST; import javax.ws.rs.DELETE; import javax.ws.rs.core.Context; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.Variant; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.EntityTag; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; @Path("/") public class VariantLanguageResource { @GET @Produces("text/plain") public Response doGet(@Context Request req) { List<Variant> vs = Variant.VariantListBuilder.newInstance().languages(new Locale("zh")).languages( new Locale("fr")).languages(new Locale("en")).add().build(); Variant v = req.selectVariant(vs); if (v == null) { return Response.notAcceptable(vs).build(); } else { return Response.ok(v.getLanguage(), v).build(); } } @Path("/brazil") @GET @Produces("text/plain") public Response doGetBrazil(@Context Request req) { List<Variant> vs = Variant.VariantListBuilder.newInstance().languages(new Locale("pt", "BR")).add().build(); Variant v = req.selectVariant(vs); if (v == null) { return Response.notAcceptable(vs).build(); } else { return Response.ok(v.getLanguage(), v).build(); } } @GET @Path("/SelectVariantTestResponse") public Response selectVariantTestResponse(@Context Request req) { List<Variant> list = Variant.encodings("CP1250", "UTF-8") .languages(Locale.ENGLISH) .mediaTypes(MediaType.APPLICATION_JSON_TYPE).add().build(); Variant selectedVariant = req.selectVariant(list); if (null == selectedVariant) { return Response.notAcceptable(list).build(); } return Response.ok("entity").build(); } @GET @Path("/SelectVariantTestGet") public Response selectVariantTestGet(@Context Request req) { List<Variant> vs = null; try { req.selectVariant(vs); return Response.ok("Test FAILED - no exception thrown").build(); } catch (IllegalArgumentException ile) { return Response.ok("PASSED") .build(); } catch (Throwable th) { //logger.error("This not the expected exception", th); return Response.ok( "Test FAILED - wrong type exception thrown" + th.getMessage()).build(); } } @PUT @Path("/SelectVariantTestPut") public Response selectVariantTestPut(@Context Request req) { return selectVariantTestGet(req); } @POST @Path("/SelectVariantTestPost") public Response selectVariantTestPost(@Context Request req) { return selectVariantTestGet(req); } @DELETE @Path("/SelectVariantTestDelete") public Response selectVariantTestDelete(@Context Request req) { return selectVariantTestGet(req); } @GET @Path("/preconditionsSimpleGet") public Response evaluatePreconditionsEntityTagGetSimpleTest( @Context Request req) { boolean ok = evaluatePreconditionsEntityTag(req, "AAA"); if (!ok) { return Response.status(Response.Status.GONE).build(); } ok &= evaluatePreconditionsNowEntityTagNull(req); if (!ok) { return Response.status(Response.Status.NOT_ACCEPTABLE).build(); } ok &= evaluatePreconditionsEntityTagNull(req); return createResponse(ok); } private boolean evaluatePreconditionsEntityTagNull(Request req) { try { req.evaluatePreconditions((EntityTag) null); return false; } catch (IllegalArgumentException iae) { return true; } } private boolean evaluatePreconditionsNowEntityTagNull(Request req) { try { Date now = Calendar.getInstance().getTime(); req.evaluatePreconditions(now, (EntityTag) null); return false; } catch (IllegalArgumentException iae) { return true; } } private EntityTag createTag(String tag) { String xtag = new StringBuilder().append("\"").append(tag).append("\"") .toString(); return EntityTag.valueOf(xtag); } private boolean evaluatePreconditionsEntityTag(Request req, String tag) { Response.ResponseBuilder rb = req.evaluatePreconditions(createTag(tag)); return rb == null; } private Response createResponse(boolean ok) { Response.Status status = ok ? Response.Status.OK : Response.Status.PRECONDITION_FAILED; return Response.status(status).build(); } }