protected TreeNode CreateTreeNode(SPListItem item, SPDocumentLibrary doc)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }

            var node       = new TreeNode(item.Name, item.UniqueId.ToString());
            var spListItem = doc.GetItemByUniqueId(item.UniqueId);

            if (!string.IsNullOrWhiteSpace(spListItem.Title))
            {
                node.Text = spListItem.Title;
            }

            if (item.FileSystemObjectType == SPFileSystemObjectType.Folder)
            {
                node.Text         = string.Format(BoldTextTemplate, node.Text);
                node.SelectAction = TreeNodeSelectAction.None;
                node.ImageUrl     = TreeNodeFolderImage;

                var folderItems = doc.GetItemsInFolder(doc.DefaultView, item.Folder);
                if (folderItems.Count > 0)
                {
                    PopulateTree(folderItems, doc, node);
                }
            }
            else if (item.FileSystemObjectType == SPFileSystemObjectType.File &&
                     item.File.Name.EndsWith(RdlFileExtension, StringComparison.OrdinalIgnoreCase))
            {
                if (node.Text.EndsWith(RdlFileExtension, StringComparison.OrdinalIgnoreCase))
                {
                    node.Text = node.Text.Substring(0, node.Text.Length - FileExtensionLength);
                }

                node.ImageUrl = TreeNodeFileImage;

                try
                {
                    node.NavigateUrl = GetFileNodeNavigationUrl(item);
                }
                catch (Exception ex)
                {
                    node.Text = GetFileNodeErrorText(item, ex);
                    Trace.TraceError(ex.ToString());
                }
            }

            return(node);
        }