1 package org.springframework.binding.value.support;
2
3 import java.beans.PropertyChangeListener;
4 import java.beans.PropertyChangeSupport;
5 import java.beans.PropertyVetoException;
6 import java.beans.VetoableChangeListener;
7 import java.beans.VetoableChangeSupport;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.springframework.binding.value.PropertyChangePublisher;
12 import org.springframework.util.ObjectUtils;
13
14
15
16
17
18 public abstract class AbstractPropertyChangePublisher implements PropertyChangePublisher {
19
20 protected final Log logger = LogFactory.getLog(getClass());
21
22 private transient PropertyChangeSupport changeSupport;
23
24 private transient VetoableChangeSupport vetoSupport;
25
26 public final void addPropertyChangeListener(PropertyChangeListener listener) {
27 if (listener == null) {
28 return;
29 }
30 if (changeSupport == null) {
31 changeSupport = new PropertyChangeSupport(this);
32 }
33 changeSupport.addPropertyChangeListener(listener);
34 }
35
36 public final void removePropertyChangeListener(PropertyChangeListener listener) {
37 if (listener == null || changeSupport == null) {
38 return;
39 }
40 changeSupport.removePropertyChangeListener(listener);
41 }
42
43 public final void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
44 if (listener == null) {
45 return;
46 }
47 if (changeSupport == null) {
48 changeSupport = new PropertyChangeSupport(this);
49 }
50 changeSupport.addPropertyChangeListener(propertyName, listener);
51 }
52
53 public final void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
54 if (listener == null || changeSupport == null) {
55 return;
56 }
57 changeSupport.removePropertyChangeListener(propertyName, listener);
58 }
59
60 public final void addVetoableChangeListener(VetoableChangeListener listener) {
61 if (listener == null) {
62 return;
63 }
64 if (vetoSupport == null) {
65 vetoSupport = new VetoableChangeSupport(this);
66 }
67 vetoSupport.addVetoableChangeListener(listener);
68 }
69
70 public final void removeVetoableChangeListener(VetoableChangeListener listener) {
71 if (listener == null || vetoSupport == null) {
72 return;
73 }
74 vetoSupport.removeVetoableChangeListener(listener);
75 }
76
77 public final void addVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
78 if (listener == null) {
79 return;
80 }
81 if (vetoSupport == null) {
82 vetoSupport = new VetoableChangeSupport(this);
83 }
84 vetoSupport.addVetoableChangeListener(propertyName, listener);
85 }
86
87 public final void removeVetoableChangeListener(String propertyName, VetoableChangeListener listener) {
88 if (listener == null || vetoSupport == null) {
89 return;
90 }
91 vetoSupport.removeVetoableChangeListener(propertyName, listener);
92 }
93
94 public final PropertyChangeListener[] getPropertyChangeListeners() {
95 if (changeSupport == null) {
96 return new PropertyChangeListener[0];
97 }
98 return changeSupport.getPropertyChangeListeners();
99 }
100
101 public final PropertyChangeListener[] getPropertyChangeListeners(String propertyName) {
102 if (changeSupport == null) {
103 return new PropertyChangeListener[0];
104 }
105 return changeSupport.getPropertyChangeListeners(propertyName);
106 }
107
108 public final VetoableChangeListener[] getVetoableChangeListeners() {
109 if (vetoSupport == null) {
110 return new VetoableChangeListener[0];
111 }
112 return vetoSupport.getVetoableChangeListeners();
113 }
114
115 public final VetoableChangeListener[] getVetoableChangeListeners(String propertyName) {
116 if (vetoSupport == null) {
117 return new VetoableChangeListener[0];
118 }
119 return vetoSupport.getVetoableChangeListeners(propertyName);
120 }
121
122 protected final void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
123 PropertyChangeSupport aChangeSupport = this.changeSupport;
124 if (aChangeSupport == null) {
125 return;
126 }
127 aChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
128 }
129
130 protected final void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
131 PropertyChangeSupport aChangeSupport = this.changeSupport;
132 if (aChangeSupport == null) {
133 return;
134 }
135 aChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
136 }
137
138 protected final void firePropertyChange(String propertyName, double oldValue, double newValue) {
139 firePropertyChange(propertyName, new Double(oldValue), new Double(newValue));
140 }
141
142 protected final void firePropertyChange(String propertyName, float oldValue, float newValue) {
143 firePropertyChange(propertyName, new Float(oldValue), new Float(newValue));
144 }
145
146 protected final void firePropertyChange(String propertyName, int oldValue, int newValue) {
147 PropertyChangeSupport aChangeSupport = this.changeSupport;
148 if (aChangeSupport == null) {
149 return;
150 }
151 aChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
152 }
153
154 protected final void firePropertyChange(String propertyName, long oldValue, long newValue) {
155 firePropertyChange(propertyName, new Long(oldValue), new Long(newValue));
156 }
157
158 protected final void firePropertiesChanged() {
159 firePropertyChange(null, null, null);
160 }
161
162 protected final void fireVetoableChange(String propertyName, Object oldValue, Object newValue)
163 throws PropertyVetoException {
164 VetoableChangeSupport aVetoSupport = this.vetoSupport;
165 if (aVetoSupport == null) {
166 return;
167 }
168 aVetoSupport.fireVetoableChange(propertyName, oldValue, newValue);
169 }
170
171 protected final void fireVetoableChange(String propertyName, boolean oldValue, boolean newValue)
172 throws PropertyVetoException {
173 VetoableChangeSupport aVetoSupport = this.vetoSupport;
174 if (aVetoSupport == null) {
175 return;
176 }
177 aVetoSupport.fireVetoableChange(propertyName, oldValue, newValue);
178 }
179
180 protected final void fireVetoableChange(String propertyName, double oldValue, double newValue)
181 throws PropertyVetoException {
182 fireVetoableChange(propertyName, new Double(oldValue), new Double(newValue));
183 }
184
185 protected final void fireVetoableChange(String propertyName, int oldValue, int newValue)
186 throws PropertyVetoException {
187 VetoableChangeSupport aVetoSupport = this.vetoSupport;
188 if (aVetoSupport == null) {
189 return;
190 }
191 aVetoSupport.fireVetoableChange(propertyName, oldValue, newValue);
192 }
193
194 protected final void fireVetoableChange(String propertyName, float oldValue, float newValue)
195 throws PropertyVetoException {
196 fireVetoableChange(propertyName, new Float(oldValue), new Float(newValue));
197 }
198
199 protected final void fireVetoableChange(String propertyName, long oldValue, long newValue)
200 throws PropertyVetoException {
201 fireVetoableChange(propertyName, new Long(oldValue), new Long(newValue));
202 }
203
204 protected boolean hasChanged(Object currentValue, Object proposedValue) {
205 return !ObjectUtils.nullSafeEquals(currentValue, proposedValue);
206 }
207
208 protected final boolean hasChanged(boolean currentValue, boolean proposedValue) {
209 return currentValue != proposedValue;
210 }
211
212 protected final boolean hasChanged(int currentValue, int proposedValue) {
213 return currentValue != proposedValue;
214 }
215
216 protected final boolean hasChanged(long currentValue, long proposedValue) {
217 return currentValue != proposedValue;
218 }
219
220 protected final boolean hasChanged(float currentValue, float proposedValue) {
221 return currentValue != proposedValue;
222 }
223
224 protected final boolean hasChanged(double currentValue, double proposedValue) {
225 return currentValue != proposedValue;
226 }
227
228 }