/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.databinding;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
/**
* A POJO base class that may notify observers on behalf of
* {@link PropertyChangeSupport}
*/
public abstract class ObservablePojo implements IObservablePojo {
private PropertyChangeSupport propertyChangeSupport;
public ObservablePojo() {
this.propertyChangeSupport = new PropertyChangeSupport(this);
}
public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
public void fireIndexedPropertyChange(String propertyName, int index, Object oldValue, Object newValue) {
propertyChangeSupport.fireIndexedPropertyChange(propertyName, index, oldValue, newValue);
}
@Override
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
if (!contains(listener)) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
}
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
if (!contains(listener)) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
}
@Override
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
}
@Override
public void removePropertyChangeListener(
PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
@Override
public void removeAllPropertyChangeListeners() {
for (PropertyChangeListener listener : getPropertyChangeSupport().getPropertyChangeListeners()) {
getPropertyChangeSupport().removePropertyChangeListener(listener);
}
}
protected boolean contains(PropertyChangeListener listener) {
boolean contains = false;
for (PropertyChangeListener registeredListener : propertyChangeSupport.getPropertyChangeListeners()) {
if (registeredListener == listener) {
contains = true;
break;
}
}
return contains;
}
protected PropertyChangeSupport getPropertyChangeSupport() {
return propertyChangeSupport;
}
@Override
public void dispose() {
removeAllPropertyChangeListeners();
}
}