/* * 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 OpenSim 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 System.Collections; using System.Collections.Generic; using System.Xml.Serialization; using libsecondlife; namespace OpenSim.Framework { /// /// Inventory Item - contains all the properties associated with an individual inventory piece. /// public class InventoryItemBase { /// /// A UUID containing the ID for the inventory item itself /// public LLUUID inventoryID; /// /// The UUID of the associated asset on the asset server /// public LLUUID assetID; /// /// This is an enumerated value determining the type of asset (eg Notecard, Sound, Object, etc) /// public int assetType; /// /// The type of inventory item. (Can be slightly different to the asset type /// public int invType; /// /// The folder this item is contained in /// public LLUUID parentFolderID; /// /// The owner of this inventory item /// public LLUUID avatarID; /// /// The creator of this item /// public LLUUID creatorsID; /// /// The name of the inventory item (must be less than 64 characters) /// public string inventoryName; /// /// The description of the inventory item (must be less than 64 characters) /// public string inventoryDescription; /// /// A mask containing the permissions for the next owner (cannot be enforced) /// public uint inventoryNextPermissions; /// /// A mask containing permissions for the current owner (cannot be enforced) /// public uint inventoryCurrentPermissions; /// /// /// public uint inventoryBasePermissions; /// /// /// public uint inventoryEveryOnePermissions; } /// /// A Class for folders which contain users inventory /// public class InventoryFolderBase { /// /// The name of the folder (64 characters or less) /// public string name; /// /// The agent who's inventory this is contained by /// public LLUUID agentID; /// /// The folder this folder is contained in /// public LLUUID parentID; /// /// The UUID for this folder /// public LLUUID folderID; /// /// Type of items normally stored in this folder /// public short type; /// /// /// public ushort version; } /// /// An interface for accessing inventory data from a storage server /// public interface IInventoryData { /// /// Initialises the interface /// void Initialise(); /// /// Closes the interface /// void Close(); /// /// The plugin being loaded /// /// A string containing the plugin name string getName(); /// /// The plugins version /// /// A string containing the plugin version string getVersion(); /// /// Returns a list of inventory items contained within the specified folder /// /// The UUID of the target folder /// A List of InventoryItemBase items List getInventoryInFolder(LLUUID folderID); /// /// Returns a list of the root folders within a users inventory /// /// The user whos inventory is to be searched /// A list of folder objects List getUserRootFolders(LLUUID user); /// /// Returns the users inventory root folder. /// /// The UUID of the user who is having inventory being returned /// Root inventory folder, null if no root inventory folder was found InventoryFolderBase getUserRootFolder(LLUUID user); /// /// Returns a list of inventory folders contained in the folder 'parentID' /// /// The folder to get subfolders for /// A list of inventory folders List getInventoryFolders(LLUUID parentID); /// /// Returns an inventory item by its UUID /// /// The UUID of the item to be returned /// A class containing item information InventoryItemBase getInventoryItem(LLUUID item); /// /// Returns a specified inventory folder by its UUID /// /// The UUID of the folder to be returned /// A class containing folder information InventoryFolderBase getInventoryFolder(LLUUID folder); /// /// Creates a new inventory item based on item /// /// The item to be created void addInventoryItem(InventoryItemBase item); /// /// Updates an inventory item with item (updates based on ID) /// /// The updated item void updateInventoryItem(InventoryItemBase item); /// /// /// /// void deleteInventoryItem(LLUUID item); /// /// Adds a new folder specified by folder /// /// The inventory folder void addInventoryFolder(InventoryFolderBase folder); /// /// Updates a folder based on its ID with folder /// /// The inventory folder void updateInventoryFolder(InventoryFolderBase folder); /// /// Updates a folder based on its ID with folder /// /// The inventory folder void moveInventoryFolder(InventoryFolderBase folder); /// /// Deletes a folder based on its ID with folder /// /// The id of the folder void deleteInventoryFolder(LLUUID folder); } public class InventoryCollection { public List Folders; public List AllItems; public LLUUID UserID; public InventoryCollection() { Folders = new List(); AllItems = new List(); } public InventoryCollection(List folders, List allItems) { Folders = folders; AllItems = allItems; } } /* * .Net has some issues, serializing a dictionary, so we cannot reuse the InventoryFolder * class defined in Communications.Framework.Communications.Caches. So we serialize/deserialize * into this simpler class, and then use that. */ [XmlRoot(ElementName = "inventory", IsNullable = true)] public class SerializableInventory { [XmlRoot(ElementName = "folder", IsNullable = true)] public class SerializableFolder : InventoryFolderBase { [XmlArray(ElementName = "folders", IsNullable = true)] [XmlArrayItem(ElementName = "folder", IsNullable = true, Type = typeof (SerializableFolder))] public ArrayList SubFolders; [XmlArray(ElementName = "items", IsNullable = true)] [XmlArrayItem(ElementName = "item", IsNullable = true, Type = typeof (InventoryItemBase))] public ArrayList Items; } [XmlElement(ElementName = "folder", IsNullable = true)] public SerializableFolder root; } }