]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/src/org/simantics/district/maps/server/NodeJS.java
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / src / org / simantics / district / maps / server / NodeJS.java
diff --git a/org.simantics.maps.server/src/org/simantics/district/maps/server/NodeJS.java b/org.simantics.maps.server/src/org/simantics/district/maps/server/NodeJS.java
new file mode 100644 (file)
index 0000000..5bbb5ec
--- /dev/null
@@ -0,0 +1,66 @@
+package org.simantics.district.maps.server;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URISyntaxException;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeoutException;
+
+import org.simantics.district.maps.server.utils.EnvUtil;
+import org.zeroturnaround.exec.InvalidExitValueException;
+import org.zeroturnaround.exec.ProcessExecutor;
+import org.zeroturnaround.exec.stream.slf4j.Slf4jStream;
+
+public class NodeJS {
+
+    public static final String NODEJS_VERSION = "v4.8.0";
+    
+    private static final String NODE = "node";
+    
+    private static Path nodeJSFolder() throws IOException, URISyntaxException {
+        StringBuilder sb = new StringBuilder();
+        sb.append(NODE).append("-").append(NODEJS_VERSION).append("-").append(getOs()).append("-").append(getArch());
+        return Activator.getNodeJSRoot().resolve(sb.toString());
+    }
+    
+    public static Path executable() throws IOException, URISyntaxException {
+        String nodeJSexecutable = NODE;
+        if (EnvUtil.calculateOS() == "win")
+            nodeJSexecutable = nodeJSexecutable + ".exe";
+        return nodeJSFolder().resolve(nodeJSexecutable).toAbsolutePath().normalize();
+    }
+    
+    private static Path npmExecutable() throws IOException, URISyntaxException {
+        String npmExecutable = "npm";
+        if (EnvUtil.calculateOS() == "win")
+            npmExecutable = npmExecutable + ".cmd";
+        return nodeJSFolder().resolve(npmExecutable).toAbsolutePath().normalize();
+    }
+    
+    private static String getArch() {
+        return EnvUtil.calculateArch();
+    }
+
+    private static String getOs() {
+        return EnvUtil.calculateOS();
+    }
+
+    public static int npm(OutputStream output, String... args) throws InvalidExitValueException, IOException, InterruptedException, TimeoutException, URISyntaxException {
+        List<String> actualArgs = new ArrayList<>();
+        actualArgs.add(npmExecutable().toString());
+        actualArgs.addAll(Arrays.asList(args));
+        ProcessExecutor exec = new ProcessExecutor().command(actualArgs).redirectOutput(Slf4jStream.ofCaller().asInfo()).destroyOnExit();
+        if (output != null)
+            exec.redirectOutputAlsoTo(output);
+        return exec.execute().getExitValue();
+    }
+    
+
+    public static void main(String[] args) throws Exception {
+        TileserverMapnik server = TileserverMapnikInstance.get();
+        server.start();
+    }
+}