|
What this is
Other links
The source code
/*****************************************************************************
* 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 the CVS Client Library.
* The Initial Developer of the Original Code is Robert Greig.
* Portions created by Robert Greig are Copyright (C) 2000.
* All Rights Reserved.
* Contributor(s): Robert Greig.
*****************************************************************************/
package org.netbeans.lib.cvsclient.event;
/**
* This class is responsible for firing CVS events to registered listeners.
* It can either fire events as they are generated or wait until a suitable
* checkpoint and fire many events at once. This can prevent event storms
* from degrading system performance.
* @author Robert Greig
*/
public class EventManager {
/**
* Registered listeners for events. This is an array for performance when
* firing events. We take the hit when adding or removing listeners - that
* should be a relatively rare occurrence.
*/
private CVSListener[] listeners;
/**
* Holds value of property fireEnhancedEventSet.
* If true, the library fires the EnhancedMessageEvents.
* Default is true. Some builders might work badly, if set to false.
*/
private boolean fireEnhancedEventSet = true;
/**
* Construct a new EventManager
*/
public EventManager() {
}
/**
* Add a listener to the list.
* @param listener the listener to add
*/
public synchronized void addCVSListener(CVSListener listener) {
if (listeners == null || listeners.length == 0) {
listeners = new CVSListener[1];
}
else {
// allocate a new array and copy existing listeners
CVSListener[] l = new CVSListener[listeners.length + 1];
for (int i = 0; i < listeners.length; i++) {
l[i] = listeners[i];
}
listeners = l;
}
listeners[listeners.length - 1] = listener;
}
/**
* Remove a listeners from the list
* @param l the listener to remove
*/
public synchronized void removeCVSListener(CVSListener listener) {
// TODO: test this method!!
if (listeners.length == 1) {
listeners = null;
}
else {
CVSListener[] l = new CVSListener[listeners.length - 1];
int i = 0;
while (i < l.length) {
if (listeners[i] == listener) {
for (int j = i + 1; j < listeners.length; j++) {
l[j - 1] = listeners[j];
}
break;
}
else {
l[i] = listeners[i];
}
i++;
}
listeners = l;
}
}
/**
* Fire a CVSEvent to all the listeners
* @param e the event to send
*/
public void fireCVSEvent(CVSEvent e) {
// if we have no listeners, then there is nothing to do
if (listeners == null || listeners.length == 0)
return;
CVSListener[] l = null;
synchronized (listeners) {
l = new CVSListener[listeners.length];
System.arraycopy(listeners, 0, l, 0, l.length);
}
for (int i = 0; i < l.length; i++) {
e.fireEvent(l[i]);
}
}
/** Getter for property fireEnhancedEventSet.
* @return Value of property fireEnhancedEventSet.
*/
public boolean isFireEnhancedEventSet() {
return fireEnhancedEventSet;
}
/** Setter for property fireEnhancedEventSet.
* @param fireEnhancedEventSet New value of property fireEnhancedEventSet.
*/
public void setFireEnhancedEventSet(boolean fireEnhancedEventSet) {
this.fireEnhancedEventSet = fireEnhancedEventSet;
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.