From ea8f3c83bf96453e8223d918933d5708fa49a3cc Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Mon, 4 Jul 2016 03:35:48 +0100 Subject: Finally remove the requirement for an InventoryItem/FolderBase object to be passed into inventory queries. This makes the API more homogenous and also will more clearly show coding errors related to HG inventory where the .Owner field has a meaning for a query but wasn't always set. --- .../Inventory/XInventoryServicesConnector.cs | 14 ++++++----- .../SimianGrid/SimianInventoryServiceConnector.cs | 29 +++++++++------------- .../HypergridService/HGInventoryService.cs | 4 +-- .../HypergridService/HGSuitcaseInventoryService.cs | 8 +++--- OpenSim/Services/Interfaces/IInventoryService.cs | 4 +-- .../Tests/XInventoryServiceTests.cs | 10 +++----- .../Services/InventoryService/XInventoryService.cs | 24 +++++++----------- 7 files changed, 41 insertions(+), 52 deletions(-) (limited to 'OpenSim/Services') diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs index c7d658a..d80e660 100644 --- a/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs @@ -520,10 +520,10 @@ namespace OpenSim.Services.Connectors return CheckReturn(ret); } - public InventoryItemBase GetItem(InventoryItemBase item) + public InventoryItemBase GetItem(UUID principalID, UUID itemID) { InventoryItemBase retrieved = null; - if (m_ItemCache.TryGetValue(item.ID, out retrieved)) + if (m_ItemCache.TryGetValue(itemID, out retrieved)) { return retrieved; } @@ -532,7 +532,8 @@ namespace OpenSim.Services.Connectors { Dictionary ret = MakeRequest("GETITEM", new Dictionary { - { "ID", item.ID.ToString() } + { "ID", itemID.ToString() }, + { "PRINCIPAL", principalID.ToString() } }); if (!CheckReturn(ret)) @@ -545,7 +546,7 @@ namespace OpenSim.Services.Connectors m_log.Error("[XINVENTORY SERVICES CONNECTOR]: Exception in GetItem: ", e); } - m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS); + m_ItemCache.AddOrUpdate(itemID, retrieved, CACHE_EXPIRATION_SECONDS); return retrieved; } @@ -613,13 +614,14 @@ namespace OpenSim.Services.Connectors return itemArr; } - public InventoryFolderBase GetFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(UUID principalID, UUID folderID) { try { Dictionary ret = MakeRequest("GETFOLDER", new Dictionary { - { "ID", folder.ID.ToString() } + { "ID", folderID.ToString() }, + { "PRINCIPAL", principalID.ToString() } }); if (!CheckReturn(ret)) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index e793420..3d35834 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs @@ -277,17 +277,17 @@ namespace OpenSim.Services.Connectors.SimianGrid /// /// /// - public InventoryItemBase GetItem(InventoryItemBase item) + public InventoryItemBase GetItem(UUID principalID, UUID itemID) { InventoryItemBase retrieved = null; - if (m_ItemCache.TryGetValue(item.ID, out retrieved)) + if (m_ItemCache.TryGetValue(itemID, out retrieved)) return retrieved; NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, - { "ItemID", item.ID.ToString() }, - { "OwnerID", item.Owner.ToString() }, + { "ItemID", itemID.ToString() }, + { "OwnerID", principalID.ToString() }, { "IncludeFolders", "1" }, { "IncludeItems", "1" }, { "ChildrenOnly", "1" } @@ -303,17 +303,17 @@ namespace OpenSim.Services.Connectors.SimianGrid // and sanity check just in case for (int i = 0; i < items.Count; i++) { - if (items[i].ID == item.ID) + if (items[i].ID == itemID) { retrieved = items[i]; - m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS); + m_ItemCache.AddOrUpdate(itemID, retrieved, CACHE_EXPIRATION_SECONDS); return retrieved; } } } } - m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + item.ID + " owned by " + item.Owner + " not found"); + m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + itemID + " owned by " + principalID + " not found"); return null; } @@ -321,13 +321,8 @@ namespace OpenSim.Services.Connectors.SimianGrid { InventoryItemBase[] result = new InventoryItemBase[itemIDs.Length]; int i = 0; - InventoryItemBase item = new InventoryItemBase(); - item.Owner = principalID; foreach (UUID id in itemIDs) - { - item.ID = id; - result[i++] = GetItem(item); - } + result[i++] = GetItem(principalID, id); return result; } @@ -337,13 +332,13 @@ namespace OpenSim.Services.Connectors.SimianGrid /// /// /// - public InventoryFolderBase GetFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(UUID principalID, UUID folderID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, - { "ItemID", folder.ID.ToString() }, - { "OwnerID", folder.Owner.ToString() }, + { "ItemID", folderID.ToString() }, + { "OwnerID", principalID.ToString() }, { "IncludeFolders", "1" }, { "IncludeItems", "0" }, { "ChildrenOnly", "1" } @@ -353,7 +348,7 @@ namespace OpenSim.Services.Connectors.SimianGrid if (response["Success"].AsBoolean() && response["Items"] is OSDArray) { OSDArray items = (OSDArray)response["Items"]; - List folders = GetFoldersFromResponse(items, folder.ID, true); + List folders = GetFoldersFromResponse(items, folderID, true); if (folders.Count > 0) return folders[0]; diff --git a/OpenSim/Services/HypergridService/HGInventoryService.cs b/OpenSim/Services/HypergridService/HGInventoryService.cs index 9158b41..a0d25e3 100644 --- a/OpenSim/Services/HypergridService/HGInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGInventoryService.cs @@ -291,9 +291,9 @@ namespace OpenSim.Services.HypergridService //{ //} - public override InventoryItemBase GetItem(InventoryItemBase item) + public override InventoryItemBase GetItem(UUID principalID, UUID itemID) { - InventoryItemBase it = base.GetItem(item); + InventoryItemBase it = base.GetItem(principalID, itemID); if (it != null) { UserAccount user = m_Cache.GetUser(it.CreatorId); diff --git a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs index 40eb6d4..7f14e8e 100644 --- a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs @@ -383,7 +383,7 @@ namespace OpenSim.Services.HypergridService // Check the items' current folders foreach (InventoryItemBase item in items) { - InventoryItemBase originalItem = base.GetItem(item); + InventoryItemBase originalItem = base.GetItem(item.Owner, item.ID); if (!IsWithinSuitcaseTree(originalItem.Owner, originalItem.Folder)) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner); @@ -401,7 +401,7 @@ namespace OpenSim.Services.HypergridService public new InventoryItemBase GetItem(InventoryItemBase item) { - InventoryItemBase it = base.GetItem(item); + InventoryItemBase it = base.GetItem(item.Owner, item.ID); if (it == null) { m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to retrieve item {0} ({1}) in folder {2}", @@ -426,9 +426,9 @@ namespace OpenSim.Services.HypergridService return it; } - public new InventoryFolderBase GetFolder(InventoryFolderBase folder) + public new InventoryFolderBase GetFolder(UUID principalID, UUID folderID) { - InventoryFolderBase f = base.GetFolder(folder); + InventoryFolderBase f = base.GetFolder(principalID, folderID); if (f != null) { diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index 4289bba..c0c9ba8 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -161,7 +161,7 @@ namespace OpenSim.Services.Interfaces /// /// /// null if no item was found, otherwise the found item - InventoryItemBase GetItem(InventoryItemBase item); + InventoryItemBase GetItem(UUID userID, UUID itemID); /// /// Get multiple items, given by their UUIDs @@ -175,7 +175,7 @@ namespace OpenSim.Services.Interfaces /// /// /// - InventoryFolderBase GetFolder(InventoryFolderBase folder); + InventoryFolderBase GetFolder(UUID userID, UUID folderID); /// /// Does the given user have an inventory structure? diff --git a/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs b/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs index 9e3fa69..3cfd125 100644 --- a/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs +++ b/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs @@ -90,8 +90,7 @@ namespace OpenSim.Services.InventoryService.Tests Assert.That(xis.AddItem(itemToStore), Is.True); - InventoryItemBase itemRetrieved = new InventoryItemBase(itemId); - itemRetrieved = xis.GetItem(itemRetrieved); + InventoryItemBase itemRetrieved = xis.GetItem(UUID.Zero, itemId); Assert.That(itemRetrieved, Is.Not.Null); Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId)); @@ -139,8 +138,7 @@ namespace OpenSim.Services.InventoryService.Tests Assert.That(xis.UpdateItem(itemToStore), Is.True); - InventoryItemBase itemRetrieved = new InventoryItemBase(itemId); - itemRetrieved = xis.GetItem(itemRetrieved); + InventoryItemBase itemRetrieved = xis.GetItem(UUID.Zero, itemId); Assert.That(itemRetrieved, Is.Not.Null); Assert.That(itemRetrieved.Name, Is.EqualTo(itemName2)); @@ -162,7 +160,7 @@ namespace OpenSim.Services.InventoryService.Tests Assert.That(xis.UpdateItem(itemToStore), Is.True); - itemRetrieved = xis.GetItem(itemRetrieved); + itemRetrieved = xis.GetItem(itemRetrieved.Owner, itemRetrieved.ID); Assert.That(itemRetrieved, Is.Not.Null); Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId)); @@ -174,4 +172,4 @@ namespace OpenSim.Services.InventoryService.Tests Assert.That(itemRetrieved.Name, Is.EqualTo(itemName3)); } } -} \ No newline at end of file +} diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index b75193f..004c4bf 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -315,8 +315,7 @@ namespace OpenSim.Services.InventoryService inventory.Items.Add(ConvertToOpenSim(i)); } - InventoryFolderBase f = new InventoryFolderBase(folderID, principalID); - f = GetFolder(f); + InventoryFolderBase f = GetFolder(principalID, folderID); if (f != null) { inventory.Version = f.Version; @@ -359,7 +358,7 @@ namespace OpenSim.Services.InventoryService { // m_log.DebugFormat("[XINVENTORY]: Add folder {0} type {1} in parent {2}", folder.Name, folder.Type, folder.ParentID); - InventoryFolderBase check = GetFolder(folder); + InventoryFolderBase check = GetFolder(folder.Owner, folder.ID); if (check != null) return false; @@ -402,7 +401,7 @@ namespace OpenSim.Services.InventoryService // m_log.DebugFormat("[XINVENTORY]: Update folder {0} {1} ({2})", folder.Name, folder.Type, folder.ID); XInventoryFolder xFolder = ConvertFromOpenSim(folder); - InventoryFolderBase check = GetFolder(folder); + InventoryFolderBase check = GetFolder(folder.Owner, folder.ID); if (check == null) return AddFolder(folder); @@ -512,7 +511,7 @@ namespace OpenSim.Services.InventoryService // m_log.InfoFormat( // "[XINVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder); - InventoryItemBase retrievedItem = GetItem(item); + InventoryItemBase retrievedItem = GetItem(item.Owner, item.ID); if (retrievedItem == null) { @@ -598,11 +597,11 @@ namespace OpenSim.Services.InventoryService return true; } - public virtual InventoryItemBase GetItem(InventoryItemBase item) + public virtual InventoryItemBase GetItem(UUID principalID, UUID itemID) { XInventoryItem[] items = m_Database.GetItems( new string[] { "inventoryID" }, - new string[] { item.ID.ToString() }); + new string[] { itemID.ToString() }); if (items.Length == 0) return null; @@ -614,22 +613,17 @@ namespace OpenSim.Services.InventoryService { InventoryItemBase[] items = new InventoryItemBase[ids.Length]; int i = 0; - InventoryItemBase item = new InventoryItemBase(); - item.Owner = userID; foreach (UUID id in ids) - { - item.ID = id; - items[i++] = GetItem(item); - } + items[i++] = GetItem(userID, id); return items; } - public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) + public virtual InventoryFolderBase GetFolder(UUID principalID, UUID folderID) { XInventoryFolder[] folders = m_Database.GetFolders( new string[] { "folderID"}, - new string[] { folder.ID.ToString() }); + new string[] { folderID.ToString() }); if (folders.Length == 0) return null; -- cgit v1.1