]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/TileserverMapnikStartJob.java
Make background map preference changes apply immediately
[simantics/district.git] / org.simantics.maps.server.ui / src / org / simantics / maps / server / ui / TileserverMapnikStartJob.java
1 package org.simantics.maps.server.ui;
2
3 import java.util.Optional;
4 import java.util.function.Consumer;
5
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;
14
15 public class TileserverMapnikStartJob extends Job {
16
17     private static final Logger LOGGER = LoggerFactory.getLogger(TileserverMapnikStartJob.class);
18     private Consumer<IStatus> callback;
19     
20     public TileserverMapnikStartJob(Consumer<IStatus> callback) {
21         super("Tileserver start job");
22         this.callback = callback;
23     }
24
25     @Override
26     protected IStatus run(IProgressMonitor monitor) {
27         monitor.beginTask("Starting tileserver", 100);
28         IStatus status = Status.OK_STATUS;
29         try {
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());
37         }
38         callback.accept(status);
39         return status;
40     }
41
42     private class StartListener implements TileserverStartListener {
43
44         private IProgressMonitor monitor;
45         private String module;
46         private int returnValue;
47
48         public StartListener(IProgressMonitor monitor) {
49             this.monitor = monitor;
50         }
51
52         @Override
53         public void installing(String module) {
54             StringBuilder sb = new StringBuilder();
55             sb.append("Installing module ");
56             if (module == null)
57                 module = "tileserver-mapnik";
58             sb.append(module);
59             monitor.subTask(sb.toString());
60             monitor.worked(30);
61         }
62
63         @Override
64         public void installationFailed(String module, int returnValue) {
65             // set as failed
66             this.module = module;
67             this.returnValue = returnValue;
68             LOGGER.warn("Installation of module {} failed with returnValue ", String.valueOf(module), returnValue);
69         }
70
71         @Override
72         public void started() {
73             monitor.subTask("Finished");
74             monitor.worked(10);
75             monitor.done();
76             if (LOGGER.isDebugEnabled())
77                 LOGGER.debug("Tileserver started succesfully");
78         }
79     }
80 }