X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/core/ListenerMap.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/core/ListenerMap.java new file mode 100644 index 0000000..9b51572 --- /dev/null +++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/core/ListenerMap.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpeclipse.xdebug.core; + +import java.util.HashMap; + + +/** + * Local version of org.eclipse.jface.util.ListenerList (modified)s + */ +public class ListenerMap { + /** + * The current number of listeners. + * Maintains invariant: 0 <= fSize <= listeners.length. + */ + private int fSize; + + /** + * The map of listeners. Initially null but initialized + * to an array of size capacity the first time a listener is added. + * Maintains invariant: listeners != null if and only if fSize != 0 + */ + private HashMap fListeners = null; +// private HashMap fListeners = null; + + /** + * Creates a listener map with the given initial capacity. + * + * @param capacity the number of listeners which this list can initially accept + * without growing its internal representation; must be at least 1 + */ + public ListenerMap(int capacity) { + if (capacity < 1) { + throw new IllegalArgumentException(); + } + fListeners = new HashMap(capacity); + fSize = 0; + } + + /** + * Adds a listener to the Map. + * Overwrites an existing listener with the same IDE_Key. + * + * @param listener a listener + * @param ideKey IDE-key of the listener + */ + public synchronized void add(Object listener,String ideKey) { + if (listener == null) { + throw new IllegalArgumentException(); + } + // check for duplicates using identity + if (fListeners.get(ideKey) != null) + fSize++; + fListeners.put(ideKey,listener); + } + + /** + * Returns a map containing all the registered listeners. + * The resulting map is unaffected by subsequent adds or removes. + * If there are no listeners registered, the result is an empty map. + * Use this method when notifying listeners, so that any modifications + * to the listener list during the notification will have no effect on the + * notification itself. + */ + public synchronized HashMap getListeners() { + if (fSize == 0) { + return null; + } + HashMap result = new HashMap(fListeners); + return result; + } + + /** + * Returns the listener associated with the ideKey. + * If there is no listener registered, the result is null. + * Use this method when notifying listeners, so that any modifications + * to the listener list during the notification will have no effect on the + * notification itself. + */ + public synchronized Object getListener(String ideKey) { + return fListeners.get(ideKey); + } + + /** + * Removes a listener from the list. + * Has no effect if an identical listener was not already registered. + * + * @param listener a listener + */ + public synchronized void remove(Object listener,String ideKey) { + if (listener == null) { + throw new IllegalArgumentException(); + } + + if (fListeners.get(ideKey) == listener) { + fListeners.remove(ideKey); + fSize--; + } + } + + /** + * Removes all the listeners from the list. + */ + public synchronized void removeAll() { + fListeners.clear(); + fSize = 0; + } + + /** + * Returns the number of registered listeners + * + * @return the number of registered listeners + */ + public int size() { + return fSize; + } +} \ No newline at end of file