/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package javafx.beans.value;
import java.util.ArrayList;
import java.util.List;
import com.sun.javafx.binding.ExpressionHelper;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
/**
* A convenience class for creating implementations of {@link ObservableValue}.
* It contains all of the infrastructure support for value invalidation- and
* change event notification.
*
* This implementation can handle adding and removing listeners while the
* observers are being notified, but it is not thread-safe.
*
*
* @since JavaFX 2.0
*/
public abstract class ObservableValueBase<T> implements ObservableValue<T> {
private ExpressionHelper<T> helper;
/**
* {@inheritDoc}
*/
@Override
public void addListener(InvalidationListenerlistener) {
helper = ExpressionHelper.addListener(helper, this, listener);
}
/**
* {@inheritDoc}
*/
@Override
public void addListener(ChangeListener<? super T> listener) {
helper = ExpressionHelper.addListener(helper, this, listener);
}
/**
* {@inheritDoc}
*/
@Override
public void removeListener(InvalidationListenerlistener) {
helper = ExpressionHelper.removeListener(helper, listener);
}
/**
* {@inheritDoc}
*/
@Override
public void removeListener(ChangeListener<? super T> listener) {
helper = ExpressionHelper.removeListener(helper, listener);
}
/**
* Notify the currently registered observers of a value change.
*
* This implementation will ignore all adds and removes of observers that
* are done while a notification is processed. The changes take effect in
* the following call to fireValueChangedEvent.
*/
protected void fireValueChangedEvent() {
ExpressionHelper.fireValueChangedEvent(helper);
}
}