@Override public Map<String, Object> getAllValues() { return wrapped.getAllValues(); }
/** * No hits matched for the DT, so calculate result based on default outputs */ private Object defaultToOutput(EvaluationContext ctx, FEEL feel) { Map<String, Object> values = ctx.getAllValues(); if ( outputs.size() == 1 ) { Object value = feel.evaluate( outputs.get( 0 ).getDefaultValue(), values ); return value; } else { // zip outputEntries with its name: return IntStream.range( 0, outputs.size() ).boxed() .collect( toMap( i -> outputs.get( i ).getName(), i -> feel.evaluate( outputs.get( i ).getDefaultValue(), values ) ) ); } }
@Override public Object evaluate(String expression, EvaluationContext ctx) { CompilerContext compilerCtx = newCompilerContext(ctx.getListeners()); Map<String, Object> inputVariables = ctx.getAllValues(); if ( inputVariables != null ) { inputVariables.entrySet().stream().forEach( e -> compilerCtx.addInputVariable( e.getKey(), e.getValue() ) ); } CompiledExpression expr = compile( expression, compilerCtx ); return evaluate( expr, ctx ); }
private Object[] resolveActualInputs(EvaluationContext ctx, FEEL feel) { Map<String, Object> variables = ctx.getAllValues(); Object[] actualInputs = new Object[ inputs.size() ]; for( int i = 0; i < inputs.size(); i++ ) { CompiledExpression compiledInput = inputs.get( i ).getCompiledInput(); if( compiledInput != null ) { actualInputs[i] = feel.evaluate( compiledInput, variables ); } else { actualInputs[i] = feel.evaluate( inputs.get( i ).getInputExpression(), variables ); } } return actualInputs; }
/** * Each hit results in one output value (multiple outputs are collected into a single context value) */ private Object hitToOutput(EvaluationContext ctx, FEEL feel, DTDecisionRule rule) { List<CompiledExpression> outputEntries = rule.getOutputEntry(); Map<String, Object> values = ctx.getAllValues(); if ( outputEntries.size() == 1 ) { Object value = feel.evaluate( outputEntries.get( 0 ), values ); return value; } else { Map<String, Object> output = new HashMap<>(); for (int i = 0; i < outputs.size(); i++) { output.put(outputs.get(i).getName(), feel.evaluate(outputEntries.get(i), values)); } return output; } }
@Override public Object evaluate(CompiledExpression expr, EvaluationContext ctx) { CompiledFEELExpression e = (CompiledFEELExpression) expr; return e.apply(newEvaluationContext(ctx.getListeners(), ctx.getAllValues())); }