package cz.cuni.mff.d3s.been.objectrepository.mongo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import cz.cuni.mff.d3s.been.persistence.QueryAnswer;
import cz.cuni.mff.d3s.been.persistence.QueryAnswerFactory;
import cz.cuni.mff.d3s.been.persistence.QueryExecutionException;
import cz.cuni.mff.d3s.been.storage.QueryExecutor;
/**
* A fetch query executor for MongoDB
*
* @author darklight
*/
class MongoFetchQueryExecutor implements QueryExecutor {
private final DBCollection target;
private final DBObject filter;
private final DBObject mapping;
/**
* Creates new MongoFetchQueryExecutor
*
* @param target
* target DB collection
* @param filter
* filter of the query
* @param mapping
* mappings for the query
*/
MongoFetchQueryExecutor(DBCollection target, DBObject filter, DBObject mapping) {
this.target = target;
this.filter = filter;
this.mapping = mapping;
}
@Override
public QueryAnswer execute() throws QueryExecutionException {
final DBCursor cursor = target.find(filter, mapping);
final Collection<String> results = new ArrayList<String>(cursor.size());
final Iterator<DBObject> cursorIt = cursor.iterator();
while (cursorIt.hasNext()) {
results.add(cursorIt.next().toString());
}
return QueryAnswerFactory.fetched(results);
}
}