1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.geojson.converter.deserialization;
18
19 import static java.util.Objects.isNull;
20 import static org.bremersee.geojson.GeoJsonConstants.COORDINATES;
21 import static org.bremersee.geojson.GeoJsonConstants.MULTI_LINESTRING;
22 import static org.bremersee.geojson.GeoJsonConstants.TYPE;
23
24 import java.io.Serial;
25 import java.util.List;
26 import java.util.Map;
27 import org.locationtech.jts.geom.GeometryFactory;
28 import org.locationtech.jts.geom.LineString;
29 import org.locationtech.jts.geom.MultiLineString;
30
31
32
33
34
35
36 public class JsonToMultiLineStringConverter extends AbstractJsonToGeometryConverter {
37
38 @Serial
39 private static final long serialVersionUID = 1L;
40
41
42
43
44 private final JsonToLineStringConverter lineStringConverter;
45
46
47
48
49
50
51
52 JsonToMultiLineStringConverter(
53 GeometryFactory geometryFactory,
54 JsonToLineStringConverter lineStringConverter) {
55
56 super(geometryFactory);
57 if (isNull(lineStringConverter)) {
58 throw new IllegalArgumentException("LineString converter must be present.");
59 }
60 this.lineStringConverter = lineStringConverter;
61 }
62
63
64
65
66
67
68
69 MultiLineString convert(Map<String, Object> source) {
70 if (isNull(source)) {
71 return null;
72 }
73 if (!MULTI_LINESTRING.equals(source.get(TYPE))) {
74 throw new IllegalArgumentException(String
75 .format("Source is not a %s: %s", MULTI_LINESTRING, source));
76 }
77 return convertCoordinates(source.get(COORDINATES));
78 }
79
80
81
82
83
84
85
86 MultiLineString convertCoordinates(Object source) {
87
88 List<Object> coordinates = isNull(source) ? List.of() : (List<Object>) source;
89 LineString[] lineStrings = coordinates.stream()
90 .map(lineStringConverter::convertCoordinates)
91 .toArray(LineString[]::new);
92 return getGeometryFactory().createMultiLineString(lineStrings);
93 }
94
95 }