package mil.nga.dice.jackson.deserializer; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.vividsolutions.jts.geom.Geometry; public class FeatureDeserializer extends Deserializer { private GeometryDeserializer geometryDeserializer = new GeometryDeserializer(); public List<Geometry> parseFeatures(InputStream is) throws JsonParseException, IOException { List<Geometry> features = new ArrayList<Geometry>(); JsonParser parser = factory.createParser(is); parser.nextToken(); if (parser.getCurrentToken() != JsonToken.START_OBJECT) { return features; } while (parser.nextToken() != JsonToken.END_OBJECT) { String name = parser.getCurrentName(); if ("features".equals(name)) { parser.nextToken(); while (parser.nextToken() != JsonToken.END_ARRAY) { Geometry geometry = parseFeature(parser); features.add(geometry); } } else { parser.nextToken(); parser.skipChildren(); } } parser.close(); return features; } private Geometry parseFeature(JsonParser parser) throws JsonParseException, IOException { Geometry geometry = null; if (parser.getCurrentToken() != JsonToken.START_OBJECT) { Collections.emptyList(); } while (parser.nextToken() != JsonToken.END_OBJECT) { String name = parser.getCurrentName(); if ("geometry".equals(name)) { parser.nextToken(); geometry = geometryDeserializer.parseGeometry(parser); } else { parser.nextToken(); parser.skipChildren(); } } return geometry; } }