1 package net.sf.openrocket.util;
3 import java.util.EventListener;
4 import java.util.EventObject;
7 import net.sf.openrocket.logging.LogHelper;
8 import net.sf.openrocket.startup.Application;
11 * Abstract implementation of a ChangeSource.
13 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
15 public abstract class AbstractChangeSource implements ChangeSource {
16 private static final LogHelper log = Application.getLogger();
18 private final List<EventListener> listeners = new ArrayList<EventListener>();
20 private final EventObject event = new EventObject(this);
24 public final void addChangeListener(EventListener listener) {
25 listeners.add(listener);
26 log.verbose(1, "Adding change listeners, listener count is now " + listeners.size());
30 public final void removeChangeListener(EventListener listener) {
31 listeners.remove(listener);
32 log.verbose(1, "Removing change listeners, listener count is now " + listeners.size());
37 * Fire a change event to all listeners.
39 protected void fireChangeEvent() {
40 // Copy the list before iterating to prevent concurrent modification exceptions.
41 EventListener[] list = listeners.toArray(new EventListener[0]);
42 for (EventListener l : list) {
43 if ( l instanceof StateChangeListener ) {
44 ((StateChangeListener)l).stateChanged(event);