Skip to content

Commit c3be9f8

Browse files
committed
completed JLVaadinVectorLayer implementation
1 parent 51176aa commit c3be9f8

1 file changed

Lines changed: 135 additions & 17 deletions

File tree

jlmap-vaadin/src/main/java/io/github/makbn/jlmap/vaadin/layer/JLVaadinVectorLayer.java

Lines changed: 135 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import io.github.makbn.jlmap.layer.leaflet.LeafletVectorLayerInt;
77
import io.github.makbn.jlmap.listener.JLAction;
88
import io.github.makbn.jlmap.model.*;
9-
import io.github.makbn.jlmap.model.builder.JLCircleBuilder;
9+
import io.github.makbn.jlmap.model.builder.*;
1010
import lombok.AccessLevel;
1111
import lombok.experimental.FieldDefaults;
1212
import lombok.extern.slf4j.Slf4j;
1313

14+
import java.util.ArrayList;
15+
import java.util.List;
1416
import java.util.concurrent.atomic.AtomicInteger;
1517

1618
/**
@@ -49,8 +51,29 @@ public JLPolyline addPolyline(JLLatLng[] vertices) {
4951
*/
5052
@Override
5153
public JLPolyline addPolyline(JLLatLng[] vertices, JLOptions options) {
52-
// TODO: implement
53-
return null;
54+
var elementUniqueName = getElementUniqueName(JLPolyline.class, idGenerator.incrementAndGet());
55+
56+
var polylineBuilder = new JLPolylineBuilder()
57+
.setUuid(elementUniqueName)
58+
.setTransporter(() -> transport -> {})
59+
.withOptions(options)
60+
.withCallbacks(jlCallbackBuilder -> {
61+
jlCallbackBuilder.on(JLAction.MOVE);
62+
jlCallbackBuilder.on(JLAction.ADD);
63+
jlCallbackBuilder.on(JLAction.REMOVE);
64+
jlCallbackBuilder.on(JLAction.CLICK);
65+
jlCallbackBuilder.on(JLAction.DOUBLE_CLICK);
66+
});
67+
68+
// Add vertices to the builder using the correct method
69+
for (JLLatLng vertex : vertices) {
70+
polylineBuilder.addLatLng(vertex.getLat(), vertex.getLng());
71+
}
72+
73+
engine.executeScript(polylineBuilder.buildJsElement());
74+
var polyline = polylineBuilder.buildJLObject();
75+
callbackHandler.addJLObject(elementUniqueName, polyline);
76+
return polyline;
5477
}
5578

5679
/**
@@ -61,8 +84,14 @@ public JLPolyline addPolyline(JLLatLng[] vertices, JLOptions options) {
6184
*/
6285
@Override
6386
public boolean removePolyline(String id) {
64-
// TODO: implement
65-
return false;
87+
try {
88+
engine.executeScript(removeLayerWithUUID(id));
89+
callbackHandler.remove(JLPolyline.class, id);
90+
} catch (RuntimeException e) {
91+
log.error(e.getMessage(), e);
92+
return false;
93+
}
94+
return true;
6695
}
6796

6897
/**
@@ -88,8 +117,33 @@ public JLMultiPolyline addMultiPolyline(JLLatLng[][] vertices) {
88117
@Override
89118
public JLMultiPolyline addMultiPolyline(JLLatLng[][] vertices,
90119
JLOptions options) {
91-
// TODO implement
92-
return null;
120+
var elementUniqueName = getElementUniqueName(JLMultiPolyline.class, idGenerator.incrementAndGet());
121+
122+
var multiPolylineBuilder = new JLMultiPolylineBuilder()
123+
.setUuid(elementUniqueName)
124+
.setTransporter(() -> transport -> {})
125+
.withOptions(options)
126+
.withCallbacks(jlCallbackBuilder -> {
127+
jlCallbackBuilder.on(JLAction.MOVE);
128+
jlCallbackBuilder.on(JLAction.ADD);
129+
jlCallbackBuilder.on(JLAction.REMOVE);
130+
jlCallbackBuilder.on(JLAction.CLICK);
131+
jlCallbackBuilder.on(JLAction.DOUBLE_CLICK);
132+
});
133+
134+
// Add vertices arrays to the builder using the correct method
135+
for (JLLatLng[] vertexArray : vertices) {
136+
List<double[]> line = new ArrayList<>();
137+
for (JLLatLng vertex : vertexArray) {
138+
line.add(new double[]{vertex.getLat(), vertex.getLng()});
139+
}
140+
multiPolylineBuilder.addLine(line);
141+
}
142+
143+
engine.executeScript(multiPolylineBuilder.buildJsElement());
144+
var multiPolyline = multiPolylineBuilder.buildJLObject();
145+
callbackHandler.addJLObject(elementUniqueName, multiPolyline);
146+
return multiPolyline;
93147
}
94148

95149
/**
@@ -100,8 +154,14 @@ public JLMultiPolyline addMultiPolyline(JLLatLng[][] vertices,
100154
*/
101155
@Override
102156
public boolean removeMultiPolyline(String id) {
103-
// TODO impleemnt
104-
return false;
157+
try {
158+
engine.executeScript(removeLayerWithUUID(id));
159+
callbackHandler.remove(JLMultiPolyline.class, id);
160+
} catch (RuntimeException e) {
161+
log.error(e.getMessage(), e);
162+
return false;
163+
}
164+
return true;
105165
}
106166

107167
/**
@@ -112,8 +172,35 @@ public boolean removeMultiPolyline(String id) {
112172
*/
113173
@Override
114174
public JLPolygon addPolygon(JLLatLng[][][] vertices, JLOptions options) {
115-
// TODO implement
116-
return null;
175+
var elementUniqueName = getElementUniqueName(JLPolygon.class, idGenerator.incrementAndGet());
176+
177+
var polygonBuilder = new JLPolygonBuilder()
178+
.setUuid(elementUniqueName)
179+
.setTransporter(() -> transport -> {})
180+
.withOptions(options)
181+
.withCallbacks(jlCallbackBuilder -> {
182+
jlCallbackBuilder.on(JLAction.MOVE);
183+
jlCallbackBuilder.on(JLAction.ADD);
184+
jlCallbackBuilder.on(JLAction.REMOVE);
185+
jlCallbackBuilder.on(JLAction.CLICK);
186+
jlCallbackBuilder.on(JLAction.DOUBLE_CLICK);
187+
});
188+
189+
// Add vertices arrays to the builder using the correct method
190+
for (JLLatLng[][] ringArray : vertices) {
191+
List<double[]> group = new ArrayList<>();
192+
for (JLLatLng[] ring : ringArray) {
193+
for (JLLatLng vertex : ring) {
194+
group.add(new double[]{vertex.getLat(), vertex.getLng()});
195+
}
196+
}
197+
polygonBuilder.addLatLngGroup(group);
198+
}
199+
200+
engine.executeScript(polygonBuilder.buildJsElement());
201+
var polygon = polygonBuilder.buildJLObject();
202+
callbackHandler.addJLObject(elementUniqueName, polygon);
203+
return polygon;
117204
}
118205

119206
/**
@@ -135,8 +222,14 @@ public JLPolygon addPolygon(JLLatLng[][][] vertices) {
135222
*/
136223
@Override
137224
public boolean removePolygon(String id) {
138-
// TODO implement
139-
return false;
225+
try {
226+
engine.executeScript(removeLayerWithUUID(id));
227+
callbackHandler.remove(JLPolygon.class, id);
228+
} catch (RuntimeException e) {
229+
log.error(e.getMessage(), e);
230+
return false;
231+
}
232+
return true;
140233
}
141234

142235
/**
@@ -210,8 +303,27 @@ public boolean removeCircle(String id) {
210303
@Override
211304
public JLCircleMarker addCircleMarker(JLLatLng center, int radius,
212305
JLOptions options) {
213-
// TODO impelemnt
214-
return null;
306+
var elementUniqueName = getElementUniqueName(JLCircleMarker.class, idGenerator.incrementAndGet());
307+
308+
var circleMarkerBuilder = new JLCircleMarkerBuilder()
309+
.setUuid(elementUniqueName)
310+
.setLat(center.getLat())
311+
.setLng(center.getLng())
312+
.setRadius(radius)
313+
.setTransporter(() -> transport -> {})
314+
.withOptions(options)
315+
.withCallbacks(jlCallbackBuilder -> {
316+
jlCallbackBuilder.on(JLAction.MOVE);
317+
jlCallbackBuilder.on(JLAction.ADD);
318+
jlCallbackBuilder.on(JLAction.REMOVE);
319+
jlCallbackBuilder.on(JLAction.CLICK);
320+
jlCallbackBuilder.on(JLAction.DOUBLE_CLICK);
321+
});
322+
323+
engine.executeScript(circleMarkerBuilder.buildJsElement());
324+
var circleMarker = circleMarkerBuilder.buildJLObject();
325+
callbackHandler.addJLObject(elementUniqueName, circleMarker);
326+
return circleMarker;
215327
}
216328

217329
/**
@@ -233,7 +345,13 @@ public JLCircleMarker addCircleMarker(JLLatLng center) {
233345
*/
234346
@Override
235347
public boolean removeCircleMarker(String id) {
236-
// TODO implement
237-
return false;
348+
try {
349+
engine.executeScript(removeLayerWithUUID(id));
350+
callbackHandler.remove(JLCircleMarker.class, id);
351+
} catch (RuntimeException e) {
352+
log.error(e.getMessage(), e);
353+
return false;
354+
}
355+
return true;
238356
}
239357
}

0 commit comments

Comments
 (0)