Esempio n. 1
0
 /// <summary>
 /// Получает группу дочерних нод заданного шагом типа (producedChildElement) для родителя заданного типа.
 /// </summary>
 /// <param name="node">The node.</param>
 /// <returns></returns>
 public Lazy<FrameNodeGroup> GetNextLevelNodes(FrameNodeGroup node)
 {
     var childNodes = node.Nodes.Select(k => new {parent = k, children = _packGetter.GetValue(k)}).ToArray();
     Func<FrameNodeGroup> processChildren =
         () =>
             {
                 var groupChildren = new List<FrameNode>();
                 foreach (var pair in childNodes)
                 {
                     var children = pair.children();
                     var localChildren = children.Select(k => CreateNewNode(pair.parent, k)).ToArray();;
                     if (pair.parent.ChildNodes == null)
                         pair.parent.ChildNodes = localChildren;
                     else
                     {
                         pair.parent.ChildNodes = localChildren.Concat(pair.parent.ChildNodes).ToArray();
                     }
                     groupChildren.AddRange(localChildren);
                 }
                 var newParameters =
                     new ParameterNames(node.BoundingParameters.Concat(new[] { ProducedChildElement.Name }));
                 var group = new FrameNodeGroup(ProducedChildElement, groupChildren.ToArray(), newParameters);
                 return group;
             };
     return new Lazy<FrameNodeGroup>(processChildren);
 }
Esempio n. 2
0
        /// <summary>
        /// Получает группу дочерних нод заданного шагом типа (producedChildElement) для родителя заданного типа.
        /// </summary>
        /// <param name="node">The node.</param>
        /// <returns></returns>
        public Lazy <FrameNodeGroup> GetNextLevelNodes(FrameNodeGroup node)
        {
            var childNodes = node.Nodes.Select(k => new { parent = k, children = _packGetter.GetValue(k) }).ToArray();
            Func <FrameNodeGroup> processChildren =
                () =>
            {
                var groupChildren = new List <FrameNode>();
                foreach (var pair in childNodes)
                {
                    var children      = pair.children();
                    var localChildren = children.Select(k => CreateNewNode(pair.parent, k)).ToArray();;
                    if (pair.parent.ChildNodes == null)
                    {
                        pair.parent.ChildNodes = localChildren;
                    }
                    else
                    {
                        pair.parent.ChildNodes = localChildren.Concat(pair.parent.ChildNodes).ToArray();
                    }
                    groupChildren.AddRange(localChildren);
                }
                var newParameters =
                    new ParameterNames(node.BoundingParameters.Concat(new[] { ProducedChildElement.Name }));
                var group = new FrameNodeGroup(ProducedChildElement, groupChildren.ToArray(), newParameters);
                return(group);
            };

            return(new Lazy <FrameNodeGroup>(processChildren));
        }
Esempio n. 3
0
        public void RecursiveCommendationTest()
        {
            var sElement = new ResourceProjectionElement
            {
                Name        = "Attribute",
                FillingInfo = new FillingInfo {
                    { "Name", FillingInfo.FillType.Native }
                },
                ResourceType = "Attribute",
                Namespace    = "Test"
            };
            var sGroup = new ResourceProjectionElement
            {
                Name        = "Element",
                FillingInfo = new FillingInfo {
                    { "Name", FillingInfo.FillType.Native }
                },
                ResourceType = "Element",
                Namespace    = "Test",
            };

            var gToGRelation = new Relation {
                ChildElement = sGroup, ParentElement = sGroup
            };
            var eFromEQuery = Query.CreateTestStubQuery(null, null, "element");

            gToGRelation.Queries = new[] { eFromEQuery };
            sGroup.UpRelations.Add(gToGRelation);
            sGroup.DownRelations.Add(gToGRelation);

            var eToGRelation = new Relation {
                ChildElement = sElement, ParentElement = sGroup
            };
            var aFromEQuery = Query.CreateTestStubQuery(null, null, "element");

            eToGRelation.Queries = new[] { aFromEQuery };
            sElement.UpRelations.Add(eToGRelation);
            sGroup.DownRelations.Add(eToGRelation);

            var cc = new CommendationCollection();

            var acc = GetAccumulator(gToGRelation, eFromEQuery);

            cc.AddNewStep(new PlanStep(sGroup, sGroup, new ParameterNames(), acc, new ParameterNames(), 0));
            acc = GetAccumulator(eToGRelation, aFromEQuery);
            cc.AddNewStep(new PlanStep(sGroup, sElement, new ParameterNames(), acc, new ParameterNames(), 0));

            var root = new FrameNodeGroup(sGroup,
                                          new[] { new FrameNode(Guid.Empty, sGroup, 0, new Dictionary <string, object>()) },
                                          new ParameterNames());
            var nodes = cc.GetNewGroups(new[] { root });

            Assert.AreEqual(2, nodes.Count());
            nodes = cc.GetNewGroups(nodes);
            Assert.AreEqual(2, nodes.Count());
            nodes = cc.GetNewGroups(nodes);
            Assert.AreEqual(2, nodes.Count());
        }