remove Id keyword
[jSite2.git] / src / net / pterodactylus / util / beans / AbstractBean.java
index 0438c6d..b2da732 100644 (file)
@@ -29,9 +29,8 @@ import java.util.List;
  * 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>());
@@ -74,4 +73,40 @@ public class AbstractBean {
 
        }
 
+       /**
+        * 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));
+       }
+
 }