/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query.algebra.evaluation.util;
import java.util.ArrayList;
import java.util.List;
import org.openrdf.query.BindingSet;
import org.openrdf.query.Dataset;
import org.openrdf.query.algebra.TupleExpr;
import org.openrdf.query.algebra.evaluation.QueryOptimizer;
/**
* A query optimizer that contains a list of other query optimizers, which are
* called consecutively when the list's {@link #optimize(TupleExpr, Dataset, BindingSet)}
* method is called.
*
* @author Arjohn Kampman
*/
public class QueryOptimizerList implements QueryOptimizer {
protected List<QueryOptimizer> optimizers;
public QueryOptimizerList() {
this.optimizers = new ArrayList<QueryOptimizer>(8);
}
public QueryOptimizerList(List<QueryOptimizer> optimizers) {
this.optimizers = new ArrayList<QueryOptimizer>(optimizers);
}
public QueryOptimizerList(QueryOptimizer... optimizers) {
this.optimizers = new ArrayList<QueryOptimizer>(optimizers.length);
for (QueryOptimizer optimizer : optimizers) {
this.optimizers.add(optimizer);
}
}
public void add(QueryOptimizer optimizer) {
optimizers.add(optimizer);
}
public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) {
for (QueryOptimizer optimizer : optimizers) {
optimizer.optimize(tupleExpr, dataset, bindings);
}
}
}