package com.example.indexing;

import com.webobjects.eocontrol.EODataSource;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.foundation.NSArray;

import er.extensions.batching.ERXBatchingDisplayGroup;
import er.extensions.eof.ERXBatchFetchUtilities;

public class LuceneBatchingDisplayGroup<T> extends ERXBatchingDisplayGroup<T> {

	@Override
	public void setDataSource(EODataSource eodatasource) {
		super.setDataSource(eodatasource);
		if (eodatasource instanceof LuceneDataSource) {
			LuceneDataSource luceneDataSource = (LuceneDataSource) eodatasource;
			setRowCount(luceneDataSource.rowCount());
			_isBatching = true;
			setPrefetchingRelationshipKeyPaths(luceneDataSource.prefetchingRelationshipKeyPaths());
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	protected NSArray<T> objectsInRange(int start, int end) {
		if (dataSource() instanceof LuceneDataSource) {
			NSArray<? extends EOEnterpriseObject> results = ((LuceneDataSource)dataSource()).fetchObjects(start, end);
			
			NSArray<String> prefetchingRelationshipKeyPaths = _prefetchingRelationshipKeyPaths;
			if (prefetchingRelationshipKeyPaths != null && prefetchingRelationshipKeyPaths.count() > 0) {
				ERXBatchFetchUtilities.batchFetch(results, prefetchingRelationshipKeyPaths, true);
			}
			return (NSArray<T>)results;
		}
		return super.objectsInRange(start, end);
	}

}
