Search in sources :

Example 6 with FEEL

use of org.kie.dmn.feel.FEEL in project drools by kiegroup.

the class DecisionTableFunction method toDecisionRule.

/**
 * Convert row to DTDecisionRule
 * @param mainCtx the main context is used to identify the hosted FEELEventManager
 * @param embeddedFEEL a possibly cached embedded FEEL to compile the output expression, error will be reported up to the mainCtx
 * @param index
 * @param rule
 * @param inputSize
 * @return
 */
private static DTDecisionRule toDecisionRule(EvaluationContext mainCtx, FEEL embeddedFEEL, int index, List<?> rule, int inputSize) {
    // TODO should be check indeed block of inputSize n inputs, followed by block of outputs.
    DTDecisionRule dr = new DTDecisionRule(index);
    for (int i = 0; i < rule.size(); i++) {
        Object o = rule.get(i);
        if (i < inputSize) {
            dr.getInputEntry().add(toUnaryTest(mainCtx, o));
        } else {
            FEELEventListener ruleListener = event -> mainCtx.notifyEvt(() -> new FEELEventBase(event.getSeverity(), Msg.createMessage(Msg.ERROR_COMPILE_EXPR_DT_FUNCTION_RULE_IDX, index + 1, event.getMessage()), event.getSourceException()));
            embeddedFEEL.addListener(ruleListener);
            CompiledExpression compiledExpression = embeddedFEEL.compile((String) o, embeddedFEEL.newCompilerContext());
            dr.getOutputEntry().add(compiledExpression);
            embeddedFEEL.removeListener(ruleListener);
        }
    }
    return dr;
}
Also used : IntStream(java.util.stream.IntStream) FEEL(org.kie.dmn.feel.FEEL) FEELEventBase(org.kie.dmn.feel.runtime.events.FEELEventBase) FEELEventListener(org.kie.dmn.api.feel.runtime.events.FEELEventListener) UnaryTest(org.kie.dmn.feel.runtime.UnaryTest) Logger(org.slf4j.Logger) DTOutputClause(org.kie.dmn.feel.runtime.decisiontables.DTOutputClause) HitPolicy(org.kie.dmn.feel.runtime.decisiontables.HitPolicy) LoggerFactory(org.slf4j.LoggerFactory) DTInputClause(org.kie.dmn.feel.runtime.decisiontables.DTInputClause) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) Range(org.kie.dmn.feel.runtime.Range) ArrayList(java.util.ArrayList) List(java.util.List) CompiledExpression(org.kie.dmn.feel.lang.CompiledExpression) FEELEvent(org.kie.dmn.api.feel.runtime.events.FEELEvent) EvaluationContext(org.kie.dmn.feel.lang.EvaluationContext) DTDecisionRule(org.kie.dmn.feel.runtime.decisiontables.DTDecisionRule) Msg(org.kie.dmn.feel.util.Msg) DecisionTableImpl(org.kie.dmn.feel.runtime.decisiontables.DecisionTableImpl) Collections(java.util.Collections) FEELEventBase(org.kie.dmn.feel.runtime.events.FEELEventBase) DTDecisionRule(org.kie.dmn.feel.runtime.decisiontables.DTDecisionRule) FEELEventListener(org.kie.dmn.api.feel.runtime.events.FEELEventListener) CompiledExpression(org.kie.dmn.feel.lang.CompiledExpression)

Example 7 with FEEL

use of org.kie.dmn.feel.FEEL in project drools by kiegroup.

the class DMNTypeTest method testAllowedValuesForASimpleTypeCollection.

@Test
public void testAllowedValuesForASimpleTypeCollection() {
    // DROOLS-2357
    final String testNS = "testDROOLS2357";
    FEEL feel = FEEL.newInstance();
    DMNType tDecision1 = typeRegistry.registerType(new SimpleTypeImpl(testNS, "tListOfVowels", null, true, feel.evaluateUnaryTests("\"a\",\"e\",\"i\",\"o\",\"u\""), FEEL_STRING, BuiltInType.STRING));
    assertTrue(tDecision1.isAssignableValue("a"));
    assertTrue(tDecision1.isAssignableValue(Arrays.asList("a")));
    assertFalse(tDecision1.isAssignableValue("z"));
    assertTrue(tDecision1.isAssignableValue(Arrays.asList("a", "e")));
    assertFalse(tDecision1.isAssignableValue(Arrays.asList("a", "e", "zzz")));
}
Also used : SimpleTypeImpl(org.kie.dmn.core.impl.SimpleTypeImpl) FEEL(org.kie.dmn.feel.FEEL) DMNType(org.kie.dmn.api.core.DMNType) Test(org.junit.Test)

Aggregations

FEEL (org.kie.dmn.feel.FEEL)7 ArrayList (java.util.ArrayList)4 Collections (java.util.Collections)4 List (java.util.List)4 Collectors (java.util.stream.Collectors)4 CompiledExpression (org.kie.dmn.feel.lang.CompiledExpression)4 UnaryTest (org.kie.dmn.feel.runtime.UnaryTest)4 DTDecisionRule (org.kie.dmn.feel.runtime.decisiontables.DTDecisionRule)4 DTInputClause (org.kie.dmn.feel.runtime.decisiontables.DTInputClause)4 DTOutputClause (org.kie.dmn.feel.runtime.decisiontables.DTOutputClause)4 DecisionTableImpl (org.kie.dmn.feel.runtime.decisiontables.DecisionTableImpl)4 DMNType (org.kie.dmn.api.core.DMNType)3 FEELEvent (org.kie.dmn.api.feel.runtime.events.FEELEvent)3 FEELEventListener (org.kie.dmn.api.feel.runtime.events.FEELEventListener)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 Optional (java.util.Optional)2 UUID (java.util.UUID)2 Collectors.toList (java.util.stream.Collectors.toList)2 IntStream (java.util.stream.IntStream)2