From ba7538f944093917a2564f1ccde362439ce65495 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 26 Jul 2019 15:23:17 +0300 Subject: [PATCH] Add a method for unpersisting individual routes into RouteService gitlab #57 Change-Id: I5d486ca7e9362a8685ebe2c04579f001339ecde3 --- .../district/route/RouteService.java | 2 ++ .../route/internal/RoutePersistence.java | 30 +++++++++++++++---- .../route/internal/RouteServiceImpl.java | 14 +++++++++ 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/org.simantics.district.route/src/org/simantics/district/route/RouteService.java b/org.simantics.district.route/src/org/simantics/district/route/RouteService.java index 5d3f63dc..ce8c2848 100644 --- a/org.simantics.district.route/src/org/simantics/district/route/RouteService.java +++ b/org.simantics.district.route/src/org/simantics/district/route/RouteService.java @@ -30,4 +30,6 @@ public interface RouteService { List routers(); + Route readRoute(Object backendRouteObject); + } diff --git a/org.simantics.district.route/src/org/simantics/district/route/internal/RoutePersistence.java b/org.simantics.district.route/src/org/simantics/district/route/internal/RoutePersistence.java index fceb6612..4bc0c6f0 100644 --- a/org.simantics.district.route/src/org/simantics/district/route/internal/RoutePersistence.java +++ b/org.simantics.district.route/src/org/simantics/district/route/internal/RoutePersistence.java @@ -23,6 +23,7 @@ import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.QueryIndexUtils; import org.simantics.db.layer0.request.PossibleActiveModel; +import org.simantics.db.layer0.request.PossibleModel; import org.simantics.db.layer0.util.RemoverUtil; import org.simantics.district.network.ontology.DistrictNetworkResource; import org.simantics.district.route.Waypoint; @@ -135,16 +136,33 @@ public class RoutePersistence { List routes = new ArrayList<>(); for (Resource route : graph.syncRequest(new ObjectsWithType(rf, L0.ConsistsOf, RR.Route))) { - RouteImpl ri = new RouteImpl(graph.getRelatedValue(route, L0.HasLabel, Bindings.STRING)) - .backend(route) - .modelEntity(model) - .waypoints(toWaypoints(graph, ListUtils.toList(graph, route))); - routes.add(ri); + routes.add(getRoute(graph, model, route)); } return routes; } + public static RouteImpl getRoute(ReadGraph graph, Resource model, Resource route) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + RouteImpl ri = new RouteImpl(graph.getRelatedValue(route, L0.HasLabel, Bindings.STRING)) + .backend(route) + .modelEntity(model) + .waypoints(toWaypoints(graph, ListUtils.toList(graph, route))); + return ri; + } + + public static class RouteRequest extends ResourceRead { + public RouteRequest(Resource resource) { + super(resource); + } + + @Override + public RouteImpl perform(ReadGraph graph) throws DatabaseException { + Resource model = graph.syncRequest(new PossibleModel(resource)); + return model != null ? getRoute(graph, model, resource) : null; + } + } + public static class ModelRoutesRequest extends ResourceRead> { public ModelRoutesRequest(Resource model) { super(model); @@ -154,7 +172,7 @@ public class RoutePersistence { return findRoutes(graph, resource); } } - + public static class ActiveModelRoutesRequest extends UniqueRead> { @Override public List perform(ReadGraph graph) throws DatabaseException { diff --git a/org.simantics.district.route/src/org/simantics/district/route/internal/RouteServiceImpl.java b/org.simantics.district.route/src/org/simantics/district/route/internal/RouteServiceImpl.java index 6817ea32..4690ac46 100644 --- a/org.simantics.district.route/src/org/simantics/district/route/internal/RouteServiceImpl.java +++ b/org.simantics.district.route/src/org/simantics/district/route/internal/RouteServiceImpl.java @@ -13,6 +13,7 @@ import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.common.procedure.adapter.DisposableListener; import org.simantics.db.common.procedure.adapter.DisposableSyncListener; +import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.PossibleActiveModel; import org.simantics.db.management.ISessionContext; import org.simantics.db.management.ISessionContextChangedListener; @@ -201,4 +202,17 @@ public class RouteServiceImpl implements RouteService, ISessionContextChangedLis }); } + @Override + public Route readRoute(Object backendRouteObject) { + if (!(backendRouteObject instanceof Resource)) + return null; + + try { + return Simantics.getSession().syncRequest(new RoutePersistence.RouteRequest((Resource)backendRouteObject)); + } catch (DatabaseException e) { + LOGGER.error("Failed to read district route object for " + backendRouteObject, e); + return null; + } + } + } -- 2.47.1