//-----------------------------------------------------------------------
// <copyright company="" file="LoadXmlHelper.cs">
//    Copyright (c)  V1.0   
//    作者:季健国
//    功能:加载XML 
//    历史版本:2013-11-26 新增
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using System.Web;

namespace Ant.Common
{
    public class LoadXmlHelper
    {
       

        /// <summary>
        /// 获取数据
        /// </summary>
        public static XmlDocument XmlLoading(string configpath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            try
            {
                if (!string.IsNullOrEmpty(configpath))
                {
                    xmlDoc.Load(configpath);
                }
            }
            catch (Exception ex)
            {
               // Log4NetHelper.WriteExceptionLog("加载URL文件失败", ex);
            }

            return xmlDoc;
        }
        /// <summary>
        /// 查找XML所在节点的值
        /// 添加人:季健国
        /// 添加时间:2013-12-03
        /// </summary>
        /// <param name="xml"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public  static  object  GetXmlValue(XmlDocument xml,string index)
        {
            object obj = null;
            if (!Equals(xml.SelectSingleNode(index).InnerText,null))
                obj = xml.SelectSingleNode(index).InnerText;
          return  obj;
        }
       
       
    }

    /// <summary>
    /// 数据库连接配置缓存文件对象
    /// </summary>
    public class DataBaseXmlObject
    {
        /// <summary>
        /// 数据库连接配置缓存文件对象
        /// </summary>
        public DataBaseXmlObject()
        {
        }

        /// <summary>
        /// 数据库连接配置缓存文件对象
        /// </summary>
        /// <param name="dataBaseType">数据库类型</param>
        /// <param name="dataBaseAddress">地址</param>
        /// <param name="authentication">验证方式</param>
        /// <param name="account">账号</param>
        /// <param name="password">密码</param>
        public DataBaseXmlObject(int dataBaseType, string dataBaseAddress, int authentication, string account, string password)
        {
            this.DataBaseAccount = account;
            this.DataBasePassword = password;
            this.DataBaseType = dataBaseType;
            this.DataBaseAddress = dataBaseAddress;
            this.DataBaseAuthentication = authentication;
            this.LoginTime = DateTime.Now;
        }

        /// <summary>
        /// 数据库类型
        /// </summary>
        public int DataBaseType { get; set; }

        /// <summary>
        /// 数据库地址
        /// </summary>
        public string DataBaseAddress { get; set; }

        /// <summary>
        /// 验证方式
        /// </summary>
        public int DataBaseAuthentication { get; set; }

        /// <summary>
        /// 账号
        /// </summary>
        public string DataBaseAccount { get; set; }

        /// <summary>
        /// 密码
        /// </summary>
        public string DataBasePassword { get; set; }

        /// <summary>
        /// 登陆时间
        /// </summary>
        public DateTime LoginTime { get; set; }

        /// <summary>
        /// 获取配置文件信息
        /// </summary>
        /// <param name="path">路径</param>
        /// <returns>返回集合</returns>
        public static Dictionary<string, DataBaseXmlObject> GetList(string path)
        {
            if (File.Exists(path))
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(ReaderFile(path).Trim());
                Dictionary<string, DataBaseXmlObject> list = new Dictionary<string, DataBaseXmlObject>();

                foreach (XmlNode databaseConfig in doc.DocumentElement.ChildNodes)
                {
                    string address = StringEncrypt.DeCode(databaseConfig.Attributes["address"].Value);
                    DataBaseXmlObject dataBase = new DataBaseXmlObject();
                    dataBase.DataBaseAccount = StringEncrypt.DeCode(databaseConfig.Attributes["account"].Value);
                    dataBase.DataBasePassword = StringEncrypt.DeCode(databaseConfig.Attributes["password"].Value);
                    dataBase.DataBaseAuthentication = int.Parse(StringEncrypt.DeCode(databaseConfig.Attributes["authentication"].Value));
                    dataBase.DataBaseType = int.Parse(StringEncrypt.DeCode(databaseConfig.Attributes["dataBaseType"].Value));
                    dataBase.DataBaseAddress = address;
                    dataBase.LoginTime = DateTime.Parse(StringEncrypt.DeCode(databaseConfig.Attributes["login"].Value));
                    if (list.ContainsKey(address) == false)
                    {
                        list.Add(address, dataBase);
                    }
                }

                return list;
            }

            return null;
        }



        /// <summary>
        /// 获取连接字符串
        /// </summary>
        /// <param name="dataBase">数据库</param>
        public string GetConnectionString(string dataBase)
        {
            if (DataBaseAuthentication == 0)
            {
                return "Data Source=" + DataBaseAddress + ";Initial Catalog=" + dataBase + ";Integrated Security=True;";
            }

            return "user id=" + DataBaseAccount + ";password=" + DataBasePassword + ";DataBase=" + dataBase + ";server=" + DataBaseAddress + ";";
        }

        /// <summary>
        /// 读文件
        /// </summary>
        /// <param name="path">路径</param>
        /// <returns>返回内容</returns>
        public static string ReaderFile(string path)
        {
            if (File.Exists(path))
            {
                FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader reader = new StreamReader(f, Encoding.UTF8);
                string content = reader.ReadToEnd();
                reader.Close();
                f.Close();
                return content;
            }
            return string.Empty;
        }
    }
}