X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.maps.server.ui%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Fserver%2Fui%2FTileserverMapnikStartJob.java;fp=org.simantics.maps.server.ui%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Fserver%2Fui%2FTileserverMapnikStartJob.java;h=a729bfc135498560ba7b2cc1ad3f65acb7ef561b;hb=7ab15b0d6830bf2f60116c435b22766139ba8f37;hp=0000000000000000000000000000000000000000;hpb=fab0b23a6127c7d7081556d59dcf1080d043dd90;p=simantics%2Fdistrict.git 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 index 00000000..a729bfc1 --- /dev/null +++ b/org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/TileserverMapnikStartJob.java @@ -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"); + } + } +}