Package org.apache.openjpa.util
Class AbstractLRSProxyCollection
java.lang.Object
org.apache.openjpa.util.AbstractLRSProxyCollection
- All Implemented Interfaces:
Iterable
,Collection
,Predicate
,Set
,ChangeTracker
,CollectionChangeTracker
,LRSProxy
,Proxy
- Direct Known Subclasses:
LRSProxyCollection
public abstract class AbstractLRSProxyCollection
extends Object
implements Set, LRSProxy, Predicate, CollectionChangeTracker
A collection proxy designed for collections backed by extremely large
result sets in which each call to
iterator()
may perform a database
query. Changes to the collection are tracked through a
ChangeTracker
. This collection has the following limitations:
- The
size
method may returnInteger.MAX_VALUE
. - The collection cannot contain duplicate elements.
- Author:
- Abe White
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
boolean
addAll
(Collection all) void
Record that the given element was added.void
clear()
boolean
boolean
containsAll
(Collection all) Return an unproxied copy of the given instance.protected abstract int
count()
Return the number of elements in the collection, orInteger.MAX_VALUE
.getAdded()
Return the collection of values that need to be added to the managed container.Return the set of elements that have changed.Return the change tracker for this proxy, or null if none.int
The next element sequence value for this proxy at load time.getOwner()
Return the owning object.int
Return the owning field index.Return the set of values that need to be removed from the managed container.protected abstract boolean
Return whether the collection contains the given element.boolean
isEmpty()
boolean
Return true if this tracker has an up-to-date view of all the changes to the container it is managing.iterator()
protected abstract Iterator
itr()
Implement this method to return an iterator over the contents of the collection.boolean
boolean
removeAll
(Collection all) void
Record that the given element was removed.boolean
retainAll
(Collection all) void
setNextSequence
(int seq) The maximum element sequence value for this proxy at load time.void
setOwner
(OpenJPAStateManager sm, int field) Reset the state of the proxy, and set the owning instance of the proxy and the name of the field it is assigned to.int
size()
void
Reset the state of the change tracker, and turn change tracking back on if it has been disabled.void
Tell the tracker to stop tracking changes for its container.boolean
Object[]
toArray()
Object[]
protected Object
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.util.Collection
parallelStream, removeIf, stream, toArray
Methods inherited from interface java.util.Set
equals, hashCode, spliterator
-
Constructor Details
-
AbstractLRSProxyCollection
Constructor.- Parameters:
elementType
- the allowed type of elements, or null for no restrictionsordered
- true if this collection is ordered
-
-
Method Details
-
setOwner
Description copied from interface:Proxy
Reset the state of the proxy, and set the owning instance of the proxy and the name of the field it is assigned to. Set to null to indicate that the proxy is no longer managed. -
getOwner
Description copied from interface:Proxy
Return the owning object. -
getOwnerField
public int getOwnerField()Description copied from interface:Proxy
Return the owning field index.- Specified by:
getOwnerField
in interfaceProxy
-
getChangeTracker
Description copied from interface:Proxy
Return the change tracker for this proxy, or null if none.- Specified by:
getChangeTracker
in interfaceProxy
-
copy
Description copied from interface:Proxy
Return an unproxied copy of the given instance. This method is used by proxy managers to create backup values for use in rollback. -
add
- Specified by:
add
in interfaceCollection
- Specified by:
add
in interfaceSet
-
addAll
- Specified by:
addAll
in interfaceCollection
- Specified by:
addAll
in interfaceSet
-
remove
- Specified by:
remove
in interfaceCollection
- Specified by:
remove
in interfaceSet
-
removeAll
- Specified by:
removeAll
in interfaceCollection
- Specified by:
removeAll
in interfaceSet
-
retainAll
- Specified by:
retainAll
in interfaceCollection
- Specified by:
retainAll
in interfaceSet
-
clear
public void clear()- Specified by:
clear
in interfaceCollection
- Specified by:
clear
in interfaceSet
-
contains
- Specified by:
contains
in interfaceCollection
- Specified by:
contains
in interfaceSet
-
containsAll
- Specified by:
containsAll
in interfaceCollection
- Specified by:
containsAll
in interfaceSet
-
toArray
- Specified by:
toArray
in interfaceCollection
- Specified by:
toArray
in interfaceSet
-
toArray
- Specified by:
toArray
in interfaceCollection
- Specified by:
toArray
in interfaceSet
-
size
public int size()- Specified by:
size
in interfaceCollection
- Specified by:
size
in interfaceSet
-
isEmpty
public boolean isEmpty()- Specified by:
isEmpty
in interfaceCollection
- Specified by:
isEmpty
in interfaceSet
-
iterator
-
writeReplace
- Throws:
ObjectStreamException
-
itr
Implement this method to return an iterator over the contents of the collection. This method may be invoked multiple times. The returned iterator does not have to support theIterator.remove()
method, and may implementCloseable
. -
has
Return whether the collection contains the given element. -
count
protected abstract int count()Return the number of elements in the collection, orInteger.MAX_VALUE
. -
test
-
isTracking
public boolean isTracking()Description copied from interface:ChangeTracker
Return true if this tracker has an up-to-date view of all the changes to the container it is managing.- Specified by:
isTracking
in interfaceChangeTracker
-
startTracking
public void startTracking()Description copied from interface:ChangeTracker
Reset the state of the change tracker, and turn change tracking back on if it has been disabled.- Specified by:
startTracking
in interfaceChangeTracker
-
stopTracking
public void stopTracking()Description copied from interface:ChangeTracker
Tell the tracker to stop tracking changes for its container.- Specified by:
stopTracking
in interfaceChangeTracker
-
getAdded
Description copied from interface:ChangeTracker
Return the collection of values that need to be added to the managed container.- Specified by:
getAdded
in interfaceChangeTracker
-
getRemoved
Description copied from interface:ChangeTracker
Return the set of values that need to be removed from the managed container.- Specified by:
getRemoved
in interfaceChangeTracker
-
getChanged
Description copied from interface:ChangeTracker
Return the set of elements that have changed. In maps, this marks a possible change in value for a key. In collections, this marks an element that has been removed and re-added.- Specified by:
getChanged
in interfaceChangeTracker
-
added
Description copied from interface:CollectionChangeTracker
Record that the given element was added.- Specified by:
added
in interfaceCollectionChangeTracker
-
removed
Description copied from interface:CollectionChangeTracker
Record that the given element was removed.- Specified by:
removed
in interfaceCollectionChangeTracker
-
getNextSequence
public int getNextSequence()Description copied from interface:ChangeTracker
The next element sequence value for this proxy at load time. If the data store keeps this proxy's data in sequence order but allows holes for removed objects, the implementation can set the next sequence at load time, then retrieve it and start from there for added objects at flush time. This value is set back to 0 if the proxy stops tracking changes. For ordered proxies, it is set to the proxy's size when the proxy starts tracking changes again.- Specified by:
getNextSequence
in interfaceChangeTracker
-
setNextSequence
public void setNextSequence(int seq) Description copied from interface:ChangeTracker
The maximum element sequence value for this proxy at load time. If the data store keeps this proxy's data in sequence order but allows holes for removed objects, the implementation can set the next sequence at load time, then retrieve it and start from there for added objects at flush time. This value is set back to 0 if the proxy stops tracking changes. For ordered proxies, it is set to the proxy's size when the proxy starts tracking changes again.- Specified by:
setNextSequence
in interfaceChangeTracker
-