+ private void attachToConnection() {\r
+ ConnectionJudgement judgment = this.connectionJudgment;\r
+ if (judgment == null) {\r
+ ErrorLogger.defaultLogError("Cannot attach to connection, no judgment available on connection validity", null);\r
+ return;\r
+ }\r
+\r
+ ConnectionBuilder builder = new ConnectionBuilder(this.diagram);\r
+ RouteGraph before = lastRouteGraphTarget.getNode().getRouteGraph();\r
+ THashMap<Object, Object> copyMap = new THashMap<>();\r
+ RouteGraph after = before.copy(copyMap);\r
+\r
+ RouteLine attachTo = (RouteLine) copyMap.get(lastRouteGraphTarget.getLine());\r
+ after.makePersistent(attachTo);\r
+ for (RouteLine line : after.getAllLines()) {\r
+ if (!line.isTransient() && line.isHorizontal() == attachTo.isHorizontal()\r
+ && line.getPosition() == attachTo.getPosition()) {\r
+ attachTo = line;\r
+ break;\r
+ }\r
+ }\r
+ RouteLine attachToLine = attachTo;\r
+ RouteGraphDelta delta = new RouteGraphDelta(before, after);\r
+\r
+ Simantics.getSession().asyncRequest(new WriteRequest() {\r
+ @Override\r
+ public void perform(WriteGraph graph) throws DatabaseException {\r
+ graph.markUndoPoint();\r
+ Resource connection = ElementUtils.getObject(endTerminal.e);\r
+ if (!delta.isEmpty()) {\r
+ new RouteGraphConnection(graph, connection).synchronize(graph, before, after, delta);\r
+ }\r
+ Resource line = RouteGraphConnection.deserialize(graph, attachToLine.getData());\r
+ Deque<ControlPoint> cps = new ArrayDeque<>();\r
+ for (Iterator<ControlPoint> iterator = controlPoints.descendingIterator(); iterator.hasNext();)\r
+ cps.add(iterator.next());\r
+ builder.attachToRouteGraph(graph, judgment, connection, line, cps, startTerminal, FlagClass.Type.In);\r
+ }\r
+ }, new Callback<DatabaseException>() {\r
+ @Override\r
+ public void run(DatabaseException parameter) {\r
+ if (parameter != null)\r
+ ExceptionUtils.logAndShowError(parameter);\r
+ }\r
+ });\r
+ }\r
+\r