1 package org.simantics.maps.server.ui;
3 import java.util.Optional;
4 import java.util.function.Consumer;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.core.runtime.jobs.Job;
10 import org.simantics.district.maps.server.TileserverMapnik.TileserverStartListener;
11 import org.simantics.district.maps.server.TileserverMapnikInstance;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 public class TileserverMapnikStartJob extends Job {
17 private static final Logger LOGGER = LoggerFactory.getLogger(TileserverMapnikStartJob.class);
18 private Consumer<IStatus> callback;
20 public TileserverMapnikStartJob(Consumer<IStatus> callback) {
21 super("Tileserver start job");
22 this.callback = callback;
26 protected IStatus run(IProgressMonitor monitor) {
27 monitor.beginTask("Starting tileserver", 100);
28 IStatus status = Status.OK_STATUS;
30 StartListener startListener = new StartListener(monitor);
31 TileserverMapnikInstance.get().start(Optional.of(startListener));
32 if (startListener.module != null || startListener.returnValue != 0)
33 status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not install " + String.valueOf(startListener.module) + " with returnValue " + startListener.returnValue);
34 } catch (Exception e) {
35 LOGGER.error("Could not start tileserver-mapnik", e);
36 status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not start tileserver-mapnik: " + e.getMessage());
38 callback.accept(status);
42 private class StartListener implements TileserverStartListener {
44 private IProgressMonitor monitor;
45 private String module;
46 private int returnValue;
48 public StartListener(IProgressMonitor monitor) {
49 this.monitor = monitor;
53 public void installing(String module) {
54 StringBuilder sb = new StringBuilder();
55 sb.append("Installing module ");
57 module = "tileserver-mapnik";
59 monitor.subTask(sb.toString());
64 public void installationFailed(String module, int returnValue) {
67 this.returnValue = returnValue;
68 LOGGER.warn("Installation of module {} failed with returnValue ", String.valueOf(module), returnValue);
72 public void started() {
73 monitor.subTask("Finished");
76 if (LOGGER.isDebugEnabled())
77 LOGGER.debug("Tileserver started succesfully");