package org.aksw.sparqlify.core.algorithms;
import java.util.ArrayList;
import java.util.List;
import org.aksw.jena_sparql_api.views.ExprCopy;
import org.aksw.jena_sparql_api.views.SqlTranslationUtils;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.expr.ExprFunction;
import org.apache.jena.sparql.expr.ExprList;
/**
* Expand all arguments of any concat expression into this expression.
* Also merges consecutive constants.
*
*/
public class ExprTransformerConcatNested
implements ExprTransformer
{
@Override
public Expr transform(ExprFunction fn) {
List<Expr> newArgs = new ArrayList<Expr>();
for(Expr arg : fn.getArgs()) {
if(SqlTranslationUtils.isConcatExpr(arg)) {
ExprFunction fnArg = arg.getFunction();
for(Expr a : fnArg.getArgs()) {
newArgs.add(a);
}
} else {
newArgs.add(arg);
}
}
ExprList merged = SqlTranslationUtils.mergeConsecutiveConstants(newArgs);
Expr result = ExprCopy.getInstance().copy(fn, merged);
return result;
}
}