Skip to content

Commit d6ec5f2

Browse files
committed
Geo: Add GeoJson parser to libs/geo classes
Adds GeoJson parser for Geometry classes defined in libs/geo. This should allow us to bypass ShapeBuilders in geosql and is the first step in ShapeBuilder refactoring. The provided functionality should be sufficient for geosql parsing, but additional functionality will be required for complete parity with ShapeBuilder parser - we need to add handling of mapper parameters in WKT parser as well. That will be added in a follow up PR. Relates elastic#40908
1 parent 0ca375e commit d6ec5f2

23 files changed

+1902
-27
lines changed

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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 11 additions & 11 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 6 additions & 0 deletions
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 geoshapename) {
40+
return ShapeType.valueOf(geoshapename.toUpperCase(Locale.ROOT));
41+
}
3642
}

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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 1 addition & 1 deletion
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)