示例#1
0
        private void AssignLists(IEnumerable <ItemNode> itemNodes)
        {
            ItemNode source = itemNodes.First(n => n.HasFlag(NodeFlags.Source));

            foreach (ItemNode itemNode in itemNodes.Where(n => !n.HasFlag(NodeFlags.Source)))
            {
                ItemNode   parentItem = source.Metadata.MemberOf.Equals(itemNode.Metadata.Parent.MemberOf) ? source : itemNodes.FirstOrDefault(n => n.Metadata == itemNode.Metadata.Parent.MemberOf);
                MemberNode listMember = parentItem.FindNode(itemNode.Metadata.Parent);
                MemberNode listParent = parentItem.FindNode(listMember.Metadata.Parent) ?? parentItem;

                ListNode listNode = new ListNode()
                {
                    Metadata   = listMember.Metadata,
                    FieldIndex = listMember.FieldIndex,
                    Flags      = NodeFlags.List,
                    Item       = itemNode,
                };

                if (listMember.HasFlag(NodeFlags.Source))
                {
                    listNode.Flags     |= NodeFlags.Source;
                    listNode.FieldIndex = null;
                }
                else if (listMember.HasFlag(NodeFlags.Field))
                {
                    listNode.Flags |= NodeFlags.Field;
                }

                listParent.Members.Remove(listMember);
                listParent.Members.Add(listNode);

                itemNode.List = listNode;
            }
        }
示例#2
0
        private void AddMemberNode(ItemNode itemNode, MemberNode node)
        {
            MemberNode parentNode = itemNode.FindNode(node.Metadata?.Parent);
            MemberNode thisNode   = itemNode.FindNode(node.Metadata);

            if (thisNode == null && parentNode != null)
            {
                parentNode.Members.Add(node);
            }
            else if (node != itemNode && parentNode == null)
            {
                MemberNode newParent = this.CreateMemberNode(node.Metadata.Parent);

                newParent.Members.Add(node);

                this.AddMemberNode(itemNode, newParent);
            }
        }