Skip to content

Commit 1411e2c

Browse files
committed
Geo: Add GeoJson parser to libs/geo classes (elastic#41575)
Adds GeoJson parser for Geometry classes defined in libs/geo. Relates elastic#40908 and elastic#29872
1 parent 92a820b commit 1411e2c

23 files changed

+1869
-27
lines changed

libs/geo/src/main/java/org/elasticsearch/geo/geometry/Circle.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public int hashCode() {
102102
}
103103

104104
@Override
105-
public <T> T visit(GeometryVisitor<T> visitor) {
105+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
106106
return visitor.visit(this);
107107
}
108108

libs/geo/src/main/java/org/elasticsearch/geo/geometry/Geometry.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public interface Geometry {
2626

2727
ShapeType type();
2828

29-
<T> T visit(GeometryVisitor<T> visitor);
29+
<T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E;
3030

3131
boolean isEmpty();
3232

libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryCollection.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public ShapeType type() {
5757
}
5858

5959
@Override
60-
public <T> T visit(GeometryVisitor<T> visitor) {
60+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
6161
return visitor.visit(this);
6262
}
6363

libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryVisitor.java

+11-11
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,26 @@
4444
*
4545
* @see <a href="https://en.wikipedia.org/wiki/Visitor_pattern">Visitor Pattern</a>
4646
*/
47-
public interface GeometryVisitor<T> {
47+
public interface GeometryVisitor<T, E extends Exception> {
4848

49-
T visit(Circle circle);
49+
T visit(Circle circle) throws E;
5050

51-
T visit(GeometryCollection<?> collection);
51+
T visit(GeometryCollection<?> collection) throws E;
5252

53-
T visit(Line line);
53+
T visit(Line line) throws E;
5454

55-
T visit(LinearRing ring);
55+
T visit(LinearRing ring) throws E;
5656

57-
T visit(MultiLine multiLine);
57+
T visit(MultiLine multiLine) throws E;
5858

59-
T visit(MultiPoint multiPoint);
59+
T visit(MultiPoint multiPoint) throws E;
6060

61-
T visit(MultiPolygon multiPolygon);
61+
T visit(MultiPolygon multiPolygon) throws E;
6262

63-
T visit(Point point);
63+
T visit(Point point) throws E;
6464

65-
T visit(Polygon polygon);
65+
T visit(Polygon polygon) throws E;
6666

67-
T visit(Rectangle rectangle);
67+
T visit(Rectangle rectangle) throws E;
6868

6969
}

libs/geo/src/main/java/org/elasticsearch/geo/geometry/Line.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public ShapeType type() {
103103
}
104104

105105
@Override
106-
public <T> T visit(GeometryVisitor<T> visitor) {
106+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
107107
return visitor.visit(this);
108108
}
109109

libs/geo/src/main/java/org/elasticsearch/geo/geometry/LinearRing.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public ShapeType type() {
5454
}
5555

5656
@Override
57-
public <T> T visit(GeometryVisitor<T> visitor) {
57+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
5858
return visitor.visit(this);
5959
}
6060
}

libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiLine.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public ShapeType type() {
4040
}
4141

4242
@Override
43-
public <T> T visit(GeometryVisitor<T> visitor) {
43+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
4444
return visitor.visit(this);
4545
}
4646
}

libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPoint.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public ShapeType type() {
4040
}
4141

4242
@Override
43-
public <T> T visit(GeometryVisitor<T> visitor) {
43+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
4444
return visitor.visit(this);
4545
}
4646

libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPolygon.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public ShapeType type() {
4040
}
4141

4242
@Override
43-
public <T> T visit(GeometryVisitor<T> visitor) {
43+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
4444
return visitor.visit(this);
4545
}
4646
}

libs/geo/src/main/java/org/elasticsearch/geo/geometry/Point.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public int hashCode() {
9393
}
9494

9595
@Override
96-
public <T> T visit(GeometryVisitor<T> visitor) {
96+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
9797
return visitor.visit(this);
9898
}
9999

libs/geo/src/main/java/org/elasticsearch/geo/geometry/Polygon.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public LinearRing getHole(int i) {
9292
}
9393

9494
@Override
95-
public <T> T visit(GeometryVisitor<T> visitor) {
95+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
9696
return visitor.visit(this);
9797
}
9898

libs/geo/src/main/java/org/elasticsearch/geo/geometry/Rectangle.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public int hashCode() {
207207
}
208208

209209
@Override
210-
public <T> T visit(GeometryVisitor<T> visitor) {
210+
public <T, E extends Exception> T visit(GeometryVisitor<T, E> visitor) throws E {
211211
return visitor.visit(this);
212212
}
213213

libs/geo/src/main/java/org/elasticsearch/geo/geometry/ShapeType.java

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
package org.elasticsearch.geo.geometry;
2121

22+
import java.util.Locale;
23+
2224
/**
2325
* Shape types supported by elasticsearch
2426
*/
@@ -33,4 +35,8 @@ public enum ShapeType {
3335
LINEARRING, // not serialized by itself in WKT or WKB
3436
ENVELOPE, // not part of the actual WKB spec
3537
CIRCLE; // not part of the actual WKB spec
38+
39+
public static ShapeType forName(String shapeName) {
40+
return ShapeType.valueOf(shapeName.toUpperCase(Locale.ROOT));
41+
}
3642
}

libs/geo/src/main/java/org/elasticsearch/geo/utils/WellKnownText.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public static void toWKT(Geometry geometry, StringBuilder sb) {
6868
if (geometry.isEmpty()) {
6969
sb.append(EMPTY);
7070
} else {
71-
geometry.visit(new GeometryVisitor<Void>() {
71+
geometry.visit(new GeometryVisitor<Void, RuntimeException>() {
7272
@Override
7373
public Void visit(Circle circle) {
7474
sb.append(LPAREN);
@@ -543,7 +543,7 @@ private static String nextCloserOrComma(StreamTokenizer stream) throws IOExcepti
543543
}
544544

545545
public static String getWKTName(Geometry geometry) {
546-
return geometry.visit(new GeometryVisitor<String>() {
546+
return geometry.visit(new GeometryVisitor<String, RuntimeException>() {
547547
@Override
548548
public String visit(Circle circle) {
549549
return "circle";

libs/geo/src/test/java/org/elasticsearch/geo/geometry/BaseGeometryTestCase.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void testVisitor() {
6767

6868
public static void testVisitor(Geometry geom) {
6969
AtomicBoolean called = new AtomicBoolean(false);
70-
Object result = geom.visit(new GeometryVisitor<Object>() {
70+
Object result = geom.visit(new GeometryVisitor<Object, RuntimeException>() {
7171
private Object verify(Geometry geometry, String expectedClass) {
7272
assertFalse("Visitor should be called only once", called.getAndSet(true));
7373
assertSame(geom, geometry);

0 commit comments

Comments
 (0)