From 367606227774c4551a8929b2b42f8d014efff318 Mon Sep 17 00:00:00 2001 From: Mike Mazur Date: Thu, 5 Mar 2009 08:29:52 +0000 Subject: [PATCH] Use Inventory{Item,Folder}Base in AssetInventoryServer. Also the first inventory storage methods are implemented. --- .../Grid/AssetInventoryServer/Interfaces.cs | 14 +- .../AssetInventoryServer/InventoryObjects.cs | 131 ++++++------ .../OpenSim/OpenSimInventoryService.cs | 49 +++++ .../OpenSim/OpenSimInventoryStoragePlugin.cs | 186 +++++------------- .../Simple/SimpleInventoryStoragePlugin.cs | 82 ++++---- OpenSim/Grid/AssetInventoryServer/Utils.cs | 49 ++--- prebuild.xml | 1 + 7 files changed, 240 insertions(+), 272 deletions(-) create mode 100644 OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryService.cs diff --git a/OpenSim/Grid/AssetInventoryServer/Interfaces.cs b/OpenSim/Grid/AssetInventoryServer/Interfaces.cs index b8c8f88b46..e808dd3d68 100644 --- a/OpenSim/Grid/AssetInventoryServer/Interfaces.cs +++ b/OpenSim/Grid/AssetInventoryServer/Interfaces.cs @@ -81,17 +81,17 @@ namespace OpenSim.Grid.AssetInventoryServer public interface IInventoryStorageProvider : IAssetInventoryServerPlugin { - BackendResponse TryFetchItem(Uri owner, UUID itemID, out InventoryItem item); - BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolder folder); + BackendResponse TryFetchItem(Uri owner, UUID itemID, out InventoryItemBase item); + BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder); BackendResponse TryFetchFolderContents(Uri owner, UUID folderID, out InventoryCollection contents); - BackendResponse TryFetchFolderList(Uri owner, out List folders); + BackendResponse TryFetchFolderList(Uri owner, out List folders); BackendResponse TryFetchInventory(Uri owner, out InventoryCollection inventory); - BackendResponse TryFetchActiveGestures(Uri owner, out List gestures); + BackendResponse TryFetchActiveGestures(Uri owner, out List gestures); - BackendResponse TryCreateItem(Uri owner, InventoryItem item); - BackendResponse TryCreateFolder(Uri owner, InventoryFolder folder); - BackendResponse TryCreateInventory(Uri owner, InventoryFolder rootFolder); + BackendResponse TryCreateItem(Uri owner, InventoryItemBase item); + BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder); + BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder); BackendResponse TryDeleteItem(Uri owner, UUID itemID); BackendResponse TryDeleteFolder(Uri owner, UUID folderID); diff --git a/OpenSim/Grid/AssetInventoryServer/InventoryObjects.cs b/OpenSim/Grid/AssetInventoryServer/InventoryObjects.cs index 7392f1d96c..5fa4274ebe 100644 --- a/OpenSim/Grid/AssetInventoryServer/InventoryObjects.cs +++ b/OpenSim/Grid/AssetInventoryServer/InventoryObjects.cs @@ -28,78 +28,85 @@ using System; using System.Collections.Generic; using OpenMetaverse; +using OpenSim.Framework; namespace OpenSim.Grid.AssetInventoryServer { - public class InventoryBase - { - } + //public class InventoryBase + //{ + //} - public class InventoryFolder : InventoryBase - { - public string Name; - public UUID Owner; - public UUID ParentID; - public UUID ID; - public short Type; - public ushort Version; + //public class InventoryFolder : InventoryBase + //{ + // public string Name; + // public UUID Owner; + // public UUID ParentID; + // public UUID ID; + // public short Type; + // public ushort Version; + // [NonSerialized] + // public Dictionary Children = new Dictionary(); + + // public InventoryFolder() + // { + // } + + // public InventoryFolder(string name, UUID ownerID, UUID parentID, short assetType) + // { + // ID = UUID.Random(); + // Name = name; + // Owner = ownerID; + // ParentID = parentID; + // Type = assetType; + // Version = 1; + // } + + // public override string ToString() + // { + // return String.Format("{0} ({1})", Name, ID); + // } + //} + + //public class InventoryItem : InventoryBase + //{ + // public UUID ID; + // public int InvType; + // public UUID Folder; + // public UUID Owner; + // public UUID Creator; + // public string Name; + // public string Description; + // public uint NextPermissions; + // public uint CurrentPermissions; + // public uint BasePermissions; + // public uint EveryOnePermissions; + // public uint GroupPermissions; + // public int AssetType; + // public UUID AssetID; + // public UUID GroupID; + // public bool GroupOwned; + // public int SalePrice; + // public byte SaleType; + // public uint Flags; + // public int CreationDate; + + // public override string ToString() + // { + // return String.Format("{0} ({1})", Name, ID); + // } + //} + + public class InventoryFolderWithChildren : InventoryFolderBase + { [NonSerialized] - public Dictionary Children = new Dictionary(); - - public InventoryFolder() - { - } - - public InventoryFolder(string name, UUID ownerID, UUID parentID, short assetType) - { - ID = UUID.Random(); - Name = name; - Owner = ownerID; - ParentID = parentID; - Type = assetType; - Version = 1; - } - - public override string ToString() - { - return String.Format("{0} ({1})", Name, ID); - } - } - - public class InventoryItem : InventoryBase - { - public UUID ID; - public int InvType; - public UUID Folder; - public UUID Owner; - public UUID Creator; - public string Name; - public string Description; - public uint NextPermissions; - public uint CurrentPermissions; - public uint BasePermissions; - public uint EveryOnePermissions; - public uint GroupPermissions; - public int AssetType; - public UUID AssetID; - public UUID GroupID; - public bool GroupOwned; - public int SalePrice; - public byte SaleType; - public uint Flags; - public int CreationDate; - - public override string ToString() - { - return String.Format("{0} ({1})", Name, ID); - } + public Dictionary Children = new Dictionary(); } public class InventoryCollection { - public Dictionary Folders; - public Dictionary Items; + public Dictionary Folders; + public Dictionary Items; public UUID UserID; } } diff --git a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryService.cs b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryService.cs new file mode 100644 index 0000000000..d742d252e8 --- /dev/null +++ b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryService.cs @@ -0,0 +1,49 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Framework.Communications; +using OpenSim.Data; + +namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim +{ + public class OpenSimInventoryService : InventoryServiceBase + { + public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback) {} + + public InventoryFolderBase GetInventoryFolder(UUID folderID) + { + foreach (IInventoryDataPlugin plugin in m_plugins) + { + return plugin.getInventoryFolder(folderID); + } + + return null; + } + } +} diff --git a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryStoragePlugin.cs b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryStoragePlugin.cs index 7c9646e3d6..851cc4a597 100644 --- a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryStoragePlugin.cs +++ b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryStoragePlugin.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -42,17 +42,19 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); const string EXTENSION_NAME = "OpenSimInventoryStorage"; // Used in metrics reporting - //private AssetInventoryServer m_server; + private AssetInventoryServer m_server; private IInventoryDataPlugin m_inventoryProvider; private IConfig m_openSimConfig; + private OpenSimInventoryService m_inventoryService; public OpenSimInventoryStoragePlugin() { + m_inventoryService = new OpenSimInventoryService(); } #region IInventoryStorageProvider implementation - public BackendResponse TryFetchItem(Uri owner, UUID itemID, out InventoryItem item) + public BackendResponse TryFetchItem(Uri owner, UUID itemID, out InventoryItemBase item) { item = null; //BackendResponse ret; @@ -74,7 +76,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // if (reader.Read()) // { - // item = new InventoryItem(); + // item = new InventoryItemBase(); // item.ID = itemID; // item.AssetID = UUID.Parse(reader.GetString(0)); // item.AssetType = reader.GetInt32(1); @@ -116,7 +118,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim return BackendResponse.Success; } - public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolder folder) + public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder) { folder = null; //BackendResponse ret; @@ -136,7 +138,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // if (reader.Read()) // { - // folder = new InventoryFolder(); + // folder = new InventoryFolderWithChildren(); // folder.Children = null; // This call only returns data for the folder itself, no children data // folder.ID = folderID; // folder.Name = reader.GetString(0); @@ -186,11 +188,11 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // folderID.ToString()); // reader = command.ExecuteReader(); - // contents.Folders = new Dictionary(); + // contents.Folders = new Dictionary(); // while (reader.Read()) // { - // InventoryFolder folder = new InventoryFolder(); + // InventoryFolderWithChildren folder = new InventoryFolderWithChildren(); // folder.ParentID = folderID; // folder.Children = null; // This call doesn't do recursion // folder.Name = reader.GetString(0); @@ -216,11 +218,11 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // folderID.ToString()); // reader = command.ExecuteReader(); - // contents.Items = new Dictionary(); + // contents.Items = new Dictionary(); // while (reader.Read()) // { - // InventoryItem item = new InventoryItem(); + // InventoryItemBase item = new InventoryItemBase(); // item.Folder = folderID; // item.AssetID = UUID.Parse(reader.GetString(0)); // item.AssetType = reader.GetInt32(1); @@ -263,7 +265,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim return BackendResponse.Success; } - public BackendResponse TryFetchFolderList(Uri owner, out List folders) + public BackendResponse TryFetchFolderList(Uri owner, out List folders) { folders = null; //BackendResponse ret; @@ -278,7 +280,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // try // { // dbConnection.Open(); - // folders = new List(); + // folders = new List(); // IDbCommand command = dbConnection.CreateCommand(); // command.CommandText = String.Format("SELECT folderName,type,version,folderID,parentFolderID FROM inventoryfolders WHERE agentID='{0}'", @@ -287,7 +289,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // while (reader.Read()) // { - // InventoryFolder folder = new InventoryFolder(); + // InventoryFolderWithChildren folder = new InventoryFolderWithChildren(); // folder.Owner = ownerID; // folder.Children = null; // This call does not create a folder hierarchy // folder.Name = reader.GetString(0); @@ -322,7 +324,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim { inventory = null; //BackendResponse ret; - //List folders; + //List folders; //UUID ownerID; //ret = TryFetchFolderList(owner, out folders); @@ -331,8 +333,8 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim //{ // // Add the retrieved folders to the inventory collection // inventory = new InventoryCollection(); - // inventory.Folders = new Dictionary(folders.Count); - // foreach (InventoryFolder folder in folders) + // inventory.Folders = new Dictionary(folders.Count); + // foreach (InventoryFolderWithChildren folder in folders) // inventory.Folders[folder.ID] = folder; // // Fetch inventory items @@ -354,11 +356,11 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // reader = command.ExecuteReader(); // inventory.UserID = ownerID; - // inventory.Items = new Dictionary(); + // inventory.Items = new Dictionary(); // while (reader.Read()) // { - // InventoryItem item = new InventoryItem(); + // InventoryItemBase item = new InventoryItemBase(); // item.Owner = ownerID; // item.AssetID = UUID.Parse(reader.GetString(0)); // item.AssetType = reader.GetInt32(1); @@ -403,7 +405,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim return BackendResponse.Success; } - public BackendResponse TryFetchActiveGestures(Uri owner, out List gestures) + public BackendResponse TryFetchActiveGestures(Uri owner, out List gestures) { gestures = null; //BackendResponse ret; @@ -429,7 +431,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // while (reader.Read()) // { - // InventoryItem item = new InventoryItem(); + // InventoryItemBase item = new InventoryItemBase(); // item.Owner = ownerID; // item.AssetType = (int)AssetType.Gesture; // item.Flags = (uint)1; @@ -473,75 +475,24 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim return BackendResponse.Success; } - public BackendResponse TryCreateItem(Uri owner, InventoryItem item) + public BackendResponse TryCreateItem(Uri owner, InventoryItemBase item) { - //BackendResponse ret; + BackendResponse ret; - //using (MySqlConnection dbConnection = new MySqlConnection(m_openSimConfig.GetString("inventory_database_connect"))) - //{ - // try - // { - // dbConnection.Open(); + if (m_inventoryService.AddItem(item)) + { + ret = BackendResponse.Success; + } + else + { + ret = BackendResponse.Failure; + } - // MySqlCommand command = new MySqlCommand( - // "REPLACE INTO inventoryitems (assetID,assetType,inventoryName,inventoryDescription,inventoryNextPermissions," + - // "inventoryCurrentPermissions,invType,creatorID,inventoryBasePermissions,inventoryEveryOnePermissions,salePrice,saleType," + - // "creationDate,groupID,groupOwned,flags,inventoryID,avatarID,parentFolderID,inventoryGroupPermissions) VALUES " + - - // "(?assetID,?assetType,?inventoryName,?inventoryDescription,?inventoryNextPermissions,?inventoryCurrentPermissions,?invType," + - // "?creatorID,?inventoryBasePermissions,?inventoryEveryOnePermissions,?salePrice,?saleType,?creationDate,?groupID,?groupOwned," + - // "?flags,?inventoryID,?avatarID,?parentFolderID,?inventoryGroupPermissions)", dbConnection); - - // command.Parameters.AddWithValue("?assetID", item.AssetID.ToString()); - // command.Parameters.AddWithValue("?assetType", item.AssetType); - // command.Parameters.AddWithValue("?inventoryName", item.Name); - // command.Parameters.AddWithValue("?inventoryDescription", item.Description); - // command.Parameters.AddWithValue("?inventoryNextPermissions", item.NextPermissions); - // command.Parameters.AddWithValue("?inventoryCurrentPermissions", item.CurrentPermissions); - // command.Parameters.AddWithValue("?invType", item.InvType); - // command.Parameters.AddWithValue("?creatorID", item.Creator.ToString()); - // command.Parameters.AddWithValue("?inventoryBasePermissions", item.BasePermissions); - // command.Parameters.AddWithValue("?inventoryEveryOnePermissions", item.EveryOnePermissions); - // command.Parameters.AddWithValue("?salePrice", item.SalePrice); - // command.Parameters.AddWithValue("?saleType", item.SaleType); - // command.Parameters.AddWithValue("?creationDate", item.CreationDate); - // command.Parameters.AddWithValue("?groupID", item.GroupID.ToString()); - // command.Parameters.AddWithValue("?groupOwned", item.GroupOwned); - // command.Parameters.AddWithValue("?flags", item.Flags); - // command.Parameters.AddWithValue("?inventoryID", item.ID); - // command.Parameters.AddWithValue("?avatarID", item.Owner); - // command.Parameters.AddWithValue("?parentFolderID", item.Folder); - // command.Parameters.AddWithValue("?inventoryGroupPermissions", item.GroupPermissions); - - // int rowsAffected = command.ExecuteNonQuery(); - // if (rowsAffected == 1) - // { - // ret = BackendResponse.Success; - // } - // else if (rowsAffected == 2) - // { - // m_log.Info("[OPENSIMINVENTORYSTORAGE]: Replaced inventory item " + item.ID.ToString()); - // ret = BackendResponse.Success; - // } - // else - // { - // m_log.ErrorFormat("[OPENSIMINVENTORYSTORAGE]: MySQL REPLACE query affected {0} rows", rowsAffected); - // ret = BackendResponse.Failure; - // } - // } - // catch (MySqlException ex) - // { - // m_log.Error("[OPENSIMINVENTORYSTORAGE]: Connection to MySQL backend failed: " + ex.Message); - // ret = BackendResponse.Failure; - // } - //} - - //m_server.MetricsProvider.LogInventoryCreate(EXTENSION_NAME, ret, owner, false, DateTime.Now); - //return ret; - return BackendResponse.Success; + m_server.MetricsProvider.LogInventoryCreate(EXTENSION_NAME, ret, owner, false, DateTime.Now); + return ret; } - public BackendResponse TryCreateFolder(Uri owner, InventoryFolder folder) + public BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder) { //BackendResponse ret; @@ -590,7 +541,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim return BackendResponse.Success; } - public BackendResponse TryCreateInventory(Uri owner, InventoryFolder rootFolder) + public BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder) { return TryCreateFolder(owner, rootFolder); } @@ -692,60 +643,19 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim public BackendResponse TryPurgeFolder(Uri owner, UUID folderID) { - //BackendResponse ret; - //UUID ownerID; + BackendResponse ret; - //if (Utils.TryGetOpenSimUUID(owner, out ownerID)) - //{ - // using (MySqlConnection dbConnection = new MySqlConnection(m_openSimConfig.GetString("inventory_database_connect"))) - // { - // try - // { - // dbConnection.Open(); + if (m_inventoryService.PurgeFolder(m_inventoryService.GetInventoryFolder(folderID))) + { + ret = BackendResponse.Success; + } + else + { + ret = BackendResponse.Failure; + } - // #region Delete items - - // MySqlCommand command = new MySqlCommand( - // "DELETE FROM inventoryitems WHERE parentFolderID=?parentFolderID AND avatarID=?avatarID", dbConnection); - - // command.Parameters.AddWithValue("?parentFolderID", folderID.ToString()); - // command.Parameters.AddWithValue("?avatarID", ownerID.ToString()); - - // int rowsAffected = command.ExecuteNonQuery(); - - // #endregion Delete items - - // #region Delete folders - - // command = new MySqlCommand( - // "DELETE FROM inventoryfolders WHERE parentFolderID=?parentFolderID AND agentID=?agentID", dbConnection); - - // command.Parameters.AddWithValue("?parentFolderID", folderID.ToString()); - // command.Parameters.AddWithValue("?agentID", ownerID.ToString()); - - // rowsAffected += command.ExecuteNonQuery(); - - // #endregion Delete folders - - // m_log.DebugFormat("[OPENSIMINVENTORYSTORAGE]: Deleted {0} inventory objects from MySQL in a folder purge", rowsAffected); - - // ret = BackendResponse.Success; - // } - // catch (MySqlException ex) - // { - // m_log.Error("[OPENSIMINVENTORYSTORAGE]: Connection to MySQL backend failed: " + ex.Message); - // ret = BackendResponse.Failure; - // } - // } - //} - //else - //{ - // ret = BackendResponse.NotFound; - //} - - //m_server.MetricsProvider.LogInventoryPurgeFolder(EXTENSION_NAME, ret, owner, folderID, DateTime.Now); - //return ret; - return BackendResponse.Success; + m_server.MetricsProvider.LogInventoryPurgeFolder(EXTENSION_NAME, ret, owner, folderID, DateTime.Now); + return ret; } public int ForEach(Action action, int start, int count) @@ -798,7 +708,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim public void Initialise(AssetInventoryServer server) { - //m_server = server; + m_server = server; m_openSimConfig = server.ConfigFile.Configs["OpenSim"]; try diff --git a/OpenSim/Grid/AssetInventoryServer/Plugins/Simple/SimpleInventoryStoragePlugin.cs b/OpenSim/Grid/AssetInventoryServer/Plugins/Simple/SimpleInventoryStoragePlugin.cs index cab8700921..4010818d00 100644 --- a/OpenSim/Grid/AssetInventoryServer/Plugins/Simple/SimpleInventoryStoragePlugin.cs +++ b/OpenSim/Grid/AssetInventoryServer/Plugins/Simple/SimpleInventoryStoragePlugin.cs @@ -44,7 +44,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); AssetInventoryServer server; Dictionary inventories = new Dictionary(); - Dictionary> activeGestures = new Dictionary>(); + Dictionary> activeGestures = new Dictionary>(); Utils.InventoryItemSerializer itemSerializer = new Utils.InventoryItemSerializer(); Utils.InventoryFolderSerializer folderSerializer = new Utils.InventoryFolderSerializer(); @@ -54,7 +54,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple #region Required Interfaces - public BackendResponse TryFetchItem(Uri owner, UUID itemID, out InventoryItem item) + public BackendResponse TryFetchItem(Uri owner, UUID itemID, out InventoryItemBase item) { item = null; BackendResponse ret; @@ -69,7 +69,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple return ret; } - public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolder folder) + public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder) { folder = null; BackendResponse ret; @@ -90,25 +90,25 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple BackendResponse ret; InventoryCollection collection; - InventoryFolder folder; + InventoryFolderWithChildren folder; if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder)) { contents = new InventoryCollection(); contents.UserID = collection.UserID; - contents.Folders = new Dictionary(); - contents.Items = new Dictionary(); + contents.Folders = new Dictionary(); + contents.Items = new Dictionary(); - foreach (InventoryBase invBase in folder.Children.Values) + foreach (InventoryNodeBase invBase in folder.Children.Values) { - if (invBase is InventoryItem) + if (invBase is InventoryItemBase) { - InventoryItem invItem = invBase as InventoryItem; + InventoryItemBase invItem = invBase as InventoryItemBase; contents.Items.Add(invItem.ID, invItem); } else { - InventoryFolder invFolder = invBase as InventoryFolder; + InventoryFolderWithChildren invFolder = invBase as InventoryFolderWithChildren; contents.Folders.Add(invFolder.ID, invFolder); } } @@ -124,7 +124,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple return ret; } - public BackendResponse TryFetchFolderList(Uri owner, out List folders) + public BackendResponse TryFetchFolderList(Uri owner, out List folders) { folders = null; BackendResponse ret; @@ -132,7 +132,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple InventoryCollection collection; if (inventories.TryGetValue(owner, out collection)) { - folders = new List(collection.Folders.Values); + folders = new List(collection.Folders.Values); return BackendResponse.Success; } else @@ -158,7 +158,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple return ret; } - public BackendResponse TryFetchActiveGestures(Uri owner, out List gestures) + public BackendResponse TryFetchActiveGestures(Uri owner, out List gestures) { gestures = null; BackendResponse ret; @@ -172,7 +172,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple return ret; } - public BackendResponse TryCreateItem(Uri owner, InventoryItem item) + public BackendResponse TryCreateItem(Uri owner, InventoryItemBase item) { BackendResponse ret; @@ -180,7 +180,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple if (inventories.TryGetValue(owner, out collection)) { // Delete this item first if it already exists - InventoryItem oldItem; + InventoryItemBase oldItem; if (collection.Items.TryGetValue(item.ID, out oldItem)) TryDeleteItem(owner, item.ID); @@ -193,7 +193,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple lock (collection) collection.Items[item.ID] = item; // Add the item to its parent folder - InventoryFolder parent; + InventoryFolderWithChildren parent; if (collection.Folders.TryGetValue(item.Folder, out parent)) lock (parent.Children) parent.Children.Add(item.ID, item); @@ -221,7 +221,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple return ret; } - public BackendResponse TryCreateFolder(Uri owner, InventoryFolder folder) + public BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder) { BackendResponse ret; @@ -229,7 +229,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple if (inventories.TryGetValue(owner, out collection)) { // Delete this folder first if it already exists - InventoryFolder oldFolder; + InventoryFolderWithChildren oldFolder; if (collection.Folders.TryGetValue(folder.ID, out oldFolder)) TryDeleteFolder(owner, folder.ID); @@ -242,7 +242,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple lock (collection) collection.Folders[folder.ID] = folder; // Add the folder to its parent folder - InventoryFolder parent; + InventoryFolderWithChildren parent; if (collection.Folders.TryGetValue(folder.ParentID, out parent)) lock (parent.Children) parent.Children.Add(folder.ID, folder); @@ -263,7 +263,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple return ret; } - public BackendResponse TryCreateInventory(Uri owner, InventoryFolder rootFolder) + public BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder) { BackendResponse ret; @@ -273,9 +273,9 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple { InventoryCollection collection = new InventoryCollection(); collection.UserID = rootFolder.Owner; - collection.Folders = new Dictionary(); + collection.Folders = new Dictionary(); collection.Folders.Add(rootFolder.ID, rootFolder); - collection.Items = new Dictionary(); + collection.Items = new Dictionary(); inventories.Add(owner, collection); @@ -318,11 +318,11 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple BackendResponse ret; InventoryCollection collection; - InventoryItem item; + InventoryItemBase item; if (inventories.TryGetValue(owner, out collection) && collection.Items.TryGetValue(itemID, out item)) { // Remove the item from its parent folder - InventoryFolder parent; + InventoryFolderWithChildren parent; if (collection.Folders.TryGetValue(item.Folder, out parent)) lock (parent.Children) parent.Children.Remove(itemID); @@ -371,11 +371,11 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple BackendResponse ret; InventoryCollection collection; - InventoryFolder folder; + InventoryFolderWithChildren folder; if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder)) { // Remove the folder from its parent folder - InventoryFolder parent; + InventoryFolderWithChildren parent; if (collection.Folders.TryGetValue(folder.ParentID, out parent)) lock (parent.Children) parent.Children.Remove(folderID); @@ -408,19 +408,19 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple BackendResponse ret; InventoryCollection collection; - InventoryFolder folder; + InventoryFolderWithChildren folder; if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder)) { // Delete all of the folder children - foreach (InventoryBase obj in new List(folder.Children.Values)) + foreach (InventoryNodeBase obj in new List(folder.Children.Values)) { - if (obj is InventoryItem) + if (obj is InventoryItemBase) { - TryDeleteItem(owner, (obj as InventoryItem).ID); + TryDeleteItem(owner, (obj as InventoryItemBase).ID); } else { - InventoryFolder childFolder = obj as InventoryFolder; + InventoryFolderWithChildren childFolder = obj as InventoryFolderWithChildren; TryPurgeFolder(owner, childFolder.ID); TryDeleteFolder(owner, childFolder.ID); } @@ -439,7 +439,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple #endregion Required Interfaces - void SaveItem(InventoryItem item) + void SaveItem(InventoryItemBase item) { string filename = String.Format("{0}-{1}.item", SanitizeFilename(item.Name), item.ID); @@ -453,7 +453,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple } } - void SaveFolder(InventoryFolder folder) + void SaveFolder(InventoryFolderWithChildren folder) { string filename = String.Format("{0}-{1}.folder", SanitizeFilename(folder.Name), folder.ID); @@ -530,42 +530,42 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.Simple if (ownerID != UUID.Zero && owner != null) { // Initialize the active gestures list for this agent - activeGestures.Add(owner, new List()); + activeGestures.Add(owner, new List()); InventoryCollection collection = new InventoryCollection(); collection.UserID = ownerID; // Load all of the folders for this agent string[] folders = Directory.GetFiles(foldername, "*.folder", SearchOption.TopDirectoryOnly); - collection.Folders = new Dictionary(folders.Length); + collection.Folders = new Dictionary(folders.Length); for (int j = 0; j < folders.Length; j++) { - InventoryFolder invFolder = (InventoryFolder)folderSerializer.Deserialize( + InventoryFolderWithChildren invFolder = (InventoryFolderWithChildren)folderSerializer.Deserialize( new FileStream(folders[j], FileMode.Open, FileAccess.Read)); collection.Folders[invFolder.ID] = invFolder; } // Iterate over the folders collection, adding children to their parents - foreach (InventoryFolder invFolder in collection.Folders.Values) + foreach (InventoryFolderWithChildren invFolder in collection.Folders.Values) { - InventoryFolder parent; + InventoryFolderWithChildren parent; if (collection.Folders.TryGetValue(invFolder.ParentID, out parent)) parent.Children[invFolder.ID] = invFolder; } // Load all of the items for this agent string[] files = Directory.GetFiles(foldername, "*.item", SearchOption.TopDirectoryOnly); - collection.Items = new Dictionary(files.Length); + collection.Items = new Dictionary(files.Length); for (int j = 0; j < files.Length; j++) { - InventoryItem invItem = (InventoryItem)itemSerializer.Deserialize( + InventoryItemBase invItem = (InventoryItemBase)itemSerializer.Deserialize( new FileStream(files[j], FileMode.Open, FileAccess.Read)); collection.Items[invItem.ID] = invItem; // Add items to their parent folders - InventoryFolder parent; + InventoryFolderWithChildren parent; if (collection.Folders.TryGetValue(invItem.Folder, out parent)) parent.Children[invItem.ID] = invItem; diff --git a/OpenSim/Grid/AssetInventoryServer/Utils.cs b/OpenSim/Grid/AssetInventoryServer/Utils.cs index cc590513ab..58b0c670eb 100644 --- a/OpenSim/Grid/AssetInventoryServer/Utils.cs +++ b/OpenSim/Grid/AssetInventoryServer/Utils.cs @@ -30,6 +30,7 @@ using System.Globalization; using System.Xml; using System.Xml.Serialization; using OpenMetaverse; +using OpenSim.Framework; using OpenSim.Framework.Servers; namespace OpenSim.Grid.AssetInventoryServer @@ -278,9 +279,9 @@ namespace OpenSim.Grid.AssetInventoryServer return ReadObject_InventoryCollection(true, true); } - public InventoryFolder ReadObject_InventoryFolder(bool isNullable, bool checkType) + public InventoryFolderWithChildren ReadObject_InventoryFolder(bool isNullable, bool checkType) { - InventoryFolder ob = null; + InventoryFolderWithChildren ob = null; if (isNullable && ReadNull()) return null; if (checkType) @@ -292,7 +293,7 @@ namespace OpenSim.Grid.AssetInventoryServer throw CreateUnknownTypeException(t); } - ob = (InventoryFolder)Activator.CreateInstance(typeof(InventoryFolder), true); + ob = (InventoryFolderWithChildren)Activator.CreateInstance(typeof(InventoryFolderWithChildren), true); Reader.MoveToElement(); @@ -373,9 +374,9 @@ namespace OpenSim.Grid.AssetInventoryServer return ob; } - public InventoryItem ReadObject_InventoryItem(bool isNullable, bool checkType) + public InventoryItemBase ReadObject_InventoryItem(bool isNullable, bool checkType) { - InventoryItem ob = null; + InventoryItemBase ob = null; if (isNullable && ReadNull()) return null; if (checkType) @@ -387,7 +388,7 @@ namespace OpenSim.Grid.AssetInventoryServer throw CreateUnknownTypeException(t); } - ob = (InventoryItem)Activator.CreateInstance(typeof(InventoryItem), true); + ob = (InventoryItemBase)Activator.CreateInstance(typeof(InventoryItemBase), true); Reader.MoveToElement(); @@ -585,11 +586,11 @@ namespace OpenSim.Grid.AssetInventoryServer Reader.Skip(); if (ob.@Folders == null) { - ob.@Folders = new System.Collections.Generic.Dictionary(); + ob.@Folders = new System.Collections.Generic.Dictionary(); } if (ob.@Items == null) { - ob.@Items = new System.Collections.Generic.Dictionary(); + ob.@Items = new System.Collections.Generic.Dictionary(); } return ob; } @@ -610,10 +611,10 @@ namespace OpenSim.Grid.AssetInventoryServer } else if (Reader.LocalName == "Items" && Reader.NamespaceURI == "" && !b44) { - System.Collections.Generic.Dictionary o46 = ob.@Items; + System.Collections.Generic.Dictionary o46 = ob.@Items; if (((object)o46) == null) { - o46 = new System.Collections.Generic.Dictionary(); + o46 = new System.Collections.Generic.Dictionary(); ob.@Items = o46; } if (Reader.IsEmptyElement) @@ -634,7 +635,7 @@ namespace OpenSim.Grid.AssetInventoryServer { if (((object)o46) == null) throw CreateReadOnlyCollectionException("System.Collections.Generic.List"); - InventoryItem item = ReadObject_InventoryItem(true, true); + InventoryItemBase item = ReadObject_InventoryItem(true, true); o46.Add(item.ID, item); n47++; } @@ -650,10 +651,10 @@ namespace OpenSim.Grid.AssetInventoryServer } else if (Reader.LocalName == "Folders" && Reader.NamespaceURI == "" && !b43) { - System.Collections.Generic.Dictionary o48 = ob.@Folders; + System.Collections.Generic.Dictionary o48 = ob.@Folders; if (((object)o48) == null) { - o48 = new System.Collections.Generic.Dictionary(); + o48 = new System.Collections.Generic.Dictionary(); ob.@Folders = o48; } if (Reader.IsEmptyElement) @@ -674,7 +675,7 @@ namespace OpenSim.Grid.AssetInventoryServer { if (((object)o48) == null) throw CreateReadOnlyCollectionException("System.Collections.Generic.List"); - InventoryFolder folder = ReadObject_InventoryFolder(true, true); + InventoryFolderWithChildren folder = ReadObject_InventoryFolder(true, true); o48.Add(folder.ID, folder); n49++; } @@ -700,11 +701,11 @@ namespace OpenSim.Grid.AssetInventoryServer } if (ob.@Folders == null) { - ob.@Folders = new System.Collections.Generic.Dictionary(); + ob.@Folders = new System.Collections.Generic.Dictionary(); } if (ob.@Items == null) { - ob.@Items = new System.Collections.Generic.Dictionary(); + ob.@Items = new System.Collections.Generic.Dictionary(); } ReadEndElement(); @@ -793,7 +794,7 @@ namespace OpenSim.Grid.AssetInventoryServer public void WriteRoot_InventoryFolder(object o) { WriteStartDocument(); - InventoryFolder ob = (InventoryFolder)o; + InventoryFolderWithChildren ob = (InventoryFolderWithChildren)o; TopLevelElement(); WriteObject_InventoryFolder(ob, "InventoryFolderBase", "", true, false, true); } @@ -801,7 +802,7 @@ namespace OpenSim.Grid.AssetInventoryServer public void WriteRoot_InventoryItem(object o) { WriteStartDocument(); - InventoryItem ob = (InventoryItem)o; + InventoryItemBase ob = (InventoryItemBase)o; TopLevelElement(); WriteObject_InventoryItem(ob, "InventoryItemBase", "", true, false, true); } @@ -814,7 +815,7 @@ namespace OpenSim.Grid.AssetInventoryServer WriteObject_InventoryCollection(ob, "InventoryCollection", "", true, false, true); } - void WriteObject_InventoryFolder(InventoryFolder ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) + void WriteObject_InventoryFolder(InventoryFolderWithChildren ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) { if (((object)ob) == null) { @@ -824,7 +825,7 @@ namespace OpenSim.Grid.AssetInventoryServer } System.Type type = ob.GetType(); - if (type == typeof(InventoryFolder)) + if (type == typeof(InventoryFolderWithChildren)) { } else { @@ -847,7 +848,7 @@ namespace OpenSim.Grid.AssetInventoryServer if (writeWrappingElem) WriteEndElement(ob); } - void WriteObject_InventoryItem(InventoryItem ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) + void WriteObject_InventoryItem(InventoryItemBase ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem) { if (((object)ob) == null) { @@ -857,7 +858,7 @@ namespace OpenSim.Grid.AssetInventoryServer } System.Type type = ob.GetType(); - if (type == typeof(InventoryItem)) + if (type == typeof(InventoryItemBase)) { } else { @@ -921,7 +922,7 @@ namespace OpenSim.Grid.AssetInventoryServer if (ob.@Folders != null) { WriteStartElement("Folders", "", ob.@Folders); - foreach (InventoryFolder folder in ob.Folders.Values) + foreach (InventoryFolderWithChildren folder in ob.Folders.Values) { WriteObject_InventoryFolder(folder, "InventoryFolderBase", "", true, false, true); } @@ -930,7 +931,7 @@ namespace OpenSim.Grid.AssetInventoryServer if (ob.@Items != null) { WriteStartElement("Items", "", ob.@Items); - foreach (InventoryItem item in ob.Items.Values) + foreach (InventoryItemBase item in ob.Items.Values) { WriteObject_InventoryItem(item, "InventoryItemBase", "", true, false, true); } diff --git a/prebuild.xml b/prebuild.xml index c7ddb2ad91..6c17df40f3 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -919,6 +919,7 @@ +