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;
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();
}
}