Ejemplo n.º 1
0
        public override void Serialize(TextWriter tw)
        {
            var varPart = Element.Variable;

            var min = int.Parse(ConditionSerializer.Serialize(Element.Minimum, Variables, Arrays));
            var max = int.Parse(ConditionSerializer.Serialize(Element.Maximum, Variables, Arrays));

            if (!Element.InludeMaximum)
            {
                max--;
            }

            var vars = new Dictionary <string, string>(Variables)
            {
                { varPart.VariableName, null }
            };

            for (int i = min; i <= max; ++i)
            {
                string value = i.ToString();
                vars[varPart.VariableName] = value;

                foreach (var elem in Element.Elements)
                {
                    TemplateSerializationFactory.Serialize(tw, elem, vars, Arrays, Parms);
                }
            }
        }
        public bool Evaluate(IDictionary <string, string> variables, IDictionary <string, IEnumerable <string> > arrays)
        {
            var op = this as OperationConditionPart;

            if (op == null)
            {
                return(true);
            }

            switch (op.Operator)
            {
            case ConditionPartOperatorEnum.And:
                return(ConditionSerializer.Serialize(op.LeftSide, new Dictionary <string, string>(variables), arrays) == true.ToString() && ConditionSerializer.Serialize(op.RightSide, new Dictionary <string, string>(variables), arrays) == true.ToString());

            case ConditionPartOperatorEnum.Or:
                return(ConditionSerializer.Serialize(op.LeftSide, new Dictionary <string, string>(variables), arrays) == true.ToString() || ConditionSerializer.Serialize(op.RightSide, new Dictionary <string, string>(variables), arrays) == true.ToString());

            case ConditionPartOperatorEnum.Equals:
                return(CompareLeftAndRight(ConditionSerializer.Serialize(op.LeftSide, variables, arrays), ConditionSerializer.Serialize(op.RightSide, variables, arrays)) == 0);

            case ConditionPartOperatorEnum.Different:
                return(CompareLeftAndRight(ConditionSerializer.Serialize(op.LeftSide, variables, arrays), ConditionSerializer.Serialize(op.RightSide, variables, arrays)) != 0);

            case ConditionPartOperatorEnum.LowerThan:
                return(CompareLeftAndRight(ConditionSerializer.Serialize(op.LeftSide, variables, arrays), ConditionSerializer.Serialize(op.RightSide, variables, arrays)) < 0);

            case ConditionPartOperatorEnum.LowerOrEqual:
                return(CompareLeftAndRight(ConditionSerializer.Serialize(op.LeftSide, variables, arrays), ConditionSerializer.Serialize(op.RightSide, variables, arrays)) <= 0);

            case ConditionPartOperatorEnum.GreaterOrEqual:
                return(CompareLeftAndRight(ConditionSerializer.Serialize(op.LeftSide, variables, arrays), ConditionSerializer.Serialize(op.RightSide, variables, arrays)) >= 0);

            case ConditionPartOperatorEnum.GreaterThan:
                return(CompareLeftAndRight(ConditionSerializer.Serialize(op.LeftSide, variables, arrays), ConditionSerializer.Serialize(op.RightSide, variables, arrays)) > 0);

            case ConditionPartOperatorEnum.In:
                var left = ConditionSerializer.Serialize(op.LeftSide, variables, arrays);
                IEnumerable <string> values = null;
                if (left == null)
                {
                    throw new ArgumentException("the IN is impossible to resolve");
                }
                if (op.RightSide is GroupedConditionPart)
                {
                    values = ((GroupedConditionPart)op.RightSide).Values.Select(x => ConditionSerializer.Serialize(x, variables, arrays));
                }
                else if (op.RightSide is VariableConditionPart && arrays.ContainsKey(((VariableConditionPart)op.RightSide).VariableName))
                {
                    values = arrays[((VariableConditionPart)op.RightSide).VariableName];
                }
                else
                {
                    throw new ArgumentException("the IN is impossible to resolve");
                }
                return(values.Any(x => CompareLeftAndRight(left, x) == 0));
            }

            return(false);
        }
        public override void Serialize(TextWriter tw)
        {
            if (ConditionSerializer.Serialize(Element.Condition, new Dictionary <string, string>(Variables), new Dictionary <string, IEnumerable <string> >(Arrays)) == true.ToString())
            {
                foreach (var elem in Element.ConditionTrueElements)
                {
                    TemplateSerializationFactory.Serialize(tw, elem, Variables, Arrays, Parms);
                }
                return;
            }

            if (Element.ConditionFalseElements != null)
            {
                foreach (var elem in Element.ConditionFalseElements)
                {
                    TemplateSerializationFactory.Serialize(tw, elem, Variables, Arrays, Parms);
                }
            }
        }
Ejemplo n.º 4
0
        public override void Serialize(TextWriter tw)
        {
            var varPart = Element.EnumerationCondition as VariableConditionPart;

            if (varPart != null)
            {
                SerializeVarPart(tw, varPart);
            }

            var opPart = Element.EnumerationCondition as OperationConditionPart;

            if (opPart != null && opPart.Operator == ConditionPartOperatorEnum.In && opPart.LeftSide is VariableConditionPart)
            {
                var vars = new Dictionary <string, string>(Variables);
                var enumerationVariable = ((VariableConditionPart)opPart.LeftSide).VariableName;
                vars.Add(enumerationVariable, null);

                IEnumerable <string> values = new string[0];

                if (opPart.RightSide is GroupedConditionPart)
                {
                    values = ((GroupedConditionPart)opPart.RightSide).Values.Select(val => ConditionSerializer.Serialize(val, Variables, Arrays));
                }
                else if (opPart.RightSide is VariableConditionPart)
                {
                    string key = ((VariableConditionPart)opPart.RightSide).VariableName;
                    if (Arrays.ContainsKey(key))
                    {
                        values = Arrays[key];
                    }
                }
                foreach (var value in values)
                {
                    vars[enumerationVariable] = value;

                    foreach (var elem in Element.Elements)
                    {
                        TemplateSerializationFactory.Serialize(tw, elem, vars, Arrays, Parms);
                    }
                }
            }
        }
 public override void Serialize(TextWriter tw)
 {
     tw.Write(ConditionSerializer.Serialize(Element.Expression, new Dictionary <string, string>(Variables), new Dictionary <string, IEnumerable <string> >(Arrays)));
 }