using System; using System.ComponentModel; using System.IO; using Newtonsoft.Json; using Xylem.Common.CommonCore.Consts; namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig { /// /// Configuration of meter /// public class ProcessConfig { /// /// Load configuration file from AppRoaming or working directory /// public Boolean ReadProcessConfig() { // Check for AppRoaming var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Genesis), ProgramConfig.MeterConfigFileName); if (!File.Exists(configFile)) { // Take actual working directory configFile = Path.Combine(ProgramConfig.MeterConfigFileName); if (!File.Exists(configFile)) { UseRegisterWatchService = false; UseErrorLogger = false; AutoUpdateFiles = false; ProductionMode = true; return false; } } using (var tr = new StreamReader(configFile)) { var meterConfig = JsonConvert.DeserializeObject(tr.ReadToEnd()); UseRegisterWatchService = meterConfig.UseRegisterWatchService; RegisterWatchServiceUrl = meterConfig.RegisterWatchServiceUrl; UseMinMaxCheck = meterConfig.UseMinMaxCheck; UseErrorLogger = meterConfig.UseErrorLogger; ErrorLoggerServiceUrl = meterConfig.ErrorLoggerServiceUrl; UseCalibrationLogger = meterConfig.UseCalibrationLogger; CalibrationLoggerServiceUrl = meterConfig.CalibrationLoggerServiceUrl; AutoUpdateFiles = meterConfig.AutoUpdateFiles; ProductionMode = meterConfig.ProductionMode; } return true; } /// /// Write file to AppRoaming and backup it to actual working directory /// public void Update() { var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Genesis), ProgramConfig.MeterConfigFileName); File.WriteAllText(configFile, JsonConvert.SerializeObject(this)); File.WriteAllText(ProgramConfig.MeterConfigFileName, JsonConvert.SerializeObject(this)); } /// /// /// public Boolean UseRegisterWatchService { get; set; } /// /// /// public String RegisterWatchServiceUrl { get; set; } /// /// /// public Boolean UseMinMaxCheck { get; set; } /// /// /// public Boolean UseErrorLogger { get; set; } /// /// /// public String ErrorLoggerServiceUrl { get; set; } /// /// /// public Boolean UseCalibrationLogger { get; set; } /// /// /// public String CalibrationLoggerServiceUrl { get; set; } /// /// /// public Boolean AutoUpdateFiles { get; set; } [DefaultValue(true)] [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] public Boolean ProductionMode { get; set; } } }