using System; using System.ComponentModel; using System.IO; using Newtonsoft.Json; namespace Xylem.Common.Hardware.WaterMeter.MagFlux.MagFluxConfig { /// /// Configuration of meter /// public class ProcessConfig { /// /// ctor /// public ProcessConfig() { UseRegisterWatchService = false; UseErrorLogger = false; AutoUpdateFiles = false; ProductionMode = true; } /// /// Load configuration file from AppRoaming or working directory /// /// public ProcessConfig(String file) { // check for AppRoaming var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(MagFlux), file); if (!File.Exists(configFile)) { // take actual working directory configFile = Path.Combine(file); if (!File.Exists(configFile)) { UseRegisterWatchService = false; UseErrorLogger = false; return; } } 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; } } /// /// Write file to AppRoaming and backup it to actual working directory /// /// public void Update(String file) { var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(MagFlux), file); File.WriteAllText(configFile, JsonConvert.SerializeObject(this)); File.WriteAllText(file, 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; } = true; } }