blob: 3bd5b0ccae8b29bcd6b46c316c7f4d02f35d17b9 [file] [log] [blame]
package com.gemstone.gemfire.cache.lucene.internal;
import java.util.HashSet;
import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Query;
import com.gemstone.gemfire.cache.lucene.LuceneIndex;
import com.gemstone.gemfire.cache.lucene.LuceneQuery;
import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
public class LuceneQueryFactoryImpl implements LuceneQueryFactory {
private int limit_attr = DEFAULT_LIMIT;
private int pageSize_attr = DEFAULT_PAGESIZE;
private Set<ResultType> resultType_attr = new HashSet<ResultType>();
private Set<String> projection_fields_attr = new HashSet<String>();
/* reference to the index. One index could have multiple Queries, but one Query must belong
* to one index
*/
private LuceneIndex relatedIndex;
@Override
public LuceneQueryFactory setPageSize(int pageSize) {
this.pageSize_attr = pageSize;
return this;
}
@Override
public LuceneQueryFactory setResultLimit(int limit) {
this.limit_attr = limit;
return this;
}
@Override
public LuceneQueryFactory setResultTypes(ResultType... resultTypes) {
if (resultTypes != null) {
for (ResultType resultType:resultTypes) {
this.resultType_attr.add(resultType);
}
}
return this;
}
@Override
public LuceneQuery create(String indexName, String regionName,
String queryString, Analyzer analyzer) throws ParseException {
QueryParser parser = new QueryParser(null, analyzer);
Query query = parser.parse(queryString);
LuceneQueryImpl luceneQuery = new LuceneQueryImpl(indexName, regionName, limit_attr, pageSize_attr,
resultType_attr, projection_fields_attr, query);
return luceneQuery;
}
@Override
public LuceneQuery create(String indexName, String regionName,
String queryString) throws ParseException {
StandardAnalyzer analyzer = new StandardAnalyzer();
return create(indexName, regionName, queryString, analyzer);
}
@Override
public LuceneQuery create(String indexName, String regionName,
Query query) {
LuceneQueryImpl luceneQuery = new LuceneQueryImpl(indexName, regionName, limit_attr, pageSize_attr,
resultType_attr, projection_fields_attr, query);
return luceneQuery;
}
public LuceneIndex getRelatedIndex() {
return this.relatedIndex;
}
@Override
public LuceneQueryFactory setProjectionFields(String... fieldNames) {
if (fieldNames != null) {
for (String fieldName:fieldNames) {
this.projection_fields_attr.add(fieldName);
}
}
return this;
}
}