]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/src/org/simantics/district/maps/server/TileserverMapnik.java
Elimination of compiler warnings.
[simantics/district.git] / org.simantics.maps.server / src / org / simantics / district / maps / server / TileserverMapnik.java
index b047626a53253c82561992c71f2a39855460f889..3ba5157da66407bc3f9020e20f8d3d4e9d643307 100644 (file)
@@ -1,6 +1,5 @@
 package org.simantics.district.maps.server;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
@@ -12,6 +11,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Stream;
@@ -35,7 +35,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 public class TileserverMapnik {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TileserverMapnik.class);
-    private static final String[] ADDITIONAL_DEPENDENCIES = new String[] { "tilelive-vector@3.9.4", "tilelive-tmstyle@0.6.0" };
     
     private SystemProcess process;
     private Path serverRoot;
@@ -54,7 +53,7 @@ public class TileserverMapnik {
         return running.get();
     }
     
-    public void start() throws Exception {
+    public void start(Optional<TileserverStartListener> listener) throws Exception {
         // check if existing server is left hanging
         if (Files.exists(getPid())) {
             String pid = new String(Files.readAllBytes(getPid()));
@@ -63,10 +62,10 @@ public class TileserverMapnik {
         }
         
         // check that npm dependencies are satisfied
-        if (checkAndInstall(null)) {
-            checkAndInstall(ADDITIONAL_DEPENDENCIES[0]);
-            checkAndInstall(ADDITIONAL_DEPENDENCIES[1]);
-        }
+//        if (checkAndInstall(null, listener)) {
+//            checkAndInstall(ADDITIONAL_DEPENDENCIES[0], listener);
+//            checkAndInstall(ADDITIONAL_DEPENDENCIES[1], listener);
+//        }
         
         checkConfigJson();
         checkTm2Styles();
@@ -74,8 +73,9 @@ public class TileserverMapnik {
         if (process != null && process.isAlive())
             return;
         
-        StartedProcess startedProcess = new ProcessExecutor().directory(serverRoot.resolve("tileserver-mapnik").toFile()).destroyOnExit().environment(getEnv())
-                .command(NodeJS.executable().toString(), getTessera().toString(), "-c", getConfigJson().toString(), "-p", Integer.toString(MapsServerPreferences.defaultPort()))
+        Path tileliveTesseraWin = serverRoot.resolve("dist").resolve("node.exe").normalize().toAbsolutePath();
+        StartedProcess startedProcess = new ProcessExecutor().directory(serverRoot.resolve("dist").toFile()).destroyOnExit().environment(getEnv())
+                .command(tileliveTesseraWin.toString(), "-c", getConfigJson().toString(), "-p", Integer.toString(MapsServerPreferences.defaultPort()))
                 .redirectOutput(new Slf4jDebugOutputStream(LOGGER) {
                     
                     @Override
@@ -89,8 +89,10 @@ public class TileserverMapnik {
         Process nativeProcess = startedProcess.getProcess();
         process = Processes.newStandardProcess(nativeProcess);
         int pid = PidUtil.getPid(nativeProcess);
+        LOGGER.info("Writing pid-file to {} with pid={}", getPid(), pid);
         Files.write(getPid(), (pid + "").getBytes(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
         running.set(true);
+        listener.ifPresent(TileserverStartListener::started);
     }
 
     private Map<String, String> getEnv() {
@@ -119,46 +121,57 @@ public class TileserverMapnik {
         return serverRoot.resolve("pid");
     }
 
-    public void restart() throws Exception {
+    public void restart(Optional<TileserverStartListener> listener) throws Exception {
         stop();
-        start();
-    }
-    
-    private boolean checkIfInstalled(String module) throws Exception {
-        String tileserverMapnik = tileserverMapnikRoot().toString();
-        int retVal;
-        try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
-            if (module == null) {
-                retVal = NodeJS.npm(output, "--prefix", tileserverMapnik, "list");
-            } else {
-                retVal = NodeJS.npm(output, "--prefix", tileserverMapnik, "list", module);
-            }
-            String outputString = new String(output.toByteArray(), StandardCharsets.UTF_8);
-        }
-        return retVal == 0;
-    }
-    
-    private boolean install(String module) throws Exception {
-        String tileserverMapnik = tileserverMapnikRoot().toString();
-        int retVal;
-        if (module == null)
-            retVal = NodeJS.npm(null, "--prefix", tileserverMapnik, "install", "--save");
-        else 
-            retVal = NodeJS.npm(null, "--prefix", tileserverMapnik, "install", module, "--save");
-        if (retVal != 0)
-            LOGGER.warn("Could not install module " + module == null ? "package.json" : module + "! " + retVal);
-        return retVal == 0;
+        start(listener);
     }
     
-    private boolean checkAndInstall(String module) throws Exception {
-        boolean installed = checkIfInstalled(module); 
-        if (!installed)
-            install(module);
-        return !installed;
-    }
+//    private boolean checkIfInstalled(String module) throws Exception {
+//        String tileserverMapnik = tileserverMapnikRoot().toString();
+//        int retVal;
+//        try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
+//            if (module == null) {
+//                retVal = NodeJS.npm(output, "--prefix", tileserverMapnik, "list");
+//            } else {
+//                retVal = NodeJS.npm(output, "--prefix", tileserverMapnik, "list", module);
+//            }
+//            String outputString = new String(output.toByteArray(), StandardCharsets.UTF_8);
+//        }
+//        return retVal == 0;
+//    }
+//    
+//    private int install(String module, Optional<TileserverStartListener> listener) throws Exception {
+//        String tileserverMapnik = tileserverMapnikRoot().toString();
+//        int retVal;
+//        if (module == null) {
+//            listener.ifPresent(l -> l.installing("Installing tileserver-mapnik"));
+//            retVal = NodeJS.npm(null, "--prefix", tileserverMapnik, "install", "--save");
+//        } else { 
+//            retVal = NodeJS.npm(null, "--prefix", tileserverMapnik, "install", module, "--save");
+//        }
+//        if (retVal != 0)
+//            LOGGER.warn("Could not install module " + module == null ? "package.json" : module + "! " + retVal);
+//        return retVal;
+//    }
+//    
+//    private boolean checkAndInstall(String module, Optional<TileserverStartListener> listener) throws Exception {
+//        LOGGER.info("Installing module {}", String.valueOf(module));
+//        boolean installed = checkIfInstalled(module); 
+//        if (!installed) {
+//            int installSuccessfull = install(module, listener);
+//            if (installSuccessfull != 0) {
+//                LOGGER.warn("Installation of module {} failed!", String.valueOf(module));
+//                listener.ifPresent(l -> l.installationFailed(module, installSuccessfull));
+//            }
+//        } else {
+//            LOGGER.info("Module {} was already installed", String.valueOf(module));
+//        }
+//        return !installed;
+//    }
 
     
-    private Path tileserverMapnikRoot() {
+    @SuppressWarnings("unused")
+       private Path tileserverMapnikRoot() {
         return serverRoot.resolve("tileserver-mapnik").toAbsolutePath();
     }
     
@@ -167,10 +180,11 @@ public class TileserverMapnik {
     }
     
     private Path getICU() {
-        return serverRoot.resolve("tileserver-mapnik/node_modules/tilelive-vector/node_modules/mapnik/lib/binding/node-v46-win32-x64/share/icu").toAbsolutePath();
+        return serverRoot.resolve("dist/share/icu").toAbsolutePath();
     }
     
-    private Path getTessera() {
+    @SuppressWarnings("unused")
+       private Path getTessera() {
         return serverRoot.resolve("tileserver-mapnik/bin/tessera.js").toAbsolutePath();
     }
     
@@ -229,6 +243,7 @@ public class TileserverMapnik {
         return getDataDirectory().resolve(MapsServerPreferences.currentMBTiles());
     }
     
+    @SuppressWarnings("unchecked")
     public void checkTm2Styles() {
         Path tm2 = getStyleDirectory();
         try (DirectoryStream<Path> stream = Files.newDirectoryStream(tm2)) {
@@ -269,4 +284,12 @@ public class TileserverMapnik {
         return results;
     }
 
+    public static interface TileserverStartListener {
+        
+        void installing(String module);
+        
+        void installationFailed(String module, int returnValue);
+
+        void started();
+    }
 }