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); } } }
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))); }