feat: created proper JSON deserializer and created test for JSON, which is still used for TDD

This commit is contained in:
2021-05-11 06:14:18 +02:00
parent e3635851d2
commit 6947105077
2 changed files with 190 additions and 4 deletions

View File

@ -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;
}
}