/** * Adds the specified JGraphT edge to be reflected by this graph model. To be called only for * edges that already exist in the JGraphT graph. * * @param jtEdge a JGraphT edge to be reflected by this graph model. */ void handleJGraphTAddedEdge(E jtEdge) { DefaultEdge edgeCell = cellFactory.createEdgeCell(jtEdge); edgeToCell.put(jtEdge, edgeCell); cellToEdge.put(edgeCell, jtEdge); ConnectionSet cs = new ConnectionSet(); cs.connect( edgeCell, getVertexPort(jtGraph.getEdgeSource(jtEdge)), getVertexPort(jtGraph.getEdgeTarget(jtEdge))); internalInsertCell(edgeCell, createEdgeAttributeMap(edgeCell), cs); }
/** * Adds/removes an edge to/from the underlying JGraphT graph according to the change in the * specified JGraph edge. If both vertices are connected, we ensure to have a corresponding * JGraphT edge. Otherwise, we ensure NOT to have a corresponding JGraphT edge. * * <p>This method is to be called only for edges that have already been changed in the JGraph * graph. * * @param jEdge the JGraph edge that has changed. */ void handleJGraphChangedEdge(org.jgraph.graph.Edge jEdge) { if (isDangling(jEdge)) { if (cellToEdge.containsKey(jEdge)) { // a non-dangling edge became dangling -- remove the JGraphT // edge by faking as if the edge is removed from the JGraph. // TODO: Consider keeping the JGraphT edges outside the graph // to avoid loosing user data, such as weights. handleJGraphRemovedEdge(jEdge); } else { // a dangling edge is still dangling -- just ignore. } } else { // edge is not dangling if (cellToEdge.containsKey(jEdge)) { // edge already has a corresponding JGraphT edge. // check if any change to its endpoints. E jtEdge = cellToEdge.get(jEdge); Object jSource = getSourceVertex(this, jEdge); Object jTarget = getTargetVertex(this, jEdge); Object jtSource = cellToVertex.get(jSource); Object jtTarget = cellToVertex.get(jTarget); if ((jtGraph.getEdgeSource(jtEdge) == jtSource) && (jtGraph.getEdgeTarget(jtEdge) == jtTarget)) { // no change in edge's endpoints -- nothing to do. } else { // edge's end-points have changed -- need to refresh the // JGraphT edge. Refresh by faking as if the edge has been // removed from JGraph and then added again. // ALSO HERE: consider an alternative that maintains user // data handleJGraphRemovedEdge(jEdge); handleJGraphInsertedEdge(jEdge); } } else { // a new edge handleJGraphInsertedEdge(jEdge); } } }