Ejemplo n.º 1
0
  // 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;
  }