org.jfree.report.util
Class WeakReferenceList

java.lang.Object
  extended byorg.jfree.report.util.WeakReferenceList
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable

public abstract class WeakReferenceList
extends java.lang.Object
implements java.io.Serializable, java.lang.Cloneable

The WeakReference list uses java.lang.ref.WeakReferences to store its contents. In contrast to the WeakHashtable, this list knows how to restore missing content, so that garbage collected elements can be restored when they are accessed.

By default this list can contain 25 elements, where the first element is stored using a strong reference, which is not garbage collected.

Restoring the elements is not implemented, concrete implementations will have to override the restoreChild(int) method. The getMaxChildCount method defines the maxmimum number of children in the list. When more than maxChildCount elements are contained in this list, add will always return false to indicate that adding the element failed.

To customize the list, override createReference to create a different kind of reference.

This list is able to add or replace elements, but inserting or removing of elements is not possible.

Todo: Check, if the master computation can be removed - master seems to be always at index 0

Author:
Thomas Morgner
See Also:
Serialized Form

Constructor Summary
protected WeakReferenceList(int maxChildCount)
          Creates a new weak reference list.
 
Method Summary
 boolean add(java.lang.Object rs)
          Adds the element to the list.
 java.lang.Object get(int index)
          Returns the child stored at the given index.
protected  int getChildPos(int index)
          Returns the internal storage position for the child.
protected  java.lang.Object getMaster()
          Returns the master element of this list.
protected  int getMaxChildCount()
          Returns the maximum number of children in this list.
 int getSize()
          Returns the size of the list.
protected  boolean isMaster(int index)
          Returns true, if the given index denotes a master index of this list.
protected abstract  java.lang.Object restoreChild(int index)
          Attempts to restore the child stored on the given index.
 void set(java.lang.Object report, int index)
          Replaces the child stored at the given index with the new child which can be null.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WeakReferenceList

protected WeakReferenceList(int maxChildCount)
Creates a new weak reference list. The storage of the list is limited to getMaxChildCount() elements.

Parameters:
maxChildCount - the maximum number of elements.
Method Detail

getMaxChildCount

protected final int getMaxChildCount()
Returns the maximum number of children in this list.

Returns:
the maximum number of elements in this list.

getMaster

protected java.lang.Object getMaster()
Returns the master element of this list. The master element is the element stored by a strong reference and cannot be garbage collected.

Returns:
the master element

restoreChild

protected abstract java.lang.Object restoreChild(int index)
Attempts to restore the child stored on the given index.

Parameters:
index - the index.
Returns:
null if the child could not be restored or the restored child.

get

public java.lang.Object get(int index)
Returns the child stored at the given index. If the child has been garbage collected, it gets restored using the restoreChild function.

Parameters:
index - the index.
Returns:
the object.

set

public void set(java.lang.Object report,
                int index)
Replaces the child stored at the given index with the new child which can be null.

Parameters:
report - the object.
index - the index.

add

public boolean add(java.lang.Object rs)
Adds the element to the list. If the maximum size of the list is exceeded, this function returns false to indicate that adding failed.

Parameters:
rs - the object.
Returns:
true, if the object was successfully added to the list, false otherwise

isMaster

protected boolean isMaster(int index)
Returns true, if the given index denotes a master index of this list.

Parameters:
index - the index.
Returns:
true if the index is a master index.

getChildPos

protected int getChildPos(int index)
Returns the internal storage position for the child.

Parameters:
index - the index.
Returns:
the internal storage index.

getSize

public int getSize()
Returns the size of the list.

Returns:
the size.