using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; namespace Mesnac.Action.Base { public class DeviceDataName { private Dictionary _deviceDataNameDic { get; set; } #region 单例模式 private static DeviceDataName _this; public static DeviceDataName Instance { get { if (null == _this) _this = new DeviceDataName(); return _this; } } private DeviceDataName() { this._deviceDataNameDic = new Dictionary(); } #endregion #region 基本信息 private string _projectWizardName = string.Empty; public string ProjectWizardName { get { return _projectWizardName; } set { if (_projectWizardName != value) { this._deviceDataNameDic.Clear(); _projectWizardName = value; } } } private readonly string ActionConfigPath = "Data\\EventConfig\\"; private string GetConfigFilePath(string path) { FileInfo fi = new FileInfo(AppDomain.CurrentDomain.FriendlyName); return Path.Combine(fi.Directory.ToString(), ActionConfigPath, path); } #endregion #region IniDeviceDataNameDic private void IniDeviceDataNameDic(FileInfo fi) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(fi.FullName); foreach (XmlNode serviceNode in xmlDocument) { if (!serviceNode.Name.Equals("EquipDataNameExchange", StringComparison.CurrentCultureIgnoreCase)) { continue; } foreach (XmlNode runtimeNode in serviceNode.ChildNodes) { if (runtimeNode.Attributes != null && runtimeNode.Attributes.Count > 1 && runtimeNode.Attributes["runtime"] != null && runtimeNode.Attributes["runtime"].Value != null && runtimeNode.Attributes["design"] != null && runtimeNode.Attributes["design"].Value != null) { if (!this._deviceDataNameDic.ContainsKey(runtimeNode.Attributes["runtime"].Value.ToString())) { this._deviceDataNameDic.Add(runtimeNode.Attributes["runtime"].Value.ToString(), runtimeNode.Attributes["design"].Value.ToString()); } } } } } private void IniDeviceDataNameDic() { if (this._deviceDataNameDic.Count > 0) { return; } this._deviceDataNameDic.Clear(); DirectoryInfo dir = new DirectoryInfo(GetConfigFilePath(this._projectWizardName)); if (dir.Exists) { foreach (FileInfo fi in dir.GetFiles()) { IniDeviceDataNameDic(fi); } } } #endregion public string GetDeviceDesignDataName(string runtime) { if (this._deviceDataNameDic.Count == 0) { IniDeviceDataNameDic(); } string Result = runtime; if (this._deviceDataNameDic.TryGetValue(runtime, out Result)) { return Result; } return runtime; } public string GetDeviceDesignDataName(string projectWizardName, string runtime) { this.ProjectWizardName = projectWizardName; return GetDeviceDesignDataName(runtime); } } }