/**
  * Deselects all graph cells that have the same userObject as specified in the parameter.
  *
  * @param root The graph cell whose userObject will be considered.
  */
 private void removeAll(Object root) {
   if (root != null) {
     if (root instanceof DefaultGraphCell) {
       // the cell is a DefaultGraphCell
       DefaultGraphCell rootCell = (DefaultGraphCell) root;
       // get all graph cells that have the same userObject like the rootCell
       List<Object> list = getCellsWithUserObject(rootCell);
       if (list != null) {
         // deselect all the graph cells with the same userObject
         graph.getSelectionModel().removeSelectionCells(list.toArray());
       }
     }
   }
 }
 /**
  * Returns an list containing all graph cells taht have the same userObject.
  *
  * @param userObject The userObject for which all graph cels should be found.
  * @return java.util.List
  */
 private List<Object> getCellsWithUserObject(Object userObject) {
   List<Object> cells = new ArrayList<Object>();
   if (userObject != null) {
     // get the graph model, which contains all the cells of the graph
     GraphModel model = graph.getModel();
     // loop through all the cells of the model
     for (int i = 0; i < model.getRootCount(); i++) {
       Object root = model.getRootAt(i);
       // get the userObject for the curent graph cell
       Object rootUserObject = getUserObject(root);
       if (rootUserObject != null) {
         if (userObject == rootUserObject) {
           // the userObject of the current graph cell is teh same like the wanted userObject
           cells.add(root);
         }
       }
     }
   }
   return cells;
 }
 /**
  * Cretes a new instance for the specified graph. Assignes self as a listener for the graph.
  *
  * @param aGraph The graph that is listened to.
  */
 public DGraphSelectionListener(DGraph aGraph) {
   graph = aGraph;
   graph.getSelectionModel().addGraphSelectionListener(this);
 }