diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs index 091a6a3ee1..daf9ab5584 100644 --- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs +++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs @@ -57,99 +57,169 @@ namespace OpenSim.Framework.Communications.Cache { } - // Methods public InventoryFolderImpl CreateNewSubFolder(LLUUID folderID, string folderName, ushort type) { - if (!SubFolders.ContainsKey(folderID)) + lock (SubFolders) { - InventoryFolderImpl subFold = new InventoryFolderImpl(); - subFold.Name = folderName; - subFold.ID = folderID; - subFold.Type = (short) type; - subFold.ParentID = this.ID; - subFold.Owner = Owner; - SubFolders.Add(subFold.ID, subFold); - return subFold; + if (!SubFolders.ContainsKey(folderID)) + { + InventoryFolderImpl subFold = new InventoryFolderImpl(); + subFold.Name = folderName; + subFold.ID = folderID; + subFold.Type = (short) type; + subFold.ParentID = this.ID; + subFold.Owner = Owner; + SubFolders.Add(subFold.ID, subFold); + return subFold; + } } + return null; } + + /// + /// Delete all the folders and items in this folder. + /// + /// TODO: This method is not used yet, but will be shortly + /// + public void DeleteAllContents() + { + foreach (InventoryFolderImpl folder in SubFolders.Values) + { + folder.DeleteAllContents(); + } + + SubFolders.Clear(); + Items.Clear(); + } + /// + /// Does this folder contain the given item? + /// + /// + /// public InventoryItemBase HasItem(LLUUID itemID) { InventoryItemBase base2 = null; - if (Items.ContainsKey(itemID)) + + lock (Items) { - return Items[itemID]; - } - foreach (InventoryFolderImpl folder in SubFolders.Values) - { - base2 = folder.HasItem(itemID); - if (base2 != null) + if (Items.ContainsKey(itemID)) { - break; + return Items[itemID]; } } - return base2; - } - - public bool DeleteItem(LLUUID itemID) - { - bool found = false; - if (Items.ContainsKey(itemID)) - { - Items.Remove(itemID); - return true; - } - foreach (InventoryFolderImpl folder in SubFolders.Values) - { - found = folder.DeleteItem(itemID); - if (found == true) - { - break; - } - } - return found; - } - - - public InventoryFolderImpl HasSubFolder(LLUUID folderID) - { - InventoryFolderImpl returnFolder = null; - if (SubFolders.ContainsKey(folderID)) - { - returnFolder = SubFolders[folderID]; - } - else + + lock (SubFolders) { foreach (InventoryFolderImpl folder in SubFolders.Values) { - returnFolder = folder.HasSubFolder(folderID); - if (returnFolder != null) + base2 = folder.HasItem(itemID); + if (base2 != null) { break; } } } + + return base2; + } + + /// + /// Delete an item from the folder. + /// + /// + /// + public bool DeleteItem(LLUUID itemID) + { + bool found = false; + + lock (Items) + { + if (Items.ContainsKey(itemID)) + { + Items.Remove(itemID); + return true; + } + } + + lock (SubFolders) + { + foreach (InventoryFolderImpl folder in SubFolders.Values) + { + found = folder.DeleteItem(itemID); + if (found == true) + { + break; + } + } + } + return found; + } + + /// + /// Does this folder contain the given subfolder? + /// + /// + public InventoryFolderImpl HasSubFolder(LLUUID folderID) + { + InventoryFolderImpl returnFolder = null; + + lock (SubFolders) + { + if (SubFolders.ContainsKey(folderID)) + { + returnFolder = SubFolders[folderID]; + } + else + { + foreach (InventoryFolderImpl folder in SubFolders.Values) + { + returnFolder = folder.HasSubFolder(folderID); + if (returnFolder != null) + { + break; + } + } + } + } + return returnFolder; } + /// + /// Return the list of items in this folder + /// public List RequestListOfItems() { List itemList = new List(); - foreach (InventoryItemBase item in Items.Values) + + lock (Items) { - itemList.Add(item); + foreach (InventoryItemBase item in Items.Values) + { + itemList.Add(item); + } } + return itemList; } + /// + /// Return the list of folders in this folder + /// public List RequestListOfFolders() - { + { List folderList = new List(); - foreach (InventoryFolderBase folder in SubFolders.Values) + + lock (SubFolders) { - folderList.Add(folder); + foreach (InventoryFolderBase folder in SubFolders.Values) + { + folderList.Add(folder); + } } + return folderList; } }