Skip navigation links

Oracle Fusion Middleware Java API Reference for Oracle TopLink
11g Release 1 (11.1.1)

E28847-01


org.eclipse.persistence.indirection
Class IndirectSet

java.lang.Object
  extended by org.eclipse.persistence.indirection.IndirectSet

All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.lang.Iterable, java.util.Collection, java.util.Set, ChangeTracker, CollectionChangeTracker, IndirectCollection, IndirectContainer

public class IndirectSet
extends java.lang.Object
implements CollectionChangeTracker, java.util.Set, IndirectCollection, java.lang.Cloneable, java.io.Serializable

IndirectSet is an example implementation of the Set protocol that allows a domain class to take advantage of TopLink Indirection without having to declare its instance variable as a ValueHolderInterface.

To use an IndirectSet:

TopLink will place an IndirectSet in the instance variable when the containing domain object is read from the datatabase. With the first message sent to the IndirectSet, the contents are fetched from the database and normal Set behavior is resumed.

Implementation notes:

Since:
TOPLink/Java 3.0+
Author:
Big Country
See Also:
CollectionMapping, Serialized Form

Field Summary
private  java.util.Set addedElements
          Store added elements to avoid instantiation on add.
private  java.lang.String attributeName
          The mapping attribute name, used to raise change events.
private  java.beans.PropertyChangeListener changeListener
          Change tracking listener.
private  java.util.Set delegate
          Reduce type casting
protected  int initialCapacity
          Store initial size for lazy init.
protected  float loadFactor
          Store load factor for lazy init.
private  java.util.Set removedElements
          Store removed elements to avoid instantiation on remove.
private  boolean useLazyInstantiation
          This value is used to determine if we should attempt to do adds and removes from the list without actually instantiating the list from the database.
private  ValueHolderInterface valueHolder
          Delegate indirection behavior to a value holder

 

Constructor Summary
IndirectSet()
          Construct an empty IndirectSet.
IndirectSet(java.util.Collection c)
          Construct an IndirectSet containing the elements of the specified collection.
IndirectSet(int initialCapacity)
          Construct an empty IndirectSet with the specified initial capacity.
IndirectSet(int initialCapacity, float loadFactor)
          Construct an empty IndirectSet with the specified initial capacity and load factor.

 

Method Summary
 java.beans.PropertyChangeListener _persistence_getPropertyChangeListener()
          INTERNAL: Return the property change listener for change tracking.
 void _persistence_setPropertyChangeListener(java.beans.PropertyChangeListener changeListener)
          INTERNAL: Set the property change listener for change tracking.
 boolean add(java.lang.Object element)
           
 boolean addAll(java.util.Collection c)
           
protected  java.util.Set buildDelegate()
          INTERNAL: Return the freshly-built delegate.
 void clear()
           
 void clearDeferredChanges()
          INTERNAL: clear any changes that have been deferred to instantiation.
 java.lang.Object clone()
           
protected  java.util.Set cloneDelegate()
          INTERNAL: Clone the delegate.
 boolean contains(java.lang.Object element)
           
 boolean containsAll(java.util.Collection c)
           
 boolean equals(java.lang.Object o)
           
 java.util.Collection getAddedElements()
          INTERNAL: Return the elements that have been added before instantiation.
protected  java.util.Set getDelegate()
          INTERNAL: Check whether the contents have been read from the database.
 java.lang.Object getDelegateObject()
          INTERNAL: Return the real collection object.
 java.util.Collection getRemovedElements()
          INTERNAL: Return the elements that have been removed before instantiation.
 java.lang.String getTrackedAttributeName()
          INTERNAL: Return the mapping attribute name, used to raise change events.
 ValueHolderInterface getValueHolder()
          INTERNAL: Return the valueHolder.
 boolean hasAddedElements()
          INTERNAL: Return if any elements that have been added before instantiation.
 boolean hasBeenRegistered()
          INTERNAL: Return whether this IndirectSet has been registered in a UnitOfWork
 boolean hasDeferredChanges()
          INTERNAL: Return if any elements that have been added or removed before instantiation.
 int hashCode()
           
 boolean hasRemovedElements()
          INTERNAL: Return if any elements that have been removed before instantiation.
 boolean hasTrackedPropertyChangeListener()
          INTERNAL: Return if the collection has a property change listener for change tracking.
 boolean isEmpty()
           
 boolean isInstantiated()
          Return whether the contents have been read from the database.
 java.util.Iterator iterator()
           
protected  void raiseAddChangeEvent(java.lang.Object element)
          Raise the add change event and relationship maintainence.
protected  void raiseRemoveChangeEvent(java.lang.Object element)
          Raise the remove change event.
 boolean remove(java.lang.Object element)
           
 boolean removeAll(java.util.Collection c)
           
 boolean retainAll(java.util.Collection c)
           
 void setTrackedAttributeName(java.lang.String attributeName)
          INTERNAL: Set the mapping attribute name, used to raise change events.
 void setUseLazyInstantiation(boolean useLazyInstantiation)
          INTERNAL Set whether this collection should attempt do deal with adds and removes without retrieving the collection from the dB
 void setValueHolder(ValueHolderInterface valueHolder)
          INTERNAL: Set the value holder.
protected  boolean shouldAvoidInstantiation()
          INTERNAL: Return if add/remove should trigger instantiation or avoid.
protected  boolean shouldUseLazyInstantiation()
          Return whether this collection should attempt do deal with adds and removes without retrieving the collection from the dB
 int size()
           
 java.lang.Object[] toArray()
           
 java.lang.Object[] toArray(java.lang.Object[] a)
           
 java.lang.String toString()
          Use the delegate's #toString(); but wrap it with braces to indicate there is a bit of indirection.

 

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

 

Field Detail

delegate

private volatile java.util.Set delegate
Reduce type casting

valueHolder

private ValueHolderInterface valueHolder
Delegate indirection behavior to a value holder

changeListener

private transient java.beans.PropertyChangeListener changeListener
Change tracking listener.

attributeName

private java.lang.String attributeName
The mapping attribute name, used to raise change events.

addedElements

private transient java.util.Set addedElements
Store added elements to avoid instantiation on add.

removedElements

private transient java.util.Set removedElements
Store removed elements to avoid instantiation on remove.

initialCapacity

protected int initialCapacity
Store initial size for lazy init.

loadFactor

protected float loadFactor
Store load factor for lazy init.

useLazyInstantiation

private boolean useLazyInstantiation
This value is used to determine if we should attempt to do adds and removes from the list without actually instantiating the list from the database. By default, this is set to false. When set to true, adding duplicate elements to the set will result in the element being added when the transaction is committed.

Constructor Detail

IndirectSet

public IndirectSet()
Construct an empty IndirectSet.

IndirectSet

public IndirectSet(int initialCapacity)
Construct an empty IndirectSet with the specified initial capacity.
Parameters:
initialCapacity - the initial capacity of the set
Throws:
java.lang.IllegalArgumentException - if the specified initial capacity is negative

IndirectSet

public IndirectSet(int initialCapacity,
                   float loadFactor)
Construct an empty IndirectSet with the specified initial capacity and load factor.
Parameters:
initialCapacity - the initial capacity of the set
loadFactor - the load factor of the set
Throws:
java.lang.IllegalArgumentException - if the specified initial capacity is negative

IndirectSet

public IndirectSet(java.util.Collection c)
Construct an IndirectSet containing the elements of the specified collection.
Parameters:
c - the initial elements of the set

Method Detail

add

public boolean add(java.lang.Object element)
Specified by:
add in interface java.util.Collection
Specified by:
add in interface java.util.Set
See Also:
Set.add(java.lang.Object)

addAll

public boolean addAll(java.util.Collection c)
Specified by:
addAll in interface java.util.Collection
Specified by:
addAll in interface java.util.Set
See Also:
Set.addAll(java.util.Collection)

buildDelegate

protected java.util.Set buildDelegate()
INTERNAL: Return the freshly-built delegate.

clear

public void clear()
Specified by:
clear in interface java.util.Collection
Specified by:
clear in interface java.util.Set
See Also:
Set.clear()

clearDeferredChanges

public void clearDeferredChanges()
INTERNAL: clear any changes that have been deferred to instantiation. Indirect collections with change tracking avoid instantiation on add/remove.
Specified by:
clearDeferredChanges in interface IndirectCollection

clone

public java.lang.Object clone()
Overrides:
clone in class java.lang.Object
See Also:
This will result in a database query if necessary.

cloneDelegate

protected java.util.Set cloneDelegate()
INTERNAL: Clone the delegate.

contains

public boolean contains(java.lang.Object element)
Specified by:
contains in interface java.util.Collection
Specified by:
contains in interface java.util.Set
See Also:
Set.contains(java.lang.Object)

containsAll

public boolean containsAll(java.util.Collection c)
Specified by:
containsAll in interface java.util.Collection
Specified by:
containsAll in interface java.util.Set
See Also:
Set.containsAll(java.util.Collection)

equals

public boolean equals(java.lang.Object o)
Specified by:
equals in interface java.util.Collection
Specified by:
equals in interface java.util.Set
Overrides:
equals in class java.lang.Object
See Also:
Set.equals(java.lang.Object)

getDelegate

protected java.util.Set getDelegate()
INTERNAL: Check whether the contents have been read from the database. If they have not, read them and set the delegate.

getDelegateObject

public java.lang.Object getDelegateObject()
INTERNAL: Return the real collection object. This will force instantiation.
Specified by:
getDelegateObject in interface IndirectCollection

getValueHolder

public ValueHolderInterface getValueHolder()
INTERNAL: Return the valueHolder.
Specified by:
getValueHolder in interface IndirectContainer
Returns:
org.eclipse.persistence.indirection.ValueHolderInterface A representation of the valueholder * which this container uses

hasBeenRegistered

public boolean hasBeenRegistered()
INTERNAL: Return whether this IndirectSet has been registered in a UnitOfWork

hashCode

public int hashCode()
Specified by:
hashCode in interface java.util.Collection
Specified by:
hashCode in interface java.util.Set
Overrides:
hashCode in class java.lang.Object
See Also:
Set.hashCode()

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface java.util.Collection
Specified by:
isEmpty in interface java.util.Set
See Also:
Set.isEmpty()

isInstantiated

public boolean isInstantiated()
Return whether the contents have been read from the database.
Specified by:
isInstantiated in interface IndirectContainer

iterator

public java.util.Iterator iterator()
Specified by:
iterator in interface java.lang.Iterable
Specified by:
iterator in interface java.util.Collection
Specified by:
iterator in interface java.util.Set
See Also:
Set.iterator()

remove

public boolean remove(java.lang.Object element)
Specified by:
remove in interface java.util.Collection
Specified by:
remove in interface java.util.Set
See Also:
Set.remove(java.lang.Object)

removeAll

public boolean removeAll(java.util.Collection c)
Specified by:
removeAll in interface java.util.Collection
Specified by:
removeAll in interface java.util.Set
See Also:
Set.removeAll(java.util.Collection)

retainAll

public boolean retainAll(java.util.Collection c)
Specified by:
retainAll in interface java.util.Collection
Specified by:
retainAll in interface java.util.Set
See Also:
Set.retainAll(java.util.Collection)

setValueHolder

public void setValueHolder(ValueHolderInterface valueHolder)
INTERNAL: Set the value holder. Note that the delegate must be cleared out.
Specified by:
setValueHolder in interface IndirectContainer

setUseLazyInstantiation

public void setUseLazyInstantiation(boolean useLazyInstantiation)
INTERNAL Set whether this collection should attempt do deal with adds and removes without retrieving the collection from the dB
Specified by:
setUseLazyInstantiation in interface IndirectCollection

size

public int size()
Specified by:
size in interface java.util.Collection
Specified by:
size in interface java.util.Set
See Also:
Set.size()

shouldUseLazyInstantiation

protected boolean shouldUseLazyInstantiation()
Return whether this collection should attempt do deal with adds and removes without retrieving the collection from the dB
Returns:

toArray

public java.lang.Object[] toArray()
Specified by:
toArray in interface java.util.Collection
Specified by:
toArray in interface java.util.Set
See Also:
Set.toArray()

toArray

public java.lang.Object[] toArray(java.lang.Object[] a)
Specified by:
toArray in interface java.util.Collection
Specified by:
toArray in interface java.util.Set
See Also:
Set.toArray(java.lang.Object[])

toString

public java.lang.String toString()
Use the delegate's #toString(); but wrap it with braces to indicate there is a bit of indirection. Don't allow this method to trigger a database read.
Overrides:
toString in class java.lang.Object
See Also:
AbstractCollection.toString()

raiseAddChangeEvent

protected void raiseAddChangeEvent(java.lang.Object element)
Raise the add change event and relationship maintainence.

raiseRemoveChangeEvent

protected void raiseRemoveChangeEvent(java.lang.Object element)
Raise the remove change event.

_persistence_getPropertyChangeListener

public java.beans.PropertyChangeListener _persistence_getPropertyChangeListener()
INTERNAL: Return the property change listener for change tracking.
Specified by:
_persistence_getPropertyChangeListener in interface ChangeTracker

hasTrackedPropertyChangeListener

public boolean hasTrackedPropertyChangeListener()
INTERNAL: Return if the collection has a property change listener for change tracking.

_persistence_setPropertyChangeListener

public void _persistence_setPropertyChangeListener(java.beans.PropertyChangeListener changeListener)
INTERNAL: Set the property change listener for change tracking.
Specified by:
_persistence_setPropertyChangeListener in interface ChangeTracker

getTrackedAttributeName

public java.lang.String getTrackedAttributeName()
INTERNAL: Return the mapping attribute name, used to raise change events.
Specified by:
getTrackedAttributeName in interface CollectionChangeTracker

setTrackedAttributeName

public void setTrackedAttributeName(java.lang.String attributeName)
INTERNAL: Set the mapping attribute name, used to raise change events. This is required if the change listener is set.
Specified by:
setTrackedAttributeName in interface CollectionChangeTracker

getRemovedElements

public java.util.Collection getRemovedElements()
INTERNAL: Return the elements that have been removed before instantiation.
Specified by:
getRemovedElements in interface IndirectCollection

getAddedElements

public java.util.Collection getAddedElements()
INTERNAL: Return the elements that have been added before instantiation.
Specified by:
getAddedElements in interface IndirectCollection

hasAddedElements

public boolean hasAddedElements()
INTERNAL: Return if any elements that have been added before instantiation.

hasRemovedElements

public boolean hasRemovedElements()
INTERNAL: Return if any elements that have been removed before instantiation.

hasDeferredChanges

public boolean hasDeferredChanges()
INTERNAL: Return if any elements that have been added or removed before instantiation.
Specified by:
hasDeferredChanges in interface IndirectCollection

shouldAvoidInstantiation

protected boolean shouldAvoidInstantiation()
INTERNAL: Return if add/remove should trigger instantiation or avoid. Current instantiation is avoided is using change tracking.

Skip navigation links

Copyright © 1998, 2012, Oracle. All Rights Reserved.