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;
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;
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;
}
};
+ 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) {
}
}
+ 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;