﻿using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace OKHOSTING.ORM.Operations
{
	/// <summary>
	/// Base class for all operations
	/// <para xml:lang="es">
	/// La clase base para todas las operaciones
	/// </para>
	/// </summary>
	public abstract class Operation: IXmlSerializable
	{
		/// <summary>
		/// The datatype that will be affected by the oepration
		/// <para xml:lang="es">
		/// El tipo de datos que se verán afectados por la operación
		/// </para>
		/// </summary>
		public DataType DataType { get; set; }

		#region Xml Serialization

		XmlSchema IXmlSerializable.GetSchema()
		{
			return null;
		}

		public virtual void ReadXml(XmlReader reader)
		{
			reader.MoveToAttribute("DataType");
			DataType = Serializer.ToDataType(reader.Value);
		}

		public virtual void WriteXml(XmlWriter writer)
		{
			writer.WriteAttributeString("Type", GetType().AssemblyQualifiedName);
			writer.WriteAttributeString("DataType", Serializer.ToString(DataType));
		}

		#endregion
	}
}