using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Configuration; using GreenTree.Nachtragsmanagement.Core.Configuration; using GreenTree.Nachtragsmanagement.Core.Domain.Config; using GreenTree.Nachtragsmanagement.Core.Data; namespace GreenTree.Nachtragsmanagement.Services.Configuration { public class ConfigurationService : IConfigurationService { #region Fields private readonly IRepository _configItemRepository; #endregion #region Ctor /// /// Initializes a new instance of the ConfigurationService class /// public ConfigurationService( IRepository configItemRepository) { _configItemRepository = configItemRepository; } #endregion /// /// Reads the current configuration from the global config /// public AppendixConfigurationSection GetCurrentConfiguration() { var config = WebConfigurationManager.OpenWebConfiguration("~/"); var sectionGroup = config.GetSectionGroup("appendixSectionGroup"); var section = sectionGroup.Sections["appendixConfigSection"]; return (AppendixConfigurationSection)section; } #region ConfigItem /// /// Gets all configItems /// public IList GetAllConfigItems() { return _configItemRepository.Table.ToList(); } /// /// Gets a configItem by specified Id /// /// ConfigItem identifier. public ConfigItem GetConfigItemById(int id) { return _configItemRepository.GetById(id); } /// /// Gets a configItem by specified name /// /// ConfigItem name. public ConfigItem GetConfigItemByName(string name) { return _configItemRepository.Table .FirstOrDefault(r => r.Name == name); } /// /// Gets all configItems to the specified ids /// public IList GetConfigItemsByIds(int[] ids) { return _configItemRepository.Table .Where(r => ids.Contains(r.Id)) .ToList(); } /// /// Insert a configItem /// /// ConfigItem. public void InsertConfigItem(ConfigItem configItem) { _configItemRepository.Insert(configItem); } /// /// Update a configItem /// /// ConfigItem. public void UpdateConfigItem(ConfigItem configItem) { _configItemRepository.Update(configItem); } /// /// Delete a configItem /// /// ConfigItem. public void DeleteConfigItem(ConfigItem configItem) { _configItemRepository.Delete(configItem); } #endregion #region Casting /// /// Trys to convert the config items value type and returns its actual value, otherwise NULL /// /// The actual type. /// ConfigItem. /// Value, when conversion fails. public T TryGetConfigItemValue(ConfigItem configItem, T defaultValue) { if (configItem == null) return defaultValue; object result = null; try { result = Convert.ChangeType(configItem.Value, typeof(T)); } catch { result = defaultValue; } return (T)result; } /// /// Trys to convert the config items value type and returns its actual value, otherwise NULL /// /// The actual type. /// ConfigItem name. /// Value, when conversion fails. public T TryGetConfigItemValue(string configItemName, T defaultValue) { if (String.IsNullOrEmpty(configItemName)) return defaultValue; var configItem = GetConfigItemByName(configItemName); return TryGetConfigItemValue(configItem, defaultValue); } #endregion } }