Eclipse Platform Release 3.7

## org.eclipse.core.databinding.observable.set
Class ComputedSet

    java.lang.Object
      org.eclipse.core.databinding.observable.AbstractObservable
          org.eclipse.core.databinding.observable.set.AbstractObservableSet
              org.eclipse.core.databinding.observable.set.ComputedSet

All Implemented Interfaces:
  Iterable, Collection, Set, IObservable, IObservableCollection, IObservableSet

    public abstract class ComputedSet

extends AbstractObservableSet

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(new Integer(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(new Integer(i));
                    }
                    return result;
            }
     };

     System.out.println(primes); // => "[]"

     max.setValue(new Integer(20));
     System.out.println(primes); // => "[2, 3, 5, 7, 11, 13, 17, 19]"

Since:
  1.2

Constructor Summary
`ComputedSet()` Creates 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
`void` `addChangeListener(IChangeListener listener)` Adds the given change listener to the list of change listeners.
`protected void` `addListener(Object listenerType, IObservablesListener listener)`
`void` `addSetChangeListener(ISetChangeListener listener)`
`protected abstract Set` `calculate()` Subclasses must override this method to calculate the set contents.
`protected Object` `clone()`
`void` `dispose()` Disposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.
`protected int` `doGetSize()`
`protected void` `fireEvent(ObservableEvent event)`
`Object` `getElementType()` Returns the element type of this observable collection, or `null` if this observable collection is untyped.
`Realm` `getRealm()`
`protected Set` `getWrappedSet()`
`protected boolean` `hasListeners()`
`boolean` `isStale()` Returns whether the state of this observable is stale and is expected to change soon.
`protected void` `removeListener(Object listenerType, IObservablesListener listener)`

Methods inherited from class org.eclipse.core.databinding.observable.set.AbstractObservableSet
`add, addAll, clear, contains, containsAll, equals, fireChange, fireSetChange, firstListenerAdded, getterCalled, hashCode, isEmpty, iterator, lastListenerRemoved, remove, removeAll, removeSetChangeListener, retainAll, setStale, size, toArray, toArray, toString`

Methods inherited from class org.eclipse.core.databinding.observable.AbstractObservable
`addDisposeListener, addStaleListener, checkRealm, fireStale, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListener`

Methods inherited from class java.lang.Object
`finalize, getClass, notify, notifyAll, wait, wait, wait`

Methods inherited from interface org.eclipse.core.databinding.observable.IObservable
`addDisposeListener, addStaleListener, getRealm, isDisposed, removeChangeListener, removeDisposeListener, removeStaleListener`

Constructor Detail

### ComputedSet

    public ComputedSet()

  Creates a computed set in the default realm and with an unknown (null) element type.

### ComputedSet

    public ComputedSet(Object elementType)

  Creates a computed set in the default realm and with the given element type.

  Parameters:
    `elementType` - the element type, may be `null` to indicate unknown element type

### ComputedSet

    public ComputedSet(Realm realm)

  Creates a computed set in given realm and with an unknown (null) element type.

  Parameters:
    `realm` - the realm

### ComputedSet

    public ComputedSet(Realm realm,
                       Object elementType)

  Creates a computed set in the given realm and with the given element type.

  Parameters:
    `realm` - the realm
    `elementType` - the element type, may be `null` to indicate unknown element type

Method Detail

### doGetSize

    protected int doGetSize()

### getWrappedSet

    protected Set getWrappedSet()

  Specified by:
    `getWrappedSet` in class `AbstractObservableSet`

### calculate

    protected abstract Set calculate()

  Subclasses must override this method to calculate the set contents. Any dependencies used to calculate the set must be `IObservable`, 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: `IObservable`
  Returns 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:
    `isStale` in interface `IObservable`
  Overrides:
    `isStale` in class `AbstractObservableSet`
  Returns:
    Returns the stale state.

### getElementType

    public Object getElementType()

  Description copied from interface: `IObservableCollection`
  Returns the element type of this observable collection, or `null` if this observable collection is untyped.

  Returns:
    the element type of this observable collection, or `null` if this observable collection is untyped.

### addChangeListener

    public void addChangeListener(IChangeListener listener)

  Description copied from interface: `IObservable`
  Adds 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:
    `addChangeListener` in interface `IObservable`
  Overrides:
    `addChangeListener` in class `AbstractObservable`

### addSetChangeListener

    public void addSetChangeListener(ISetChangeListener listener)

  Specified by:
    `addSetChangeListener` in interface `IObservableSet`
  Overrides:
    `addSetChangeListener` in class `AbstractObservableSet`

### dispose

    public void dispose()

  Description copied from interface: `IObservable`
  Disposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.

  Specified by:
    `dispose` in interface `IObservable`
  Overrides:
    `dispose` in class `AbstractObservable`

### addListener

    protected void addListener(Object listenerType,
                               IObservablesListener listener)

  Parameters:
    `listenerType` -
    `listener` -

### removeListener

    protected void removeListener(Object listenerType,
                                  IObservablesListener listener)

  Parameters:
    `listenerType` -
    `listener` -

### hasListeners

    protected boolean hasListeners()

### fireEvent

    protected void fireEvent(ObservableEvent event)

### getRealm

    public Realm getRealm()

  Returns:
    Returns the realm.

### clone

    protected Object clone()
                    throws CloneNotSupportedException

  Overrides:
    `clone` in class `Object`
  Throws:
    `CloneNotSupportedException`

Eclipse Platform Release 3.7

Guidelines for using Eclipse APIs.

Copyright (c) Eclipse contributors and others 2000, 2011. All rights reserved.