/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.tools.gui.breadcrumb;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.AbstractAction;
import javax.swing.Icon;
/**
* DOCUMENT ME!
*
* @author thorsten
* @version $Revision$, $Date$
*/
public abstract class BreadCrumb extends AbstractAction {
//~ Instance fields --------------------------------------------------------
private final transient Set<ActionListener> listeners;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new BreadCrumb object.
*
* @param name DOCUMENT ME!
*/
public BreadCrumb(final String name) {
this(name, null);
}
/**
* Creates a new BreadCrumb object.
*
* @param name DOCUMENT ME!
* @param icon DOCUMENT ME!
*/
public BreadCrumb(final String name, final Icon icon) {
super(name, icon);
listeners = new HashSet<ActionListener>();
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param e DOCUMENT ME!
*/
@Override
public void actionPerformed(final ActionEvent e) {
crumbActionPerformed(e);
fireActionPerformed(e);
}
/**
* DOCUMENT ME!
*
* @param icon DOCUMENT ME!
*/
public void setIcon(final Icon icon) {
this.putValue(BreadCrumb.SMALL_ICON, icon);
}
/**
* DOCUMENT ME!
*
* @param e DOCUMENT ME!
*/
public abstract void crumbActionPerformed(ActionEvent e);
/**
* DOCUMENT ME!
*
* @param al DOCUMENT ME!
*/
public void addActionListener(final ActionListener al) {
synchronized (listeners) {
listeners.add(al);
}
}
/**
* DOCUMENT ME!
*
* @param al DOCUMENT ME!
*/
public void removeActionListener(final ActionListener al) {
synchronized (listeners) {
listeners.remove(al);
}
}
/**
* DOCUMENT ME!
*
* @param e DOCUMENT ME!
*/
public void fireActionPerformed(final ActionEvent e) {
final Iterator<ActionListener> it;
synchronized (listeners) {
it = new HashSet<ActionListener>(listeners).iterator();
}
while (it.hasNext()) {
it.next().actionPerformed(e);
}
}
}