From: Reino Ruusu Date: Fri, 26 Jul 2019 12:26:11 +0000 (+0300) Subject: Added a browser context for route-related actions. X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=9436598b43f152ca4ddd950418446dc5b06f426b;p=simantics%2Fdistrict.git Added a browser context for route-related actions. gitlab #58 Change-Id: I32760b2dd7feb15827cb234ed315a53dfcbc3a7e --- 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$ + } + } + }; + } + +}