javax.media.jai
Class DeferredData

java.lang.Object
  |
  +--java.util.Observable
        |
        +--javax.media.jai.DeferredData
All Implemented Interfaces:
Serializable
Direct Known Subclasses:
DeferredProperty

public abstract class DeferredData
extends Observable
implements Serializable

Class to be used as a wrapper for data which will be calculated at a later time. For example, an instance of a subclass of this class may be passed as a parameter in the ParameterBlock set on a RenderedOp node. The data wrapped by the DeferredData object will not however actually be requested until the node is rendered.

Since:
JAI 1.1
See Also:
DeferredProperty, RenderedOp, Serialized Form

Field Summary
protected  Object data
          The data wrapped by this class.
protected  Class dataClass
          The class of the wrapped data.
 
Constructor Summary
protected DeferredData(Class dataClass)
          Creates a DeferredData wrapper for an object of the indicated class.
 
Method Summary
protected abstract  Object computeData()
          Computes the value of the data object wrapped by this object.
 Object getData()
          Returns the object wrapped by this DeferredData.
 Class getDataClass()
          Returns the class of the object wrapped by this DeferredData.
 boolean isValid()
          Whether the data value has already been computed.
protected  void setData(Object data)
          Sets the instance variable associated with the data to the supplied parameter.
 
Methods inherited from class java.util.Observable
addObserver, clearChanged, countObservers, deleteObserver, deleteObservers, hasChanged, notifyObservers, notifyObservers, setChanged
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dataClass

protected Class dataClass
The class of the wrapped data.

data

protected transient Object data
The data wrapped by this class. This field is marked transient so that subclasses are obligated to provide specific serialization methods if they desire that this field be serialized.
Constructor Detail

DeferredData

protected DeferredData(Class dataClass)
Creates a DeferredData wrapper for an object of the indicated class. The parameter must be non-null or an IllegalArgumentException will be thrown.
Throws:
IllegalArgumentException - if dataClass is null.
Method Detail

getDataClass

public Class getDataClass()
Returns the class of the object wrapped by this DeferredData.

isValid

public boolean isValid()
Whether the data value has already been computed.
Returns:
true if and inly if the internal data value is non-null, i.e., has already been computed.

computeData

protected abstract Object computeData()
Computes the value of the data object wrapped by this object. The returned object must be an instance of a class assignable to the class specified at construction.

getData

public final Object getData()
Returns the object wrapped by this DeferredData. If the data have not yet been computed, computeData() will be invoked to provide the data. If computeData() is invoked, then setData() will be invoked with its parameter set to the value returned by computeData().

setData

protected final void setData(Object data)
Sets the instance variable associated with the data to the supplied parameter. If the parameter is non-null and not an instance of the class specified at construction, an IllegalArgumentException will be thrown. If the supplied parameter differs from the current data value, then setChanged() will be invoked and notifyObservers() will be called with its argument set to the previous value of the data object. This implies that the update() method of any registered Observers will be invoked with the Observable parameter set to this DeferredData object and its Object parameter set to the previous value of the data field of this DeferredData instance. The current value of the object can be retrieved by an Observer by casting the Observable parameter of update() to DeferredData and invoking getData(). To avoid provoking computation of deferred data by calling getData(), isValid() could first be called to determine whether data is non-null. If an Observer detects that the data of the observed DeferredData object is invalid, i.e., null, then this indicates that the data should be re-requested by invoking getData().
Throws:
IllegalArgumentException - if data is non-null and not an instance of the class specified at construction.