feat: created proper JSON deserializer and created test for JSON, which is still used for TDD
This commit is contained in:
@ -1,2 +1,68 @@
|
||||
package uulm.teamname.marvelous.gamelibrary.json.ingame;public class EventDeserializer {
|
||||
package uulm.teamname.marvelous.gamelibrary.json.ingame;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.ObjectCodec;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.Entity;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.EntityID;
|
||||
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||
import uulm.teamname.marvelous.gamelibrary.events.EventType;
|
||||
import uulm.teamname.marvelous.gamelibrary.events.GamestateEvent;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class EventDeserializer extends JsonDeserializer<Event> {
|
||||
|
||||
private final ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
@Override
|
||||
public Event deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
|
||||
ObjectCodec codec = p.getCodec();
|
||||
JsonNode node = codec.readTree(p);
|
||||
|
||||
JsonNode currentNode = null;
|
||||
|
||||
Event result = null;
|
||||
EventType eventType = null;
|
||||
|
||||
if (!node.has("eventType")) {
|
||||
throw new IOException("Event had wrong format: no EventType found");
|
||||
} else {
|
||||
eventType = EventType.valueOf(node.get("eventType").asText());
|
||||
|
||||
switch (eventType) {
|
||||
case Ack:
|
||||
case Nack:
|
||||
case GamestateEvent:
|
||||
result = new GamestateEvent();
|
||||
result.type = eventType;
|
||||
|
||||
if ((currentNode = node.get("activeCharacter")) != null) {
|
||||
((GamestateEvent) result).activeCharacter = mapper
|
||||
.readValue(currentNode.toString(), EntityID.class);
|
||||
}
|
||||
|
||||
if ((currentNode = node.get("turnOrder")) != null) {
|
||||
((GamestateEvent) result).turnOrder = mapper
|
||||
.readValue(currentNode.toString(), EntityID[].class);
|
||||
}
|
||||
|
||||
|
||||
// currentNode = node.get("entities");
|
||||
// ((GameStateEvent) result).entities = currentNode == null
|
||||
// ? null
|
||||
// : mapper.readValue(currentNode.asText(), Entity[].class);
|
||||
//
|
||||
// currentNode = node.get("turnOrder");
|
||||
// ((GameStateEvent) result).turnOrder = currentNode == null
|
||||
// ? null
|
||||
// : mapper.readValue(currentNode.asText(), EntityID[].class);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user