/*
* Copyright (c) Contributors, http://www.openmetaverse.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;
using System.Collections.Generic;
using System.Data;
using libsecondlife;
namespace OpenSim.Framework.Data.MySQL
{
///
/// A MySQL interface for the inventory server
///
class MySQLInventoryData : IInventoryData
{
///
/// The database manager
///
public MySQLManager database;
///
/// Loads and initialises this database plugin
///
public void Initialise()
{
IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname");
string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database");
string settingUsername = GridDataMySqlFile.ParseFileReadValue("username");
string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort);
}
///
/// The name of this DB provider
///
/// Name of DB provider
public string getName()
{
return "MySQL Inventory Data Interface";
}
///
/// Closes this DB provider
///
public void Close()
{
// Do nothing.
}
///
/// Returns the version of this DB provider
///
/// A string containing the DB provider
public string getVersion()
{
return "0.1";
}
///
/// Returns a list of items in a specified folder
///
/// The folder to search
/// A list containing inventory items
public List getInventoryInFolder(LLUUID folderID)
{
try
{
lock (database)
{
Dictionary param = new Dictionary();
param["?uuid"] = folderID.ToStringHyphenated();
IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryItems(reader);
reader.Close();
result.Dispose();
return items;
}
}
catch (Exception e)
{
database.Reconnect();
Console.WriteLine(e.ToString());
return null;
}
}
///
/// Returns a list of the root folders within a users inventory
///
/// The user whos inventory is to be searched
/// A list of folder objects
public List getUserRootFolders(LLUUID user)
{
try
{
lock (database)
{
Dictionary param = new Dictionary();
param["?uuid"] = user.ToStringHyphenated();
param["?zero"] = LLUUID.Zero.ToStringHyphenated();
IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryFolders(reader);
reader.Close();
result.Dispose();
return items;
}
}
catch (Exception e)
{
database.Reconnect();
Console.WriteLine(e.ToString());
return null;
}
}
///
/// Returns the users inventory root folder.
///
///
///
public InventoryFolderBase getUserRootFolder(LLUUID user)
{
try
{
lock (database)
{
Dictionary param = new Dictionary();
param["?uuid"] = user.ToStringHyphenated();
param["?zero"] = LLUUID.Zero.ToStringHyphenated();
IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryFolders(reader);
InventoryFolderBase rootFolder = items[0]; //should only be one folder with parent set to zero (the root one).
reader.Close();
result.Dispose();
return rootFolder;
}
}
catch (Exception e)
{
database.Reconnect();
Console.WriteLine(e.ToString());
return null;
}
}
///
/// Returns a list of folders in a users inventory contained within the specified folder
///
/// The folder to search
/// A list of inventory folders
public List getInventoryFolders(LLUUID parentID)
{
try
{
lock (database)
{
Dictionary param = new Dictionary();
param["?uuid"] = parentID.ToStringHyphenated();
IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryFolders(reader);
reader.Close();
result.Dispose();
return items;
}
}
catch (Exception e)
{
database.Reconnect();
Console.WriteLine(e.ToString());
return null;
}
}
///
/// Returns a specified inventory item
///
/// The item to return
/// An inventory item
public InventoryItemBase getInventoryItem(LLUUID item)
{
try
{
lock (database)
{
Dictionary param = new Dictionary();
param["?uuid"] = item.ToStringHyphenated();
IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryItems(reader);
reader.Close();
result.Dispose();
if (items.Count > 0)
{
return items[0];
}
else
{
return null;
}
}
}
catch (Exception e)
{
database.Reconnect();
Console.WriteLine(e.ToString());
return null;
}
}
///
/// Returns a specified inventory folder
///
/// The folder to return
/// A folder class
public InventoryFolderBase getInventoryFolder(LLUUID folder)
{
try
{
lock (database)
{
Dictionary param = new Dictionary();
param["?uuid"] = folder.ToStringHyphenated();
IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", param);
IDataReader reader = result.ExecuteReader();
List items = database.readInventoryFolders(reader);
reader.Close();
result.Dispose();
if (items.Count > 0)
{
return items[0];
}
else
{
return null;
}
}
}
catch (Exception e)
{
database.Reconnect();
Console.WriteLine(e.ToString());
return null;
}
}
///
/// Adds a specified item to the database
///
/// The inventory item
public void addInventoryItem(InventoryItemBase item)
{
lock (database)
{
database.insertItem(item);
}
}
///
/// Updates the specified inventory item
///
/// Inventory item to update
public void updateInventoryItem(InventoryItemBase item)
{
addInventoryItem(item);
}
///
/// Creates a new inventory folder
///
/// Folder to create
public void addInventoryFolder(InventoryFolderBase folder)
{
lock (database)
{
database.insertFolder(folder);
}
}
///
/// Updates an inventory folder
///
/// Folder to update
public void updateInventoryFolder(InventoryFolderBase folder)
{
addInventoryFolder(folder);
}
}
}