protected internal virtual IDictionary <string, IDmnEvaluatedOutput> EvaluateOutputEntries(
            IList <DmnDecisionTableOutputImpl> decisionTableOutputs, DmnDecisionTableRuleImpl matchingRule,
            IVariableContext variableContext)
        {
            IDictionary <string, IDmnEvaluatedOutput> outputEntries = new Dictionary <string, IDmnEvaluatedOutput>();

            for (var outputIdx = 0; outputIdx < decisionTableOutputs.Count; outputIdx++)
            {
                // evaluate output entry, skip empty expressions
                var conclusion = matchingRule.Conclusions[outputIdx];
                if (IsNonEmptyExpression(conclusion))
                {
                    var value = EvaluateOutputEntry(conclusion, variableContext);

                    // transform to output type
                    var decisionTableOutput = decisionTableOutputs[outputIdx];
                    var typedValue          = decisionTableOutput.TypeDefinition.Transform(value);

                    // set on result
                    var evaluatedOutput = new DmnEvaluatedOutputImpl(decisionTableOutput, typedValue);
                    outputEntries[decisionTableOutput.OutputName] = evaluatedOutput;
                }
            }

            return(outputEntries);
        }
Пример #2
0
 protected internal virtual void NotifyTransformListeners(IRule rule, DmnDecisionTableRuleImpl dmnRule)
 {
     foreach (var transformListener in transformListeners)
     {
         transformListener.transformDecisionTableRule(rule, dmnRule);
     }
 }
Пример #3
0
 public virtual DmnTransformException DecisionTableRuleIdIsMissing(IDmnDecision dmnDecision,
                                                                   DmnDecisionTableRuleImpl dmnDecisionTableRule)
 {
     return
         (new DmnTransformException(ExceptionMessage("013",
                                                     string.Format("The decision table rule '{0}' of decision '{1}' must have a 'id' attribute set.",
                                                                   dmnDecisionTableRule, dmnDecision))));
 }
Пример #4
0
 public virtual DmnTransformException DifferentNumberOfInputsAndInputEntries(int inputsSize, int inputEntriesSize,
                                                                             DmnDecisionTableRuleImpl rule)
 {
     return
         (new DmnTransformException(ExceptionMessage("005",
                                                     string.Format("The number of inputs '{0}' and input entries differ '{1}' for rule '{2}'.",
                                                                   inputsSize,
                                                                   inputEntriesSize, rule))));
 }
        protected internal virtual IDmnEvaluatedDecisionRule EvaluateMatchingRule(
            IList <DmnDecisionTableOutputImpl> decisionTableOutputs, DmnDecisionTableRuleImpl matchingRule,
            IVariableContext variableContext)
        {
            var evaluatedDecisionRule = new DmnEvaluatedDecisionRuleImpl(matchingRule);
            var outputEntries         = EvaluateOutputEntries(decisionTableOutputs, matchingRule, variableContext);

            evaluatedDecisionRule.OutputEntries = outputEntries;

            return(evaluatedDecisionRule);
        }
 public DmnEvaluatedDecisionRuleImpl(DmnDecisionTableRuleImpl matchingRule)
 {
     id = matchingRule.Id;
 }