129 lines
No EOL
3 KiB
C#
129 lines
No EOL
3 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Xml;
|
|
|
|
namespace Server.Engines.Reports
|
|
{
|
|
public abstract class PersistanceWriter
|
|
{
|
|
public abstract void SetInt32( string key, int value );
|
|
public abstract void SetBoolean( string key, bool value );
|
|
public abstract void SetString( string key, string value );
|
|
public abstract void SetDateTime( string key, DateTime value );
|
|
|
|
public abstract void BeginObject( PersistableType typeID );
|
|
public abstract void BeginChildren();
|
|
public abstract void FinishChildren();
|
|
public abstract void FinishObject();
|
|
|
|
public abstract void WriteDocument( PersistableObject root );
|
|
public abstract void Close();
|
|
|
|
public PersistanceWriter()
|
|
{
|
|
}
|
|
}
|
|
|
|
public sealed class XmlPersistanceWriter : PersistanceWriter
|
|
{
|
|
private string m_RealFilePath;
|
|
private string m_TempFilePath;
|
|
|
|
private StreamWriter m_Writer;
|
|
private XmlTextWriter m_Xml;
|
|
private string m_Title;
|
|
|
|
public XmlPersistanceWriter( string filePath, string title )
|
|
{
|
|
m_RealFilePath = filePath;
|
|
m_TempFilePath = Path.ChangeExtension( filePath, ".tmp" );
|
|
|
|
m_Writer = new StreamWriter( m_TempFilePath );
|
|
m_Xml = new XmlTextWriter( m_Writer );
|
|
|
|
m_Title = title;
|
|
}
|
|
|
|
public override void SetInt32( string key, int value )
|
|
{
|
|
m_Xml.WriteAttributeString( key, XmlConvert.ToString( value ) );
|
|
}
|
|
|
|
public override void SetBoolean( string key, bool value )
|
|
{
|
|
m_Xml.WriteAttributeString( key, XmlConvert.ToString( value ) );
|
|
}
|
|
|
|
public override void SetString( string key, string value )
|
|
{
|
|
if ( value != null )
|
|
m_Xml.WriteAttributeString( key, value );
|
|
}
|
|
|
|
public override void SetDateTime( string key, DateTime value )
|
|
{
|
|
if ( value != DateTime.MinValue )
|
|
m_Xml.WriteAttributeString( key, XmlConvert.ToString( value, XmlDateTimeSerializationMode.Local ) );
|
|
}
|
|
|
|
public override void BeginObject( PersistableType typeID )
|
|
{
|
|
m_Xml.WriteStartElement( typeID.Name );
|
|
}
|
|
|
|
public override void BeginChildren()
|
|
{
|
|
}
|
|
|
|
public override void FinishChildren()
|
|
{
|
|
}
|
|
|
|
public override void FinishObject()
|
|
{
|
|
m_Xml.WriteEndElement();
|
|
}
|
|
|
|
public override void WriteDocument( PersistableObject root )
|
|
{
|
|
Console.WriteLine( "Reports: {0}: Save started", m_Title );
|
|
|
|
m_Xml.Formatting = Formatting.Indented;
|
|
m_Xml.IndentChar = '\t';
|
|
m_Xml.Indentation = 1;
|
|
|
|
m_Xml.WriteStartDocument( true );
|
|
|
|
root.Serialize( this );
|
|
|
|
Console.WriteLine( "Reports: {0}: Save complete", m_Title );
|
|
}
|
|
|
|
public override void Close()
|
|
{
|
|
m_Xml.Close();
|
|
m_Writer.Close();
|
|
|
|
try
|
|
{
|
|
string renamed = null;
|
|
|
|
if ( File.Exists( m_RealFilePath ) )
|
|
{
|
|
renamed = Path.ChangeExtension( m_RealFilePath, ".rem" );
|
|
File.Move( m_RealFilePath, renamed );
|
|
File.Move( m_TempFilePath, m_RealFilePath );
|
|
File.Delete( renamed );
|
|
}
|
|
else
|
|
{
|
|
File.Move( m_TempFilePath, m_RealFilePath );
|
|
}
|
|
}
|
|
catch ( Exception ex )
|
|
{
|
|
Console.WriteLine( ex );
|
|
}
|
|
}
|
|
}
|
|
} |