Ejemplo n.º 1
0
        public object Execute(VariableContext context = null)
        {
            var funcName = _function.Execute(context);

            if (funcName is Variable outFuncVar && outFuncVar.ValueType == DataTypeEnum.Function)
            {
                if (_parameters is PositionalParameters)
                {
                    var lVars = RetrieveListOfParameters(context);
                    return(outFuncVar.UserFunction.Execute(lVars, context));
                }
                if (_parameters is NamedParameters nParams)
                {
                    return(outFuncVar.UserFunction.Execute(null, context, nParams));
                }
            }

            if (funcName is Variable outFuncName && outFuncName.ValueType == DataTypeEnum.String)
            {
                List <Variable> lVars = new List <Variable> ();

                if (_parameters is PositionalParameters)
                {
                    lVars = RetrieveListOfParameters(context);
                    if (VariableContextHelper.RetrieveBkm(outFuncName, context, out var bkmMeta))
                    {
                        return(DMNDoerHelper.EvalBkm(bkmMeta.BKMModel, context, lVars));
                    }
                    if (context.DecisionServiceMetaByName.TryGetValue(outFuncName, out var decisionService))
                    {
                        return(DMNDoerHelper.EvalDecisionService(decisionService, context, lVars));
                    }
                }

                if (_parameters is NamedParameters namedParam)
                {
                    if (VariableContextHelper.RetrieveBkm(outFuncName, context, out var bkmMeta))
                    {
                        lVars = BKMConvertNamedParameter(namedParam, bkmMeta.BKMModel, context);
                        return(DMNDoerHelper.EvalBkm(bkmMeta.BKMModel, context, lVars));
                    }
                    if (context.DecisionServiceMetaByName.TryGetValue(outFuncName, out var decisionService))
                    {
                        lVars = DecisionServiceConvertNamedParameter(namedParam, decisionService, context);
                        return(DMNDoerHelper.EvalDecisionService(decisionService, context, lVars));
                    }
                }

                var funcMeta = BuiltInFactory.GetFunc(outFuncName);

                if (_parameters is NamedParameters nParam)
                {
                    lVars = BuiltInFactory.ConvertNamedParameter(nParam, funcMeta.Item2, context);
                }

                return(funcMeta.Item1.Execute(lVars));
            }

            throw new FEELException("Function name is not a variable of string type");
        }
Ejemplo n.º 2
0
        public Variable Execute(List <Variable> inputParams, VariableContext mainContext, NamedParameters nParams = null)
        {
            if (_isExternal)
            {
                //TODO: add error logging for no support for external java/PMML function types
                return(new Variable());
            }

            var context = mainContext ?? new VariableContext();

            if (nParams != null)
            {
                inputParams = BuiltInFactory.ConvertNamedParameter(nParams, _formalParams.Select(v => v.TwoTuple.a.StringVal).ToArray(), context);
            }

            if (inputParams != null && _formalParams.Count > 0)
            {
                if (_formalParams.Count != inputParams.Count)
                {
                    //TODO: Add to error logging for missmatch expected input
                    return(new Variable());
                }

                for (int i = _formalParams.Count - 1; i >= 0; i--)
                {
                    context.AddToFunctionInputs(_formalParams[i].TwoTuple.a.StringVal, inputParams[i]);
                }
            }

            try {
                return((Variable)_body.Execute(context));
            } catch (Exception) {
                return(new Variable());
            }
        }
Ejemplo n.º 3
0
        public void ConvertNamedParameters_Failed()
        {
            var funcMeta = BuiltInFactory.GetFunc(NotFunc.FuncName);

            var namedP = new NamedParameters(null);

            var err = Assert.Throws <FEELException> (() => BuiltInFactory.ConvertNamedParameter(namedP, funcMeta.Item2, null));

            Assert.Equal("Failed coverting named parameters", err.Message);
        }
Ejemplo n.º 4
0
        public void Function_Found()
        {
            var lVars = new List <Variable> ();

            lVars.Add(true);

            var funcMeta = BuiltInFactory.GetFunc(NotFunc.FuncName);

            var boolVar = funcMeta.Item1.Execute(lVars);

            Assert.False(boolVar);
        }
Ejemplo n.º 5
0
        public void ConvertNamedParameters_Names_Matched()
        {
            var funcMeta = BuiltInFactory.GetFunc(NotFunc.FuncName);

            var nParamDict = new Dictionary <string, IExpression> ()
            {
                { "negand", new BooleanLiteral("true") }
            };
            var namedP = new NamedParameters(nParamDict);

            var lParams = BuiltInFactory.ConvertNamedParameter(namedP, funcMeta.Item2, null);

            var boolVar = funcMeta.Item1.Execute(lParams);

            Assert.False(boolVar);
        }
Ejemplo n.º 6
0
 public void Function_NotFound_Error()
 {
     Assert.Throws <FEELException> (() => BuiltInFactory.GetFunc("x"));
 }