1 package org.simantics.district.route.internal;
3 import java.util.concurrent.CompletableFuture;
5 import org.eclipse.core.runtime.IProgressMonitor;
6 import org.eclipse.core.runtime.IStatus;
7 import org.eclipse.core.runtime.Status;
8 import org.simantics.DatabaseJob;
9 import org.simantics.Simantics;
10 import org.simantics.db.Resource;
11 import org.simantics.db.WriteGraph;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.db.layer0.request.PossibleModel;
14 import org.simantics.db.request.Write;
15 import org.simantics.district.route.Route;
16 import org.simantics.district.route.RouteEvent;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
21 * @author Tuukka Lehtonen
24 public class RoutePersistenceJob extends DatabaseJob {
26 private static final Logger LOGGER = LoggerFactory.getLogger(RoutePersistenceJob.class);
28 private RouteImpl route;
29 private int eventType;
30 private CompletableFuture<Route> future;
32 public RoutePersistenceJob(RouteImpl route, int eventType, CompletableFuture<Route> future) {
33 super("Route Persistence");
35 this.eventType = eventType;
42 protected IStatus run(IProgressMonitor monitor) {
44 Simantics.getSession().syncRequest((Write) graph -> persist(graph));
45 future.complete(route);
46 } catch (DatabaseException e) {
47 LOGGER.error("Failed to persist route {}", route, e);
48 future.completeExceptionally(e);
50 return Status.OK_STATUS;
53 private void persist(WriteGraph graph) throws DatabaseException {
55 case RouteEvent.TYPE_ROUTE_DISCARDING:
59 case RouteEvent.TYPE_ROUTE_PERSISTING:
65 private void write(WriteGraph graph) throws DatabaseException {
66 graph.markUndoPoint();
67 Resource r = route.backend();
68 Resource me = route.modelEntity();
70 Resource model = graph.sync(new PossibleModel(me));
72 RoutePersistence.createRoute(graph,
75 RoutePersistence.toResources(route.waypoints()))
78 RoutePersistence.updateRoute(graph,
81 RoutePersistence.toResources(route.waypoints())
86 private void remove(WriteGraph graph) throws DatabaseException {
87 graph.markUndoPoint();
88 Resource r = route.backend();
90 RoutePersistence.removeRoute(graph, r);