/**
*
*/
package querqy.rewrite.commonrules;
import java.io.IOException;
import java.io.Reader;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import querqy.model.ExpandedQuery;
import querqy.model.Term;
import querqy.parser.QuerqyParserFactory;
import querqy.rewrite.QueryRewriter;
import querqy.rewrite.RewriterFactory;
import querqy.rewrite.commonrules.model.Instruction;
import querqy.rewrite.commonrules.model.RulesCollection;
/**
* @author René Kriegler, @renekrie
*
*/
public class SimpleCommonRulesRewriterFactory implements RewriterFactory {
final RulesCollection rules;
/**
*
* @param reader
* @param querqyParserFactory
* @param ignoreCase
* @throws IOException
*/
public SimpleCommonRulesRewriterFactory(Reader reader, QuerqyParserFactory querqyParserFactory, boolean ignoreCase) throws IOException {
try {
rules = new SimpleCommonRulesParser(reader, querqyParserFactory, ignoreCase).parse();
} catch (RuleParseException e) {
throw new IOException(e);
} finally {
try {
reader.close();
} catch (IOException e) {
// TODO: log
}
}
}
/*
* (non-Javadoc)
*
* @see
* querqy.rewrite.RewriterFactory#createRewriter(querqy.model.ExpandedQuery,
* java.util.Map)
*/
@Override
public QueryRewriter createRewriter(ExpandedQuery input, Map<String, ?> context) {
return new CommonRulesRewriter(rules);
}
@Override
public Set<Term> getGenerableTerms() {
// REVISIT: return Iterator? Limit number of results?
Set<Term> result = new HashSet<Term>();
for (Instruction instruction: rules.getInstructions()) {
result.addAll(instruction.getGenerableTerms());
}
return result;
}
}