/** {@inheritDoc} */ public void process(final LGraph layeredGraph, final IKielerProgressMonitor monitor) { monitor.begin("Comment pre-processing", 1); Iterator<LNode> nodeIter = layeredGraph.getLayerlessNodes().iterator(); while (nodeIter.hasNext()) { LNode node = nodeIter.next(); if (node.getProperty(LayoutOptions.COMMENT_BOX)) { int edgeCount = 0; LEdge edge = null; LPort oppositePort = null; for (LPort port : node.getPorts()) { edgeCount += port.getDegree(); if (port.getIncomingEdges().size() == 1) { edge = port.getIncomingEdges().get(0); oppositePort = edge.getSource(); } if (port.getOutgoingEdges().size() == 1) { edge = port.getOutgoingEdges().get(0); oppositePort = edge.getTarget(); } } if (edgeCount == 1 && oppositePort.getDegree() == 1 && !oppositePort.getNode().getProperty(LayoutOptions.COMMENT_BOX)) { // found a comment that has exactly one connection processBox(node, edge, oppositePort, oppositePort.getNode()); nodeIter.remove(); } else { // reverse edges that are oddly connected List<LEdge> revEdges = Lists.newArrayList(); for (LPort port : node.getPorts()) { for (LEdge outedge : port.getOutgoingEdges()) { if (!outedge.getTarget().getOutgoingEdges().isEmpty()) { revEdges.add(outedge); } } for (LEdge inedge : port.getIncomingEdges()) { if (!inedge.getSource().getIncomingEdges().isEmpty()) { revEdges.add(inedge); } } } for (LEdge re : revEdges) { re.reverse(layeredGraph, true); } } } } monitor.done(); }