package org.jboss.narayana.rest.integration.test.common; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.codehaus.jettison.json.JSONArray; import org.jboss.narayana.rest.integration.ParticipantInformation; import org.jboss.narayana.rest.integration.ParticipantsContainer; import org.jboss.narayana.rest.integration.api.Aborted; import org.jboss.narayana.rest.integration.api.ParticipantsManagerFactory; import org.jboss.narayana.rest.integration.api.Prepared; import org.jboss.narayana.rest.integration.api.ReadOnly; import org.jboss.narayana.rest.integration.api.Vote; /** * * @author <a href="mailto:gytis@redhat.com">Gytis Trikleris</a> * */ @Path("/" + TransactionalService.PATH_SEGMENT) public final class TransactionalService { public static final String APPLICATION_ID = "org.jboss.narayana.rest.integration.test.common.TransactionalService"; public static final String PATH_SEGMENT = "transactional-service"; @GET public Response getParticipantInvocations(@QueryParam("participantId") final String participantId) { ParticipantInformation information = ParticipantsContainer.getInstance().getParticipantInformation(participantId); if (information == null) { return Response.status(404).build(); } final JSONArray jsonArray = new JSONArray(((LoggingParticipant)information.getParticipant()).getInvocations()); return Response.ok().entity(jsonArray.toString()).build(); } @POST public String enlistParticipant(@QueryParam("participantEnlistmentUrl") final String participantEnlistmentUrl, @QueryParam("vote") final String stringVote, @Context final UriInfo uriInfo) { final Vote vote = stringVoteToVote(stringVote); final LoggingParticipant participant = new LoggingParticipant(vote); return ParticipantsManagerFactory.getInstance().enlist(APPLICATION_ID, participantEnlistmentUrl, participant).toString(); } @PUT public void registerDeserializer() { ParticipantsManagerFactory.getInstance().registerDeserializer(APPLICATION_ID, new TestParticipantDeserializer()); } private Vote stringVoteToVote(final String stringVote) { if (Prepared.class.getName().equals(stringVote)) { return new Prepared(); } else if (ReadOnly.class.getName().equals(stringVote)) { return new ReadOnly(); } return new Aborted(); } }