package org.eclipse.core.databinding.observable;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.AssertionFailedException;
public abstract class AbstractObservable extends ChangeManager implements IObservable {
private boolean disposed = false;
public AbstractObservable(Realm realm) {
super(realm);
ObservableTracker.observableCreated(this);
}
public synchronized void addChangeListener(IChangeListener listener) {
addListener(ChangeEvent.TYPE, listener);
}
public synchronized void removeChangeListener(IChangeListener listener) {
removeListener(ChangeEvent.TYPE, listener);
}
public synchronized void addStaleListener(IStaleListener listener) {
addListener(StaleEvent.TYPE, listener);
}
public synchronized void removeStaleListener(IStaleListener listener) {
removeListener(StaleEvent.TYPE, listener);
}
public synchronized void addDisposeListener(IDisposeListener listener) {
addListener(DisposeEvent.TYPE, listener);
}
public synchronized void removeDisposeListener(IDisposeListener listener) {
removeListener(DisposeEvent.TYPE, listener);
}
protected void fireChange() {
checkRealm();
fireEvent(new ChangeEvent(this));
}
protected void fireStale() {
checkRealm();
fireEvent(new StaleEvent(this));
}
public synchronized boolean isDisposed() {
return disposed;
}
public synchronized void dispose() {
if (!disposed) {
disposed = true;
fireEvent(new DisposeEvent(this));
super.dispose();
}
}
protected void checkRealm() {
Assert.isTrue(getRealm().isCurrent(),
"This operation must be run within the observable's realm"); }
}