Esempio n. 1
0
        public bool IsSatisfiedBy(IExecutionContext context, Tuple leftTuple, Fact rightFact)
        {
            var args  = new object[_compiledExpression.ArrayArgumentCount];
            int index = leftTuple.Count - 1;

            foreach (var fact in leftTuple.Facts)
            {
                IndexMap.SetElementAt(args, _factIndexMap[index], fact.Object);
                index--;
            }
            IndexMap.SetElementAt(args, _factIndexMap[leftTuple.Count], rightFact.Object);

            try
            {
                return(_compiledExpression.Delegate(args));
            }
            catch (Exception e)
            {
                bool isHandled = false;
                context.EventAggregator.RaiseConditionFailed(context.Session, e, _expression, leftTuple, rightFact, ref isHandled);
                if (!isHandled)
                {
                    throw new RuleConditionEvaluationException("Failed to evaluate condition", _expression.ToString(), e);
                }
                return(false);
            }
        }
Esempio n. 2
0
        public object Invoke(IExecutionContext context, NodeDebugInfo nodeInfo, Tuple tuple)
        {
            var args  = new object[_compiledExpression.ArrayArgumentCount];
            int index = tuple.Count - 1;

            foreach (var fact in tuple.Facts)
            {
                IndexMap.SetElementAt(args, _factMap[index], fact.Object);
                index--;
            }

            Exception exception = null;
            object    result    = null;

            try
            {
                result = _compiledExpression.Delegate(args);
                return(result);
            }
            catch (Exception e)
            {
                exception = e;
                bool isHandled = false;
                context.EventAggregator.RaiseLhsExpressionFailed(context.Session, e, Expression, args, tuple, null, nodeInfo, ref isHandled);
                throw new ExpressionEvaluationException(e, Expression, isHandled);
            }
            finally
            {
                context.EventAggregator.RaiseLhsExpressionEvaluated(context.Session, exception, Expression, args, result, tuple, null, nodeInfo);
            }
        }
Esempio n. 3
0
        public object Invoke(Tuple tuple)
        {
            var args  = new object[_compiledExpression.ArrayArgumentCount];
            int index = tuple.Count - 1;

            foreach (var fact in tuple.Facts)
            {
                IndexMap.SetElementAt(args, _factMap[index], fact.Object);
                index--;
            }

            return(_compiledExpression.Delegate(args));
        }
Esempio n. 4
0
        public object Invoke(IExecutionContext context, Tuple tuple)
        {
            var args  = new object[_compiledExpression.ArrayArgumentCount];
            int index = tuple.Count - 1;

            foreach (var fact in tuple.Facts)
            {
                IndexMap.SetElementAt(args, _factIndexMap[index], fact.Object);
                index--;
            }

            try
            {
                return(_compiledExpression.Delegate(args));
            }
            catch (Exception e)
            {
                throw new RuleExpressionEvaluationException("Failed to evaluate binding expression", Expression.ToString(), e);
            }
        }
Esempio n. 5
0
        public bool IsSatisfiedBy(IExecutionContext context, NodeDebugInfo nodeInfo, Tuple leftTuple, Fact rightFact)
        {
            var args  = new object[_compiledExpression.ArrayArgumentCount];
            int index = leftTuple.Count - 1;

            foreach (var fact in leftTuple.Facts)
            {
                IndexMap.SetElementAt(args, _factMap[index], fact.Object);
                index--;
            }
            IndexMap.SetElementAt(args, _factMap[leftTuple.Count], rightFact.Object);

            Exception exception = null;
            bool      result    = false;

            try
            {
                result = _compiledExpression.Delegate(args);
                return(result);
            }
            catch (Exception e)
            {
                exception = e;
                bool isHandled = false;
                context.EventAggregator.RaiseLhsExpressionFailed(context.Session, e, _expression, args, leftTuple, rightFact, nodeInfo, ref isHandled);
                if (!isHandled)
                {
                    throw new RuleLhsExpressionEvaluationException("Failed to evaluate condition", _expression.ToString(), e);
                }
                return(false);
            }
            finally
            {
                context.EventAggregator.RaiseLhsExpressionEvaluated(context.Session, exception, _expression, args, result, leftTuple, rightFact, nodeInfo);
            }
        }