必须填写至少10个字的日志
nnhy 编写于 2012-07-27 18:48:21
X
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;

namespace XCoder
{
    public class XConfig
    {
        #region 属性
        private String _ConnName;
        /// <summary>链接名</summary>
        public String ConnName
        {
            get
            {
                if (String.IsNullOrEmpty(_ConnName)) _ConnName = "ConnName";
                return _ConnName;
            }
            set { _ConnName = value; }
        }

        private String _Prefix;
        /// <summary>前缀</summary>
        public String Prefix
        {
            get { return _Prefix; }
            set { _Prefix = value; }
        }

        private String _NameSpace;
        /// <summary>命名空间</summary>
        public String NameSpace
        {
            get { return String.IsNullOrEmpty(_NameSpace) ? EntityConnName : _NameSpace; }
            set { _NameSpace = value; }
        }

        private String _TemplateName;
        /// <summary>模板名</summary>
        public String TemplateName
        {
            get { return _TemplateName; }
            set { _TemplateName = value; }
        }

        private String _OutputPath;
        /// <summary>输出目录</summary>
        public String OutputPath
        {
            get { return String.IsNullOrEmpty(_OutputPath) ? EntityConnName : _OutputPath; }
            set { _OutputPath = value; }
        }

        private String _EntityConnName;
        /// <summary>实体链接名</summary>
        public String EntityConnName
        {
            get { return String.IsNullOrEmpty(_EntityConnName) ? ConnName : _EntityConnName; }
            set { _EntityConnName = value; }
        }

        private String _BaseClass;
        /// <summary>实体基类</summary>
        public String BaseClass
        {
            get
            {
                if (String.IsNullOrEmpty(_BaseClass)) _BaseClass = "Entity";
                return _BaseClass;
            }
            set { _BaseClass = value; }
        }

        private Boolean _RenderGenEntity;
        /// <summary>生成泛型实体类</summary>
        public Boolean RenderGenEntity
        {
            get { return _RenderGenEntity; }
            set { _RenderGenEntity = value; }
        }

        private Boolean _AutoCutPrefix;
        /// <summary>自动去除前缀</summary>
        public Boolean AutoCutPrefix
        {
            get { return _AutoCutPrefix; }
            set { _AutoCutPrefix = value; }
        }

        private Boolean _CutTableName;
        /// <summary>是否自动去除字段前面的表名</summary>
        public Boolean AutoCutTableName { get { return _CutTableName; } set { _CutTableName = value; } }

        private Boolean _AutoFixWord;
        /// <summary>自动纠正大小写</summary>
        public Boolean AutoFixWord
        {
            get { return _AutoFixWord; }
            set { _AutoFixWord = value; }
        }

        private Boolean _UseCNFileName;
        /// <summary>使用中文文件名</summary>
        public Boolean UseCNFileName { get { return _UseCNFileName; } set { _UseCNFileName = value; } }

        private Boolean _UseID;
        /// <summary>强制使用ID</summary>
        public Boolean UseID { get { return _UseID; } set { _UseID = value; } }

        private Boolean _UseHeadTemplate;
        /// <summary>使用头部模版</summary>
        public Boolean UseHeadTemplate
        {
            get { return _UseHeadTemplate; }
            set { _UseHeadTemplate = value; }
        }

        private String _HeadTemplate;
        /// <summary>头部模版</summary>
        public String HeadTemplate
        {
            get { return _HeadTemplate; }
            set { _HeadTemplate = value; }
        }

        private Boolean _Debug;
        /// <summary>调试</summary>
        public Boolean Debug
        {
            get { return _Debug; }
            set { _Debug = value; }
        }

        private DateTime _LastUpdate;
        /// <summary>最后更新时间</summary>
        public DateTime LastUpdate
        {
            get { return _LastUpdate; }
            set { _LastUpdate = value; }
        }

        private Dictionary<String, String> _Items;
        /// <summary> 字典属性</summary>
        public Dictionary<String, String> Items
        {
            get { return _Items; }
            set { _Items = value; }
        }

        #endregion

        #region 全局
        private static XConfig _Current;
        /// <summary>实例</summary>
        public static XConfig Current
        {
            get { return _Current ?? (_Current = Load()); }
            set { _Current = value; }
        }
        #endregion

        #region 加载/保存
        public static XConfig Load()
        {
            if (!File.Exists(DefaultFile)) return Create();

            //XmlSerializer xml = new XmlSerializer(typeof(XConfig));
            NewLife.Xml.XmlReaderX xml = new NewLife.Xml.XmlReaderX();
            using (XmlReader xr = XmlReader.Create(DefaultFile))
            {
                try
                {
                    Object obj = null;
                    xml.Reader = xr;
                    if (xml.ReadObject(typeof(XConfig), ref obj, null) && obj != null)
                    {
                        return obj as XConfig;
                    }
                    return Create();
                    //return xml.Deserialize(stream) as XConfig;
                }
                catch { return Create(); }
            }
        }

        static XConfig Create()
        {
            XConfig config = new XConfig();

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("/*");
            sb.AppendLine(" * XCoder v<#=Version#>");
            sb.AppendLine(" * 作者:<#=Environment.UserName + \"/\" + Environment.MachineName#>");
            sb.AppendLine(" * 时间:<#=DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")#>");
            sb.AppendLine(" * 版权:版权所有 (C) 新生命开发团队 <#=DateTime.Now.ToString(\"yyyy\")#>");
            sb.AppendLine("*/");
            config.HeadTemplate = sb.ToString();


            return config;
        }

        public void Save()
        {
            if (!String.IsNullOrEmpty(HeadTemplate)) HeadTemplate = HeadTemplate.Replace("\n", Environment.NewLine);

            if (File.Exists(DefaultFile)) File.Delete(DefaultFile);

            //XmlSerializer xml = new XmlSerializer(typeof(XConfig));
            NewLife.Xml.XmlWriterX xml = new NewLife.Xml.XmlWriterX();

            using (XmlWriter writer = XmlWriter.Create(DefaultFile))
            {
                xml.Writer = writer;
                xml.WriteObject(this, typeof(XConfig), null);
            }
        }

        static String DefaultFile = "XCoder.xml";
        #endregion
    }
}