package cactusServer.resources; import java.util.HashSet; import java.util.Map; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; 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.MediaType; import org.glassfish.jersey.process.internal.RequestScoped; import cactusServer.entities.AddressedEntity; import cactusServer.entities.Angle; import cactusServer.entities.Area; import cactusServer.entities.Area.Allowed; import cactusServer.entities.CameraState; import cactusServer.entities.Character; import cactusServer.entities.CharacterModel; import cactusServer.entities.EmoteState; import cactusServer.entities.IDAddressedEntity; import cactusServer.entities.Instance; import cactusServer.entities.Object.Attribute; import cactusServer.entities.ObjectModel; import cactusServer.entities.Plain; import cactusServer.entities.Player; import cactusServer.entities.StageModel; import cactusServer.entities.URIAddressedEntity; import cactusServer.models.Instances; import framework.model3D.Position3D; import framework.physics.AngularVelocity3D; import framework.physics.Velocity3D; @Path("/instances") @RequestScoped public class InstancesRest { public static final String INSTANCES_URI = "/CactusServer/rest/instances"; public InstancesRest() { } // @Path("/test") // @GET // @Produces(MediaType.TEXT_PLAIN) // public String hoge() { // return "deploy jenkins from tomcat"; // } @Path("/{instanceId}") @GET @Produces(MediaType.APPLICATION_JSON) public Instance getInstance(@PathParam("instanceId") String instanceId) { return Instances.getInstance().getInstance(instanceId); } @Path("/{instanceId}/areas/{areaId}") @GET @Produces(MediaType.APPLICATION_JSON) public Area getArea(@PathParam("instanceId") String instanceId, @PathParam("areaId") String areaId) { Instance instance = Instances.getInstance().getInstance(instanceId); if (instance != null) { return instance.getArea(areaId); } return null; } @Path("/{instanceId}/objects/{objectId}") @GET @Produces(MediaType.APPLICATION_JSON) public Object getObject(@PathParam("instanceId") String instanceId, @PathParam("objectId") String objectId) { Instance instance = Instances.getInstance().getInstance(instanceId); if (instance != null) { return instance.getObject(objectId); } return null; } @Path("/{instanceId}/characters/{characterId}") @GET @Produces(MediaType.APPLICATION_JSON) public Character getCharacter(@PathParam("instanceId") String instanceId, @PathParam("characterId") String characterId) { Instance instance = Instances.getInstance().getInstance(instanceId); if (instance != null) { return instance.getCharacter(characterId); } return null; } @Path("/players/{playerId}") @GET @Produces(MediaType.APPLICATION_JSON) public Player getPlayer(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId) { Instances instances = Instances.getInstance(); if (instances != null) { return instances.getPlayer(playerId); } return null; } @POST @Produces(MediaType.APPLICATION_JSON) public URIAddressedEntity create(@FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") String stageModel) { IDAddressedEntity ae = Instances.getInstance().createInstance(name, state, stageModel); return new URIAddressedEntity((INSTANCES_URI + "/" + ae.getId()), ae.getBody()); } @Path("/{instanceId}/areas") @POST @Produces(MediaType.APPLICATION_JSON) public URIAddressedEntity createArea(@PathParam("instanceId") String instanceId, @FormParam("name") String name, @FormParam("region") Plain[] region, @FormParam("permissions") HashSet<Allowed> permissions) { Instance instance = Instances.getInstance().getInstance(instanceId); IDAddressedEntity ae = instance.createArea(name, region, permissions); return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/areas/" + ae.getId()), ae.getBody()); } @Path("/{instanceId}/objects") @POST @Produces(MediaType.APPLICATION_JSON) public URIAddressedEntity createObject(@PathParam("instanceId") String instanceId, @FormParam("position") Position3D position, @FormParam("velocity") Velocity3D velocity, @FormParam("angularVelocity") AngularVelocity3D angularVelocity, @FormParam("angle") Angle angle, @FormParam("attribute") Attribute attribute, @FormParam("model") String model) { Instance instance = Instances.getInstance().getInstance(instanceId); IDAddressedEntity ae = instance.createObject(position, velocity, angularVelocity, angle, attribute, model); return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/objects/" + ae.getId()), ae.getBody()); } @Path("/{instanceId}/characters") @POST @Produces(MediaType.APPLICATION_JSON) public URIAddressedEntity createCharacter(@PathParam("instanceId") String instanceId, @FormParam("accountURI") String accountURI, @FormParam("name") String name, @FormParam("position") Position3D position, @FormParam("angle") Angle angle, @FormParam("model") String model) { Instance instance = Instances.getInstance().getInstance(instanceId); IDAddressedEntity ae = instance.createCharacter(instanceId, accountURI, name, position, angle, model); return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/characters/" + ae.getId()), ae.getBody()); } @Path("/players") @POST @Produces(MediaType.APPLICATION_JSON) public URIAddressedEntity createPlayer(@PathParam("instanceId") String instanceURI, @FormParam("characterURI") String characterURI, @FormParam("cameraState") CameraState cameraState, @FormParam("animationClassToStart") EmoteState.EmoteType animationClassToStart) { Instances instances = Instances.getInstance(); IDAddressedEntity ae = instances.createPlayer(instanceURI, characterURI, cameraState, animationClassToStart); return new URIAddressedEntity((INSTANCES_URI + "/" + instanceURI + "/players/" + ae.getId()), ae.getBody()); } @Path("/players/{playerId}") @PUT @Produces(MediaType.APPLICATION_JSON) public Player updatePlayer(@PathParam("instanceId") String instanceId, @FormParam("playerId") String playerId, @FormParam("characterURI") String characterURI, @FormParam("position") Position3D position, @FormParam("angle") Angle angle, @FormParam("cameraState") CameraState cameraState, @FormParam("animationClassToStart") EmoteState.EmoteType animationClassToStart) { return Instances.getInstance().updatePlayer(playerId, characterURI, position, angle, cameraState, animationClassToStart); } // @Path("/characters/{characterId}") // @PUT // @Produces(MediaType.APPLICATION_JSON) // public Character updateCharacter(@FormParam("characterId") String characterId, @FormParam("position") Position3D position, // @FormParam("angle") Angle angle, @FormParam("model") String model) { // Character response = Instance.updateCharacter(characterId, position, angle, model); // response.setStatus(HttpServletResponse.SC_OK); // } // @DELETE // @Path("/destroyInstance") // @Produces(MediaType.APPLICATION_JSON) // public Instance destroy(@QueryParam("instanceId") String instanceId) { // return Instances.getInstance().destroyInstance(instanceId); // } // // @Path("/{instanceId}") // @PUT // public Instance putInstance(@PathParam("InstanceId") String instanceId, @FormParam("areaId") String areaId, // @FormParam("objectId") String objectId, @FormParam("characterId") String characterId) { // // } }