Merge pull request #46 from nitta-lab-2018/JSONPC
確認しました
commit aa6369f97d2e55ef4e6f8860af924caf991e4961
2 parents 540961b + 13425a4
Yoichiro Ota authored on 7 Jun 2018
Showing 8 changed files
View
1
■■■■
.project
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
<nature>net.sf.eclipse.tomcat.tomcatnature</nature>
</natures>
</projectDescription>
View
18
src/main/java/cactusServer/entities/Instance.java
*/
public class Instance extends Entity {
private String name;
private State state;
private StageModel stage;
private String stage;
 
private HashMap<String, Area> areaMap = new HashMap<>();
private HashMap<String, Object> objMap = new HashMap<>();
private HashMap<String, Character> characterMap = new HashMap<>();
/**
* (引数は現時点での仮のもの)
* @param name インスタンス名
*/
public Instance(String name, State state, StageModel stageModel) {
public Instance(String name, State state, String stageModel) {
setName(name);
setState(state);
setStage(stageModel);
}
public State getState() {
return state;
}
public StageModel getStage() {
public String getStage() {
return stage;
}
 
@JSONHint(ignore = true)
}
@JSONHint(ignore = true)
public List<Character> getCharacters() {
List<Character> characters = new ArrayList<>();
for (Character character : characterMap.values()) {
characters.add(character);
}
return characters;
return new ArrayList<Character>(characterMap.values());
}
 
@JSONHint(ignore = true)
public Character getCharacter(String characterId) {
public void setState(State state) {
this.state = state;
}
public void setStage(StageModel stage) {
public void setStage(String stage) {
this.stage = stage;
}
 
public IDAddressedEntity createArea(String name, Plain[] region, HashSet<Allowed> permissions) {
View
16
src/main/java/cactusServer/models/Instances.java
* @param state
* @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);
return new IDAddressedEntity(id, instance);
public Instance getInstance(String instanceId) {
return instanceMap.get(instanceId);
}
// public List<Player> getPlayers() {
// //playerMap.values().toArray()
//// List<Player> players = new ArrayList<>();
//// for (Player player : playerMap.values().) {
//// //players.
//// }
// }
public List<Player> getPlayers() {
return new ArrayList<Player>(playerMap.values());
}
public Player getPlayer(String playerId) {
return playerMap.get(playerId);
}
View
64
src/main/java/cactusServer/resources/InstancesRest.java
 
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;
import javax.ws.rs.POST;
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 framework.physics.Velocity3D;
 
 
@Path("/instances")
@RequestScoped
public class InstancesRest {
public static final String INSTANCES_URI = "/CactusServer/rest/instances";
public InstancesRest() {
 
 
 
 
// @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<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 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<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 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")
// @Produces(MediaType.APPLICATION_JSON)
View
43
src/main/java/cactusServer/utils/JSONConsumer.java
package cactusServer.utils;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
 
import javax.validation.constraints.Null;
 
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;
/**
* 多分使用しなくなると思う
* @author student
*
*/
//@Provider
//@Consumes(MediaType.APPLICATION_JSON)
public class JSONConsumer implements MessageBodyReader<Object> {
@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<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> 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;
}
}
}
View
40
src/main/java/cactusServer/utils/JSONProvider.java
import net.arnx.jsonic.JSON;
 
@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<Object> {
@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<String, Object> httpHeaders, OutputStream entityStream)
throws IOException, WebApplicationException {
JSON.encode(obj, entityStream);
}
}
View
25
src/main/java/cactusServer/utils/MyParamConverter.java 0 → 100644
package cactusServer.utils;
 
import javax.ws.rs.ext.ParamConverter;
 
import cactusServer.entities.StageModel;
import net.arnx.jsonic.JSON;
 
public class MyParamConverter implements ParamConverter<Object> {
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);
}
}
View
src/main/java/cactusServer/utils/MyParamConverterProvider.java 0 → 100644