@Override public Object apply(EvaluationContext evaluationContext) { return defaultResult.apply(evaluationContext); } }
@Override public Object apply(EvaluationContext evaluationContext) { return expr.apply(evaluationContext); } }
@Override public Object evaluate(CompiledExpression expr, Map<String, Object> inputVariables) { CompiledFEELExpression e = (CompiledFEELExpression) expr; return e.apply(newEvaluationContext(Collections.EMPTY_SET, inputVariables)); }
@Override public Object evaluate(CompiledExpression expr, EvaluationContext ctx) { CompiledFEELExpression e = (CompiledFEELExpression) expr; return e.apply(newEvaluationContext(ctx.getListeners(), ctx.getAllValues())); }
/** * Checks if the parameters match a single rule * @param ctx * @param params * @param rule * @return */ private boolean matches(EvaluationContext ctx, Object[] params, DTDecisionRule rule) { for( int i = 0; i < params.length; i++ ) { CompiledExpression compiledInput = inputs.get(i).getCompiledInput(); if ( compiledInput instanceof CompiledFEELExpression) { ctx.setValue("?", ((CompiledFEELExpression) compiledInput).apply(ctx)); } if( ! satisfies( ctx, params[i], rule.getInputEntry().get( i ) ) ) { return false; } } return true; }
@Test public void testManualContext() { CompiledFEELExpression compiledExpression = new ManualFilterExpression(); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); assertThat(result, is(Arrays.asList(BigDecimal.valueOf(10), BigDecimal.valueOf(20), BigDecimal.valueOf(30), BigDecimal.valueOf(20), BigDecimal.valueOf(40), BigDecimal.valueOf(60), BigDecimal.valueOf(30), BigDecimal.valueOf(60), BigDecimal.valueOf(90)))); }
private Object parseCompileEvaluate(String feelLiteralExpression) { CompiledFEELExpression compiledExpression = parse( feelLiteralExpression ); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); return result; }
@Test public void testManualContext() { CompiledFEELExpression compiledExpression = new ManualFilterExpression(); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); assertThat(result, is(Arrays.asList(BigDecimal.valueOf(3), BigDecimal.valueOf(4)))); }
@Test public void testManualContext() { CompiledFEELExpression compiledExpression = new ManualFilterExpression(); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); assertThat(result, is(BigDecimal.valueOf(3))); }
@Test public void testManualContext() { CompiledFEELExpression compiledExpression = new ManualContext(); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); assertThat(result, is(instanceOf(Map.class))); assertThat(((Map) result).get("street"), is("broadway st")); }
@Test public void testManualContext() { CompiledFEELExpression compiledExpression = new ManualFilterExpression(); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); assertThat(result, is(true)); }
@Test public void testManualContext() { CompiledFEELExpression compiledExpression = new NamedFunctionExample(); LOG.debug("{}", compiledExpression); EvaluationContext emptyContext = CodegenTestUtil.newEmptyEvaluationContext(); Object result = compiledExpression.apply(emptyContext); LOG.debug("{}", result); assertThat(result, is("OOBAR")); }
@Test public void test_filterPath_tricky2() { CompiledFEELExpression nameRef = parse("[ {x:1, y:2}, {x:2, y:3} ][x]"); LOG.debug("{}", nameRef); EvaluationContext context = CodegenTestUtil.newEmptyEvaluationContext(); context.setValue("x", false); Object result = nameRef.apply(context); LOG.debug("{}", result); assertThat(result, is(Collections.emptyList())); }
@Test public void testQualifiedName3() { String inputExpression = "a date.year"; Type dateType = BuiltInType.DATE; CompiledFEELExpression qualRef = parse(inputExpression, mapOf(entry("a date", dateType))); LOG.debug("{}", qualRef); EvaluationContext context = CodegenTestUtil.newEmptyEvaluationContext(); context.setValue("a date", LocalDate.of(2016, 8, 2)); Object result = qualRef.apply(context); LOG.debug("{}", result); assertThat(result, is(BigDecimal.valueOf(2016))); }
@Test public void testNameReference() { String inputExpression = "someSimpleName"; CompiledFEELExpression nameRef = parse( inputExpression, mapOf( entry("someSimpleName", BuiltInType.STRING) ) ); LOG.debug("{}", nameRef); EvaluationContext context = CodegenTestUtil.newEmptyEvaluationContext(); context.setValue("someSimpleName", 123L); Object result = nameRef.apply(context); LOG.debug("{}", result); assertThat(result, is( BigDecimal.valueOf(123) )); }
@Test public void test_filterPath_tricky1() { CompiledFEELExpression nameRef = parse( "[ {x:1, y:2}, {x:2, y:3} ][x]"); LOG.debug("{}", nameRef); EvaluationContext context = CodegenTestUtil.newEmptyEvaluationContext(); context.setValue("x", 2); Object result = nameRef.apply(context); LOG.debug("{}", result); assertThat(result, is(mapOf(entry("x", new BigDecimal(2)), entry("y", new BigDecimal(3))))); }
@Test public void testQualifiedName2() { String inputExpression = "My Person.Full Name"; Type personType = JavaBackedType.of(MyPerson.class); CompiledFEELExpression qualRef = parse( inputExpression, mapOf( entry("My Person", personType) ) ); LOG.debug("{}", qualRef); EvaluationContext context = CodegenTestUtil.newEmptyEvaluationContext(); context.setValue("My Person", new MyPerson()); Object result = qualRef.apply(context); LOG.debug("{}", result); assertThat(result, is( "John Doe" )); }
@Test public void testQualifiedName() { String inputExpression = "My Person.Full Name"; Type personType = new MapBackedType("Person", mapOf( entry("Full Name", BuiltInType.STRING), entry("Age", BuiltInType.NUMBER) ) ); CompiledFEELExpression qualRef = parse( inputExpression, mapOf( entry("My Person", personType) ) ); LOG.debug("{}", qualRef); EvaluationContext context = CodegenTestUtil.newEmptyEvaluationContext(); context.setValue("My Person", mapOf( entry("Full Name", "John Doe"), entry("Age", 47) )); Object result = qualRef.apply(context); LOG.debug("{}", result); assertThat(result, is( "John Doe" )); // check number coercion for qualified name CompiledFEELExpression personAgeExpression = parse("My Person.Age", mapOf(entry("My Person", personType))); LOG.debug("{}", personAgeExpression); Object resultPersonAge = personAgeExpression.apply(context); // Please notice input variable in context is a Map containing and entry value for int 47. LOG.debug("{}", resultPersonAge); assertThat(resultPersonAge, is(BigDecimal.valueOf(47))); }