private List<Node> getAllAncestors(Node a, Predicate<Node> stop) { Set<Node> all = new LinkedHashSet<Node>(); Queue<Node> queue = new ArrayDeque<Node>(); queue.add(a); while (!queue.isEmpty()) { Node aNode = queue.remove(); all.add(aNode); if (stop.apply(aNode)) { return new ArrayList<Node>(all); } for (Edge edge : aNode.getDownEdges()) { queue.add(edge.getDownNode()); } } return new ArrayList<Node>(all); }
@Nullable private Node arrowToNode(MouseEvent e) { int y = PositionUtil.getYInsideRow(e); int x = e.getX(); GraphPrintCell row = getGraphPrintCell(e); if (row == null) { return null; } SpecialPrintElement printElement = myGraphPainter.mouseOverArrow(row, x, y); if (printElement == null) { return null; } Edge edge = printElement.getGraphElement().getEdge(); if (edge == null) { return null; } return printElement.getType() == SpecialPrintElement.Type.DOWN_ARROW ? edge.getDownNode() : edge.getUpNode(); }