PageRenderTime 59ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/product/roundhouse/infrastructure.app/ApplicationConfiguraton.cs

https://github.com/seif/roundhouse
C# | 213 lines | 193 code | 18 blank | 2 comment | 34 complexity | 8a42e208555141f2448ed9eb02403090 MD5 | raw file
  1. using System.Collections.Generic;
  2. using log4net;
  3. using Microsoft.Build.Framework;
  4. namespace roundhouse.infrastructure.app
  5. {
  6. using System;
  7. using System.IO;
  8. using builders;
  9. using containers;
  10. using containers.custom;
  11. using cryptography;
  12. using databases;
  13. using environments;
  14. using extensions;
  15. using filesystem;
  16. using folders;
  17. using infrastructure.logging;
  18. using infrastructure.logging.custom;
  19. using logging;
  20. using migrators;
  21. using resolvers;
  22. using StructureMap;
  23. using Container = roundhouse.infrastructure.containers.Container;
  24. using Environment = roundhouse.environments.Environment;
  25. public static class ApplicationConfiguraton
  26. {
  27. public static void set_defaults_if_properties_are_not_set(ConfigurationPropertyHolder configuration_property_holder)
  28. {
  29. if (string.IsNullOrEmpty(configuration_property_holder.SqlFilesDirectory))
  30. {
  31. configuration_property_holder.SqlFilesDirectory = ApplicationParameters.default_files_directory;
  32. }
  33. if (string.IsNullOrEmpty(configuration_property_holder.ServerName) && string.IsNullOrEmpty(configuration_property_holder.ConnectionString))
  34. {
  35. configuration_property_holder.ServerName = ApplicationParameters.default_server_name;
  36. }
  37. if (configuration_property_holder.CommandTimeout == 0)
  38. {
  39. configuration_property_holder.CommandTimeout = ApplicationParameters.default_command_timeout;
  40. }
  41. if (configuration_property_holder.CommandTimeoutAdmin == 0)
  42. {
  43. configuration_property_holder.CommandTimeoutAdmin = ApplicationParameters.default_admin_command_timeout;
  44. }
  45. if (string.IsNullOrEmpty(configuration_property_holder.AlterDatabaseFolderName))
  46. {
  47. configuration_property_holder.AlterDatabaseFolderName = ApplicationParameters.default_alter_database_folder_name;
  48. }
  49. if (string.IsNullOrEmpty(configuration_property_holder.UpFolderName))
  50. {
  51. configuration_property_holder.UpFolderName = ApplicationParameters.default_up_folder_name;
  52. }
  53. if (string.IsNullOrEmpty(configuration_property_holder.DownFolderName))
  54. {
  55. configuration_property_holder.DownFolderName = ApplicationParameters.default_down_folder_name;
  56. }
  57. if (string.IsNullOrEmpty(configuration_property_holder.RunFirstAfterUpFolderName))
  58. {
  59. configuration_property_holder.RunFirstAfterUpFolderName = ApplicationParameters.default_run_first_after_up_folder_name;
  60. }
  61. if (string.IsNullOrEmpty(configuration_property_holder.FunctionsFolderName))
  62. {
  63. configuration_property_holder.FunctionsFolderName = ApplicationParameters.default_functions_folder_name;
  64. }
  65. if (string.IsNullOrEmpty(configuration_property_holder.ViewsFolderName))
  66. {
  67. configuration_property_holder.ViewsFolderName = ApplicationParameters.default_views_folder_name;
  68. }
  69. if (string.IsNullOrEmpty(configuration_property_holder.SprocsFolderName))
  70. {
  71. configuration_property_holder.SprocsFolderName = ApplicationParameters.default_sprocs_folder_name;
  72. }
  73. if (string.IsNullOrEmpty(configuration_property_holder.IndexesFolderName))
  74. {
  75. configuration_property_holder.IndexesFolderName = ApplicationParameters.default_indexes_folder_name;
  76. }
  77. if (string.IsNullOrEmpty(configuration_property_holder.RunAfterOtherAnyTimeScriptsFolderName))
  78. {
  79. configuration_property_holder.RunAfterOtherAnyTimeScriptsFolderName = ApplicationParameters.default_runAfterOtherAnyTime_folder_name;
  80. }
  81. if (string.IsNullOrEmpty(configuration_property_holder.PermissionsFolderName))
  82. {
  83. configuration_property_holder.PermissionsFolderName = ApplicationParameters.default_permissions_folder_name;
  84. }
  85. if (string.IsNullOrEmpty(configuration_property_holder.SchemaName))
  86. {
  87. configuration_property_holder.SchemaName = ApplicationParameters.default_roundhouse_schema_name;
  88. }
  89. if (string.IsNullOrEmpty(configuration_property_holder.ScriptsRunTableName))
  90. {
  91. configuration_property_holder.ScriptsRunTableName = ApplicationParameters.default_scripts_run_table_name;
  92. }
  93. if (string.IsNullOrEmpty(configuration_property_holder.ScriptsRunErrorsTableName))
  94. {
  95. configuration_property_holder.ScriptsRunErrorsTableName = ApplicationParameters.default_scripts_run_errors_table_name;
  96. }
  97. if (string.IsNullOrEmpty(configuration_property_holder.VersionTableName))
  98. {
  99. configuration_property_holder.VersionTableName = ApplicationParameters.default_version_table_name;
  100. }
  101. if (string.IsNullOrEmpty(configuration_property_holder.VersionFile))
  102. {
  103. configuration_property_holder.VersionFile = ApplicationParameters.default_version_file;
  104. }
  105. if (string.IsNullOrEmpty(configuration_property_holder.VersionXPath))
  106. {
  107. configuration_property_holder.VersionXPath = ApplicationParameters.default_version_x_path;
  108. }
  109. if (string.IsNullOrEmpty(configuration_property_holder.EnvironmentName))
  110. {
  111. configuration_property_holder.EnvironmentName = ApplicationParameters.default_environment_name;
  112. }
  113. if (string.IsNullOrEmpty(configuration_property_holder.OutputPath))
  114. {
  115. configuration_property_holder.OutputPath = ApplicationParameters.default_output_path;
  116. }
  117. if (string.IsNullOrEmpty(configuration_property_holder.DatabaseType))
  118. {
  119. configuration_property_holder.DatabaseType = ApplicationParameters.default_database_type;
  120. }
  121. if (configuration_property_holder.RestoreTimeout == 0)
  122. {
  123. configuration_property_holder.RestoreTimeout = ApplicationParameters.default_restore_timeout;
  124. }
  125. if (!string.IsNullOrEmpty(configuration_property_holder.RestoreFromPath))
  126. {
  127. configuration_property_holder.RestoreFromPath = Path.GetFullPath(configuration_property_holder.RestoreFromPath);
  128. }
  129. }
  130. private static void set_up_current_mappings(ConfigurationPropertyHolder configuration_property_holder)
  131. {
  132. ApplicationParameters.CurrentMappings.roundhouse_schema_name = configuration_property_holder.SchemaName;
  133. ApplicationParameters.CurrentMappings.version_table_name = configuration_property_holder.VersionTableName;
  134. ApplicationParameters.CurrentMappings.scripts_run_table_name = configuration_property_holder.ScriptsRunTableName;
  135. ApplicationParameters.CurrentMappings.scripts_run_errors_table_name = configuration_property_holder.ScriptsRunErrorsTableName;
  136. ApplicationParameters.CurrentMappings.database_type = configuration_property_holder.DatabaseType;
  137. }
  138. public static void build_the_container(ConfigurationPropertyHolder configuration_property_holder)
  139. {
  140. Container.initialize_with(null);
  141. Container.initialize_with(build_items_for_container(configuration_property_holder));
  142. initialize_file_log_appender();
  143. }
  144. private static InversionContainer build_items_for_container(ConfigurationPropertyHolder configuration_property_holder)
  145. {
  146. configuration_property_holder.DatabaseType = DatabaseTypeSynonyms.convert_database_type_synonyms(configuration_property_holder.DatabaseType);
  147. set_up_current_mappings(configuration_property_holder);
  148. Logger multiLogger = GetMultiLogger(configuration_property_holder);
  149. ObjectFactory.Configure(cfg =>
  150. {
  151. cfg.For<ConfigurationPropertyHolder>().AsSingletons().Use(configuration_property_holder);
  152. cfg.For<FileSystemAccess>().AsSingletons().Use<WindowsFileSystemAccess>();
  153. cfg.For<Database>().AsSingletons().Use(context => DatabaseBuilder.build(context.GetInstance<FileSystemAccess>(), configuration_property_holder));
  154. cfg.For<KnownFolders>().AsSingletons().Use(context => KnownFoldersBuilder.build(context.GetInstance<FileSystemAccess>(), configuration_property_holder));
  155. cfg.For<LogFactory>().AsSingletons().Use<MultipleLoggerLogFactory>();
  156. //cfg.For<Logger>().AsSingletons().Use(context => LogBuilder.build(context.GetInstance<FileSystemAccess>(), configuration_property_holder));
  157. cfg.For<Logger>().Use(multiLogger);
  158. cfg.For<CryptographicService>().AsSingletons().Use<MD5CryptographicService>();
  159. cfg.For<DatabaseMigrator>().AsSingletons().Use(context => new DefaultDatabaseMigrator(context.GetInstance<Database>(), context.GetInstance<CryptographicService>(), configuration_property_holder));
  160. cfg.For<VersionResolver>().AsSingletons().Use(
  161. context => VersionResolverBuilder.build(context.GetInstance<FileSystemAccess>(), configuration_property_holder));
  162. cfg.For<Environment>().AsSingletons().Use(new DefaultEnvironment(configuration_property_holder));
  163. });
  164. // forcing a build of database to initialize connections so we can be sure server/database have values
  165. Database database = ObjectFactory.GetInstance<Database>();
  166. database.initialize_connections(configuration_property_holder);
  167. configuration_property_holder.ServerName = database.server_name;
  168. configuration_property_holder.DatabaseName = database.database_name;
  169. configuration_property_holder.ConnectionString = database.connection_string;
  170. return new StructureMapContainer(ObjectFactory.Container);
  171. }
  172. private static Logger GetMultiLogger(ConfigurationPropertyHolder configuration_property_holder)
  173. {
  174. IList<Logger> loggers = new List<Logger>();
  175. var task = configuration_property_holder as ITask;
  176. if (task != null)
  177. {
  178. Logger msbuild_logger = new MSBuildLogger(configuration_property_holder);
  179. loggers.Add(msbuild_logger);
  180. }
  181. Logger log4net_logger = new Log4NetLogger(LogManager.GetLogger("roundhouse"));
  182. loggers.Add(log4net_logger);
  183. if (configuration_property_holder.Logger != null && !loggers.Contains(configuration_property_holder.Logger))
  184. {
  185. loggers.Add(configuration_property_holder.Logger);
  186. }
  187. return new MultipleLogger(loggers);
  188. }
  189. private static void initialize_file_log_appender()
  190. {
  191. var known_folders = Container.get_an_instance_of<KnownFolders>();
  192. Log4NetAppender.set_file_appender(known_folders.change_drop.folder_full_path);
  193. }
  194. }
  195. }