/// <summary> /// Gets the setting from the database or from the cache /// </summary> /// <param name="groupName">The setting group</param> /// <param name="name">The setting name</param> /// <param name="defaultValue">The default value if nothing can be found</param> /// <returns>The setting value as a string</returns> public string GetString(string groupName, string name, object defaultValue = null) { string key = string.Format("{0}.{1}", groupName, name); if (this._settingsCache.ContainsKey(key)) { return(this._settingsCache[key]); } //defaultValue = defaultValue == null ? EmptyObject : defaultValue.ToString(); string defaultReturnValue = defaultValue == null ? null : defaultValue.ToString(); this.Logger.Debug("Reading setting value for " + name); //var defaultSetting = new OtaSetting { Value = defaultValue.ToString() }; var defaultSetting = new OtaSetting { Value = defaultReturnValue }; OtaSetting setting = AsyncHelper.RunSync( async() => await this.GetOtaSetting( groupName, name, defaultSetting)); //string returnValue = setting.Id == default(Guid) ? defaultValue.ToString() : setting.Value; string returnValue = setting.Id == default(Guid) ? defaultReturnValue : setting.Value; // Lets cache our setting this._settingsCache.Add(key, returnValue); return(returnValue); }
/// <summary> /// Cache the given setting /// </summary> /// <param name="setting">The setting to cache</param> public void CacheSetting(OtaSetting setting) { string key = string.Format("{0}.{1}", setting.GroupName, setting.Name); if (this._settingsCache.ContainsKey(key)) { this._settingsCache[key] = setting.Value; return; } this._settingsCache.Add(key, setting.Value); }
/// <summary> /// Write the setting to the database /// </summary> /// <param name="group">The setting group</param> /// <param name="name">The setting name</param> /// <param name="value">The setting value</param> /// <returns>A boolean task</returns> public async Task SetSettingsValue(string group, string name, object value) { string settingValue = value != null?value.ToString() : string.Empty; OtaSetting newSetting = await this.GetExistingSetting(name, group, settingValue); List <OtaSetting> settings = new List <OtaSetting> { newSetting }; await this.SaveSettings(settings); this.CacheSetting(newSetting); }
/// <summary> /// Writes the setting into the database and updates if it exists /// </summary> /// <param name="name">The name of the setting</param> /// <param name="group">The group of the setting</param> /// <param name="value">The value of the setting</param> /// <returns>A boolean task</returns> private async Task <OtaSetting> GetExistingSetting(string name, string group, string value) { // if it is not yet in the database, save it a fresh else update the existing OtaSetting existing = await this.GetOtaSetting(group, name); if (existing == null) { return(new OtaSetting { GroupName = group, Name = name, Value = value }); } existing.Value = value; existing.Modified = DateTime.Now; return(existing); }
/// <summary> /// Reads and returns a setting from the database /// </summary> /// <param name="groupName">The group name</param> /// <param name="name">The setting name</param> /// <param name="defaultValue">The default value to return if nothing cannot be found</param> /// <returns>The given setting</returns> private async Task <OtaSetting> GetOtaSetting(string groupName, string name, OtaSetting defaultValue = null) { CriteriaBuilder criteriaBuilder = new CriteriaBuilder(); try { this.Logger.Debug("Reading setting for " + name); OtaSetting setting = await this.SettingsController.GetSingleRecord( criteriaBuilder.Add("GroupName", groupName).Add("Name", name)); return(setting.Id == default(Guid) ? defaultValue : setting); } catch (Exception exception) { this.Logger.Error(exception); throw; } }
/// <summary> /// Write the setting to the database /// </summary> /// <param name="setting">The setting</param> /// <returns>A boolean task</returns> public async Task SetSettingsValue(OtaSetting setting) { await this.SetSettingsValue(setting.GroupName, setting.Name, setting.Value); }