]> gerrit.simantics Code Review - simantics/district.git/blob - 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
1 package org.simantics.maps.elevation.server;
2
3 import java.awt.geom.Rectangle2D;
4 import java.io.IOException;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.nio.file.Paths;
8 import java.util.Collection;
9
10 import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 public class SingletonTiffTileInterface {
15
16     private static final Logger LOGGER = LoggerFactory.getLogger(SingletonTiffTileInterface.class);
17
18     private static SingletonTiffTileInterface instance;
19     private TiffTileInterface tileInterface;
20
21     static {
22         // register spis
23         Activator.registerSpis();
24     }
25     
26     private SingletonTiffTileInterface() {
27         Path tilesFolder = Paths.get(MapsElevationServerPreferences.tifFolderPath());
28         try {
29             Files.createDirectories(tilesFolder);
30         } catch (IOException e) {
31             LOGGER.error("Could not create directories {}", tilesFolder.toAbsolutePath(), e);
32         }
33         LOGGER.info("Elevation server looking for tif files at {}", tilesFolder.toAbsolutePath());
34         tileInterface = new TiffTileInterface(tilesFolder);
35     }
36
37     private static SingletonTiffTileInterface getInstance() {
38         if (instance == null ) {
39             synchronized (SingletonTiffTileInterface.class) {
40                 if (instance == null) {
41                     instance = new SingletonTiffTileInterface();
42                 }
43             }
44         }
45         return instance;
46     }
47
48     public static synchronized void reloadElevationServer() {
49         if (instance != null) {
50             try {
51                 instance.tileInterface.close();
52             } catch (IOException e) {
53                 LOGGER.error("Could not close current elevation server interface", e);
54             } finally {
55                 instance = null;
56             }
57         }
58         // let's re-initialize
59         getInstance();
60     }
61     
62     public static double lookupd(double x, double y) {
63         return lookup(x, y).doubleValue();
64     }
65
66     public static Number lookup(double x, double y) {
67         return getInstance().tileInterface.lookup(x, y);
68     }
69
70     public static Collection<Rectangle2D> getBoundingBoxes() {
71         return getInstance().tileInterface.getBoundingBoxes();
72     }
73 }