/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.filesystems; import java.util.*; /** * A class that holds a list of EventListeners. * Replacement of EventListListener, that solves performance issue #20715 * @author rm111737 */ class ListenerList { private Class evListenerClass; private List listenerList; private Object[] listenerArray = null; /** * @param evListenerClass the type of the EventListener. */ ListenerList (Class evListenerClass) { this.evListenerClass = evListenerClass; listenerList = Collections.synchronizedList(new ArrayList ()); } /** * Adds the listener . **/ boolean add (EventListener listener) { if (!evListenerClass.isInstance(listener)) return false; listenerArray = null; return listenerList.add(listener); } /** * Removes the listener . **/ boolean remove (EventListener listener) { if (!evListenerClass.isInstance(listener)) return false; listenerArray = null; return listenerList.remove (listener); } /** * Passes back the event listener list as an array */ synchronized Object[] getAllListeners () { Object[] retVal = listenerArray; if (retVal == null) { retVal = new Object [listenerList.size()]; listenerList.toArray(retVal); listenerArray = retVal; } return retVal; } }