Class ComputedSet<E>
java.lang.Object
org.eclipse.core.databinding.observable.AbstractObservable
org.eclipse.core.databinding.observable.set.AbstractObservableSet<E>
org.eclipse.core.databinding.observable.set.ComputedSet<E>
- Type Parameters:
E- the type of the elements in this set
- All Implemented Interfaces:
Iterable<E>,Collection<E>,Set<E>,IObservable,IObservableCollection<E>,IObservableSet<E>
A lazily calculated set 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 set 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 set of all primes greater than 1 and less than the value
of an IObservableValue < Integer >.
final IObservableValue max = WritableValue.withValueType(Integer.TYPE);
max.setValue(Integer.valueOf(0));
IObservableSet primes = new ComputedSet() {
protected Set calculate() {
int maxVal = ((Integer) max.getValue()).intValue();
Set result = new HashSet();
outer: for (int i = 2; i < maxVal; i++) {
for (Iterator it = result.iterator(); it.hasNext();) {
Integer knownPrime = (Integer) it.next();
if (i % knownPrime.intValue() == 0)
continue outer;
}
result.add(Integer.valueOf(i));
}
return result;
}
};
System.out.println(primes); // => "[]"
max.setValue(Integer.valueOf(20));
System.out.println(primes); // => "[2, 3, 5, 7, 11, 13, 17, 19]"
- Since:
- 1.2
-
Constructor Summary
ConstructorsConstructorDescriptionCreates a computed set in the default realm and with an unknown (null) element type.ComputedSet(Object elementType) Creates a computed set in the default realm and with the given element type.ComputedSet(Realm realm) Creates a computed set in given realm and with an unknown (null) element type.ComputedSet(Realm realm, Object elementType) Creates a computed set in the given realm and with the given element type. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddChangeListener(IChangeListener listener) Adds the given change listener to the list of change listeners.protected voidaddListener(Object listenerType, IObservablesListener listener) voidaddSetChangeListener(ISetChangeListener<? super E> listener) Subclasses must override this method to calculate the set contents.protected Objectclone()static <E> IObservableSet<E> Factory method to createComputedSetobjects 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 intprotected voidfireEvent(ObservableEvent event) protected voidReturns the element type of this observable collection, ornullif this observable collection is untyped.getRealm()protected booleanbooleanisStale()Returns whether the state of this observable is stale and is expected to change soon.protected voidprotected voidremoveListener(Object listenerType, IObservablesListener listener) Methods inherited from class org.eclipse.core.databinding.observable.set.AbstractObservableSet
add, addAll, clear, contains, containsAll, equals, fireChange, fireSetChange, getterCalled, hashCode, isEmpty, iterator, remove, removeAll, removeSetChangeListener, retainAll, setStale, size, toArray, toArray, toStringMethods inherited from class org.eclipse.core.databinding.observable.AbstractObservable
addDisposeListener, addStaleListener, checkRealm, fireStale, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListenerMethods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Collection
parallelStream, removeIf, stream, toArrayMethods inherited from interface org.eclipse.core.databinding.observable.IObservable
addDisposeListener, addStaleListener, getRealm, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListenerMethods inherited from interface java.util.Set
spliterator
-
Constructor Details
-
ComputedSet
public ComputedSet()Creates a computed set in the default realm and with an unknown (null) element type. -
ComputedSet
Creates a computed set in the default realm and with the given element type.- Parameters:
elementType- the element type, may benullto indicate unknown element type
-
ComputedSet
Creates a computed set in given realm and with an unknown (null) element type.- Parameters:
realm- the realm
-
ComputedSet
Creates a computed set in the given realm and with the given element type.- Parameters:
realm- the realmelementType- the element type, may benullto indicate unknown element type
-
-
Method Details
-
create
Factory method to createComputedSetobjects in an easy manner.The created list has a null
IObservableSet.getElementType().- Parameters:
supplier-Supplier, which is tracked usingObservableTrackerto find out observables it uses, in the same manner ascalculate().- Returns:
ComputedSetwhose elements are computed using the givenSupplier.- Since:
- 1.12
-
doGetSize
protected int doGetSize() -
getWrappedSet
- Specified by:
getWrappedSetin classAbstractObservableSet<E>
-
calculate
Subclasses must override this method to calculate the set contents. Any dependencies used to calculate the set must beIObservable, and implementers must use one of the interface methods tagged TrackedGetter for ComputedSet to recognize it as a dependency.- Returns:
- the object's set.
-
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 classAbstractObservableSet<E>- Returns:
- Returns the stale state.
-
getElementType
Description copied from interface:IObservableCollectionReturns the element type of this observable collection, ornullif this observable collection is untyped.- Returns:
- the element type or
nullif untyped
-
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
-
addSetChangeListener
- Specified by:
addSetChangeListenerin interfaceIObservableSet<E>- Overrides:
addSetChangeListenerin classAbstractObservableSet<E>- 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
-
hasListeners
protected boolean hasListeners() -
fireEvent
-
firstListenerAdded
protected void firstListenerAdded() -
lastListenerRemoved
protected void lastListenerRemoved() -
getRealm
- Returns:
- Returns the realm.
-
clone
- Overrides:
clonein classObject- Throws:
CloneNotSupportedException
-