public static ShapeType forName(String shapename) { String typename = shapename.toLowerCase(Locale.ROOT); for (ShapeType type : values()) { if(type.shapeName.equals(typename)) { return type; } } throw new IllegalArgumentException("unknown geo_shape ["+shapename+"]"); } }
/** parse geometry from the stream tokenizer */ private static Object parseGeometry(StreamTokenizer stream, ShapeType shapeType) throws IOException, ParseException { final ShapeType type = ShapeType.forName(nextWord(stream)); if (shapeType != null && shapeType != ShapeType.GEOMETRYCOLLECTION) { if (type.wktName().equals(shapeType.wktName()) == false) { throw new ParseException("Expected geometry type: [" + shapeType + "], but found: [" + type + "]", stream.lineno()); } } switch (type) { case POINT: return parsePoint(stream); case MULTIPOINT: return parseMultiPoint(stream); case LINESTRING: return parseLine(stream); case MULTILINESTRING: return parseMultiLine(stream); case POLYGON: return parsePolygon(stream); case MULTIPOLYGON: return parseMultiPolygon(stream); case ENVELOPE: return parseBBox(stream); case GEOMETRYCOLLECTION: return parseGeometryCollection(stream); default: throw new IllegalArgumentException("Unknown geometry type: " + type); } }