// TODO: cache required protected int getEdgeIndex(EdgeItem e) { if (isIgnored(e)) { return -1; } NodeItem sourceItem = e.getSourceItem(); NodeItem targetItem = e.getTargetItem(); Iterator<EdgeItem> edges = sourceItem.edges(); // number of equal edges = same target and source int equalEdges = 0; // number of nearequal edges = same nodes, but any order target and source int sameEdges = 0; int edgeIndex = 0; int row = e.getRow(); while (edges.hasNext()) { EdgeItem edge = edges.next(); int edgeRow = edge.getRow(); if (isIgnored(edge)) { continue; } if (edge.getSourceItem() == sourceItem && edge.getTargetItem() == targetItem) { if (row == edgeRow) { edgeIndex = equalEdges; } equalEdges++; sameEdges++; } else if (edge.getSourceItem() == targetItem && edge.getTargetItem() == sourceItem) { sameEdges++; } } // draw the line straight if we found one edge if (lineForSingleEdge && edgeIndex == 0 && sameEdges == 1) { return -1; } else if (sameEdges > 1) { edgeIndex++; } return edgeIndex; }