package de.naeveke.c2g.mapping; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.DoubleNode; import com.fasterxml.jackson.databind.node.IntNode; import de.naeveke.c2g.Coordinates; import de.naeveke.c2g.Location; import java.io.IOException; import java.util.Locale; import java.util.TimeZone; public class LocationDeserializer extends JsonDeserializer<Location> { @Override public Location deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException { JsonNode node = jp.getCodec().readTree(jp); int id = (Integer) ((IntNode) node.get("locationId")).numberValue(); String countryCode = node.get("countryCode").asText(); String defaultLanguage = node.get("defaultLanguage").asText(); Locale locale = new Locale.Builder().setLanguage(defaultLanguage).setRegion(countryCode).build(); String name = node.get("locationName").asText(); JsonNode mapSection = node.get("mapSection"); Coordinates center = new Coordinates(mapSection.get("center").get("latitude").asDouble(), mapSection.get("center").get("longitude").asDouble()); Coordinates lowerRight = new Coordinates(mapSection.get("lowerRight").get("latitude").asDouble(), mapSection.get("lowerRight").get("longitude").asDouble()); Coordinates upperLeft = new Coordinates(mapSection.get("upperLeft").get("latitude").asDouble(), mapSection.get("upperLeft").get("longitude").asDouble()); TimeZone timezone = TimeZone.getTimeZone(node.get("timezone").asText()); return new Location(id, locale, name, center, lowerRight, upperLeft, timezone); } }