package org.robobinding.property;
import java.util.Map;
import org.robobinding.util.Maps;
/**
*
* @since 1.0
* @version $Revision: 1.0 $
* @author Cheng Wei
*/
public class PropertyChangeSupport {
private final PropertyValidation validation;
private final Map<String, PropertyChangeListeners> listenerMap;
public PropertyChangeSupport(PropertyValidation validation) {
this.validation = validation;
listenerMap = Maps.newHashMap();
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
validation.checkValid(propertyName);
if (!listenerMap.containsKey(propertyName)) {
listenerMap.put(propertyName, new PropertyChangeListeners());
}
PropertyChangeListeners listeners = listenerMap.get(propertyName);
listeners.add(listener);
}
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
if (listenerMap.containsKey(propertyName)) {
PropertyChangeListeners listeners = listenerMap.get(propertyName);
listeners.remove(listener);
}
}
public void firePropertyChange(String propertyName) {
validation.checkValid(propertyName);
PropertyChangeListeners propertyChangeListeners = listenerMap.get(propertyName);
if (propertyChangeListeners != null) {
propertyChangeListeners.firePropertyChange();
}
}
public void fireChangeAll() {
for (PropertyChangeListeners propertyChangeListeners : listenerMap.values()) {
propertyChangeListeners.firePropertyChange();
}
}
}