* Abstract bean super class that contains property change listener management.
*
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- * @version $Id$
*/
-public class AbstractBean {
+public abstract class AbstractBean {
/** Property change listeners. */
private final List<PropertyChangeListener> propertyChangeListeners = Collections.synchronizedList(new ArrayList<PropertyChangeListener>());
}
+ /**
+ * Fires a property change event if the two values are not equal.
+ *
+ * @param propertyName
+ * The name of the property
+ * @param oldValue
+ * The old value of the property
+ * @param newValue
+ * The new value of the property
+ */
+ protected void fireIfPropertyChanged(String propertyName, Object oldValue, Object newValue) {
+ if (!equal(oldValue, newValue)) {
+ firePropertyChange(propertyName, oldValue, newValue);
+ }
+ }
+
+ //
+ // PRIVATE METHODS
+ //
+
+ /**
+ * Compares the two objects and returns whether they are equal according to
+ * {@link Object#equals(Object)}. This method takes <code>null</code>
+ * into account as a valid value for an object.
+ *
+ * @param first
+ * The first object
+ * @param second
+ * The second object
+ * @return <code>true</code> if the two objects are equal,
+ * <code>false</code> otherwise
+ */
+ private boolean equal(Object first, Object second) {
+ return ((first == null) && (second == null)) || ((first != null) && first.equals(second)) || ((second != null) && second.equals(first));
+ }
+
}