/** * Create a new Template expression * * @param template * @param args * @return */ public static BooleanExpression booleanTemplate(String template, Object... args) { return BooleanTemplate.create(template, args); }
@Override public Expression<?> visit(TemplateExpression<?> expr, @Nullable Void context) { ImmutableList.Builder builder = ImmutableList.builder(); for (Object arg : expr.getArgs()) { if (arg instanceof Expression) { builder.add(((Expression)arg).accept(this, null)); } else { builder.add(arg); } } ImmutableList args = builder.build(); if (args.equals(expr.getArgs())) { return expr; } else { if (expr instanceof Predicate) { return BooleanTemplate.create(expr.getTemplate(), args); } else { return new TemplateExpressionImpl(expr.getType(), expr.getTemplate(), args); } } }
@Override public Expression<?> visit(TemplateExpression<?> expr, Context context) { Object[] args = new Object[expr.getArgs().size()]; for (int i = 0; i < args.length; i++) { Context c = new Context(); if (expr.getArg(i) instanceof Expression) { args[i] = ((Expression<?>)expr.getArg(i)).accept(this, c); } else { args[i] = expr.getArg(i); } context.add(c); } if (context.replace) { if (expr.getType().equals(Boolean.class)) { Predicate predicate = BooleanTemplate.create(expr.getTemplate(), args); return !context.paths.isEmpty() ? exists(context, predicate) : predicate; } else { return TemplateExpressionImpl.create(expr.getType(), expr.getTemplate(), args); } } else { return expr; } }
@Test @Ignore // FIXME public void Template_Expression() throws Exception { query.from(user); query.where(BooleanTemplate.create("!bound({0})", user)); assertEquals("SELECT * WHERE { ?user ?_c2 ?_c3 . }"); }