/*
* 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;
///
/// Tyep 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);
///
/// 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;
}
}