X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.route%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Froute%2Finternal%2FRouteImpl.java;h=25b12be760df602448cf1ac03935ac468f8ffd3c;hb=ba7538f944093917a2564f1ccde362439ce65495;hp=3619b602143a4c0be0c7c897df625acd3512829e;hpb=00103b12908c5071e641ca2bea2c42030ff67770;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.route/src/org/simantics/district/route/internal/RouteImpl.java b/org.simantics.district.route/src/org/simantics/district/route/internal/RouteImpl.java index 3619b602..25b12be7 100644 --- a/org.simantics.district.route/src/org/simantics/district/route/internal/RouteImpl.java +++ b/org.simantics.district.route/src/org/simantics/district/route/internal/RouteImpl.java @@ -4,13 +4,21 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.simantics.Simantics; import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.request.Read; import org.simantics.district.route.Route; import org.simantics.district.route.RouteEvent; import org.simantics.district.route.Waypoint; +import org.simantics.utils.threads.ThreadUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class RouteImpl implements Route { + private static final Logger LOGGER = LoggerFactory.getLogger(RouteImpl.class); + private String name; private Resource model; private Resource backend; @@ -66,10 +74,33 @@ public class RouteImpl implements Route { fireEvent(RouteEvent.TYPE_ROUTE_RENAMED); } + @Override + public boolean persisted() { + return backend != null; + } + @Override public Waypoint createWaypoint(Object backend) { - if (backend instanceof Resource) - return new WaypointImpl((Resource) backend, "Point 1"); + if (backend instanceof Resource) { + Resource waypoint = (Resource) backend; + WaypointImpl wp = new WaypointImpl(waypoint, ""); + + // Read real label in background + ThreadUtils.getBlockingWorkExecutor().submit(() -> { + try { + Waypoint p = Simantics.getSession().syncRequest( + (Read) graph -> RoutePersistence.toWaypoint(graph, waypoint)); + if (p != null) { + wp.setLabel(p.getLabel()); + rs.fireEvent(RouteEvent.TYPE_ROUTE_MODIFIED, RouteImpl.this); + } + } catch (DatabaseException e) { + LOGGER.error("Failed to read waypoint {} label", backend, e); + } + }); + + return wp; + } throw new IllegalArgumentException("only Resource type waypoints supported, got " + backend); //$NON-NLS-1$ }