diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-04 00:43:06 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-04 00:43:06 -0500 |
| commit | 2ca4b7d03adfa3cc7c9c6a597a11762142d5b34b (patch) | |
| tree | 18a3d756bd6333a863ccb6d48161b97bb4c2d83a /MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs | |
| parent | 401b56c732f7b22bce844770f75fcddbcc803092 (diff) | |
Created IConfigurationManager
Diffstat (limited to 'MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs new file mode 100644 index 000000000..2f50f5f7a --- /dev/null +++ b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs @@ -0,0 +1,123 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; +using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using System; +using System.Threading; + +namespace MediaBrowser.Common.Implementations.Configuration +{ + /// <summary> + /// Class BaseConfigurationManager + /// </summary> + public abstract class BaseConfigurationManager : IConfigurationManager + { + /// <summary> + /// Gets the type of the configuration. + /// </summary> + /// <value>The type of the configuration.</value> + protected abstract Type ConfigurationType { get; } + + /// <summary> + /// Occurs when [configuration updated]. + /// </summary> + public event EventHandler<EventArgs> ConfigurationUpdated; + + /// <summary> + /// Gets the logger. + /// </summary> + /// <value>The logger.</value> + protected ILogger Logger { get; private set; } + /// <summary> + /// Gets the XML serializer. + /// </summary> + /// <value>The XML serializer.</value> + protected IXmlSerializer XmlSerializer { get; private set; } + + /// <summary> + /// Gets or sets the application paths. + /// </summary> + /// <value>The application paths.</value> + public IApplicationPaths CommonApplicationPaths { get; private set; } + + /// <summary> + /// The _configuration loaded + /// </summary> + private bool _configurationLoaded; + /// <summary> + /// The _configuration sync lock + /// </summary> + private object _configurationSyncLock = new object(); + /// <summary> + /// The _configuration + /// </summary> + private BaseApplicationConfiguration _configuration; + /// <summary> + /// Gets the system configuration + /// </summary> + /// <value>The configuration.</value> + public BaseApplicationConfiguration CommonConfiguration + { + get + { + // Lazy load + LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationLoaded, ref _configurationSyncLock, () => (BaseApplicationConfiguration)ConfigurationHelper.GetXmlConfiguration(ConfigurationType, CommonApplicationPaths.SystemConfigurationFilePath, XmlSerializer)); + return _configuration; + } + protected set + { + _configuration = value; + + _configurationLoaded = value != null; + } + } + + /// <summary> + /// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class. + /// </summary> + /// <param name="applicationPaths">The application paths.</param> + /// <param name="logManager">The log manager.</param> + /// <param name="xmlSerializer">The XML serializer.</param> + protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer) + { + CommonApplicationPaths = applicationPaths; + XmlSerializer = xmlSerializer; + Logger = logManager.GetLogger(GetType().Name); + } + + /// <summary> + /// The _save lock + /// </summary> + private readonly object _configurationSaveLock = new object(); + + /// <summary> + /// Saves the configuration. + /// </summary> + public void SaveConfiguration() + { + lock (_configurationSaveLock) + { + XmlSerializer.SerializeToFile(CommonConfiguration, CommonApplicationPaths.SystemConfigurationFilePath); + } + + EventHelper.QueueEventIfNotNull(ConfigurationUpdated, this, EventArgs.Empty, Logger); + } + + /// <summary> + /// Replaces the configuration. + /// </summary> + /// <param name="newConfiguration">The new configuration.</param> + /// <exception cref="System.ArgumentNullException">newConfiguration</exception> + public void ReplaceConfiguration(BaseApplicationConfiguration newConfiguration) + { + if (newConfiguration == null) + { + throw new ArgumentNullException("newConfiguration"); + } + + CommonConfiguration = newConfiguration; + SaveConfiguration(); + } + } +} |
