1 package org.simantics.district.route.ui.actions;
4 import java.util.concurrent.CompletableFuture;
6 import org.simantics.Simantics;
7 import org.simantics.db.Resource;
8 import org.simantics.db.exception.DatabaseException;
9 import org.simantics.db.layer0.adapter.ActionFactory;
10 import org.simantics.district.route.Route;
11 import org.simantics.district.route.RouteJob;
12 import org.simantics.district.route.RouterConfiguration;
13 import org.simantics.district.route.internal.RoutePersistence;
14 import org.simantics.utils.ui.dialogs.ShowMessage;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
18 public class ValidateRouteAction implements ActionFactory {
20 protected static final Logger LOGGER = LoggerFactory.getLogger(ValidateRouteAction.class);
23 public Runnable create(Object target) {
24 if (!(target instanceof Resource))
27 return new Runnable() {
31 Route route = Simantics.getSession().syncRequest(new RoutePersistence.RouteRequest((Resource)target));
33 ShowMessage.showInformation("Route Validation", "Reading the route object failed");
34 LOGGER.error("Reading a route object failed"); //$NON-NLS-1$
38 CompletableFuture<List<Resource>> result = new CompletableFuture<>();
39 result.exceptionally(e -> null).thenAccept(dnElements -> {
40 if (dnElements != null) {
41 if (!dnElements.isEmpty())
42 ShowMessage.showInformation("Route Validation", "The route is valid");
44 ShowMessage.showInformation("Route Validation", "The route produced an empty list of vertices");
48 RouterConfiguration config = new RouterConfiguration();
49 new RouteJob(config, route, result).schedule();
51 catch (DatabaseException e) {
52 LOGGER.error("Error in selecting route " + target, e); //$NON-NLS-1$