using System;
using System.Text;
using OpenSim.Framework;
using OpenSim.Region.Framework.Scenes;
//using OpenSim.Services.AssetService;
using OpenMetaverse;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
public class InventoryItem : IInventoryItem
{
TaskInventoryItem m_privateItem;
Scene m_rootSceene;
public InventoryItem(Scene rootScene, TaskInventoryItem internalItem)
{
m_rootSceene = rootScene;
m_privateItem = internalItem;
}
// Marked internal, to prevent scripts from accessing the internal type
internal TaskInventoryItem ToTaskInventoryItem()
{
return m_privateItem;
}
///
/// This will attempt to convert from an IInventoryItem to an InventoryItem object
///
///
/// In order for this to work the object which implements IInventoryItem must inherit from InventoryItem, otherwise
/// an exception is thrown.
///
///
/// The interface to upcast
///
///
/// The object backing the interface implementation
///
internal static InventoryItem FromInterface(IInventoryItem i)
{
if(typeof(InventoryItem).IsAssignableFrom(i.GetType()))
{
return (InventoryItem)i;
}
else
{
throw new ApplicationException("[MRM] There is no legal conversion from IInventoryItem to InventoryItem");
}
}
public int Type { get { return m_privateItem.Type; } }
public UUID AssetID { get { return m_privateItem.AssetID; } }
public T RetreiveAsset() where T : OpenMetaverse.Asset, new()
{
AssetBase a = m_rootSceene.AssetService.Get(AssetID.ToString());
T result = new T();
if((sbyte)result.AssetType != a.Type)
throw new ApplicationException("[MRM] The supplied asset class does not match the found asset");
result.AssetData = a.Data;
result.Decode();
return result;
}
}
}