Package org.apache.cayenne.access
Class IncrementalFaultList<E>
- java.lang.Object
-
- org.apache.cayenne.access.IncrementalFaultList<E>
-
- All Implemented Interfaces:
Serializable,Iterable<E>,Collection<E>,List<E>
public class IncrementalFaultList<E> extends Object implements List<E>, Serializable
A synchronized list that serves as a container of DataObjects. It is returned when a paged query is performed by DataContext. On creation, only the first "page" is fully resolved, for the rest of the objects only their ObjectIds are read. Pages following the first page are resolved on demand only. On access to an element, the list would ensure that this element as well as all its siblings on the same page are fully resolved.The list can hold DataRows or DataObjects. Attempts to add any other object types will result in an exception.
Performance note: certain operations like
toArraywould trigger full list fetch.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected DataContextdataContextprotected Listelementsprotected intidWidthStores a hint allowing to distinguish data rows from unfetched ids when the query fetches data rows.protected SelectQuery<?>internalQueryprotected intmaxFetchSizeDefines the upper limit on the size of fetches.protected intpageSizeprotected ObjEntityrootEntityprotected intunfetchedObjects
-
Constructor Summary
Constructors Constructor Description IncrementalFaultList(DataContext dataContext, Query query, int maxFetchSize)Creates a new IncrementalFaultList using a given DataContext and query.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(int index, Object element)booleanadd(Object o)booleanaddAll(int index, Collection<? extends E> c)booleanaddAll(Collection<? extends E> c)voidclear()booleancontains(Object o)booleancontainsAll(Collection<?> c)protected voidfillIn(Query query, List<Object> elementsList)Performs initialization of the list of objects.Eget(int index)DataContextgetDataContext()Returns the dataContext.intgetMaxFetchSize()Get the upper bound on the number of records to resolve in one round trip to the database.intgetPageSize()Returns the pageSize.intgetUnfetchedObjects()Returns a total number of objects that are not resolved yet.intindexOf(Object o)booleanisEmpty()Iterator<E>iterator()Return an iterator for this list.intlastIndexOf(Object o)ListIterator<E>listIterator()Returns a list iterator for this list.ListIterator<E>listIterator(int index)Returns a list iterator of the elements in this list (in proper sequence), starting at the specified position in this list.intpageIndex(int elementIndex)Returns zero-based index of the virtual "page" for a given array element index.Eremove(int index)booleanremove(Object o)booleanremoveAll(Collection<?> c)voidresolveAll()Will resolve all unread objects.protected voidresolveInterval(int fromIndex, int toIndex)Resolves a sublist of objects starting atfromIndexup to but not includingtoIndex.booleanretainAll(Collection<?> c)Eset(int index, Object element)voidsetMaxFetchSize(int fetchSize)intsize()List<E>subList(int fromIndex, int toIndex)Object[]toArray()<T> T[]toArray(T[] a)-
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.List
equals, hashCode, replaceAll, sort, spliterator
-
-
-
-
Field Detail
-
pageSize
protected int pageSize
-
elements
protected final List elements
-
dataContext
protected DataContext dataContext
-
rootEntity
protected ObjEntity rootEntity
-
internalQuery
protected SelectQuery<?> internalQuery
-
unfetchedObjects
protected int unfetchedObjects
-
idWidth
protected int idWidth
Stores a hint allowing to distinguish data rows from unfetched ids when the query fetches data rows.
-
maxFetchSize
protected int maxFetchSize
Defines the upper limit on the size of fetches. This is needed to avoid where clause size limitations.
-
-
Constructor Detail
-
IncrementalFaultList
public IncrementalFaultList(DataContext dataContext, Query query, int maxFetchSize)
Creates a new IncrementalFaultList using a given DataContext and query.- Parameters:
dataContext- DataContext used by IncrementalFaultList to fill itself with objects.query- Main query used to retrieve data. Must have "pageSize" property set to a value greater than zero.maxFetchSize- maximum number of fetches in one query
-
-
Method Detail
-
fillIn
protected void fillIn(Query query, List<Object> elementsList)
Performs initialization of the list of objects. Only the first page is fully resolved. For the rest of the list, only ObjectIds are read.- Since:
- 3.0
-
resolveAll
public void resolveAll()
Will resolve all unread objects.
-
resolveInterval
protected void resolveInterval(int fromIndex, int toIndex)Resolves a sublist of objects starting atfromIndexup to but not includingtoIndex. Internally performs bound checking and trims indexes accordingly.
-
pageIndex
public int pageIndex(int elementIndex)
Returns zero-based index of the virtual "page" for a given array element index.
-
getMaxFetchSize
public int getMaxFetchSize()
Get the upper bound on the number of records to resolve in one round trip to the database. This setting governs the size/complexity of the where clause generated to retrieve the next page of records. If the fetch size is less than the page size, then multiple fetches will be made to resolve a page.
-
setMaxFetchSize
public void setMaxFetchSize(int fetchSize)
-
getDataContext
public DataContext getDataContext()
Returns the dataContext.- Returns:
- DataContext
-
getPageSize
public int getPageSize()
Returns the pageSize.- Returns:
- int
-
listIterator
public ListIterator<E> listIterator()
Returns a list iterator for this list. DataObjects are resolved a page (according to getPageSize()) at a time as necessary - when retrieved with next() or previous().- Specified by:
listIteratorin interfaceList<E>
-
listIterator
public ListIterator<E> listIterator(int index)
Returns a list iterator of the elements in this list (in proper sequence), starting at the specified position in this list. The specified index indicates the first element that would be returned by an initial call to the next method. An initial call to the previous method would return the element with the specified index minus one. DataObjects are resolved a page at a time (according to getPageSize()) as necessary - when retrieved with next() or previous().- Specified by:
listIteratorin interfaceList<E>
-
iterator
public Iterator<E> iterator()
Return an iterator for this list. DataObjects are resolved a page (according to getPageSize()) at a time as necessary - when retrieved with next().
-
add
public void add(int index, Object element)- Specified by:
addin interfaceList<E>- See Also:
List.add(int, Object)
-
add
public boolean add(Object o)
- Specified by:
addin interfaceCollection<E>- Specified by:
addin interfaceList<E>- See Also:
Collection.add(Object)
-
addAll
public boolean addAll(Collection<? extends E> c)
- Specified by:
addAllin interfaceCollection<E>- Specified by:
addAllin interfaceList<E>- See Also:
Collection.addAll(Collection)
-
addAll
public boolean addAll(int index, Collection<? extends E> c)- Specified by:
addAllin interfaceList<E>- See Also:
List.addAll(int, Collection)
-
clear
public void clear()
- Specified by:
clearin interfaceCollection<E>- Specified by:
clearin interfaceList<E>- See Also:
Collection.clear()
-
contains
public boolean contains(Object o)
- Specified by:
containsin interfaceCollection<E>- Specified by:
containsin interfaceList<E>- See Also:
Collection.contains(Object)
-
containsAll
public boolean containsAll(Collection<?> c)
- Specified by:
containsAllin interfaceCollection<E>- Specified by:
containsAllin interfaceList<E>- See Also:
Collection.containsAll(Collection)
-
indexOf
public int indexOf(Object o)
- Specified by:
indexOfin interfaceList<E>- See Also:
List.indexOf(Object)
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmptyin interfaceCollection<E>- Specified by:
isEmptyin interfaceList<E>- See Also:
Collection.isEmpty()
-
lastIndexOf
public int lastIndexOf(Object o)
- Specified by:
lastIndexOfin interfaceList<E>
-
remove
public boolean remove(Object o)
-
removeAll
public boolean removeAll(Collection<?> c)
-
retainAll
public boolean retainAll(Collection<?> c)
-
set
public E set(int index, Object element)
- Specified by:
setin interfaceList<E>- See Also:
List.set(int, Object)
-
size
public int size()
- Specified by:
sizein interfaceCollection<E>- Specified by:
sizein interfaceList<E>- See Also:
Collection.size()
-
toArray
public Object[] toArray()
-
toArray
public <T> T[] toArray(T[] a)
-
getUnfetchedObjects
public int getUnfetchedObjects()
Returns a total number of objects that are not resolved yet.
-
-