Class ComputedValue<T>
java.lang.Object
org.eclipse.core.databinding.observable.AbstractObservable
org.eclipse.core.databinding.observable.value.AbstractObservableValue<T>
org.eclipse.core.databinding.observable.value.ComputedValue<T>
- Type Parameters:
T- the type of value being observed
- All Implemented Interfaces:
IObservable,IObservableValue<T>
- Direct Known Subclasses:
AggregateValidationStatus
A Lazily calculated value that automatically computes and registers listeners
on its dependencies as long as all of its dependencies are
IObservable objects. Any change to one of the observable dependencies
causes the value to be recomputed.
This class is thread safe. All state accessing methods must be invoked from
the current realm. Methods for adding and removing
listeners may be invoked from any thread.
Example: compute the sum of all elements in an IObservableList <
Integer >.
final IObservableList addends = WritableValue.withValueType(Integer.TYPE);
addends.add(Integer.valueOf(0));
addends.add(Integer.valueOf(1));
addends.add(Integer.valueOf(2));
IObservableValue sum = new ComputedValue() {
protected Object calculate() {
int sum = 0;
for (Iterator it = addends.iterator(); it.hasNext();) {
Integer addend = (Integer) it.next();
sum += addend.intValue();
}
return sum;
}
};
System.out.println(sum.getValue()); // => 3
addends.add(Integer.valueOf(10));
System.out.println(sum.getValue()); // => 13
- Since:
- 1.0
-
Constructor Summary
ConstructorsConstructorDescriptionComputedValue(Object valueType) ComputedValue(Realm realm) ComputedValue(Realm realm, Object valueType) -
Method Summary
Modifier and TypeMethodDescriptionvoidaddChangeListener(IChangeListener listener) Adds the given change listener to the list of change listeners.protected voidaddListener(Object listenerType, IObservablesListener listener) voidaddValueChangeListener(IValueChangeListener<? super T> listener) protected abstract TSubclasses must override this method to provide the object's value.protected Objectclone()static <T> IObservableValue<T> Factory method to createComputedValueobjects in an easy manner.voiddispose()Disposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.protected final Tprotected voidfireEvent(ObservableEvent event) protected voidgetRealm()The value type of this observable value, ornullif this observable value is untyped.protected booleanbooleanisStale()Returns whether the state of this observable is stale and is expected to change soon.protected voidprotected final voidprotected voidremoveListener(Object listenerType, IObservablesListener listener) Methods inherited from class org.eclipse.core.databinding.observable.value.AbstractObservableValue
doSetValue, fireChange, fireValueChange, getValue, removeValueChangeListener, setValueMethods inherited from class org.eclipse.core.databinding.observable.AbstractObservable
addDisposeListener, addStaleListener, checkRealm, fireStale, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListenerMethods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.eclipse.core.databinding.observable.IObservable
addDisposeListener, addStaleListener, getRealm, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListener
-
Constructor Details
-
ComputedValue
public ComputedValue() -
ComputedValue
- Parameters:
valueType- can benull
-
ComputedValue
- Parameters:
realm- the realm to use; notnull
-
ComputedValue
- Parameters:
realm- the realm to use; notnullvalueType- can benull
-
-
Method Details
-
create
Factory method to createComputedValueobjects in an easy manner.The created list has a null
IObservableValue.getValueType().Example observing the size of an
IObservableList:IObservableValue<Integer> listSizeObservable = ComputedValue.create(() -> observableList.size());
- Parameters:
supplier-Supplier, which is tracked usingObservableTrackerto find out observables it uses, in the same manner ascalculate().- Returns:
ComputedValuewhose value is computed using the givenSupplier.- Since:
- 1.6
-
doGetValue
- Specified by:
doGetValuein classAbstractObservableValue<T>
-
calculate
Subclasses must override this method to provide the object's value. Any dependencies used to calculate the value must beIObservable, and implementers must use one of the interface methods tagged TrackedGetter for ComputedValue to recognize it as a dependency.- Returns:
- the object's value
-
makeDirty
protected final void makeDirty() -
isStale
public boolean isStale()Description copied from interface:IObservableReturns whether the state of this observable is stale and is expected to change soon. A non-stale observable that becomes stale will notify its stale listeners. A stale object that becomes non-stale does so by changing its state and notifying its change listeners, it does not notify its stale listeners about becoming non-stale. Clients that do not expect asynchronous changes may ignore staleness of observable objects.- Specified by:
isStalein interfaceIObservable- Overrides:
isStalein classAbstractObservableValue<T>- Returns:
- true if this observable's state is stale and will change soon.
-
getValueType
Description copied from interface:IObservableValueThe value type of this observable value, ornullif this observable value is untyped.- Returns:
- the value type, or
null
-
hasListeners
protected boolean hasListeners()- Since:
- 1.1
-
addChangeListener
Description copied from interface:IObservableAdds the given change listener to the list of change listeners. Change listeners are notified about changes of the state of this observable in a generic way, without specifying the change that happened. To get the changed state, a change listener needs to query for the current state of this observable.- Specified by:
addChangeListenerin interfaceIObservable- Overrides:
addChangeListenerin classAbstractObservable- Parameters:
listener- the listener to add; notnull
-
addValueChangeListener
- Specified by:
addValueChangeListenerin interfaceIObservableValue<T>- Overrides:
addValueChangeListenerin classAbstractObservableValue<T>- Parameters:
listener- the change listener to add; notnull
-
dispose
public void dispose()Description copied from interface:IObservableDisposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.- Specified by:
disposein interfaceIObservable- Overrides:
disposein classAbstractObservable
-
addListener
- Parameters:
listenerType- arbitrary object to identify a type of the listenerlistener- the listener to add; notnull
-
removeListener
- Parameters:
listenerType- arbitrary object to identify a type of the listenerlistener- the listener to remove; notnull
-
fireEvent
-
firstListenerAdded
protected void firstListenerAdded() -
lastListenerRemoved
protected void lastListenerRemoved() -
getRealm
- Returns:
- Returns the realm.
-
clone
- Overrides:
clonein classObject- Throws:
CloneNotSupportedException
-