using System; using System.Collections.Generic; using System.Xml; using Aitex.Core.RT.Log; using MECF.Framework.Common.DataCenter; using OpenSEMI.ClientBase.ServiceProvider; namespace VirgoUI.Client.Models.Utility.SystemConfig { public class SystemConfigProvider : IProvider { private static SystemConfigProvider _Instance = null; public static SystemConfigProvider Instance { get { if (_Instance == null) _Instance = new SystemConfigProvider(); return _Instance; } } public void Create() { } private Dictionary typeDic = new Dictionary() { { "String", DataType.String }, { "Bool", DataType.Bool }, { "Integer", DataType.Int }, { "Double", DataType.Double } }; public ConfigNode GetConfig() { string config = QueryDataClient.Instance.Service.GetConfigFileContent(); if (string.IsNullOrEmpty(config)) return null; ConfigNode result = new ConfigNode() {Path = string.Empty}; try { XmlDocument xml = new XmlDocument(); xml.LoadXml(config); XmlElement element = xml.SelectSingleNode("root") as XmlElement; BuildTree(element, result); } catch (Exception ex) { LOG.Write(ex); } return result; } public void BuildTree(XmlElement root, ConfigNode item) { item.Name = root.GetAttribute("name"); item.NameView = root.GetAttribute("nameView"); item.SubNodes = new List(); item.Items = new List(); XmlNodeList group = root.SelectNodes("configs"); XmlNodeList single = root.SelectNodes("config"); if (group != null) { foreach (var groupItem in group) { XmlElement element = groupItem as XmlElement; string strVisible = element.GetAttribute("visible"); bool bVisible; if (!string.IsNullOrEmpty(strVisible)) { if (bool.TryParse(strVisible, out bVisible) && !bVisible) continue; } ConfigNode sc = new ConfigNode() {Path = item.Name}; BuildTree(element, sc); item.SubNodes.Add(sc); } } if (single != null) { foreach (var singleItem in single) { XmlElement element = singleItem as XmlElement; string strVisible = element.GetAttribute("visible"); bool bVisible; if (!bool.TryParse(strVisible, out bVisible)) bVisible = true; if (!bVisible) //do not show the item if visible field is false continue; ConfigItem config = new ConfigItem() { Name = element.GetAttribute("name"), NameView = element.GetAttribute("nameView"), DefaultValue = element.GetAttribute("default"), Description = element.GetAttribute("description"), Max = ConvertStringToFloat(element.GetAttribute("max")), Min = ConvertStringToFloat(element.GetAttribute("min")), Parameter = element.GetAttribute("paramter"), Unit = element.GetAttribute("unit"), Tag = element.GetAttribute("tag") }; string strType = element.GetAttribute("type"); config.Type = typeDic.ContainsKey(strType) ? typeDic[strType] : DataType.Unknown; config.Visible = bVisible; item.Items.Add(config); } } } private float ConvertStringToFloat(string value) { float result; if (!float.TryParse(value, out result)) result = float.NaN; return result; } public ConfigNode GetConfigTree() { return GetConfig(); } public List GetValuesByNode(string node) { List values = new List(); //interface to get values return values; } public string GetValueByName(string name) { object result = QueryDataClient.Instance.Service.GetConfig(name); if (result != null) return result.ToString(); else return string.Empty; } } }