private void Dump(InventoryTreeNode node, string _ident)
 {
     Console.WriteLine(_ident + node.Name);
     if (node.Children != null)
     {
         foreach (InventoryTreeNode n in node.Children)
             Dump(n, _ident + "\t");
     }
 }
        private void FillIn(InventoryTreeNode root, List<XInventoryFolder> folders, List<XInventoryItem> items)
        {
            List<XInventoryItem> childrenItems = items.FindAll(delegate(XInventoryItem i) { return i.parentFolderID == root.ID; });
            List<XInventoryFolder> childrenFolders = folders.FindAll(delegate(XInventoryFolder f) { return f.parentFolderID == root.ID; });

            if (childrenItems != null)
                foreach (XInventoryItem it in childrenItems)
                {
                    root.Children.Add(new InventoryTreeNode(it.inventoryID, it.inventoryName, (AssetType)it.invType, root.Depth + 1, false));
                    items.Remove(it);
                }
            if (childrenFolders != null)
                foreach (XInventoryFolder fo in childrenFolders)
                {
                    InventoryTreeNode node = new InventoryTreeNode(fo.folderID, fo.folderName, (AssetType)fo.type, root.Depth + 1, true);
                    root.Children.Add(node);
                    folders.Remove(fo);
                    // Recurse
                    FillIn(node, folders, items);
                }
        }
        public InventoryTreeNode GetInventoryTree(UUID userID)
        {
            XInventoryFolder[] folders = m_Database.GetFolders(new string[] { "agentID" }, new string[] { userID.ToString() });
            XInventoryItem[] items = m_Database.GetItems(new string[] { "avatarID" }, new string[] { userID.ToString() });

            List<XInventoryFolder> folderList = null;
            if (folders != null)
                folderList = new List<XInventoryFolder>(folders);
            else
                folderList = new List<XInventoryFolder>();

            List<XInventoryItem> itemList = null;
            if (items != null)
                itemList = new List<XInventoryItem>(items);
            else
                itemList = new List<XInventoryItem>();

            InventoryTreeNode root = new InventoryTreeNode(UUID.Zero, String.Empty, AssetType.Unknown, 0, true);
            FillIn(root, folderList, itemList);

            //Dump(root, string.Empty);
            return root;
        }