private GenericTreeNode <Entity> GetRelationshipsTree(CatalogProduct product)
        {
            var retVal = new GenericTreeNode <Entity>(product);

            if (product.Category != null)
            {
                retVal.AddChild(GetRelationshipsTree(product.Category));
            }
            else
            {
                retVal.AddChild(new GenericTreeNode <Entity>(product.Catalog));
            }

            if (!product.Links.IsNullOrEmpty())
            {
                foreach (var link in product.Links)
                {
                    if (link.Category != null)
                    {
                        retVal.AddChild(GetRelationshipsTree(link.Category));
                    }
                    else
                    {
                        retVal.AddChild(new GenericTreeNode <Entity>(link.Catalog));
                    }
                }
            }
            return(retVal);
        }
        private GenericTreeNode <Entity> GetRelationshipsTree(Category category)
        {
            var retVal = new GenericTreeNode <Entity>(category);

            if (!category.Parents.IsNullOrEmpty())
            {
                var parentNode = GetRelationshipsTree(category.Parents.Reverse().First());
                retVal.AddChild(parentNode);
            }
            else
            {
                retVal.AddChild(new GenericTreeNode <Entity>(category.Catalog));
            }
            if (!category.Links.IsNullOrEmpty())
            {
                foreach (var link in category.Links)
                {
                    var node = new GenericTreeNode <Entity>(link.Catalog);
                    if (link.Category != null)
                    {
                        node = GetRelationshipsTree(link.Category);
                    }
                    retVal.AddChild(node);
                }
            }
            return(retVal);
        }
        public GenericTreeNode <T> AddChild(GenericTreeNode <T> node)
        {
            _children.Add(node);
            node.Parent = this;

            return(node);
        }
        private GenericTreeNode <Entity> GetRelationshipsTree(IHasOutlines obj)
        {
            var product  = obj as CatalogProduct;
            var category = obj as Category;
            GenericTreeNode <Entity> retVal = null;

            if (product != null)
            {
                retVal = GetRelationshipsTree(product);
            }
            if (category != null)
            {
                retVal = GetRelationshipsTree(category);
            }
            return(retVal);
        }
        private GenericTreeNode <Entity> GetRelationshipsTree(CatalogProduct product)
        {
            var retVal = new GenericTreeNode <Entity>(product);

            if (product.Category != null)
            {
                retVal.AddChild(GetRelationshipsTree(product.Category));
            }
            else
            {
                retVal.AddChild(new GenericTreeNode <Entity>(product.Catalog));
            }

            var productLinks = new List <CategoryLink>(product.Links ?? Array.Empty <CategoryLink>());

            // VP-5628: Need to use main product links for the variations
            if (product.MainProduct != null)
            {
                productLinks.AddRange(product.MainProduct.Links ?? Array.Empty <CategoryLink>());
            }

            if (!productLinks.IsNullOrEmpty())
            {
                foreach (var link in productLinks)
                {
                    if (link.Category != null)
                    {
                        retVal.AddChild(GetRelationshipsTree(link.Category));
                    }
                    else
                    {
                        retVal.AddChild(new GenericTreeNode <Entity>(link.Catalog));
                    }
                }
            }
            return(retVal);
        }