/** * Register a node. Nodes can be registered for easy access. */ public void registerNode(ITreeNode node) { synchronized(nodes) { // System.out.println("registered: "+node.getId()); if(nodes.containsKey(node.getId())) throw new RuntimeException("Node id already contained: " + node + ", " + node.getId()); nodes.put(node.getId(), node); } }
/** * Remove a zombie node. */ public void removeZombieNode(ITreeNode node) { synchronized(nodes) { Integer num = zombies.get(node.getId()); if(num.intValue()>1) { num = Integer.valueOf(num.intValue()-1); zombies.put(node.getId(), num); // if(node.getId().toString().startsWith("ANDTest@")) // System.out.println("Zombie node count decreased: "+node+", "+num); } else { // if(node.getId().toString().startsWith("ANDTest@")) // System.out.println("Zombie node removed: "+node+", "+num); deregisterNode(node); } } }
/** * Test if two nodes are equal. */ public boolean equals(Object obj) { return obj instanceof ITreeNode && SUtil.equals(getId(), ((ITreeNode) obj).getId()); }
/** * Add a node. Informs listeners. */ public void addNode(ITreeNode node) { added.put(node.getId(), node); INodeListener[] lis = nodelisteners.toArray(new INodeListener[nodelisteners.size()]); for(int i = 0; i < lis.length; i++) { lis[i].nodeAdded(node); } for(int i = 0; i < node.getCachedChildren().size(); i++) { addNode((ITreeNode)node.getCachedChildren().get(i)); } }
public void nodeRemoved(ITreeNode node) { // System.out.println("node rem: "+node); Object nodeid = node.getId(); if(panels.containsKey(nodeid)) { storeCurrentPanelSettings(); // System.out.println("removeing: "+nodeid+" "+cards.getComponent(nodeid)); detail.remove(cards.getComponent(nodeid)); IAbstractViewerPanel panel = panels.remove(nodeid); panel.shutdown(); comptree.getModel().fireNodeChanged(node); } }
/** * Add a child and update the tree. Must be called from swing thread. */ public void addChild(int index, ITreeNode node) { // Ignore when node already removed. if(!model.isZombieNode(node.getId())) { // set parent to this ((AbstractTreeNode)node).setParent(this); if(children == null) children = new ArrayList(); children.add(index, node); model.addNode(node); model.fireNodeAdded(this, node, index); if (searching) dirty = true; // if(node.getId().toString().startsWith("ANDTest@")) // System.out.println("Node added: "+node+", "+children); } else { model.removeZombieNode(node); } }
if(!model.isZombieNode(node.getId()))
/** * Remove a child and update the tree. */ public void removeChild(ITreeNode node) { int index = getIndexOfChild(node); if(index != -1) { // boolean removed = children.remove(node); // if(node.getId().toString().startsWith("ANDTest@")) // System.out.println("removed: "+node+", "+removed); model.deregisterNode(node); model.fireNodeRemoved(this, node, index); if (searching) dirty = true; } else { getModel().addZombieNode(node.getId()); } }