GlobalConfig.cs 14.0 KB
using System;
using System.Xml;
using System.IO;
using System.Configuration;
using System.Collections;

namespace App
{
    /// <summary>
    /// GlobalConfig 的摘要说明。
    /// </summary>
    public class GlobalConfig
    {
        public const string CLIENTCONFIGNAME = "App.exe.config";
        private const String MyCMMI_LICENCEPATH = "MyCMMI.MyCMMI.LicencePath";
        private const String MyCMMI_LICENCEPATH_DEFAULT = @"D:\MyCMMI.lic";
        private static string strMyCMMILicencePath = MyCMMI_LICENCEPATH_DEFAULT;
        private string _WebServiceUrl = "";
        protected Hashtable m_wsConfig = new Hashtable(11);
        //private const string CLIENTCONFIGNAME = "MyCMMI.exe.config";
        private const string DEFAULTWEBSERVICEURL = @"http://localhost/WebService/";
        private const string SECTIONTYPE = @"System.Configuration.SingleTagSectionHandler"; 
        private string[] UseList;

        private string _UseName = "";
        private string _DateTime = "";
        private string _Project = "";
        private string _Language = "";

        public GlobalConfig()
        {
            Initialize();
        }

        /// <summary>
        /// 初始化GlobalConfig参数
        /// </summary>
        public void Initialize()
        {
            InitializeWebServiceHashtable();

            if (CheckConfig())
            {
                //GetUseConfig();//获取用户信息到
            }
            else
            {
                this._WebServiceUrl = "";
            }
        }

        /// <summary>
        /// 检测用户端MyCMMI.app.exe.config的文件是否存在,格式是否正确.
        /// </summary>
        /// <returns></returns>
        public bool CheckConfig()
        {
            FileInfo fi = new FileInfo(CLIENTCONFIGNAME);
            if (!fi.Exists)
            {
                if (CreateDefaultConfig())//如没有MyCMMI.app.exe.config则新建
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                XmlDocument doc = new XmlDocument();
                try //防止格式出错
                {
                    doc.Load(System.Environment.CurrentDirectory + @"\" + CLIENTCONFIGNAME);
                }
                catch
                {
                    return false;
                }

                #region 检测WebService设置

                XmlNode node = doc.SelectSingleNode("descendant::BizFacade.Properties.Settings");
                if (node.HasChildNodes && node.ChildNodes.Count == m_wsConfig.Count)
                {
                    IEnumerator ienum = node.GetEnumerator();
                    XmlNode childnode;
                    string tmpurl1 = "";
                    string tmpurl2 = "";
                    while (ienum.MoveNext())
                    {
                        childnode = (XmlNode) ienum.Current;
                        //string s_KeyName = childnode.Attributes["name"].Value;

                        if (childnode.FirstChild.InnerText == null)
                            return false;

                        tmpurl2 = childnode.FirstChild.InnerText.ToString();
                        tmpurl2 = tmpurl2.Substring(0, tmpurl2.LastIndexOf(@"/") + 1);
                        if (!string.IsNullOrEmpty(tmpurl1) && (string.Compare(tmpurl1, tmpurl2, true) != 0))
                            return false;

                        tmpurl1 = childnode.FirstChild.InnerText.ToString();
                        tmpurl1 = tmpurl1.Substring(0, tmpurl1.LastIndexOf(@"/") + 1);
                    }
                    tmpurl2 = node.FirstChild.FirstChild.InnerText.ToString();
                    tmpurl2 = tmpurl2.Substring(0, tmpurl2.LastIndexOf(@"/") + 1);
                    this._WebServiceUrl = tmpurl2;
                }
                else
                {
                    //节点不足,添加节点
                    if (!AddWebServiceUrl())
                    {
                        return false;
                    }
                }

                #endregion

                return true;
            }
        }

        /// <summary>
        /// 添加新的WebService到MyCMMI.app.exe.config
        /// </summary>
        /// <returns></returns>
        public bool AddWebServiceUrl()
        {
            string f_wsHead = "";
            XmlDocument doc = new XmlDocument();
            try
            {
                doc.Load(System.Environment.CurrentDirectory + @"\" + CLIENTCONFIGNAME);
            }
            catch
            {
                return false;
            }
            XmlNode node = doc.FirstChild;
            node = node.SelectSingleNode("descendant::BizFacade.Properties.Settings");
            if (node.HasChildNodes)
            {
                IEnumerator ienum = node.GetEnumerator();
                XmlNode childnode;
                string tmpurl1 = "";
                string tmpurl2 = "";
                while (ienum.MoveNext())
                {
                    childnode = (XmlNode)ienum.Current;
                    if (childnode.Attributes["name"] == null)
                    {
                        return false;
                    }
                    tmpurl2 = childnode.FirstChild.InnerText.ToString();
                    tmpurl2 = tmpurl2.Substring(0, tmpurl2.LastIndexOf(@"/") + 1);
                    if (!String.IsNullOrEmpty(tmpurl1) && tmpurl1 != tmpurl2)
                    {
                        return false;
                    }
                    tmpurl1 = childnode.FirstChild.InnerText.ToString();
                    tmpurl1 = tmpurl1.Substring(0, tmpurl1.LastIndexOf(@"/") + 1);
                }
                tmpurl2 = node.FirstChild.InnerText.ToString();
                tmpurl2 = tmpurl2.Substring(0, tmpurl2.LastIndexOf(@"/") + 1);
                this._WebServiceUrl = tmpurl2;
                f_wsHead = tmpurl2;
                node.RemoveAll();
            }
            else
            {
                f_wsHead = DEFAULTWEBSERVICEURL;
                this._WebServiceUrl = f_wsHead;
            }
            foreach (string f_wsKey in m_wsConfig.Keys)
            {

                XmlNode nodechild = doc.CreateNode(XmlNodeType.Element, "setting", "");
                XmlAttribute nodechildAttribute = doc.CreateAttribute("name");
                nodechildAttribute.Value = f_wsKey.ToString();
                nodechild.Attributes.Append(nodechildAttribute);
                XmlAttribute nodechildAttributeTwo = doc.CreateAttribute("serializeAs");
                nodechildAttributeTwo.Value = "String";
                nodechild.Attributes.Append(nodechildAttributeTwo);

                XmlNode nodechildschild = doc.CreateNode(XmlNodeType.Element, "value", "");
                if ((f_wsKey == "Edition") || (f_wsKey == "LicenseServerIP"))
                {
                    nodechildschild.InnerText = m_wsConfig[f_wsKey].ToString();
                }
                else
                {
                    nodechildschild.InnerText = f_wsHead + m_wsConfig[f_wsKey];
                }
                nodechild.AppendChild(nodechildschild);
                node.AppendChild(nodechild);
            }
            try
            {
                doc.Save(System.Environment.CurrentDirectory + @"\" + CLIENTCONFIGNAME);
            }
            catch
            {
                return false;
            }
            return true;
        }

        /// <summary>
        /// 创建默认的MyCMMI.App.Exe.Config 本函数只建立最基本的WebService设置
        /// </summary>
        /// <returns></returns>
        public bool CreateDefaultConfig()
        {
            try
            {
                XmlTextWriter writer = null;
                writer = new XmlTextWriter(System.Environment.CurrentDirectory + @"\" + CLIENTCONFIGNAME, null);
                writer.Formatting = Formatting.Indented;

                writer.WriteStartElement("configuration");
                writer.WriteStartElement("configSections");
                writer.WriteStartElement("section");
                writer.WriteAttributeString("name", "administrator");
                writer.WriteAttributeString("type", "System.Configuration.SingleTagSectionHandler");
                writer.WriteEndElement();
                writer.WriteStartElement("sectionGroup");
                writer.WriteAttributeString("name", "applicationSettings");
                writer.WriteAttributeString("type",
                                            "System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                writer.WriteStartElement("section");
                writer.WriteAttributeString("name", "BizFacade.Properties.Settings");
                writer.WriteAttributeString("type",
                                            "System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                writer.WriteAttributeString("requirePermission", "false");
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();

                writer.WriteStartElement("applicationSettings");
                writer.WriteStartElement("BizFacade.Properties.Settings");
                foreach (string f_wsKey in m_wsConfig.Keys)
                {
                    writer.WriteStartElement("setting");
                    writer.WriteAttributeString("name", f_wsKey);
                    writer.WriteAttributeString("serializeAs", "String");
                    writer.WriteStartElement("value");
                    writer.WriteString(DEFAULTWEBSERVICEURL + m_wsConfig[f_wsKey]);

                    writer.WriteEndElement();
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteStartElement("MyCMMIConfiguration");
                writer.WriteStartElement("add ");
                writer.WriteAttributeString("key", MyCMMI_LICENCEPATH);
                writer.WriteStartElement("value");
                writer.WriteString(strMyCMMILicencePath);
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.Close();
                //this._edition = "Chinese";
                this._WebServiceUrl = DEFAULTWEBSERVICEURL;
            }
            catch (Exception ex)
            {
                string strEX = ex.ToString();
                return false;
            }
            return true;
        }

        /// <summary>
        /// 设置WebService
        /// </summary>
        /// <param name="Url">新的WebServiceUrl</param>
        /// <returns></returns>
        public bool SetWebServiceUrl(string Url)
        {
            if (!Url.EndsWith(@"/"))	//若路径不是以\结尾,则追加之
                Url += @"/";
            XmlDocument doc = new XmlDocument();
            try
            {
                doc.Load(System.Environment.CurrentDirectory + @"\" + CLIENTCONFIGNAME);
            }
            catch
            {
                return false;
            }
            XmlNode node = doc.FirstChild;
            node = node.SelectSingleNode("descendant::BizFacade.Properties.Settings");
            node.RemoveAll();
            //XmlElement elem;
            foreach (string f_wsKey in m_wsConfig.Keys)
            {
                XmlNode nodechild = doc.CreateNode(XmlNodeType.Element, "setting", "");
                XmlAttribute nodechildAttribute = doc.CreateAttribute("name");
                nodechildAttribute.Value = f_wsKey.ToString();
                nodechild.Attributes.Append(nodechildAttribute);
                XmlAttribute nodechildAttributeTwo = doc.CreateAttribute("serializeAs");
                nodechildAttributeTwo.Value = "String";
                nodechild.Attributes.Append(nodechildAttributeTwo);

                XmlNode nodechildschild = doc.CreateNode(XmlNodeType.Element, "value", "");
                if ((f_wsKey == "Edition") || (f_wsKey == "LicenseServerIP"))
                {
                    nodechildschild.InnerText = m_wsConfig[f_wsKey].ToString();
                }
                else
                {
                    nodechildschild.InnerText = Url + m_wsConfig[f_wsKey];
                }
                nodechild.AppendChild(nodechildschild);
                node.AppendChild(nodechild);
            }

            try
            {
                doc.Save(System.Environment.CurrentDirectory + @"\" + CLIENTCONFIGNAME);
            }
            catch
            {
                return false;
            }
            return true;


        }

        /// <summary>
        /// 初始化WebService哈希表.
        /// </summary>
        public void InitializeWebServiceHashtable()
        {
            //将MyCMMI需要的所有WebService加入到哈希表中BizFacade_DocTemplateSvc_DocTemplateSvc
            m_wsConfig.Add("BizFacade_BaseSvc_BaseSvc", "BaseSvc.asmx");
            m_wsConfig.Add("BizFacade_UpdateSvc_UpdateSvc", "UpdateSvc.asmx");

        }
        /// <summary>
        /// WebService地址
        /// </summary>
        public string WebServiceUrl
        {
            get
            {
                return _WebServiceUrl;
            }
            set
            {
                _WebServiceUrl = value;
            }
        }
        public string UseName
        {
            get
            {
                return _UseName;
            }
            set
            {
                _UseName = value;
            }
        }

        public string DateTime
        {
            get
            {
                return _DateTime;
            }
            set
            {
                _DateTime = value;
            }
        }

        public string Project
        {
            get { return _Project; }
            set { _Project = value; }
        }

        public string Language
        {
            get { return _Language; }
            set { _Language = value; }
        }

    }
}