package org.freeplane.plugin.workspace.features; import javax.swing.event.EventListenerList; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; public class WorkspaceNodeSelectionHandler { final EventListenerList listeners = new EventListenerList(); private final TreeSelectionListener treeListener = new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { fireSelectionChanged(e); } }; public TreeSelectionListener getTreeSelectionListener() { return this.treeListener ; } protected void fireSelectionChanged(TreeSelectionEvent e) { IWorkspaceNodeSelectionListener[] ls = listeners.getListeners(IWorkspaceNodeSelectionListener.class); for(int i=ls.length-1; i >= 0; i--) { ls[i].selectionChanged(e); } } public void add(IWorkspaceNodeSelectionListener listener) { synchronized (listeners) { if(!containsListener(listener)) { listeners.add(IWorkspaceNodeSelectionListener.class, listener); } } } public void remove(IWorkspaceNodeSelectionListener listener) { synchronized (listeners) { listeners.remove(IWorkspaceNodeSelectionListener.class, listener); } } private boolean containsListener(IWorkspaceNodeSelectionListener listener) { for (IWorkspaceNodeSelectionListener l : listeners.getListeners(IWorkspaceNodeSelectionListener.class)) { if(l.equals(listener)) { return true; } } return false; } }