Newer
Older
CactusServer / src / main / java / cactusServer / resources / BulletsRest.java
package cactusServer.resources;

import java.util.HashMap;

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.WebApplicationException;
import javax.ws.rs.core.MediaType;

import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D;

import cactusServer.entities.Bullet;
import cactusServer.entities.Instance;
import cactusServer.models.Instances;
import net.arnx.jsonic.JSON;

@Path("/instances/{instanceId}/bullets")
public class BulletsRest {
	
	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String getBullets(@PathParam("instanceId") String instanceId) {
		return JSON.encode(Instances.getInstance().getInstance(instanceId).getBullets());
	}

	@Path("/{playerId}")
	@POST
	@Produces(MediaType.TEXT_PLAIN)
	public String createBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId, 
			@FormParam("bulletId") String bulletId, @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle) {
		Instance instance = Instances.getInstance().getInstance(instanceId);
		HashMap<String, Bullet> idMap = instance.createBullet(playerId, bulletId, position, angle);
		HashMap<String, Bullet> uriMap = new HashMap<>();
		for (String id : idMap.keySet()) {
			String uri = (InstancesRest.INSTANCES_URI + "/" + instanceId + "/bullets/") + playerId + "/" + id;
			uriMap.put(uri, idMap.get(id));
		}
		return JSON.encode(uriMap);
	}

	@Path("/{playerId}/{bulletId}")
	@PUT
	@Produces(MediaType.TEXT_PLAIN)
	public String updateBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId,
			@PathParam("bulletId") String bulletId, @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle) {
		Instance instance = Instances.getInstance().getInstance(instanceId);
		HashMap<String, Bullet> map = instance.getBullets().get(playerId);
		if (map != null) {
			Bullet bullet = map.get(bulletId);
			if (bullet != null) {
				bullet.update(position, angle);
			}
			return JSON.encode(map);
		}
		throw new WebApplicationException(400);
	}
	
	@Path("/{playerId}/{bulletId}")
	@DELETE
	@Produces(MediaType.TEXT_PLAIN)
	public String destroyBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId,
			@PathParam("bulletId") String bulletId) {
		Instance instance = Instances.getInstance().getInstance(instanceId);
		HashMap<String, Bullet> map = instance.getBullets().get(playerId);
		if (map != null) {
			Bullet removedBullet = map.remove(bulletId);
			instance.getUniverse().displace(removedBullet.getPlaceable());
			return JSON.encode(removedBullet);
		}
		throw new WebApplicationException(400);
	}
}