Ejemplo n.º 1
0
        private void AddComparison(RuleCondition ruleCondition)
        {
            switch (_currentToken.Lexicon)
            {
            case Lexicon.Object:
                var objectArgs = _currentToken.Value.Split('.');
                ruleCondition.ComparisonTypeName = objectArgs[0];

                var targetAttribute = objectArgs[1];

                var methodRegex = new Regex("\\w+\\(\\)");

                if (methodRegex.IsMatch(targetAttribute))
                {
                    ruleCondition.ComparisonType = RuleObject.ObjectMethod;
                    targetAttribute = targetAttribute.Substring(0, targetAttribute.Length - 2);
                }
                else
                {
                    ruleCondition.ComparisonType = RuleObject.ObjectProperty;
                }

                ruleCondition.ComparisonAttribute = targetAttribute;

                DiscardToken(Lexicon.Object);
                break;

            case Lexicon.String:
                ruleCondition.ComparisonType     = RuleObject.Constant;
                ruleCondition.ComparisonTypeName = "string";
                ruleCondition.Value = _currentToken.Value;
                DiscardToken(Lexicon.String);
                break;

            case Lexicon.Number:
                ruleCondition.ComparisonType     = RuleObject.Constant;
                ruleCondition.ComparisonTypeName = "number";
                ruleCondition.Value = _currentToken.Value;
                DiscardToken(Lexicon.Number);
                break;

            case Lexicon.Date:
                ruleCondition.ComparisonType     = RuleObject.Constant;
                ruleCondition.ComparisonTypeName = "date";
                ruleCondition.Value = _currentToken.Value;
                DiscardToken(Lexicon.Date);
                break;

            default:
                throw new ParserException(
                          GetExpectedTokenExceptionMessage(new [] { Lexicon.Object, Lexicon.String, Lexicon.Number, Lexicon.Date }, _previousToken.Lexicon, _currentToken.Lexicon));
            }
        }
Ejemplo n.º 2
0
        private void AddRuleCondition(RuleDefinition ruleDefinition)
        {
            var ruleCondition = new RuleCondition();

            AddComparatorOperator(ruleCondition);
            AddComparison(ruleCondition);
            AddLogicalOperator(ruleCondition);

            ruleDefinition.RuleConditions.Add(ruleCondition);

            if (ruleCondition.LogicalOperator != RuleLogicalOperator.None)
            {
                AddRuleCondition(ruleDefinition);
            }
        }
Ejemplo n.º 3
0
        private void AddLogicalOperator(RuleCondition ruleCondition)
        {
            switch (_currentToken.Lexicon)
            {
            case Lexicon.And:
                ruleCondition.LogicalOperator = RuleLogicalOperator.And;
                DiscardToken(Lexicon.And);
                break;

            case Lexicon.Or:
                ruleCondition.LogicalOperator = RuleLogicalOperator.Or;
                DiscardToken(Lexicon.Or);
                break;

            default:
                ruleCondition.LogicalOperator = RuleLogicalOperator.None;
                break;
            }
        }
Ejemplo n.º 4
0
        private void AddComparatorOperator(RuleCondition ruleCondition)
        {
            switch (_currentToken.Lexicon)
            {
            case Lexicon.Within:
                DiscardToken(Lexicon.Within);
                DiscardToken(Lexicon.Number);

                ruleCondition.Operator = RuleComparatorOperator.Within;
                ruleCondition.Value    = _previousToken.Value;

                DiscardToken(Lexicon.Of);
                break;

            case Lexicon.GreaterThan:
                ruleCondition.Operator = RuleComparatorOperator.GreaterThan;
                DiscardToken(Lexicon.GreaterThan);
                break;

            case Lexicon.GreaterThanOrEqualTo:
                ruleCondition.Operator = RuleComparatorOperator.GreaterThanOrEqualTo;
                DiscardToken(Lexicon.GreaterThanOrEqualTo);
                break;

            case Lexicon.LessThan:
                ruleCondition.Operator = RuleComparatorOperator.LessThan;
                DiscardToken(Lexicon.LessThan);
                break;

            case Lexicon.LessThanOrEqualTo:
                ruleCondition.Operator = RuleComparatorOperator.LessThan;
                DiscardToken(Lexicon.LessThanOrEqualTo);
                break;

            case Lexicon.EqualTo:
                ruleCondition.Operator = RuleComparatorOperator.EqualTo;
                DiscardToken(Lexicon.EqualTo);
                break;
            }
        }