using System.Xml; using System.Collections.Generic; using System; using System.Xml.Schema; using System.Xml.Linq; using System.Linq; using static Step.Config.StartupConfig; using Step.Model.ConfigModels; namespace Step.Config { public class StartupConfigController { public static void ReadStartUpConfig() { // Read validation file XmlSchemaSet readerSettings = new XmlSchemaSet(); // Add Schema readerSettings.Add(null, "startupValidator.xsd"); // Open file reader XDocument xmlConfigFile = XDocument.Load("startupConfig.xml"); // Validate file xmlConfigFile.Validate(readerSettings, ValidationHandler); // Read generic config with LINQ genericConfig = xmlConfigFile .Descendants("generalConfig") .Select(x => new GenericConfigModel() { Language = x.Element("language").Value, ServerPort = Convert.ToInt32(x.Element("serverPort").Value), NcVendor = Convert.ToInt32(x.Element("NcVendor").Value), NcIpAddress = x.Element("NcIpAddress").Value, NcPort = Convert.ToInt32(x.Element("NcPort").Value) }).FirstOrDefault(); xmlConfigFile .Descendants("areasConfig") .Elements() .ToList() .ForEach(x => addKeyValue(x)); } private static void addKeyValue(XElement element) { switch (element.Name.ToString()) { case "production": SetAreasConfigValue(ref productionConfig, element); break; case "tooling": SetAreasConfigValue(ref toolingConfig, element); break; case "report": SetAreasConfigValue(ref reportConfig, element); break; case "alarms": SetAreasConfigValue(ref alarmsConfig, element); break; case "maintenance": SetAreasConfigValue(ref maintenanceConfig, element); break; case "utilities": SetAreasConfigValue(ref utilitiesConfig, element); break; case "scada": SetAreasConfigValue(ref scadaConfig, element); break; } } private static void SetAreasConfigValue (ref AreasConfigModel areasConfig, XElement element) { areasConfig = new AreasConfigModel() { name = element.Name.ToString(), enabled = Convert.ToBoolean(element.Element("enabled").Value), allowExternalBrowser = Convert.ToBoolean(element.Element("allowExternalBrowser").Value) }; } private static void ValidationHandler(object sender, ValidationEventArgs e) { if (e.Severity == XmlSeverityType.Warning) { Console.Write("WARNING: "); Console.WriteLine(e.Message); } else if (e.Severity == XmlSeverityType.Error) { Console.Write("ERROR: "); Console.WriteLine(e.Message); } } } }