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. /// Determines if the conversion was possible. public T TryGetConfigItemValue(ConfigItem configItem, out bool success) { success = false; if (configItem == null) { return default(T); } object result = null; try { result = Convert.ChangeType(configItem.Value, typeof(T)); success = true; } catch { success = false; } return (T)result; } #endregion } }