public static IAssetManagerApi CreateApiFromSettings(AssetManagerSettings settings) { settings.Validate(); IList <IDatabaseConfig> dbConfigs = LoadDataBase(settings); return(new AssetManagerApi(dbConfigs)); }
// ---------------- Functions ---------------- /// <summary> /// Loads the given XML file and overwrites the given settings /// config with the settings specified in the XML file. /// </summary> public static void LoadFromXml(this AssetManagerSettings settings, string xmlFilePath) { XmlDocument doc = new XmlDocument(); doc.Load(xmlFilePath); LoadFromXml(settings, doc); }
public static IAssetManagerApi CreateApiFromConfig(string configDirectory) { AssetManagerSettings settings = new AssetManagerSettings { AssetManagerSettingsDirectory = configDirectory }; settings.LoadFromXml(Path.Combine(configDirectory, ConfigFileName)); return(CreateApiFromSettings(settings)); }
private static IList <IDatabaseConfig> LoadDataBase(AssetManagerSettings settings) { // Load the assembly that contains the database information. Assembly assembly = Assembly.LoadFrom(settings.DatabaseAssemblyPath); DatabaseConfigLoaderAttribute attr = assembly.GetCustomAttribute <DatabaseConfigLoaderAttribute>(); if (attr == null) { throw new InvalidOperationException( "Loaded assembly " + settings.DatabaseAssemblyPath + " does not define " + nameof(DatabaseConfigLoaderAttribute) ); } object dbLoader = Activator.CreateInstance(attr.DatabaseConfigLoaderType); IDatabaseConfigLoader loader = dbLoader as IDatabaseConfigLoader; if (loader == null) { throw new InvalidOperationException( "Class tagged as " + nameof(DatabaseConfigLoaderAttribute) + " does not implement " + nameof(IDatabaseConfigLoader) ); } IList <IDatabaseConfig> databaseConfigs = loader.Load(settings); foreach (IDatabaseConfig databaseConfig in databaseConfigs) { databaseConfig.Validate(); } foreach (IDatabaseConfig databaseConfig in databaseConfigs) { IEnumerable <Guid> ids = databaseConfigs.Select(d => d.DatabaseId).Where(d => d.Equals(databaseConfig.DatabaseId)); if (ids.Count() != 1) { throw new ValidationException("More than one database has ID " + databaseConfig.DatabaseId); } } return(databaseConfigs); }
/// <summary> /// Overwrites the given settings /// config with the settings specified in the passed in XML document. /// </summary> public static void LoadFromXml(this AssetManagerSettings settings, XmlDocument doc) { XmlNode rootNode = doc.DocumentElement; if (rootNode.Name != SettingsXmlElementName) { throw new XmlException( "Root XML node should be named \"" + SettingsXmlElementName + "\". Got: " + rootNode.Name ); } foreach (XmlNode childNode in rootNode.ChildNodes) { switch (childNode.Name.ToLower()) { case "databaseassembly": settings.DatabaseAssemblyPath = childNode.InnerText; break; } } }