BritainKnights/Scripts/Engines/Reports/Persistance/PersistanceReader.cs

122 lines
No EOL
2.6 KiB
C#

using System;
using System.IO;
using System.Xml;
namespace Server.Engines.Reports
{
public abstract class PersistanceReader
{
public abstract int GetInt32( string key );
public abstract bool GetBoolean( string key );
public abstract string GetString( string key );
public abstract DateTime GetDateTime( string key );
public abstract bool BeginChildren();
public abstract void FinishChildren();
public abstract bool HasChild{ get; }
public abstract PersistableObject GetChild();
public abstract void ReadDocument( PersistableObject root );
public abstract void Close();
public PersistanceReader()
{
}
}
public class XmlPersistanceReader : PersistanceReader
{
private StreamReader m_Reader;
private XmlTextReader m_Xml;
private string m_Title;
public XmlPersistanceReader( string filePath, string title )
{
m_Reader = new StreamReader( filePath );
m_Xml = new XmlTextReader( m_Reader );
m_Xml.WhitespaceHandling=WhitespaceHandling.None;
m_Title = title;
}
public override int GetInt32( string key )
{
return XmlConvert.ToInt32( m_Xml.GetAttribute( key ) );
}
public override bool GetBoolean( string key )
{
return XmlConvert.ToBoolean( m_Xml.GetAttribute( key ) );
}
public override string GetString( string key )
{
return m_Xml.GetAttribute( key );
}
public override DateTime GetDateTime( string key )
{
string val = m_Xml.GetAttribute( key );
if ( val == null )
return DateTime.MinValue;
return XmlConvert.ToDateTime( val, XmlDateTimeSerializationMode.Local );
}
private bool m_HasChild;
public override bool HasChild
{
get
{
return m_HasChild;
}
}
private bool m_WasEmptyElement;
public override bool BeginChildren()
{
m_HasChild = !m_WasEmptyElement;
m_Xml.Read();
return m_HasChild;
}
public override void FinishChildren()
{
m_Xml.Read();
}
public override PersistableObject GetChild()
{
PersistableType type = PersistableTypeRegistry.Find( m_Xml.Name );
PersistableObject obj = type.Constructor();
m_WasEmptyElement = m_Xml.IsEmptyElement;
obj.Deserialize( this );
m_HasChild = ( m_Xml.NodeType == XmlNodeType.Element );
return obj;
}
public override void ReadDocument( PersistableObject root )
{
Console.Write( "Reports: {0}: Loading...", m_Title );
m_Xml.Read();
m_Xml.Read();
m_HasChild = !m_Xml.IsEmptyElement;
root.Deserialize( this );
Console.WriteLine( "done" );
}
public override void Close()
{
m_Xml.Close();
m_Reader.Close();
}
}
}