X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.maps.elevation.server%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Felevation%2Fserver%2FSingletonTiffTileInterface.java;h=ced1c16bc2c567f96782edbde78c184acfdae844;hb=47748e479895b9e74d805411f26c1d02601bf360;hp=a8163bb200b3b8c2570ba2408ddbbdddaf65e307;hpb=76d4bb1c494a0d9059062baf2f3ba4b3559c3e19;p=simantics%2Fdistrict.git diff --git a/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/SingletonTiffTileInterface.java b/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/SingletonTiffTileInterface.java index a8163bb2..ced1c16b 100644 --- a/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/SingletonTiffTileInterface.java +++ b/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/SingletonTiffTileInterface.java @@ -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 getBoundingBoxes() { - return instance.tileInterface.getBoundingBoxes(); + return getInstance().tileInterface.getBoundingBoxes(); } }