From 4747adf20648a1a8e7d8988135ae1d87989d755b Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 26 Jul 2019 15:26:11 +0300 Subject: [PATCH] Added a browser context for route-related actions. gitlab #58 Change-Id: I32760b2dd7feb15827cb234ed315a53dfcbc3a7e --- .../META-INF/MANIFEST.MF | 5 +- .../DistrictNetworkRoutesViewpoint.pgraph | 13 ++++ .../route/ontology/RouteResource.java | 9 +++ org.simantics.district.route.ui/adapters.xml | 7 ++ .../build.properties | 1 + .../route/ui/actions/SelectRouteAction.java | 67 +++++++++++++++++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph create mode 100644 org.simantics.district.route.ui/adapters.xml create mode 100644 org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/SelectRouteAction.java diff --git a/org.simantics.district.route.ontology/META-INF/MANIFEST.MF b/org.simantics.district.route.ontology/META-INF/MANIFEST.MF index ee4c1e64..61ec5737 100644 --- a/org.simantics.district.route.ontology/META-INF/MANIFEST.MF +++ b/org.simantics.district.route.ontology/META-INF/MANIFEST.MF @@ -6,7 +6,10 @@ Bundle-Version: 1.0.0.qualifier Bundle-Vendor: Semantum Oy Require-Bundle: org.simantics.layer0, org.simantics.district.network.ontology;bundle-version="1.0.0", - org.simantics.diagram.ontology;bundle-version="2.2.0" + org.simantics.diagram.ontology;bundle-version="2.2.0", + org.simantics.action.ontology;bundle-version="1.1.0", + org.simantics.silk.ontology;bundle-version="1.1.0", + org.simantics.viewpoint.ontology;bundle-version="1.2.0" Automatic-Module-Name: fi.vtt.apros.district.route.ontology Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: org.simantics.district.route.ontology diff --git a/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph b/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph new file mode 100644 index 00000000..f01d26b6 --- /dev/null +++ b/org.simantics.district.route.ontology/graph/DistrictNetworkRoutesViewpoint.pgraph @@ -0,0 +1,13 @@ +L0 = +DN = +DNR = +VP = +ACT = +SILK = + +RAC = DNR.RouteActionContext : VP.BrowseContext + @VP.actionContribution "Select Route" DNR.Route SILK.wand VP.EditActionCategory DNR.Actions.SelectRoute + +DNR.Actions : L0.Library + +DNR.Actions.SelectRoute : ACT.Action 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 def31255..c77dbf0f 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 @@ -10,11 +10,17 @@ import org.simantics.db.service.QueryControl; public class RouteResource { + public final Resource Actions; + public final Resource Actions_SelectRoute; public final Resource Route; + public final Resource RouteActionContext; public final Resource RouteFolder; 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 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"; } @@ -28,7 +34,10 @@ public class RouteResource { } public RouteResource(ReadGraph graph) { + Actions = getResourceOrNull(graph, URIs.Actions); + Actions_SelectRoute = getResourceOrNull(graph, URIs.Actions_SelectRoute); 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 new file mode 100644 index 00000000..66c37e3b --- /dev/null +++ b/org.simantics.district.route.ui/adapters.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/org.simantics.district.route.ui/build.properties b/org.simantics.district.route.ui/build.properties index e29652c5..34579a4c 100644 --- a/org.simantics.district.route.ui/build.properties +++ b/org.simantics.district.route.ui/build.properties @@ -3,5 +3,6 @@ output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml,\ + adapters.xml,\ fragment.e4xmi,\ OSGI-INF/ diff --git a/org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/SelectRouteAction.java b/org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/SelectRouteAction.java new file mode 100644 index 00000000..11de4cc4 --- /dev/null +++ b/org.simantics.district.route.ui/src/org/simantics/district/route/ui/actions/SelectRouteAction.java @@ -0,0 +1,67 @@ +package org.simantics.district.route.ui.actions; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +import org.eclipse.swt.widgets.Display; +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.network.ui.DistrictNetworkUIUtil; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SelectRouteAction implements ActionFactory { + + protected static final Logger LOGGER = LoggerFactory.getLogger(SelectRouteAction.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) { + LOGGER.error("Reading a route object failed"); //$NON-NLS-1$ + return; + } + + CompletableFuture> result = new CompletableFuture<>(); + result + .exceptionally(e -> Collections.emptyList()) + .thenAccept(dnElements -> { + if (!dnElements.isEmpty()) { + try { + Display display = Display.getDefault(); + if (display != null) + DistrictNetworkUIUtil.openDNDiagramWithSelection(display, dnElements); + else + LOGGER.error("No display found"); //$NON-NLS-1$ + } catch (DatabaseException e) { + LOGGER.error("Failed to open district network diagram with selection " + dnElements, e); //$NON-NLS-1$ + + } + } + }); + + 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