]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.route/src/org/simantics/district/route/internal/RouteImpl.java
Improved Routes view functionality
[simantics/district.git] / org.simantics.district.route / src / org / simantics / district / route / internal / RouteImpl.java
index 3619b602143a4c0be0c7c897df625acd3512829e..224f4af0392084adea8d168f215c10ace4c6b30e 100644 (file)
@@ -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;
@@ -68,8 +76,26 @@ public class RouteImpl implements Route {
 
     @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<Waypoint>) 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$
     }