]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Merge "Set RouteLine.setLocation() as public method" into release/1.43.1
authorMarko Luukkainen <marko.luukkainen@semantum.fi>
Mon, 5 Oct 2020 13:10:54 +0000 (13:10 +0000)
committerGerrit Code Review <gerrit2@simantics>
Mon, 5 Oct 2020 13:10:54 +0000 (13:10 +0000)
bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/AsyncBarrierImpl.java
bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java
bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/RouteGraph.java
bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/RouteLine.java
bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/RouteTerminal.java

index 048d70b9f7046cf82c7306222098da041806436f..e37b9e8009a0f8b36951b0b4d117852d224f2c81 100644 (file)
@@ -27,7 +27,7 @@ public class AsyncBarrierImpl extends AtomicInteger implements AsyncBarrier {
 
     static final int WAIT_TIME = 60000;
 
-    public static final boolean PRINT = false;
+    public static final boolean PRINT = BarrierTracing.BOOKKEEPING && true;
 
     final AsyncBarrierImpl caller;
 
@@ -72,9 +72,9 @@ public class AsyncBarrierImpl extends AtomicInteger implements AsyncBarrier {
     void inc(Object id, String info) {
 
         if(PRINT) {
-            System.err.println("inc barrier[" + get() + "] " + this);
+            LOGGER.warn("inc barrier[" + get() + "] " + this);
             StackTraceElement[] elems = new Exception().getStackTrace();
-            for(int i=0;i<4;i++) System.err.println(elems[i]);
+            for(int i=0;i<4;i++) LOGGER.warn("{}", elems[i]);
         }
 
         if (incrementAndGet() == 1) {
@@ -93,9 +93,9 @@ public class AsyncBarrierImpl extends AtomicInteger implements AsyncBarrier {
     public void dec() {
 
         if(PRINT) {
-            System.err.println("dec barrier[" + get() + "] " + this);
+            LOGGER.warn("dec barrier[" + get() + "] " + this);
             StackTraceElement[] elems = new Exception().getStackTrace();
-            for(int i=0;i<3;i++) System.err.println(elems[i]);
+            for(int i=0;i<3;i++) LOGGER.warn("{}", elems[i]);
         }
 
         int count = decrementAndGet();
@@ -125,7 +125,7 @@ public class AsyncBarrierImpl extends AtomicInteger implements AsyncBarrier {
     public static String report(AsyncBarrierImpl barrier) {
         CacheEntry<?> e = BarrierTracing.entryMap.get(barrier);
         if(e != null) return e.toString();
-        else return "Barrier@" + System.identityHashCode(barrier);
+        else return "[" + barrier.get() + " requests]: Barrier@" + System.identityHashCode(barrier);
     }
 
     public static void printReverse(AsyncBarrierImpl barrier, int indent) {
@@ -134,7 +134,7 @@ public class AsyncBarrierImpl extends AtomicInteger implements AsyncBarrier {
             return;
         for (int i = 0; i < indent; i++)
             System.err.print(" ");
-        System.err.println("[" + barrier.get() + " requests]: " + report(barrier));
+        System.err.println(report(barrier));
 
         Collection<AsyncBarrierImpl> children = BarrierTracing.reverseLookup.get(barrier);
         if (children != null) {
@@ -169,7 +169,7 @@ public class AsyncBarrierImpl extends AtomicInteger implements AsyncBarrier {
                     LOGGER.warn("AsyncBarrierImpl.waitBarrier("
                             + request
                             + ") is taking long to execute, so far "
-                            + (waitCount / 1000) + " s.");
+                            + (waitCount / 1000) + " s. this.get() = " + get());
 
                     if (BarrierTracing.BOOKKEEPING) {
                         synchronized (BarrierTracing.reverseLookup) {
index cc15c1eac9111e063369cadd9c7167b3c843b4a9..776b448bfb05e196163425d280f62b24f5aaae3c 100644 (file)
@@ -5752,7 +5752,7 @@ public class ReadGraphImpl implements AsyncReadGraph {
 
        @Override
        public String toString() {
-               return "ReadGraphImpl[thread=" + Thread.currentThread() + "]";
+               return "ReadGraphImpl[thread=" + Thread.currentThread() + "] [parent=" + String.valueOf(parent) + "] [asyncBarrier=" + String.valueOf(asyncBarrier)+ "]";
        }
 
        @Override
index fe93717662b2220c840ca38d2be848ed2c542d3b..6357e537ac5c5d356b89803c25ad2ea3166c8706 100644 (file)
@@ -277,6 +277,12 @@ public class RouteGraph implements Serializable {
         transientLines.clear();
     }
     
+    protected void removeRouteTerminalsFromRouteLines() {
+        for(RouteLine line : lines) {
+            line.removeRouteTerminals();
+        }
+    }
+
     /**
      * Rotates given terminal clockwise by given amount
      * (also negative numbers are allowed). 
@@ -311,6 +317,7 @@ public class RouteGraph implements Serializable {
     public void update() {
         needsUpdate = false;
         removeTransientRouteLines();
+        removeRouteTerminalsFromRouteLines();
 
         //print();
         
index a365e14f112468acc7d99e6956f059179bab3922..b461d85f16db4fde16f127514fb6ad3680d3e8e4 100644 (file)
@@ -195,6 +195,10 @@ public class RouteLine implements RouteNode, Serializable {
        return lines;
     }
 
+    public void removeRouteTerminals() {
+        points.removeIf(p -> p instanceof RouteTerminal);
+    }
+
     public RouteTerminal getTerminal() {
         return terminal;
     }
index dd660d4aaa659df5bce98302794586549e423c04..3d6bd182f664b9146c5686155ac8d4f541e6f8cf 100644 (file)
@@ -164,18 +164,31 @@ public class RouteTerminal extends RoutePoint implements RouteNode, Serializable
             boolean routeLineDoesNotIntersectTerminal;
             double linePosition = line.position;
             if(line.isHorizontal) { 
+                if (linePosition == y) {
+                    // direct route to terminal
+                    line.addPoint(this);
+                    return;
+                }
                 lineDir = linePosition < y ? 3 : 1;
                 routeLineDoesNotIntersectTerminal = linePosition <= minY || linePosition >= maxY 
                         || boundingBoxesIntersect /* we ignore intersection in this case */;
             }
             else {
+                if (linePosition == x) {
+                    // direct route to terminal
+                    line.addPoint(this);
+                    return;
+                }
                 lineDir = linePosition < x ? 2 : 0;
                 routeLineDoesNotIntersectTerminal = linePosition <= minX || linePosition >= maxX
                         || boundingBoxesIntersect /* we ignore intersection in this case */;
             }
                     
             // We can route the connection directly to the right direction
-            if(routeLineDoesNotIntersectTerminal && 
+            if((routeLineDoesNotIntersectTerminal ||
+                    (line.isHorizontal && (x == minX || x == maxX)) || // already on the top/bottom edge
+                    (!line.isHorizontal && (y == minY || y == maxY)) // already on the left/right edge
+                    ) && 
                     Directions.isAllowed(allowedDirections, lineDir)) {           
                 RouteLine line0 = createLine0(lineDir);
                 new RouteLink(line0, line);