/** * Creates a new IncrementalFaultList using a given DataContext and query. * * @param dataContext DataContext used by IncrementalFaultList to fill itself with objects. * @param query Main query used to retrieve data. Must have "pageSize" property set to a value * greater than zero. * @param maxFetchSize maximum number of fetches in one query */ public IncrementalFaultList(DataContext dataContext, Query query, int maxFetchSize) { QueryMetadata metadata = query.getMetaData(dataContext.getEntityResolver()); if (metadata.getPageSize() <= 0) { throw new CayenneRuntimeException( "Not a paginated query; page size: " + metadata.getPageSize()); } this.dataContext = dataContext; this.pageSize = metadata.getPageSize(); this.rootEntity = metadata.getObjEntity(); if (rootEntity == null) { throw new CayenneRuntimeException( "Pagination is not supported for queries not rooted in an ObjEntity"); } // create an internal query, it is a partial replica of // the original query and will serve as a value holder for // various parameters this.internalQuery = new SelectQuery<Object>(rootEntity); this.internalQuery.setFetchingDataRows(metadata.isFetchingDataRows()); this.internalQuery.setPrefetchTree(metadata.getPrefetchTree()); this.helper = createHelper(metadata); this.idWidth = metadata.getDbEntity().getPrimaryKeys().size(); List<Object> elementsUnsynced = new ArrayList<>(); fillIn(query, elementsUnsynced); this.elements = Collections.synchronizedList(elementsUnsynced); this.maxFetchSize = maxFetchSize; }