X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.route.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Froute%2Fui%2Factions%2FValidateRouteAction.java;fp=org.simantics.district.route.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Froute%2Fui%2Factions%2FValidateRouteAction.java;h=5b0e7d0506e456b40532fe8fd18364bb052123c0;hb=76d4bb1c494a0d9059062baf2f3ba4b3559c3e19;hp=0000000000000000000000000000000000000000;hpb=b27f05550f4d7e531f93ce946be71a7a95277a9c;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/ValidateRouteAction.java b/org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/ValidateRouteAction.java new file mode 100644 index 00000000..5b0e7d05 --- /dev/null +++ b/org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/ValidateRouteAction.java @@ -0,0 +1,58 @@ +package org.simantics.district.route.ui.actions; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +import org.simantics.Simantics; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.district.route.Route; +import org.simantics.district.route.RouteJob; +import org.simantics.district.route.RouterConfiguration; +import org.simantics.district.route.internal.RoutePersistence; +import org.simantics.utils.ui.dialogs.ShowMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ValidateRouteAction implements ActionFactory { + + protected static final Logger LOGGER = LoggerFactory.getLogger(ValidateRouteAction.class); + + @Override + public Runnable create(Object target) { + if (!(target instanceof Resource)) + return null; + + return new Runnable() { + @Override + public void run() { + try { + Route route = Simantics.getSession().syncRequest(new RoutePersistence.RouteRequest((Resource)target)); + if (route == null) { + ShowMessage.showInformation("Route Validation", "Reading the route object failed"); + LOGGER.error("Reading a route object failed"); //$NON-NLS-1$ + return; + } + + CompletableFuture> result = new CompletableFuture<>(); + result.exceptionally(e -> null).thenAccept(dnElements -> { + if (dnElements != null) { + if (!dnElements.isEmpty()) + ShowMessage.showInformation("Route Validation", "The route is valid"); + else + ShowMessage.showInformation("Route Validation", "The route produced an empty list of vertices"); + } + }); + + RouterConfiguration config = new RouterConfiguration(); + new RouteJob(config, route, result).schedule(); + } + catch (DatabaseException e) { + LOGGER.error("Error in selecting route " + target, e); //$NON-NLS-1$ + } + } + }; + } +}