EclipseLink 1.1.1_ 1.1.1.v20090430-r4097 API Reference

org.eclipse.persistence.indirection
Class IndirectMap

java.lang.Object
  extended by java.util.Dictionary<K,V>
      extended by java.util.Hashtable
          extended by org.eclipse.persistence.indirection.IndirectMap
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.util.Map, ChangeTracker, CollectionChangeTracker, IndirectCollection, IndirectContainer

public class IndirectMap
extends java.util.Hashtable
implements CollectionChangeTracker, IndirectCollection

IndirectMap allows a domain class to take advantage of TopLink indirection without having to declare its instance variable as a ValueHolderInterface.

To use an IndirectMap:

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

See Also:
CollectionMapping, IndirectList, Serialized Form
Author:
Big Country
Since:
TOPLink/Java 2.5

Field Summary
protected  java.util.Hashtable delegate
          Reduce type casting
protected  int initialCapacity
          Store initial size for lazy init.
protected  float loadFactor
          Store load factor for lazy init.
protected  ValueHolderInterface valueHolder
          Delegate indirection behavior to a value holder
 
Constructor Summary
IndirectMap()
          PUBLIC: Construct a new, empty IndirectMap with a default capacity and load factor.
IndirectMap(int initialCapacity)
          PUBLIC: Construct a new, empty IndirectMap with the specified initial capacity and default load factor.
IndirectMap(int initialCapacity, float loadFactor)
          PUBLIC: Construct a new, empty IndirectMap with the specified initial capacity and load factor.
IndirectMap(java.util.Map m)
          PUBLIC: Construct a new IndirectMap with the same mappings as the given Map.
 
Method Summary
 java.beans.PropertyChangeListener _persistence_getPropertyChangeListener()
          Return the property change listener for change tracking.
 void _persistence_setPropertyChangeListener(java.beans.PropertyChangeListener changeListener)
          INTERNAL: Set the property change listener for change tracking.
protected  java.util.Hashtable buildDelegate()
          Return the freshly-built delegate.
 void clear()
           
 java.lang.Object clone()
           
 boolean contains(java.lang.Object value)
           
 boolean containsKey(java.lang.Object key)
           
 boolean containsValue(java.lang.Object value)
           
 java.util.Enumeration elements()
           
 java.util.Set entrySet()
           
 boolean equals(java.lang.Object o)
           
 java.lang.Object get(java.lang.Object key)
           
 java.util.Collection getAddedElements()
          INTERNAL: Return the elements that have been added before instantiation.
protected  java.util.Hashtable 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()
          PUBLIC: Return the valueHolder.
 boolean hasDeferredChanges()
          INTERNAL: Return if any elements that have been added or removed before instantiation.
 int hashCode()
           
 boolean hasTrackedPropertyChangeListener()
          INTERNAL: Return if the collection has a property change listener for change tracking.
protected  void initialize(int initialCapacity, float loadFactor)
          Initialize the instance.
protected  void initialize(java.util.Map m)
          Initialize the instance.
 boolean isEmpty()
           
 boolean isInstantiated()
          PUBLIC: Return whether the contents have been read from the database.
 java.util.Enumeration keys()
           
 java.util.Set keySet()
           
 java.lang.Object put(java.lang.Object key, java.lang.Object value)
           
 void putAll(java.util.Map t)
           
protected  void raiseAddChangeEvent(java.lang.Object key, java.lang.Object value)
          Raise the add change event and relationship maintainence.
protected  void raiseRemoveChangeEvent(java.lang.Object key, java.lang.Object value)
          Raise the remove change event.
protected  void rehash()
           
 java.lang.Object remove(java.lang.Object key)
           
 void setTrackedAttributeName(java.lang.String attributeName)
          INTERNAL: Set the mapping attribute name, used to raise change events.
 void setValueHolder(ValueHolderInterface valueHolder)
          INTERNAL: Set the value holder.
 int size()
           
 java.lang.String toString()
          PUBLIC: Use the Hashtable.toString(); but wrap it with braces to indicate there is a bit of indirection.
 java.util.Collection values()
           
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

delegate

protected volatile java.util.Hashtable delegate
Reduce type casting


valueHolder

protected ValueHolderInterface valueHolder
Delegate indirection behavior to a value holder


initialCapacity

protected int initialCapacity
Store initial size for lazy init.


loadFactor

protected float loadFactor
Store load factor for lazy init.

Constructor Detail

IndirectMap

public IndirectMap()
PUBLIC: Construct a new, empty IndirectMap with a default capacity and load factor.


IndirectMap

public IndirectMap(int initialCapacity)
PUBLIC: Construct a new, empty IndirectMap with the specified initial capacity and default load factor.

Parameters:
initialCapacity - the initial capacity of the hashtable

IndirectMap

public IndirectMap(int initialCapacity,
                   float loadFactor)
PUBLIC: Construct a new, empty IndirectMap with the specified initial capacity and load factor.

Parameters:
initialCapacity - the initial capacity of the hashtable
loadFactor - a number between 0.0 and 1.0
Throws:
java.lang.IllegalArgumentException - if the initial capacity is less than or equal to zero, or if the load factor is less than or equal to zero

IndirectMap

public IndirectMap(java.util.Map m)
PUBLIC: Construct a new IndirectMap with the same mappings as the given Map. The IndirectMap is created with a capacity of twice the number of entries in the given Map or 11 (whichever is greater), and a default load factor, which is 0.75.

Parameters:
m - a map containing the mappings to use
Method Detail

buildDelegate

protected java.util.Hashtable buildDelegate()
Return the freshly-built delegate.


clear

public void clear()
Specified by:
clear in interface java.util.Map
Overrides:
clear in class java.util.Hashtable
See Also:
Hashtable.clear()

clone

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

contains

public boolean contains(java.lang.Object value)
Overrides:
contains in class java.util.Hashtable
See Also:
Hashtable.contains(java.lang.Object)

containsKey

public boolean containsKey(java.lang.Object key)
Specified by:
containsKey in interface java.util.Map
Overrides:
containsKey in class java.util.Hashtable
See Also:
Hashtable.containsKey(java.lang.Object)

containsValue

public boolean containsValue(java.lang.Object value)
Specified by:
containsValue in interface java.util.Map
Overrides:
containsValue in class java.util.Hashtable
See Also:
Hashtable.containsValue(java.lang.Object)

elements

public java.util.Enumeration elements()
Overrides:
elements in class java.util.Hashtable
See Also:
Hashtable.elements()

entrySet

public java.util.Set entrySet()
Specified by:
entrySet in interface java.util.Map
Overrides:
entrySet in class java.util.Hashtable
See Also:
Hashtable.entrySet()

equals

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

get

public java.lang.Object get(java.lang.Object key)
Specified by:
get in interface java.util.Map
Overrides:
get in class java.util.Hashtable
See Also:
Hashtable.get(java.lang.Object)

getDelegate

protected java.util.Hashtable getDelegate()
INTERNAL: Check whether the contents have been read from the database. If they have not, read them and set the delegate. This method used to be synchronized, which caused deadlock.


getDelegateObject

public java.lang.Object getDelegateObject()
INTERNAL: Return the real collection object. This will force instantiation.

Specified by:
getDelegateObject in interface IndirectCollection

getTrackedAttributeName

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

Specified by:
getTrackedAttributeName in interface CollectionChangeTracker

_persistence_getPropertyChangeListener

public java.beans.PropertyChangeListener _persistence_getPropertyChangeListener()
Return the property change listener for change tracking.

Specified by:
_persistence_getPropertyChangeListener in interface ChangeTracker

getValueHolder

public ValueHolderInterface getValueHolder()
PUBLIC: Return the valueHolder. This method used to be synchronized, which caused deadlock.

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

hashCode

public int hashCode()
Specified by:
hashCode in interface java.util.Map
Overrides:
hashCode in class java.util.Hashtable
See Also:
Hashtable.hashCode()

hasTrackedPropertyChangeListener

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


initialize

protected void initialize(int initialCapacity,
                          float loadFactor)
Initialize the instance.


initialize

protected void initialize(java.util.Map m)
Initialize the instance.


isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface java.util.Map
Overrides:
isEmpty in class java.util.Hashtable
See Also:
Hashtable.isEmpty()

isInstantiated

public boolean isInstantiated()
PUBLIC: Return whether the contents have been read from the database.

Specified by:
isInstantiated in interface IndirectContainer

keys

public java.util.Enumeration keys()
Overrides:
keys in class java.util.Hashtable
See Also:
Hashtable.keys()

keySet

public java.util.Set keySet()
Specified by:
keySet in interface java.util.Map
Overrides:
keySet in class java.util.Hashtable
See Also:
Hashtable.keySet()

put

public java.lang.Object put(java.lang.Object key,
                            java.lang.Object value)
Specified by:
put in interface java.util.Map
Overrides:
put in class java.util.Hashtable
See Also:
Hashtable.put(java.lang.Object, java.lang.Object)

putAll

public void putAll(java.util.Map t)
Specified by:
putAll in interface java.util.Map
Overrides:
putAll in class java.util.Hashtable
See Also:
Hashtable.putAll(java.util.Map)

rehash

protected void rehash()
Overrides:
rehash in class java.util.Hashtable
See Also:
Hashtable.rehash()

raiseAddChangeEvent

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


raiseRemoveChangeEvent

protected void raiseRemoveChangeEvent(java.lang.Object key,
                                      java.lang.Object value)
Raise the remove change event.


remove

public java.lang.Object remove(java.lang.Object key)
Specified by:
remove in interface java.util.Map
Overrides:
remove in class java.util.Hashtable
See Also:
Hashtable.remove(java.lang.Object)

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

_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

setValueHolder

public void setValueHolder(ValueHolderInterface valueHolder)
INTERNAL: Set the value holder.

Specified by:
setValueHolder in interface IndirectContainer

size

public int size()
Specified by:
size in interface java.util.Map
Overrides:
size in class java.util.Hashtable
See Also:
Hashtable.size()

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

hasDeferredChanges

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

Specified by:
hasDeferredChanges in interface IndirectCollection

toString

public java.lang.String toString()
PUBLIC: Use the Hashtable.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.util.Hashtable
See Also:
Hashtable.toString()

values

public java.util.Collection values()
Specified by:
values in interface java.util.Map
Overrides:
values in class java.util.Hashtable
See Also:
Hashtable.values()

EclipseLink 1.1.1_ 1.1.1.v20090430-r4097 API Reference