using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using DeiNiu.Utils;
//using System.Windows.Forms;
namespace DeiNiu.wms.win.utils
{
    
    ///    
    /// 说明:本类主要负责对程序配置文件(.config)进行修改的类,   
    /// 可以对网站和应用程序的配置文件进行修改   
    ///    
    public class ConfigurationOperator
    {
        private Configuration config;
        private string configPath;
        private ConfigType configType;
        ///    
        /// 对应的配置文件   
        ///    
        public Configuration Configuration
        {
            get { return config; }
            set { config = value; }
        }
        ///    
        /// 构造函数   
        ///    
        /// .config文件的类型,只能是网站配置文件或者应用程序配置文件   
        public ConfigurationOperator(ConfigType configType)
        {
            this.configType = configType;
            if (configType == ConfigType.ExeConfig)
            {
                configPath = System.Windows.Forms.Application.ExecutablePath;
                //AppDomain.CurrentDomain.BaseDirectory;   
            }
            else
            {
              //   configPath = HttpContext.Current.Request.ApplicationPath;   
            }
            Initialize();
        }
        ///    
        /// 构造函数   
        ///    
        /// .config文件的位置   
        /// .config文件的类型,只能是网站配置文件或者应用程序配置文件   
        public ConfigurationOperator(string configPath, ConfigType configType)
        {
            this.configPath = configPath;
            this.configType = configType;
            Initialize();
        }
        //实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法   
        private void Initialize()
        {
            //如果是WinForm应用程序的配置文件   
            if (configType == ConfigType.ExeConfig)
            {
                 config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                //config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
            }
            else//WebForm的配置文件   
            {
                //config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);   
            }
        }
        ///    
        /// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值   
        ///    
        /// 节点名称   
        /// 节点值   
        public void AddAppSetting(string key, string value)
        {
            AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
            if (appSetting.Settings[key] == null)//如果不存在此节点,则添加   
            {
                appSetting.Settings.Add(key, value);
            }
            else//如果存在此节点,则修改   
            {
                ModifyAppSetting(key, value);
            }
        }
        ///    
        /// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值   
        ///    
        /// 节点名称   
        /// 节点值   
        public void AddConnectionString(string key, string connectionString)
        {
            ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
            if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加   
            {
                ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
                connectionSetting.ConnectionStrings.Add(connectionStringSettings);
            }
            else//如果存在此节点,则修改   
            {
                ModifyConnectionString(key, connectionString);
            }
        }
        ///    
        /// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值   
        ///    
        /// 节点名称   
        /// 节点值   
        public void ModifyAppSetting(string key, string newValue)
        {
            AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
            if (appSetting.Settings[key] != null)//如果存在此节点,则修改   
            {
                appSetting.Settings[key].Value = newValue;
                ConfigurationManager.RefreshSection("appSettings");
            }
            else//如果不存在此节点,则添加   
            {
                AddAppSetting(key, newValue);
            }
        }
        ///    
        /// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值   
        ///    
        /// 节点名称   
        /// 节点值   
        public void ModifyConnectionString(string key, string connectionString)
        {
            ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
            if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改   
            {
                connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
            }
            else//如果不存在此节点,则添加   
            {
                AddConnectionString(key, connectionString);
            }
        }
        ///    
        /// 保存所作的修改   
        ///    
        public void Save()
        {
            config.Save();
        }
    }  
}