package com.revolsys.swing.listener;
import java.awt.ItemSelectable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import com.revolsys.beans.NonWeakListener;
import com.revolsys.util.Property;
public class RunnableListener implements ActionListener, DocumentListener, ListSelectionListener,
ItemListener, PropertyChangeListener, FocusListener, NonWeakListener {
public static RunnableListener addItem(final ItemSelectable source, final Runnable runnable) {
final RunnableListener listener = new RunnableListener(runnable);
source.addItemListener(listener);
return listener;
}
public static RunnableListener addPropertyChange(final Object source, final Runnable runnable) {
final RunnableListener listener = new RunnableListener(runnable);
Property.addListener(source, listener);
return listener;
}
public static RunnableListener addPropertyChange(final Object source, final String propertyName,
final Runnable runnable) {
final RunnableListener listener = new RunnableListener(runnable);
Property.addListener(source, propertyName, listener);
return listener;
}
private final Runnable runnable;
protected RunnableListener(final Runnable runnable) {
this.runnable = runnable;
}
@Override
public void actionPerformed(final ActionEvent event) {
invokeMethod();
}
@Override
public void changedUpdate(final DocumentEvent e) {
invokeMethod();
}
@Override
public void focusGained(final FocusEvent e) {
invokeMethod();
}
@Override
public void focusLost(final FocusEvent e) {
invokeMethod();
}
@Override
public void insertUpdate(final DocumentEvent e) {
invokeMethod();
}
protected void invokeMethod() {
this.runnable.run();
}
@Override
public void itemStateChanged(final ItemEvent e) {
invokeMethod();
}
@Override
public void propertyChange(final PropertyChangeEvent evt) {
invokeMethod();
}
@Override
public void removeUpdate(final DocumentEvent e) {
invokeMethod();
}
@Override
public void valueChanged(final ListSelectionEvent e) {
invokeMethod();
}
}