]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/SingletonTiffTileInterface.java
Move tif folder to preferences for elevation server
[simantics/district.git] / org.simantics.maps.elevation.server / src / org / simantics / maps / elevation / server / SingletonTiffTileInterface.java
index a8163bb200b3b8c2570ba2408ddbbdddaf65e307..ced1c16bc2c567f96782edbde78c184acfdae844 100644 (file)
@@ -7,6 +7,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Collection;
 
+import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -14,40 +15,59 @@ public class SingletonTiffTileInterface {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SingletonTiffTileInterface.class);
 
-    private static final String TIFS_FOLDER = System.getProperty("tifsFolder");
-
-    private static SingletonTiffTileInterface instance = new SingletonTiffTileInterface();
-
+    private static SingletonTiffTileInterface instance;
     private TiffTileInterface tileInterface;
 
-    private SingletonTiffTileInterface() {
+    static {
         // register spis
         Activator.registerSpis();
-        Path tilesFolder = Paths.get("tifsFolder");
-        if (TIFS_FOLDER != null) {
-            Path potTilesFolder = Paths.get(TIFS_FOLDER);
-            if (Files.exists(potTilesFolder)) {
-                // use default from working directory
-                tilesFolder = potTilesFolder;
-            }
-        }
+    }
+    
+    private SingletonTiffTileInterface() {
+        Path tilesFolder = Paths.get(MapsElevationServerPreferences.tifFolderPath());
         try {
             Files.createDirectories(tilesFolder);
         } catch (IOException e) {
             LOGGER.error("Could not create directories {}", tilesFolder.toAbsolutePath(), e);
         }
+        LOGGER.info("Elevation server looking for tif files at {}", tilesFolder.toAbsolutePath());
         tileInterface = new TiffTileInterface(tilesFolder);
     }
 
+    private static SingletonTiffTileInterface getInstance() {
+        if (instance == null ) {
+            synchronized (SingletonTiffTileInterface.class) {
+                if (instance == null) {
+                    instance = new SingletonTiffTileInterface();
+                }
+            }
+        }
+        return instance;
+    }
+
+    public static synchronized void reloadElevationServer() {
+        if (instance != null) {
+            try {
+                instance.tileInterface.close();
+            } catch (IOException e) {
+                LOGGER.error("Could not close current elevation server interface", e);
+            } finally {
+                instance = null;
+            }
+        }
+        // let's re-initialize
+        getInstance();
+    }
+    
     public static double lookupd(double x, double y) {
         return lookup(x, y).doubleValue();
     }
 
     public static Number lookup(double x, double y) {
-        return instance.tileInterface.lookup(x, y);
+        return getInstance().tileInterface.lookup(x, y);
     }
 
     public static Collection<Rectangle2D> getBoundingBoxes() {
-        return instance.tileInterface.getBoundingBoxes();
+        return getInstance().tileInterface.getBoundingBoxes();
     }
 }