/**
     * The structure of the event's "source" graph has been drastically changed in some way, and
     * this event signals the listener to refresh its view of that graph from model.
     */
    public void structureChanged(GraphEvent e) {
      if (e.getSource() != AbstractGraphController.this) {
        rerender();

        /* Object root = e.getTarget();

        //FIXME - this could be optimized--
        //        we may not need to rerender every
        //        node.

        for (Iterator i = _model.nodes(root); i.hasNext(); ) {
        rerenderNode(i.next());
        }
        for (Iterator i = GraphUtilities.localEdges(root, _model);
        i.hasNext(); ) {
        rerenderEdge(i.next());
        }
        */
      }
    }
 /**
  * A node has been been added to the registered graph or one of its subgraphs. The added node is
  * the "source" of the event.
  */
 public void nodeAdded(GraphEvent e) {
   if (e.getSource() != AbstractGraphController.this) {
     drawNode(e.getTarget());
   }
 }
 /**
  * A node has been been deleted from the registered graphs or one of its subgraphs. The deleted
  * node is the "source" of the event. The previous parent graph is accessible via
  * e.getOldValue().
  */
 public void nodeRemoved(GraphEvent e) {
   if (e.getSource() != AbstractGraphController.this) {
     // Remove the figure from the view
     clearNode(e.getTarget());
   }
 }
 /**
  * An edge's tail has been changed in a registered graph or one of its subgraphs. The added edge
  * is the "source" of the event. The previous tail is accessible via e.getOldValue().
  */
 public void edgeTailChanged(GraphEvent e) {
   if (e.getSource() != AbstractGraphController.this) {
     rerenderEdge(e.getTarget());
   }
 }