View Javadoc

1   /*
2    *  File: PropertyObservableBase.java 
3    *  Copyright (c) 2004-2007  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    * All rights reserved. This program and the accompanying materials
7    * are made available under the terms of the Common Public License v1.0
8    * which accompanies this distribution, and is available at
9    * http://www.eclipse.org/legal/cpl-v10.html
10   */
11  package de.jaret.util.misc;
12  
13  import java.beans.PropertyChangeListener;
14  import java.beans.PropertyChangeSupport;
15  
16  /**
17   * Base implementation for an observable object.
18   * 
19   * @author Peter Kliem
20   * @version $Id: PropertyObservableBase.java 250 2007-02-12 00:15:49Z olk $
21   */
22  public class PropertyObservableBase implements PropertyObservable {
23      /** PropertyChangeSupport for handling listeners. */
24      protected PropertyChangeSupport _propertyChangeSupport;
25  
26      /**
27       * Check whether two object differ including null checks.
28       * 
29       * @param o1 object 1
30       * @param o2 object 2
31       * @return true if the objects are not equal
32       */
33      public static boolean isRealModification(Object o1, Object o2) {
34          if (o1 == null && o2 == null) {
35              return false;
36          }
37          if (o1 != null && o2 == null) {
38              return true;
39          }
40          if (o2 != null && o1 == null) {
41              return true;
42          }
43          return !o1.equals(o2);
44      }
45  
46      /**
47       * Inform listeners about a property change.
48       * 
49       * @param propName name of the property
50       * @param oldVal old value
51       * @param newVal new value
52       */
53      protected void firePropertyChange(String propName, Object oldVal, Object newVal) {
54          if (_propertyChangeSupport != null) {
55              _propertyChangeSupport.firePropertyChange(propName, oldVal, newVal);
56          }
57      }
58  
59      /**
60       * {@inheritDoc}
61       */
62      public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
63          if (_propertyChangeSupport == null) {
64              _propertyChangeSupport = new PropertyChangeSupport(this);
65          }
66          _propertyChangeSupport.addPropertyChangeListener(listener);
67      }
68  
69      /**
70       * {@inheritDoc}
71       */
72      public void removePropertyChangeListener(PropertyChangeListener listener) {
73          if (_propertyChangeSupport != null) {
74              _propertyChangeSupport.removePropertyChangeListener(listener);
75          }
76      }
77  
78  }