using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using DataWarehouse.Interfaces;
namespace DataWarehouse
{
/// <summary>
/// Wrapper for database interface
/// </summary>
public class DatabaseInterface
{
/// <summary>
/// User
/// </summary>
IUser user;
/// <summary>
/// Data
/// </summary>
IDatabaseInterface data;
/// <summary>
/// Finder of database
/// </summary>
static IDatabaseCoordinator coordinator;
/// <summary>
/// Consructor
/// </summary>
/// <param name="user">User</param>
/// <param name="data">Data</param>
public DatabaseInterface(IUser user, IDatabaseInterface data)
{
this.user = user;
this.data = data;
}
/// <summary>
/// Finder of database
/// </summary>
static public IDatabaseCoordinator Coordinator
{
get
{
return coordinator;
}
set
{
coordinator = value;
}
}
/// <summary>
/// Get root nodes
/// </summary>
/// <param name="ext">Extesions</param>
/// <returns>Root noders</returns>
public IDirectory[] GetRoots(string[] ext)
{
return data.GetRoots(user.Login, user.Password, user.Key, ext);
}
/// <summary>
/// Refreshes itself
/// </summary>
/// <param name="ext">Extansions</param>
public void Refresh(string[] ext)
{
data.Refresh(user.Login, user.Password, user.Key, ext);
}
/// <summary>
/// Gets data
/// </summary>
/// <param name="id">Id of data</param>
/// <param name="ext">Extention of data</param>
/// <returns>The data</returns>
public virtual byte[] GetData(string id, ref string ext)
{
return data.GetData(user.Login, user.Password, user.Key, id, ref ext);
}
/* public static void CopyDirectory(XmlElement srcDirElement, string dstDirId, DatabaseInterface src, DatabaseInterface dst,
INameConverter converter)
{
XmlNodeList dataList = srcDirElement.GetElementsByTagName("Binary");
foreach (XmlElement e in dataList)
{
if (e.ParentNode != srcDirElement)
{
continue;
}
copyData(e, dstDirId, src, dst, converter);
}
XmlNodeList dirList = srcDirElement.GetElementsByTagName("BinaryNode");
foreach (XmlElement e in dirList)
{
if (e.ParentNode != srcDirElement)
{
continue;
}
string name = converter.CreateName(e);
string descr = findDescription(e);
string ext = e.Attributes["BinaryNodeExtention"].Value;
string id = dst.AddDirectory(dstDirId, name, descr, ext);
CopyDirectory(e, id, src, dst, converter);
}
}*/
/// <summary>
/// Gets items of database
/// </summary>
/// <param name="extention">Extention of items</param>
/// <returns>Table of items</returns>
public IDictionary<object, object> GetItems(string extention)
{
return data.GetItems(user.Login, user.Password, user.Key, extention);
}
/* /// <summary>
/// Copy of database
/// </summary>
/// <param name="src">Source</param>
/// <param name="dst">Destination</param>
/// <param name="converter">Converter of names</param>
public static void Copy(DatabaseInterface src, DatabaseInterface dst, INameConverter converter)
{
XmlDocument doc = src.GetTree(null);
XmlElement srcE = doc.GetElementsByTagName("BinaryNode")[0] as XmlElement;
XmlDocument td = dst.GetTree(null);
XmlElement te = td.GetElementsByTagName("BinaryNode")[0] as XmlElement;
string id = te.Attributes["BinaryNodeId"].Value;
CopyDirectory(srcE, id, src, dst, converter);
}
private static string findDescription(XmlElement e)
{
XmlNodeList l = e.GetElementsByTagName("Description");
foreach (XmlElement el in l)
{
if (el.ParentNode == e)
{
return el.InnerText;
}
}
return "";
}
private static void copyData(XmlElement e, string tarDir, DatabaseInterface src, DatabaseInterface dst,
INameConverter conveter)
{
string name = conveter.CreateName(e);
string id = e.Attributes["BinaryId"].Value;
string ext = null;
byte[] buff = src.GetData(id, ref ext);
dst.AddData(tarDir, name, findDescription(e), buff, ext);
}*/
}
}