BrickPile.Core.DefaultBrickPileBootstrapper.OnPageSave C# (CSharp) Method

OnPageSave() private method

private OnPageSave ( string key, IPage currentPage, RavenJObject metadata ) : void
key string
currentPage IPage
metadata RavenJObject
return void
        internal void OnPageSave(string key, IPage currentPage, RavenJObject metadata)
        {
            using (IDocumentSession session = DocumentStore.OpenSession())
            {
                var trie = session.Load<Trie>(TrieId);

                if (trie.RootNode == null)
                {
                    trie.RootNode = new TrieNode
                    {
                        PageId = key
                    };
                }
                else
                {
                    TrieNode[] nodes = trie.RootNode.Flatten(n => n.Children).ToArray();

                    TrieNode parent = currentPage.Parent != null
                        ? nodes.SingleOrDefault(
                            n =>
                                String.Equals(n.PageId, currentPage.Parent.Id, StringComparison.CurrentCultureIgnoreCase))
                        : null;

                    if (parent != null)
                    {
                        currentPage.Metadata.Slug = Slug.CreateSlug(currentPage);
                        currentPage.Metadata.Url = currentPage.Metadata.Slug.Insert(0,
                            VirtualPathUtility.AppendTrailingSlash(parent.Url ?? ""));

                        if (parent.Children.All(n => n.PageId != key.Replace("/draft", "")))
                        {
                            parent.Children.Add(new TrieNode
                            {
                                PageId = key.Replace("/draft", ""),
                                ParentId = parent.PageId,
                                Url = currentPage.Metadata.Url
                            });
                        }
                    }
                }

                session.SaveChanges();
            }
        }