66import io .github .makbn .jlmap .layer .leaflet .LeafletVectorLayerInt ;
77import io .github .makbn .jlmap .listener .JLAction ;
88import io .github .makbn .jlmap .model .*;
9- import io .github .makbn .jlmap .model .builder .JLCircleBuilder ;
9+ import io .github .makbn .jlmap .model .builder .* ;
1010import lombok .AccessLevel ;
1111import lombok .experimental .FieldDefaults ;
1212import lombok .extern .slf4j .Slf4j ;
1313
14+ import java .util .ArrayList ;
15+ import java .util .List ;
1416import 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