diff --git a/.project b/.project index 72f65b4..463409a 100644 --- a/.project +++ b/.project @@ -32,5 +32,6 @@ org.eclipse.wst.common.modulecore.ModuleCoreNature org.eclipse.jem.workbench.JavaEMFNature org.eclipse.buildship.core.gradleprojectnature + net.sf.eclipse.tomcat.tomcatnature diff --git a/src/main/java/cactusServer/entities/Instance.java b/src/main/java/cactusServer/entities/Instance.java index 650f494..d324b19 100644 --- a/src/main/java/cactusServer/entities/Instance.java +++ b/src/main/java/cactusServer/entities/Instance.java @@ -28,7 +28,7 @@ public class Instance extends Entity { private String name; private State state; - private StageModel stage; + private String stage; private HashMap areaMap = new HashMap<>(); private HashMap objMap = new HashMap<>(); @@ -43,7 +43,7 @@ * (�����͌����_�ł̉��̂���) * @param name �C���X�^���X�� */ - public Instance(String name, State state, StageModel stageModel) { + public Instance(String name, State state, String stageModel) { setName(name); setState(state); setStage(stageModel); @@ -57,7 +57,7 @@ return state; } - public StageModel getStage() { + public String getStage() { return stage; } @@ -83,11 +83,7 @@ @JSONHint(ignore = true) public List getCharacters() { - List characters = new ArrayList<>(); - for (Character character : characterMap.values()) { - characters.add(character); - } - return characters; + return new ArrayList(characterMap.values()); } @JSONHint(ignore = true) @@ -103,7 +99,7 @@ this.state = state; } - public void setStage(StageModel stage) { + public void setStage(String stage) { this.stage = stage; } diff --git a/src/main/java/cactusServer/models/Instances.java b/src/main/java/cactusServer/models/Instances.java index d57dd01..45039ed 100644 --- a/src/main/java/cactusServer/models/Instances.java +++ b/src/main/java/cactusServer/models/Instances.java @@ -53,7 +53,7 @@ * @param stageModel * @return */ - public IDAddressedEntity createInstance(String name, Instance.State state, StageModel stageModel) { + public IDAddressedEntity createInstance(String name, Instance.State state, String stageModel) { String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet()); Instance instance = new Instance(name, state, stageModel); instanceMap.put(id, instance); @@ -78,13 +78,9 @@ return instanceMap.get(instanceId); } -// public List getPlayers() { -// //playerMap.values().toArray() -//// List players = new ArrayList<>(); -//// for (Player player : playerMap.values().) { -//// //players. -//// } -// } + public List getPlayers() { + return new ArrayList(playerMap.values()); + } public Player getPlayer(String playerId) { return playerMap.get(playerId); diff --git a/src/main/java/cactusServer/resources/InstancesRest.java b/src/main/java/cactusServer/resources/InstancesRest.java index 38e6427..ebd3de6 100644 --- a/src/main/java/cactusServer/resources/InstancesRest.java +++ b/src/main/java/cactusServer/resources/InstancesRest.java @@ -3,6 +3,9 @@ import java.util.HashSet; import java.util.Map; +import javax.validation.Valid; +import javax.ws.rs.BeanParam; +import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; @@ -14,6 +17,8 @@ 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; @@ -32,6 +37,7 @@ @Path("/instances") +@RequestScoped public class InstancesRest { public static final String INSTANCES_URI = "/CactusServer/rest/instances"; public InstancesRest() { @@ -91,34 +97,35 @@ -// @POST -// @Produces(MediaType.APPLICATION_JSON) -// public URIAddressedEntity create(@FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") StageModel 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 create(@PathParam("instanceId") String instanceId, @FormParam("name") String name, -// @FormParam("region") Plain[] region, @FormParam("permissions") HashSet 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 create(@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") ObjectModel 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()); -// } -// + @POST + @Produces(MediaType.APPLICATION_JSON) + public URIAddressedEntity create(@FormParam("int") int a, @FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") String stageModel) { + System.out.println(a); + IDAddressedEntity ae = Instances.getInstance().createInstance(name, Instance.State.AVAILABLE, "11111"); + 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 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 create(@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") ObjectModel 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()); + } + // @DELETE // @Path("/destroyInstance") diff --git a/src/main/java/cactusServer/utils/JSONConsumer.java b/src/main/java/cactusServer/utils/JSONConsumer.java index c3b4d23..c61d8a2 100644 --- a/src/main/java/cactusServer/utils/JSONConsumer.java +++ b/src/main/java/cactusServer/utils/JSONConsumer.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @@ -16,30 +17,30 @@ import net.arnx.jsonic.JSON; import net.arnx.jsonic.JSONException; -@Provider -@Consumes(MediaType.APPLICATION_JSON) -public class JSONConsumer implements MessageBodyReader { - - public boolean isReadable(java.lang.Class type, - java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] - annotations, MediaType mediaType) { - return true; +/** + * �����g�p���Ȃ��Ȃ�Ǝv�� + * @author student + * + */ +//@Provider +//@Consumes(MediaType.APPLICATION_JSON) +public class JSONConsumer implements MessageBodyReader { + @Override + public boolean isReadable(Class type, java.lang.reflect.Type genericType, + java.lang.annotation.Annotation[] annotations, MediaType mediaType) { + // return true; + return mediaType.isCompatible(MediaType.APPLICATION_JSON_TYPE); } - @Override - public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, - MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { - // TODO Auto-generated method stub + public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, + MultivaluedMap httpHeaders, InputStream entityStream) + throws IOException, WebApplicationException { try { - return JSON.decode(entityStream,genericType); + // return JSON.decode(entityStream,genericType); + return JSON.decode(entityStream, type); } catch (JSONException e) { - // TODO Auto-generated catch block - return null; - } catch (IOException e) { - // TODO Auto-generated catch block return null; } } - } \ No newline at end of file diff --git a/src/main/java/cactusServer/utils/JSONProvider.java b/src/main/java/cactusServer/utils/JSONProvider.java index 09819fb..4cab69f 100644 --- a/src/main/java/cactusServer/utils/JSONProvider.java +++ b/src/main/java/cactusServer/utils/JSONProvider.java @@ -16,23 +16,26 @@ @Provider() @Produces(MediaType.APPLICATION_JSON) -public class JSONProvider implements MessageBodyWriter { - @Override - public long getSize(Object arg0, Class arg1, Type arg2, Annotation[] arg3, MediaType arg4) { - try { - return JSON.encode(arg0).getBytes("UTF-8").length; - } catch (Exception e) { - throw new RuntimeException(e); - } - } +public class JSONProvider implements MessageBodyWriter { + @Override + public long getSize(Object obj, Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { + try { + return JSON.encode(obj).getBytes("UTF-8").length; + } catch (Exception e) { + throw new RuntimeException(e); + } + } - @Override - public boolean isWriteable(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3) { - return true; - } + @Override + public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { + // return true; + return mediaType.isCompatible(MediaType.APPLICATION_JSON_TYPE); + } - @Override - public void writeTo(Object arg0, Class arg1, Type arg2, Annotation[] arg3, MediaType arg4, MultivaluedMap arg5, OutputStream arg6) throws IOException, WebApplicationException { - JSON.encode(arg0, arg6); - } + @Override + public void writeTo(Object obj, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, + MultivaluedMap httpHeaders, OutputStream entityStream) + throws IOException, WebApplicationException { + JSON.encode(obj, entityStream); + } } \ No newline at end of file diff --git a/src/main/java/cactusServer/utils/MyParamConverter.java b/src/main/java/cactusServer/utils/MyParamConverter.java new file mode 100644 index 0000000..9f2cd8e --- /dev/null +++ b/src/main/java/cactusServer/utils/MyParamConverter.java @@ -0,0 +1,24 @@ +package cactusServer.utils; + +import javax.ws.rs.ext.ParamConverter; + +import cactusServer.entities.StageModel; +import net.arnx.jsonic.JSON; + +public class MyParamConverter implements ParamConverter { + private Class type; + + public MyParamConverter(Class type) { + this.type = type; + } + + @Override + public Object fromString(String value) { + return JSON.decode(value, type); + } + + @Override + public String toString(Object obj) { + return JSON.encode(obj); + } +} diff --git a/src/main/java/cactusServer/utils/MyParamConverterProvider.java b/src/main/java/cactusServer/utils/MyParamConverterProvider.java new file mode 100644 index 0000000..fb79a8e --- /dev/null +++ b/src/main/java/cactusServer/utils/MyParamConverterProvider.java @@ -0,0 +1,21 @@ +package cactusServer.utils; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; + +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; + +import cactusServer.entities.StageModel; + +@Provider +public class MyParamConverterProvider implements ParamConverterProvider { + @Override + public ParamConverter getConverter(Class rawType, Type genericType, Annotation[] annotations) { + if (rawType != null && !rawType.equals(String.class)) { + return (ParamConverter) new MyParamConverter(rawType); + } + return null; + } +}