/// <summary> Checks that the settings file exists and generates an empty one if not. </summary> private void ValidateFileExistence() { if (!_settingsFile.Exists) { LogInfo(ECoreLogMessage.SettingsFileNotFound_CreatingNewOne.FormatFluently(_settingsFile.Name)); GenerateSettingsFile(); LogInfo(ECoreLogMessage.Created.FormatFluently(EWord.File)); SettingsFileStatus = ESettingsFileStatus.NotFoundAndGenerated; } _settings.ReplaceBy(GetSettingsFromFile()); }
/// <summary> Creates a new settings manager. </summary> /// <param name="settingsFileName"> The name of the settings file to attach to this manager. </param> /// <param name="fileManager"> An instance of a file manager. </param> /// <param name="requiredSettingNames"> Names of required settings. </param> /// <param name="loggers"> Instances of loggers. </param> public SettingsManager(IFileManager fileManager, string settingsFileName, IEnumerable <string> requiredSettingNames, params IConfiguredLogger[] loggers) : base(ECoreLogCategory.SettingsManager, loggers) { _fileManager = fileManager; _requiredSettingNames = requiredSettingNames; _settingsFile = new FileInfo(settingsFileName); _settings = new Dictionary <string, string>(); SettingsFileStatus = ESettingsFileStatus.Pending; Initialize(); LogDebug(ECoreLogMessage.Created.FormatFluently(ECoreLogCategory.SettingsManager)); }
/// <summary> /// Checks the settings file for required settings. /// If not all required settings are present, a backup is made, valid settings are moved over, and an automated resolution is attempted. /// In an event of only one required setting missing with one setting in the file unrecognized, the two settings are considered related and the situation is resolved. /// Otherwise direct intervention is necessary to move unrecognized settings over to the newly generated file. /// </summary> private void ValidateFileSettings() { var missingSettingNames = _requiredSettingNames.Except(_settings.Keys); var recognizedSettingNames = _requiredSettingNames.Intersect(_settings.Keys); var unrecognizedSettingNames = _settings.Keys.Except(recognizedSettingNames); if (missingSettingNames.Any()) { _fileManager.BackUpFile(_settingsFile); GenerateSettingsFile(); foreach (var recognizedSettingName in recognizedSettingNames) { Save(recognizedSettingName, _settings[recognizedSettingName]); } if (missingSettingNames.HasSingle() && unrecognizedSettingNames.HasSingle()) // It is assumed that a setting was renamed. { var missingSettingName = missingSettingNames.First(); var unrecognizedSettingName = unrecognizedSettingNames.First(); var settingValue = _settings[unrecognizedSettingName]; Save(missingSettingName, settingValue); _settings.Add(missingSettingName, settingValue); _settings.Remove(unrecognizedSettingName); SettingsFileStatus = ESettingsFileStatus.FoundAndAutomaticallyUpdated; } else { SettingsFileStatus = ESettingsFileStatus.FoundAndNeedsManualUpdate; throw new SettingsFileRegeneratedException(); } } else { SettingsFileStatus = ESettingsFileStatus.FoundAndUpToDate; } }