/** * */ package querqy.rewrite; import java.util.Collections; import java.util.List; import java.util.Map; import querqy.model.ExpandedQuery; import querqy.model.Query; /** * The chain of rewriters to manipulate a {@link Query}. * * @author rene * */ public class RewriteChain { final List<RewriterFactory> factories; public RewriteChain() { this(Collections.<RewriterFactory> emptyList()); } public RewriteChain(List<RewriterFactory> factories) { this.factories = factories; } public ExpandedQuery rewrite(ExpandedQuery query, Map<String, Object> context) { ExpandedQuery work = query; for (RewriterFactory factory : factories) { QueryRewriter rewriter = factory.createRewriter(work, context); work = (rewriter instanceof ContextAwareQueryRewriter) ? ((ContextAwareQueryRewriter) rewriter).rewrite(work, context) : rewriter.rewrite(work); } return work; } public List<RewriterFactory> getRewriterFactories() { return factories; } }