/*
* Namespace Summary
* Copyright (C) 2005+ Bogdan Damian Constantin
* E-Mail: damianbcpetro@gmail.com
* WEB: http://www.sourceforge.net/projects/dataholder
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License 2.1 or later, as
* published by the Free Software Foundation. See the included License.txt
* or http://www.gnu.org/copyleft/lesser.html for details.
*
*/
using System;
using System.Collections;
namespace DataHolder.DataPersistence.DBAProvider{
/// <summary>
/// Summary description for PersistenceManager.
/// </summary>
public class PersistenceManager
{
private static Hashtable GEProperties = null;
/// <summary>
/// Init the persistence manager
/// </summary>
/// <param name="nrOfEntities"> an estimated number of entitties </param>
/// <param name="p_CommandProvides"> the command provider (MSQL, MySQL etc..) must not be null</param>
public static void InitPersistenceManager(int nrOfEntities)
{
GEProperties = new Hashtable(nrOfEntities);
}
public static GenericDataPropertiesHolder GetProperty(Type genericDataType)
{
return GetProperty(genericDataType, DefaultName);
}
public static GenericDataPropertiesHolder GetProperty(Type genericDataType, string PropertyName)
{
if(PropertyName == null)
PropertyName = DefaultName;
CheckProperties();
Hashtable tb = (Hashtable)GEProperties[genericDataType];
if(tb == null)
throw new Exception("The type" + genericDataType.ToString() + " has no DBA properties set!");
GenericDataPropertiesHolder deph = (GenericDataPropertiesHolder)tb[PropertyName];
if(deph == null)
throw new Exception("The type" + genericDataType.ToString() + " has no DBA properties set!");
else
return deph;
}
public static GenericDataPropertiesHolder [] GetAllProperties(Type genericDataType, string PropertiesIdentifier)
{
ArrayList needProps = new ArrayList(2);
GetAllProperties(genericDataType, PropertiesIdentifier, ref needProps);
GenericDataPropertiesHolder [] tempgdph = new GenericDataPropertiesHolder[needProps.Count];
needProps.CopyTo(tempgdph);
needProps.Clear();
return tempgdph;
}
private static void GetAllProperties(Type genericDataType, string PropertyName, ref ArrayList needProps)
{
GenericDataPropertiesHolder gdph = GetProperty(genericDataType, PropertyName);
if(needProps.Contains(gdph))
return;
needProps.Add(gdph);
DataHolder.Containers.Property.PropertyCollection pcoll = DataHolder.Containers.GenericData.TCollection.GetProperties(genericDataType);
if(gdph.TypeDataRelations != null)
{
foreach(DataRelation dr in gdph.TypeDataRelations)
{
if(dr.LoadWithMaster || dr.SaveWithMaster)
{
DataHolder.Containers.Property.GenericDataProperty gdtp = pcoll[dr.PropertyName];
if(gdtp == null)
throw new Exception("There is now property with name " + dr.PropertyName + " for type " + genericDataType.ToString());
Type proptype = gdtp.PropertyType;
if(proptype.IsSubclassOf(typeof(Containers.GenericDataCollection)))
{
Containers.GenericDataCollection tmpcoll = (Containers.GenericDataCollection)Activator.CreateInstance(proptype);
proptype = tmpcoll.GenericDataType;
tmpcoll.Dispose();
}
GetAllProperties(proptype, PropertyName, ref needProps);
gdtp = null;
}
}
}
}
public static string DefaultName
{
get
{
return "Default";
}
}
private static void CheckProperties()
{
if(GEProperties == null)
throw new Exception("DBA Properties are not ititialized ");
}
public static void AddProperty(GenericDataPropertiesHolder Prop)
{
AddProperty(Prop, DefaultName);
}
public static void AddProperty(GenericDataPropertiesHolder Prop, string PropHolderName)
{
Hashtable tb = (Hashtable)GEProperties[Prop.DataType];
if(tb == null)
{
tb = new Hashtable();
GEProperties[Prop.DataType] = tb;
}
tb[PropHolderName] = Prop;
}
}
}
|