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 }