package org.xenei.jdbc4sparql.sparql.parser.jsqlparser;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import net.sf.jsqlparser.expression.Function;
import org.xenei.jdbc4sparql.sparql.SparqlQueryBuilder;
import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.SparqlExprVisitor.AliasInfo;
import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.functions.AbstractFunctionHandler;
import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.functions.NumericFunctionHandler;
import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.functions.StringFunctionHandler;
import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.functions.SystemFunctionHandler;
import com.hp.hpl.jena.sparql.expr.Expr;
public class StandardFunctionHandler {
private final List<AbstractFunctionHandler> handlers;
public StandardFunctionHandler(final SparqlQueryBuilder builder) {
handlers = new ArrayList<AbstractFunctionHandler>();
handlers.add(new NumericFunctionHandler(builder));
handlers.add(new StringFunctionHandler(builder));
handlers.add(new SystemFunctionHandler(builder));
}
public Expr handle(final Function func, final AliasInfo alias)
throws SQLException {
for (final AbstractFunctionHandler handler : handlers) {
final Expr exprInfo = handler.handle(func, alias);
if (exprInfo != null) {
return exprInfo;
}
}
throw new IllegalArgumentException(String.format(
"Function %s is not supported", func.getName()));
}
}