/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.commons.gui.equalizer;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* This abstract <code>EqualizerModel</code> implementation takes care of the listener mechanism. The implementation is
* thread-safe and obeys the rules specified by the <code>EqualizerModel</code> interface.
*
* @author martin.scholl@cismet.de
* @version 1.0
*/
public abstract class AbstractEqualizerModel implements EqualizerModel {
//~ Instance fields --------------------------------------------------------
private final Set<EqualizerModelListener> listeners;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new AbstractEqualizerModel object.
*/
public AbstractEqualizerModel() {
this.listeners = new HashSet<EqualizerModelListener>(0, 1);
}
//~ Methods ----------------------------------------------------------------
/**
* Informs all registered listeners that a new <code>EqualizerModelEvent</code> happened.
*
* @param eme the <code>EqualizerModelEvent</code>
*
* @throws IllegalArgumentException if the <code>EqualizerModelEvent</code> is <code>null</code>
*/
public void fireEqualizerModelEvent(final EqualizerModelEvent eme) {
if (eme == null) {
throw new IllegalArgumentException("event object must not be null"); // NOI18N
}
final Iterator<EqualizerModelListener> it;
synchronized (listeners) {
it = new HashSet<EqualizerModelListener>(listeners).iterator();
}
while (it.hasNext()) {
it.next().equalizerChanged(eme);
}
}
@Override
public void addEqualizerModelListener(final EqualizerModelListener eml) {
if (eml != null) {
synchronized (listeners) {
listeners.add(eml);
}
}
}
@Override
public void removeEqualizerModelListener(final EqualizerModelListener eml) {
if (eml != null) {
synchronized (listeners) {
listeners.remove(eml);
}
}
}
}