From 8d8b4a314f1b7baa657885f490ab6aef9cecfc3b Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Tue, 22 Apr 2008 20:47:54 +0000 Subject: * Add DeleteAllContents() method to InventoryFolderImpl - not yet used but will be soon * Add locking to InventoryFolderImpl class - need more though. --- .../Communications/Cache/InventoryFolderImpl.cs | 148 +++++++++++++++------ 1 file changed, 109 insertions(+), 39 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs index 091a6a3..daf9ab5 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]; + if (Items.ContainsKey(itemID)) + { + return Items[itemID]; + } } - foreach (InventoryFolderImpl folder in SubFolders.Values) + + lock (SubFolders) { - base2 = folder.HasItem(itemID); - if (base2 != null) + foreach (InventoryFolderImpl folder in SubFolders.Values) { - break; + base2 = folder.HasItem(itemID); + if (base2 != null) + { + break; + } } } + return base2; } + /// + /// Delete an item from the folder. + /// + /// + /// public bool DeleteItem(LLUUID itemID) { bool found = false; - if (Items.ContainsKey(itemID)) + + lock (Items) { - Items.Remove(itemID); - return true; + if (Items.ContainsKey(itemID)) + { + Items.Remove(itemID); + return true; + } } - foreach (InventoryFolderImpl folder in SubFolders.Values) + + lock (SubFolders) { - found = folder.DeleteItem(itemID); - if (found == true) + foreach (InventoryFolderImpl folder in SubFolders.Values) { - break; + 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; - if (SubFolders.ContainsKey(folderID)) - { - returnFolder = SubFolders[folderID]; - } - else + + lock (SubFolders) { - foreach (InventoryFolderImpl folder in SubFolders.Values) + if (SubFolders.ContainsKey(folderID)) { - returnFolder = folder.HasSubFolder(folderID); - if (returnFolder != null) + returnFolder = SubFolders[folderID]; + } + else + { + foreach (InventoryFolderImpl folder in SubFolders.Values) { - break; + 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; } } -- cgit v1.1