public ParsingResultNodeList Clone()
        {
            var copy = new ParsingResultNodeList();

            foreach (var node in this)
            {
                copy.Add(node.Clone());
            }
            return(copy);
        }
Example #2
0
 private void ParseMessageInternal(ParsingResultNodeList nodes, ParsingContext context)
 {
     foreach (var node in nodes)
     {
         node.Parse(context);
         if (node.Children != null && node.Children.Count > 0)
         {
             ParseMessageInternal(node.Children, context);
         }
     }
 }
        public LoopResult(Configuration.LoopElement element) : this(element?.Label)
        {
            if (element == null)
            {
                throw new ArgumentNullException(nameof(element));
            }
            From = element.From;
            To   = element.To;
            Step = element.Step;

            Template = new ParsingResultNodeList();
        }
 protected ParsingResultNode(ParsingResultNodeType type)
 {
     NodeType = type;
     Children = new ParsingResultNodeList();
 }
Example #5
0
        private void BuildResultTreeNodes(ParsingResultNodeList prnl, FieldCollectionBase confItems)
        {
            foreach (FieldElementBase item in confItems)
            {
                if (item is ConstantElement)
                {
                    var element = (ConstantElement)item;
                    prnl.Add(new ConstantResult(element));
                }
                else if (item is SwitchElement) // as switch is of field type, it must be checked before
                {
                    var element = (SwitchElement)item;
                    var sw      = new SwitchResult(element);
                    prnl.Add(sw);

                    foreach (GroupElement c in element.Cases)
                    {
                        if (c is CaseElement)
                        {
                            var caseE = (CaseElement)c;
                            var gp    = new GroupResult(caseE.Label);
                            sw.Cases.Add(caseE.When, gp);
                            BuildResultTreeNodes(gp.Children, caseE.Fields);
                        }
                        else if (c is ElseElement)
                        {
                            if (sw.Else != null)
                            {
                                throw new ParserException("Only 1 else case can be defined in a switch!");
                            }
                            var elseE = (ElseElement)c;
                            var gp    = new GroupResult(elseE.Label);
                            sw.Else = gp;
                            BuildResultTreeNodes(gp.Children, elseE.Fields);
                        }
                    }
                }
                else if (item is FieldElement)
                {
                    var element = (FieldElement)item;
                    prnl.Add(new FieldResult(element));
                }
                else if (item is LoopElement) // as loop is of type group, it must be checked before
                {
                    var element = (LoopElement)item;
                    var node    = new LoopResult(element);
                    prnl.Add(node);
                    BuildResultTreeNodes(node.Template, element.Fields);
                }
                else if (item is GroupElement)
                {
                    var element = (GroupElement)item;
                    var node    = new GroupResult(element);
                    prnl.Add(node);
                    BuildResultTreeNodes(node.Children, element.Fields);
                }
                else if (item is PartRefElement)
                {
                    var         element = (PartRefElement)item;
                    PartElement pe;
                    if (!Configuration.Parts.TryFindById(element.PartId, out pe))
                    {
                        throw new ParserException(Invariant($"Invalid partRef: unknow part id '{element.PartId}'"));
                    }
                    var node = new GroupResult(element.Label);
                    prnl.Add(node);
                    BuildResultTreeNodes(node.Children, pe.Fields);
                }
                else
                {
                    throw new ParserException(Invariant($"Unsupported field with name '{item.Label}'"));
                }
            }
        }
Example #6
0
 public ParsingResult()
 {
     Nodes = new ParsingResultNodeList();
 }