From 76d4bb1c494a0d9059062baf2f3ba4b3559c3e19 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Wed, 7 Aug 2019 13:30:05 +0300 Subject: [PATCH] Added a route validation command to model browser gitlab #58 Change-Id: I4af93100f4003b66f5229394674cb61312e65e64 --- .../DistrictNetworkRoutesViewpoint.pgraph | 2 + .../route/ontology/RouteResource.java | 3 + org.simantics.district.route.ui/adapters.xml | 4 ++ .../route/ui/actions/ValidateRouteAction.java | 58 +++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/ValidateRouteAction.java diff --git a/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph b/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph index f01d26b6..1b5c1ecd 100644 --- a/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph +++ b/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph @@ -7,7 +7,9 @@ SILK = RAC = DNR.RouteActionContext : VP.BrowseContext @VP.actionContribution "Select Route" DNR.Route SILK.wand VP.EditActionCategory DNR.Actions.SelectRoute + @VP.actionContribution "Validate Route" DNR.Route SILK.accept VP.EditActionCategory DNR.Actions.ValidateRoute DNR.Actions : L0.Library DNR.Actions.SelectRoute : ACT.Action +DNR.Actions.ValidateRoute : ACT.Action \ No newline at end of file diff --git a/org.simantics.district.route.ontology/src/org/simantics/district/route/ontology/RouteResource.java b/org.simantics.district.route.ontology/src/org/simantics/district/route/ontology/RouteResource.java index c77dbf0f..b9641270 100644 --- a/org.simantics.district.route.ontology/src/org/simantics/district/route/ontology/RouteResource.java +++ b/org.simantics.district.route.ontology/src/org/simantics/district/route/ontology/RouteResource.java @@ -12,6 +12,7 @@ public class RouteResource { public final Resource Actions; public final Resource Actions_SelectRoute; + public final Resource Actions_ValidateRoute; public final Resource Route; public final Resource RouteActionContext; public final Resource RouteFolder; @@ -19,6 +20,7 @@ public class RouteResource { public static class URIs { public static final String Actions = "http://www.simantics.org/DistrictNetworkRoutes-1.0/Actions"; public static final String Actions_SelectRoute = "http://www.simantics.org/DistrictNetworkRoutes-1.0/Actions/SelectRoute"; + public static final String Actions_ValidateRoute = "http://www.simantics.org/DistrictNetworkRoutes-1.0/Actions/ValidateRoute"; public static final String Route = "http://www.simantics.org/DistrictNetworkRoutes-1.0/Route"; public static final String RouteActionContext = "http://www.simantics.org/DistrictNetworkRoutes-1.0/RouteActionContext"; public static final String RouteFolder = "http://www.simantics.org/DistrictNetworkRoutes-1.0/RouteFolder"; @@ -36,6 +38,7 @@ public class RouteResource { public RouteResource(ReadGraph graph) { Actions = getResourceOrNull(graph, URIs.Actions); Actions_SelectRoute = getResourceOrNull(graph, URIs.Actions_SelectRoute); + Actions_ValidateRoute = getResourceOrNull(graph, URIs.Actions_ValidateRoute); Route = getResourceOrNull(graph, URIs.Route); RouteActionContext = getResourceOrNull(graph, URIs.RouteActionContext); RouteFolder = getResourceOrNull(graph, URIs.RouteFolder); diff --git a/org.simantics.district.route.ui/adapters.xml b/org.simantics.district.route.ui/adapters.xml index 66c37e3b..94d23ae7 100644 --- a/org.simantics.district.route.ui/adapters.xml +++ b/org.simantics.district.route.ui/adapters.xml @@ -4,4 +4,8 @@ + + + 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$ + } + } + }; + } +} -- 2.47.1