package org.aksw.sparqlify.core.cast;
import java.util.Collections;
import java.util.List;
import org.aksw.sparqlify.algebra.sql.exprs2.SqlExpr;
import org.aksw.sparqlify.core.datatypes.SparqlFunction;
import org.aksw.sparqlify.core.sql.expr.evaluation.SqlExprEvaluator;
public class CoercionSparqlFunction
//implements ExprTransformer
{
private TypeSystem typeSystem;
private String functionURI;
public CoercionSparqlFunction(TypeSystem typeSystem, String functionURI) {
this.typeSystem = typeSystem;
this.functionURI = functionURI;
}
public TypeSystem getTypeSystem() {
return typeSystem;
}
public String getFunctionURI() {
return functionURI;
}
//@Override
public SqlExpr transform(SqlExpr expr) throws CastException {
List<SqlExpr> arg = Collections.singletonList(expr);
SparqlFunction function = typeSystem.getSparqlFunction(functionURI);
SqlExprEvaluator evaluator = function.getEvaluator();
SqlExpr result = null;
if(evaluator != null) {
result = evaluator.eval(arg);
}
if(result != null) {
return result;
}
ExprSubstitutor substitutor = function.getSubstitutor();
if(substitutor != null) {
result = substitutor.create(arg);
}
return result;
}
}