]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.maps/src/org/simantics/maps/sg/MapNode.java
Fixed most warnings from district codebase after JavaSE-11 switch
[simantics/district.git] / org.simantics.district.maps / src / org / simantics / maps / sg / MapNode.java
index 7ca092cf74b711939b460ab3b9e2b24edbe4a296..5bdd2555c7bb373b53a6c34789f13f92fd0ae688 100644 (file)
@@ -25,6 +25,8 @@ import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.ImageObserver;
 import java.awt.image.VolatileImage;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -36,6 +38,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.simantics.maps.MapScalingTransform;
 import org.simantics.maps.WebService;
 import org.simantics.maps.osm.OSMTileProvider;
@@ -61,8 +64,8 @@ public class MapNode extends G2DNode implements ITileListener  {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(MapNode.class);
 
-    private final double MAP_SCALE          = 1;
-    private final int    MAX_TILE_LEVEL     = 19;
+    //private final double MAP_SCALE          = 1;
+    //private final int    MAX_TILE_LEVEL     = 19;
     private final int    TILE_PIXEL_SIZE    = 256;
     private final int    VIEWBOX_QUIET_TIME = 500;
 
@@ -170,23 +173,31 @@ public class MapNode extends G2DNode implements ITileListener  {
         }
     };
 
+    private IPreferenceChangeListener listener;
+
     public void init() {
-        // Construct WebService from client properties
-        String url;
-        if (MapsClientPreferences.useBuiltinServer())
-            url = MapsClientPreferences.possibleBuiltinServerURL();
-        else 
-            url = MapsClientPreferences.tileserverURL();
-        if (!url.endsWith("/"))
-            url = url + "/";
-        
         try {
-            ITileProvider provider = new OSMTileProvider(new WebService(url), TILE_PIXEL_SIZE);
+            OSMTileProvider provider = new OSMTileProvider(new WebService(computeUrl()), TILE_PIXEL_SIZE);
+
+            listener = event -> {
+                // if tiles or style change we want to flush the tile cache
+                if (MapsClientPreferences.P_CURRENT_MBTILES.equals(event.getKey()) || MapsClientPreferences.P_CURRENT_TM2STYLE.equals(event.getKey())) {
+                    if (tileCache != null) {
+                        tileCache.clear();
+                    }
+                    try {
+                        provider.setWebService(new WebService(computeUrl()));
+                    } catch (MalformedURLException | URISyntaxException e) {
+                        LOGGER.error("Unable to update WebService with new url", e);
+                    }
+                }
+            };
+            MapsClientPreferences.addPreferenceChangeListenerMapsServer(listener);
 
             // Try to load eclipse specific implementation of TileJobQueue, if it doesn't exist, fall back to pojo implementation 
             try {
                 Class<?> proxyClass = (Class<?>) Class.forName("org.simantics.maps.eclipse.TileJobQueue");
-                job = (ITileJobQueue)proxyClass.newInstance();
+                job = (ITileJobQueue)proxyClass.getDeclaredConstructor().newInstance();
             } catch (ClassNotFoundException e1) {
             } catch (InstantiationException e) {
             } catch (IllegalAccessException e) {
@@ -219,6 +230,25 @@ public class MapNode extends G2DNode implements ITileListener  {
         }
     }
 
+    private static String computeUrl() {
+     // Construct WebService from client properties
+        String url;
+        if (MapsClientPreferences.useBuiltinServer())
+            url = MapsClientPreferences.possibleBuiltinServerURL();
+        else 
+            url = MapsClientPreferences.tileserverURL();
+        if (!url.endsWith("/"))
+            url = url + "/";
+        return url;
+    }
+
+    @Override
+    public void cleanup() {
+        MapsClientPreferences.removePreferenceChangeListenerMapsServer(listener);
+        tileCache.clear();
+        job.clear();
+    }
+
     @SyncField("enabled")
     public void setEnabled(Boolean enabled) {
         this.enabled = enabled;