public void childAdded(NodeChangeEvent evt) { NodeChangeListener [] listeners; Preferences childNode; synchronized (tree.treeLock()) { String childName = evt.getChild().name(); if (removed || removedChildren.contains(childName)) { return; } childNode = children.get(childName); if (childNode != null) { // swap delegates ((ProxyPreferencesImpl) childNode).changeDelegate(evt.getChild()); } else { childNode = node(evt.getChild().name()); } listeners = nodeListeners.toArray(new NodeChangeListener[nodeListeners.size()]); } NodeChangeEvent myEvt = null; for(NodeChangeListener l : listeners) { if (myEvt == null) { myEvt = new NodeChangeEvent(this, childNode); } l.childAdded(evt); } }
/** * Invoke listeners when a node is added or removed. * * @param node the added or removed node */ public void nodeChanged(DbPreferences node) { DbPreferences parent = node.parent(); if (parent != null) { Set<NodeChangeListener> listeners = nodeListeners.get(new ListenerKey(parent)); if (listeners != null) { NodeChangeEvent ev = new NodeChangeEvent(node.parent(), node); for (NodeChangeListener listener: listeners) { if (node.getPersistentNode().isRemoved()) { listener.childRemoved(ev); } else { listener.childAdded(ev); } } } } if (node.isRootNode() && node.getPersistentNode().isRemoved()) { removeRoot(node); } }
children.remove(nce.getChild().name());
public void childRemoved(NodeChangeEvent evt) { NodeChangeListener [] listeners; Preferences childNode; synchronized (tree.treeLock()) { String childName = evt.getChild().name(); if (removed || removedChildren.contains(childName)) { return; } childNode = children.get(childName); if (childNode != null) { // swap delegates ((ProxyPreferencesImpl) childNode).changeDelegate(null); } else { // nobody has accessed the child yet return; } listeners = nodeListeners.toArray(new NodeChangeListener[nodeListeners.size()]); } NodeChangeEvent myEvt = null; for(NodeChangeListener l : listeners) { if (myEvt == null) { myEvt = new NodeChangeEvent(this, childNode); } l.childAdded(evt); } }