using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Aitex.UI.RecipeEditor.Core
{
        /// 
        /// Endby condition define
        /// 
        [Serializable]
        [DataContract]
        public enum EndByCondition
        {
            /// 
            /// Reactor temperature greate than
            /// 
            [EnumMember]
            PmTempGt,
            /// 
            /// Reactor temperature less than
            /// 
            [EnumMember]
            PmTempLt,
            /// 
            /// Reactor A zone temperature greate than
            /// 
            [EnumMember]
            AZoneTempGt,
            /// 
            /// Reactor A zone temperature less than
            ///  
            [EnumMember]
            AZoneTempLt,
            /// 
            /// Reactor B zone temperature greate than
            ///  
            [EnumMember]
            BZoneTempGt,
            /// 
            /// Reactor B zone temperature less than
            ///  
            [EnumMember]
            BZoneTempLt,
            /// 
            /// Reactor C zone temperature greate than
            ///  
            [EnumMember]
            CZoneTempGt,
            /// 
            /// Reactor C zone temperature less than
            ///  
            [EnumMember]
            CZoneTempLt,
            /// 
            /// Reactor D zone temperature greate than
            ///  
            [EnumMember]
            DZoneTempGt,
            /// 
            /// Reactor D zone temperature less than
            ///  
            [EnumMember]
            DZoneTempLt,
            /// 
            /// Reactor pressure greate than
            ///  
            [EnumMember]
            PmPresGt,
            /// 
            /// Reactorpressure less than
            ///  
            [EnumMember]
            PmPresLt,
            /// 
            /// TC value great than
            /// 
            [EnumMember]
            TcGt,
            /// 
            /// TC value less than
            /// 
            [EnumMember]
            TcLt,
            /// 
            /// spindle speed great than
            /// 
            [EnumMember]
            RpmGt,
            /// 
            /// spindle speed less than
            /// 
            [EnumMember]
            RpmLt,
    }
        public class CustomXmlSerializer
        {
            static public void Serialize(T t, string fileName)
            {
                using (FileStream fileWriter = new FileStream(fileName, FileMode.Create))
                using (XmlWriter writer = XmlTextWriter.Create(fileWriter))
                {
                    XmlSerializer serializer = new XmlSerializer(t.GetType());
                    serializer.Serialize(writer, t);
                    writer.Flush();
                }
            }
            static public string Serialize(T t)
            {
                StringBuilder buffer = new StringBuilder();
                using (StringWriter writer = new StringWriter(buffer))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    serializer.Serialize(writer, t);
                }
                return buffer.ToString();
            }
            static public T Deserialize(string xmlString)
            {
                if (string.IsNullOrWhiteSpace(xmlString))
                    throw new ArgumentNullException("xmlString");
                using (StringReader reader = new StringReader(xmlString))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    return (T)serializer.Deserialize(reader);
                }
            }
            static public T Deserialize(Stream streamReader)
            {
                if (streamReader == null)
                    throw new ArgumentNullException("streamReader");
                if (streamReader.Length <= 0)
                    throw new EndOfStreamException("The stream is blank");
                using (XmlReader reader = XmlTextReader.Create(streamReader))
                {
                    XmlSerializer deserializer = new XmlSerializer(typeof(T));
                    return (T)deserializer.Deserialize(reader);
                }
            }
            static public T Deserialize(FileInfo fi)
            {
                if (fi == null)
                    throw new ArgumentNullException("fi");
                if (!fi.Exists)
                    throw new FileNotFoundException(fi.FullName);
                using (FileStream fileReader = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read))
                    return Deserialize(fileReader);
            }
        }
}