package com.example.indexing;

import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;

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

import er.indexing.AutoIndex;

public class LuceneDataSource extends EODataSource {
	private EOEditingContext _editingContext;
	private final Query _searchQuery;
	private final AutoIndex _autoIndex;
	private final Sort _sort;
    private NSArray<String> _prefetchingRelationshipKeyPaths;

	public LuceneDataSource(EOEditingContext ec, AutoIndex autoIndex,
			Query searchQuery, Sort sort) {
		super();
		_editingContext = ec;
		_autoIndex = autoIndex;
		_searchQuery = searchQuery;
		_sort = sort;
	}

	public EOEditingContext editingContext() {
		return _editingContext;
	}

	public AutoIndex autoIndex() {
		return _autoIndex;
	}
	
	public Query query() {
		return _searchQuery;
	}
	
	public NSArray<String> prefetchingRelationshipKeyPaths() {
		return _prefetchingRelationshipKeyPaths;
	}

	public void setPrefetchingRelationshipKeyPaths(NSArray<String> relationshipKeyPaths) {
		_prefetchingRelationshipKeyPaths = relationshipKeyPaths;
	}

	@Override
	public EODataSource dataSourceQualifiedByKey(String s) {
		return null;
	}

	@Override
	public Object createObject() {
		throw new RuntimeException("Method not supported in LuceneDataSource");
	}

	@Override
	public void deleteObject(Object obj) {
		throw new RuntimeException("Method not supported in LuceneDataSource");
	}

	@Override
	public void insertObject(Object obj) {
		throw new RuntimeException("Method not supported in LuceneDataSource");

	}

	@Override
	public void qualifyWithRelationshipKey(String s, Object obj) {
		throw new RuntimeException("Method not supported in LuceneDataSource");

	}

	public NSArray<?> fetchObjects() {
		return NSArray.EmptyArray;
	}

	public NSArray<? extends EOEnterpriseObject> fetchObjects(int start, int end) {
		return _autoIndex.findObjects(editingContext(), _searchQuery, null, _sort, start, end);
	}


	public EOClassDescription classDescriptionForObjects() {
		throw new RuntimeException("Method not supported in LuceneDataSource");
	}

	public int rowCount() {
		return _autoIndex.findHits(_searchQuery).length();
	}

}
