package jadex.commons; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * This class offers part of the functionality of the original * Java-PropertyChangeSupport class. It had to be rewritten in order to support * the bytecode enhancements of javaflow */ public class SimplePropertyChangeSupport implements Serializable { private List listener; private Object source; public SimplePropertyChangeSupport(Object sourceBean) { if(sourceBean == null) { throw new NullPointerException(); } listener = new ArrayList(); source = sourceBean; } /** * Add a PropertyChangeListener to the listener list. The listener is * registered for all properties. * * @param listener The PropertyChangeListener to be added. */ public void addPropertyChangeListener(PropertyChangeListener listener) { this.listener.add(listener); } /** * Remove a PropertyChangeListener from the listener list. This removes a * PropertyChangeListener that was registered for all properties. * * @param listener The PropertyChangeListener to be removed. */ public void removePropertyChangeListener(PropertyChangeListener listener) { this.listener.remove(listener); } /** * Report a bound property update to any registered listeners. No event is * fired if old and new are equal and non-null. * * @param propertyName The programmatic name of the property that was * changed. * @param oldValue The old value of the property. * @param newValue The new value of the property. */ public void firePropertyChange(String propertyName, Object oldValue, Object newValue) { if(oldValue != null && newValue != null && oldValue.equals(newValue)) { return; } PropertyChangeEvent evt = new PropertyChangeEvent(source, propertyName, oldValue, newValue); for(int i = 0; i < listener.size(); i++) { PropertyChangeListener oneListener = (PropertyChangeListener)listener.get(i); oneListener.propertyChange(evt); } } /** * Report an int bound property update to any registered listeners. No event * is fired if old and new are equal and non-null. * <p> * This is merely a convenience wrapper around the more general * firePropertyChange method that takes Object values. * * @param propertyName The programmatic name of the property that was * changed. * @param oldValue The old value of the property. * @param newValue The new value of the property. */ public void firePropertyChange(String propertyName, int oldValue, int newValue) { if(oldValue == newValue) { return; } firePropertyChange(propertyName, new Integer(oldValue), new Integer(newValue)); } /** * Fire an existing PropertyChangeEvent to any registered listeners. No * event is fired if the given event's old and new values are equal and * non-null. * * @param evt The PropertyChangeEvent object. */ public void firePropertyChange(PropertyChangeEvent evt) { Object oldValue = evt.getOldValue(); Object newValue = evt.getNewValue(); if(oldValue != null && newValue != null && oldValue.equals(newValue)) { return; } for(int i = 0; i < listener.size(); i++) { PropertyChangeListener oneListener = (PropertyChangeListener)listener .get(i); oneListener.propertyChange(evt); } } }