]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/TileserverMapnikStartJob.java
Adding pkg-precompiled tileserver-mapnik to avoid npm install
[simantics/district.git] / org.simantics.maps.server.ui / src / org / simantics / maps / server / ui / TileserverMapnikStartJob.java
diff --git a/org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/TileserverMapnikStartJob.java b/org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/TileserverMapnikStartJob.java
new file mode 100644 (file)
index 0000000..a729bfc
--- /dev/null
@@ -0,0 +1,75 @@
+package org.simantics.maps.server.ui;
+
+import java.util.Optional;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.simantics.district.maps.server.TileserverMapnik.TileserverStartListener;
+import org.simantics.district.maps.server.TileserverMapnikInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TileserverMapnikStartJob extends Job {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(TileserverMapnikStartJob.class);
+    
+    public TileserverMapnikStartJob() {
+        super("Tileserver start job");
+    }
+
+    @Override
+    protected IStatus run(IProgressMonitor monitor) {
+        monitor.beginTask("Starting tileserver", 100);
+        try {
+            StartListener startListener = new StartListener(monitor);
+            TileserverMapnikInstance.get().start(Optional.of(startListener));
+            if (startListener.module != null || startListener.returnValue != 0)
+                return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not install " + String.valueOf(startListener.module) + " with returnValue " + startListener.returnValue);
+            return Status.OK_STATUS;
+        } catch (Exception e) {
+            LOGGER.error("Could not start tileserver-mapnik", e);
+            return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not start tileserver-mapnik: " + e.getMessage());
+        }
+    }
+
+    private class StartListener implements TileserverStartListener {
+
+        private IProgressMonitor monitor;
+        private String module;
+        private int returnValue;
+
+        public StartListener(IProgressMonitor monitor) {
+            this.monitor = monitor;
+        }
+
+        @Override
+        public void installing(String module) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Installing module ");
+            if (module == null)
+                module = "tileserver-mapnik";
+            sb.append(module);
+            monitor.subTask(sb.toString());
+            monitor.worked(30);
+        }
+
+        @Override
+        public void installationFailed(String module, int returnValue) {
+            // set as failed
+            this.module = module;
+            this.returnValue = returnValue;
+            LOGGER.warn("Installation of module {} failed with returnValue ", String.valueOf(module), returnValue);
+        }
+
+        @Override
+        public void started() {
+            monitor.subTask("Finished");
+            monitor.worked(10);
+            monitor.done();
+            if (LOGGER.isDebugEnabled())
+                LOGGER.debug("Tileserver started succesfully");
+        }
+    }
+}