Skip to content

Commit 24d16c8

Browse files
committed
Updating the serializers for Points to work with GeoJSON
1 parent 984fcda commit 24d16c8

File tree

4 files changed

+44
-9
lines changed

4 files changed

+44
-9
lines changed

src/main/java/org/computate/vertx/serialize/pgclient/PgClientPathSerializer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.io.IOException;
1717
import java.util.stream.Collectors;
1818

19+
import org.computate.vertx.tool.VertxTool;
20+
1921
import com.fasterxml.jackson.core.JsonGenerator;
2022
import com.fasterxml.jackson.databind.JsonSerializer;
2123
import com.fasterxml.jackson.databind.SerializerProvider;
@@ -31,8 +33,6 @@ public class PgClientPathSerializer extends JsonSerializer<Path> {
3133

3234
@Override()
3335
public void serialize(Path o, JsonGenerator generator, SerializerProvider provider) throws IOException, IOException {
34-
JsonArray pointsArray = new JsonArray();
35-
o.getPoints().stream().map(point -> new JsonArray().add(Double.valueOf(point.getX())).add(Double.valueOf(point.getY()))).collect(Collectors.toList()).forEach(pointArray -> pointsArray.add(pointArray));
36-
generator.writeObject(new JsonObject().put("type", "LineString").put("coordinates", pointsArray));
36+
generator.writeObject(VertxTool.toGeoJson(o));
3737
}
3838
}

src/main/java/org/computate/vertx/serialize/pgclient/PgClientPointDeserializer.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020
import com.fasterxml.jackson.core.JsonParser;
2121
import com.fasterxml.jackson.databind.DeserializationContext;
2222
import com.fasterxml.jackson.databind.JsonDeserializer;
23+
import com.github.jknack.handlebars.internal.lang3.StringUtils;
2324

25+
import io.vertx.core.json.JsonArray;
26+
import io.vertx.core.json.JsonObject;
2427
import io.vertx.pgclient.data.Point;
2528

2629
/**
@@ -32,9 +35,25 @@ public class PgClientPointDeserializer extends JsonDeserializer<Point> {
3235
public Point deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
3336
throws IOException {
3437

35-
String[] vals = jsonParser.getText().split(",");
36-
if(vals.length == 2 && NumberUtils.isParsable(vals[0]) && NumberUtils.isParsable(vals[1]))
37-
return new Point(Double.parseDouble(vals[0]), Double.parseDouble(vals[1]));
38-
return null;
38+
39+
String text = jsonParser.getText().strip();
40+
41+
if(StringUtils.startsWith(text, "{")) {
42+
JsonObject json = new JsonObject(text);
43+
Point point = new Point();
44+
JsonArray points = json.getJsonArray("coordinates");
45+
46+
if(points.size() == 2) {
47+
point.setX(Double.parseDouble(points.getString(0)));
48+
point.setY(Double.parseDouble(points.getString(1)));
49+
return point;
50+
}
51+
return null;
52+
} else {
53+
String[] vals = jsonParser.getText().split(",");
54+
if(vals.length == 2 && NumberUtils.isParsable(vals[0]) && NumberUtils.isParsable(vals[1]))
55+
return new Point(Double.parseDouble(vals[0]), Double.parseDouble(vals[1]));
56+
return null;
57+
}
3958
}
4059
}

src/main/java/org/computate/vertx/serialize/pgclient/PgClientPointSerializer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
package org.computate.vertx.serialize.pgclient;
1515

1616
import java.io.IOException;
17-
import java.time.LocalDate;
17+
18+
import org.computate.vertx.tool.VertxTool;
1819

1920
import com.fasterxml.jackson.core.JsonGenerator;
2021
import com.fasterxml.jackson.databind.JsonSerializer;
@@ -31,6 +32,6 @@ public class PgClientPointSerializer extends JsonSerializer<Point> {
3132

3233
@Override()
3334
public void serialize(Point o, JsonGenerator generator, SerializerProvider provider) throws IOException, IOException {
34-
generator.writeString(String.format(POINT_FORMAT, o.getX(), o.getY()));
35+
generator.writeObject(VertxTool.toGeoJson(o));
3536
}
3637
}

src/main/java/org/computate/vertx/tool/VertxTool.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.vertx.core.json.JsonArray;
1515
import io.vertx.core.json.JsonObject;
1616
import io.vertx.pgclient.data.Path;
17+
import io.vertx.pgclient.data.Point;
1718

1819
public class VertxTool {
1920
protected static final Logger LOG = LoggerFactory.getLogger(VertxTool.class);
@@ -63,6 +64,20 @@ public String toId(String s) {
6364
return s;
6465
}
6566

67+
/**
68+
* Description: A helper method to convert a Postgres Point to GeoJSON.
69+
*/
70+
public static JsonObject toGeoJson(Point point) {
71+
JsonObject result = null;
72+
if(point != null) {
73+
JsonArray pointsArray = new JsonArray();
74+
pointsArray.add(Double.valueOf(point.getX()));
75+
pointsArray.add(Double.valueOf(point.getY()));
76+
result = new JsonObject().put("type", "Point").put("coordinates", pointsArray);
77+
}
78+
return result;
79+
}
80+
6681
/**
6782
* Description: A helper method to convert a Postgres Path to GeoJSON.
6883
*/

0 commit comments

Comments
 (0)