package org.simantics.maps.elevation.server; import java.awt.geom.Rectangle2D; import java.io.IOException; import java.nio.file.Files; 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; public class SingletonTiffTileInterface { private static final Logger LOGGER = LoggerFactory.getLogger(SingletonTiffTileInterface.class); private static SingletonTiffTileInterface instance; private TiffTileInterface tileInterface; static { // register spis Activator.registerSpis(); } 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 getInstance().tileInterface.lookup(x, y); } public static Collection getBoundingBoxes() { return getInstance().tileInterface.getBoundingBoxes(); } }