/// <summary> /// Loads the providers. /// </summary> public static void LoadProviders() { // Avoid claiming lock if providers are already loaded if (defaultProvider == null) { lock (_lock) { // Do this again to make sure DefaultProvider is still null if (defaultProvider == null) { //we allow for passing in a configuration section //check to see if one's been passed in if (section == null) { section = ConfigSectionSettings ?? (SubSonicSection)ConfigurationManager.GetSection(ConfigurationSectionName.SUB_SONIC_SERVICE); //if it's still null, throw an exception if (section == null) throw new ConfigurationErrorsException("Can't find the SubSonicService section of the application config file"); } // Load registered providers and point DefaultProvider // to the default provider _provider = new RestProviderCollection(); ProvidersHelper.InstantiateProviders(section.RESTHandlers, _provider, typeof(RestProvider)); defaultProvider = _provider[section.DefaultProvider]; if (defaultProvider == null && _provider.Count > 0) { IEnumerator enumer = _provider.GetEnumerator(); enumer.MoveNext(); defaultProvider = (RestProvider)enumer.Current; if (defaultProvider == null) throw new ProviderException("No providers could be located in the SubSonicService section of the application config file."); } } } } }
/// <summary> /// Sets the provider manually. /// </summary> private static void SetProviderManually() { string traceFlag = GetArg(ConfigurationPropertyName.ENABLE_TRACE); if(!String.IsNullOrEmpty(traceFlag)) DataService.EnableTrace = Convert.ToBoolean(traceFlag); Utility.WriteTrace("Setting config manually - need AT LEAST a /server and /db"); //clear the providers and reset DataService.Provider = new SqlDataProvider(); DataService.Providers = new DataProviderCollection(); //instance a section - we'll set this manually for the DataService SubSonicSection section = new SubSonicSection { TemplateDirectory = GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY) }; CodeService.TemplateDirectory = section.TemplateDirectory; string providerName = GetArg(ConfigurationPropertyName.PROVIDER_TO_USE); if(string.IsNullOrEmpty(providerName)) providerName = "Default"; section.DefaultProvider = providerName; section.DefaultProvider = "Default"; CodeService.TemplateDirectory = section.TemplateDirectory; //set the properties DataProvider provider = DataService.Provider; NameValueCollection config = new NameValueCollection { {"connectionStringName", "Default"} }; //need to add this for now if(!string.IsNullOrEmpty(GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY))) config.Add(ConfigurationPropertyName.TEMPLATE_DIRECTORY, GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY)); //setup the config SetConfig(config, ConfigurationPropertyName.APPEND_WITH); SetConfig(config, ConfigurationPropertyName.ADDITIONAL_NAMESPACES); SetConfig(config, ConfigurationPropertyName.EXCLUDE_PROCEDURE_LIST); SetConfig(config, ConfigurationPropertyName.EXCLUDE_TABLE_LIST); SetConfig(config, ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME); SetConfig(config, ConfigurationPropertyName.FIX_DATABASE_OBJECT_CASING); SetConfig(config, ConfigurationPropertyName.FIX_PLURAL_CLASS_NAMES); SetConfig(config, ConfigurationPropertyName.GENERATED_NAMESPACE); SetConfig(config, ConfigurationPropertyName.GENERATE_LAZY_LOADS); SetConfig(config, ConfigurationPropertyName.GENERATE_NULLABLE_PROPERTIES); SetConfig(config, ConfigurationPropertyName.GENERATE_ODS_CONTROLLERS); SetConfig(config, ConfigurationPropertyName.GENERATE_RELATED_TABLES_AS_PROPERTIES); SetConfig(config, ConfigurationPropertyName.INCLUDE_PROCEDURE_LIST); SetConfig(config, ConfigurationPropertyName.INCLUDE_TABLE_LIST); SetConfig(config, ConfigurationPropertyName.REGEX_DICTIONARY_REPLACE); SetConfig(config, ConfigurationPropertyName.REGEX_IGNORE_CASE); SetConfig(config, ConfigurationPropertyName.REGEX_MATCH_EXPRESSION); SetConfig(config, ConfigurationPropertyName.REGEX_REPLACE_EXPRESSION); SetConfig(config, ConfigurationPropertyName.RELATED_TABLE_LOAD_PREFIX); SetConfig(config, ConfigurationPropertyName.REMOVE_UNDERSCORES); SetConfig(config, ConfigurationPropertyName.SET_PROPERTY_DEFAULTS_FROM_DATABASE); SetConfig(config, ConfigurationPropertyName.SP_STARTS_WITH); SetConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_CLASS_NAME); SetConfig(config, ConfigurationPropertyName.STRIP_COLUMN_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_PARAM_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_STORED_PROCEDURE_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_TABLE_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_VIEW_TEXT); SetConfig(config, ConfigurationPropertyName.USE_EXTENDED_PROPERTIES); SetConfig(config, ConfigurationPropertyName.USE_STORED_PROCEDURES); SetConfig(config, ConfigurationPropertyName.USE_UTC_TIMES); SetConfig(config, ConfigurationPropertyName.VIEW_STARTS_WITH); SetConfig(config, ConfigurationPropertyName.GROUP_OUTPUT); //initialize the provider Utility.WriteTrace("Initializing the provider with the passed in configuration >>> hold on to your hats..."); provider.Initialize(providerName, config); //first, make sure there's a connection Utility.WriteTrace("Overriding the connection string..."); provider.DefaultConnectionString = GetConnnectionString(); Utility.WriteTrace("Set connection string to " + provider.DefaultConnectionString); DataService.Providers.Add(provider); }
private static void SetProviderManually() { string traceFlag = GetArg(ConfigurationPropertyName.ENABLE_TRACE); if (!String.IsNullOrEmpty(traceFlag)) { DataService.EnableTrace = Convert.ToBoolean(traceFlag); } Utility.WriteTrace("Setting config manually - need AT LEAST a /server and /db"); //clear the providers and reset DataService.Provider = new SqlDataProvider(); DataService.Providers = new DataProviderCollection(); //instance a section - we'll set this manually for the DataService SubSonicSection section = new SubSonicSection(); section.TemplateDirectory = GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY); CodeService.TemplateDirectory = section.TemplateDirectory; string providerName = GetArg(ConfigurationPropertyName.PROVIDER_TO_USE); if (string.IsNullOrEmpty(providerName)) { providerName = "Default"; } section.DefaultProvider = providerName; section.DefaultProvider = "Default"; CodeService.TemplateDirectory = section.TemplateDirectory; //set the properties DataProvider provider = DataService.Provider; System.Collections.Specialized.NameValueCollection config = new System.Collections.Specialized.NameValueCollection(); //need to add this for now config.Add("connectionStringName", "Default"); if (!string.IsNullOrEmpty(GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY))) { config.Add(ConfigurationPropertyName.TEMPLATE_DIRECTORY, GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY)); } if (string.IsNullOrEmpty(_namespace)) { config.Add("generatedNamespace", _namespace); } //setup the config SetConfig(config, ConfigurationPropertyName.APPEND_WITH); SetConfig(config, ConfigurationPropertyName.ADDITIONAL_NAMESPACES); SetConfig(config, ConfigurationPropertyName.EXCLUDE_PROCEDURE_LIST); SetConfig(config, ConfigurationPropertyName.EXCLUDE_TABLE_LIST); SetConfig(config, ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME); SetConfig(config, ConfigurationPropertyName.FIX_DATABASE_OBJECT_CASING, _fixCasing.ToString()); SetConfig(config, ConfigurationPropertyName.FIX_PLURAL_CLASS_NAMES, _fixPlural.ToString()); SetConfig(config, ConfigurationPropertyName.GENERATED_NAMESPACE); SetConfig(config, ConfigurationPropertyName.GENERATE_LAZY_LOADS, _lazyLoad.ToString()); SetConfig(config, ConfigurationPropertyName.GENERATE_NULLABLE_PROPERTIES); SetConfig(config, ConfigurationPropertyName.GENERATE_ODS_CONTROLLERS); SetConfig(config, ConfigurationPropertyName.GENERATE_RELATED_TABLES_AS_PROPERTIES, _genRelationProperties.ToString()); SetConfig(config, ConfigurationPropertyName.INCLUDE_PROCEDURE_LIST); SetConfig(config, ConfigurationPropertyName.INCLUDE_TABLE_LIST); SetConfig(config, ConfigurationPropertyName.REGEX_DICTIONARY_REPLACE, regexDictReplace); SetConfig(config, ConfigurationPropertyName.RELATED_TABLE_LOAD_PREFIX); SetConfig(config, ConfigurationPropertyName.REMOVE_UNDERSCORES, _removeUnderScore.ToString()); SetConfig(config, ConfigurationPropertyName.SET_PROPERTY_DEFAULTS_FROM_DATABASE); SetConfig(config, ConfigurationPropertyName.SP_STARTS_WITH); SetConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_CLASS_NAME); SetConfig(config, ConfigurationPropertyName.STRIP_COLUMN_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_PARAM_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_STORED_PROCEDURE_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_TABLE_TEXT); SetConfig(config, ConfigurationPropertyName.STRIP_VIEW_TEXT); SetConfig(config, ConfigurationPropertyName.USE_EXTENDED_PROPERTIES); SetConfig(config, ConfigurationPropertyName.USE_STORED_PROCEDURES, _generateSP.ToString()); SetConfig(config, ConfigurationPropertyName.VIEW_STARTS_WITH); SetConfig(config, ConfigurationPropertyName.REGEX_MATCH_EXPRESSION, regexMatch); SetConfig(config, ConfigurationPropertyName.REGEX_REPLACE_EXPRESSION, regexReplace); SetConfig(config, ConfigurationPropertyName.REGEX_IGNORE_CASE, regexIgnoreCase.ToString()); //initialize the provider Utility.WriteTrace("Initializing the provider with the passed in configuration >>> hold on to your hats..."); provider.Initialize(providerName, config); //first, make sure there's a connection Utility.WriteTrace("Overriding the connection string..."); provider.DefaultConnectionString = GetConnnectionString(); provider.GeneratedNamespace = string.IsNullOrEmpty(_namespace) ? "SubSonic.Generated" : _namespace; AddLogEntry(LogState.Information, "Set connection string to " + provider.DefaultConnectionString); DataService.Providers.Add(provider); }
private static void InstantiateProvider(DataRow configSource) { bool isProjectSource = configSource is MasterStore.ProjectsRow; //bool isProviderSource = configSource is DM.ProvidersRow; MasterStore.ProjectsRow activeProject; MasterStore.ProvidersRow[] activeProviders; if(isProjectSource) { activeProject = (MasterStore.ProjectsRow)configSource; activeProviders = activeProject.Providers(); } else { activeProject = ((MasterStore.ProvidersRow)configSource).Project; activeProviders = new MasterStore.ProvidersRow[] {(MasterStore.ProvidersRow)configSource}; } SubSonicSection section = new SubSonicSection(); if(activeProject.DefaultProviderEntry != null) section.DefaultProvider = activeProject.DefaultProviderEntry.Name; else if(activeProject.Providers().Length > 0) { activeProject.DefaultProvider = activeProject.Providers()[0].ProviderId; MM.Save(); } else { activeProject.SetDefaultProviderNull(); MM.Save(); return; } section.TemplateDirectory = activeProject.TemplateDirectory; CodeService.TemplateDirectory = section.TemplateDirectory; InitializeProviderCollection(); foreach(MasterStore.ProvidersRow providerEntry in activeProviders) { NameValueCollection config = new NameValueCollection(); AddToProviderConfig(config, ConfigurationPropertyName.CONNECTION_STRING_NAME, providerEntry.ConnectionString, MM.ConnectionStrings.NameColumn); AddToProviderConfig(config, ConfigurationPropertyName.APPEND_WITH, providerEntry, MM.Providers.AppendWithColumn); AddToProviderConfig(config, ConfigurationPropertyName.ADDITIONAL_NAMESPACES, providerEntry, MM.Providers.AdditionalNamespacesColumn); AddToProviderConfig(config, ConfigurationPropertyName.EXCLUDE_PROCEDURE_LIST, providerEntry, MM.Providers.ExcludeProcedureListColumn); AddToProviderConfig(config, ConfigurationPropertyName.EXCLUDE_TABLE_LIST, providerEntry, MM.Providers.ExcludeTableListColumn); AddToProviderConfig(config, ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME, providerEntry, MM.Providers.ExtractClassNameFromSPNameColumn); AddToProviderConfig(config, ConfigurationPropertyName.FIX_DATABASE_OBJECT_CASING, providerEntry, MM.Providers.FixDatabaseObjectCasingColumn); AddToProviderConfig(config, ConfigurationPropertyName.FIX_PLURAL_CLASS_NAMES, providerEntry, MM.Providers.FixPluralClassNamesColumn); AddToProviderConfig(config, ConfigurationPropertyName.GENERATED_NAMESPACE, providerEntry, MM.Providers.GeneratedNamespaceColumn); AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_LAZY_LOADS, providerEntry, MM.Providers.GenerateLazyLoadsColumn); AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_NULLABLE_PROPERTIES, providerEntry, MM.Providers.GenerateNullablePropertiesColumn); AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_ODS_CONTROLLERS, providerEntry, MM.Providers.GenerateODSControllersColumn); AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_RELATED_TABLES_AS_PROPERTIES, providerEntry, MM.Providers.GenerateRelatedTablesAsPropertiesColumn); AddToProviderConfig(config, ConfigurationPropertyName.INCLUDE_PROCEDURE_LIST, providerEntry, MM.Providers.IncludeProcedureListColumn); AddToProviderConfig(config, ConfigurationPropertyName.INCLUDE_TABLE_LIST, providerEntry, MM.Providers.IncludeTableListColumn); AddToProviderConfig(config, ConfigurationPropertyName.REGEX_DICTIONARY_REPLACE, providerEntry, MM.Providers.RegexDictionaryReplaceColumn); AddToProviderConfig(config, ConfigurationPropertyName.REGEX_IGNORE_CASE, providerEntry, MM.Providers.RegexIgnoreCaseColumn); AddToProviderConfig(config, ConfigurationPropertyName.REGEX_MATCH_EXPRESSION, providerEntry, MM.Providers.RegexMatchExpressionColumn); AddToProviderConfig(config, ConfigurationPropertyName.REGEX_REPLACE_EXPRESSION, providerEntry, MM.Providers.RegexReplaceExpressionColumn); AddToProviderConfig(config, ConfigurationPropertyName.RELATED_TABLE_LOAD_PREFIX, providerEntry, MM.Providers.RelatedTableLoadPrefixColumn); AddToProviderConfig(config, ConfigurationPropertyName.REMOVE_UNDERSCORES, providerEntry, MM.Providers.RemoveUnderscoresColumn); AddToProviderConfig(config, ConfigurationPropertyName.SET_PROPERTY_DEFAULTS_FROM_DATABASE, providerEntry, MM.Providers.SetPropertyDefaultsFromDatabaseColumn); AddToProviderConfig(config, ConfigurationPropertyName.SP_STARTS_WITH, providerEntry, MM.Providers.SPStartsWithColumn); AddToProviderConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_BASE_CLASS, providerEntry, MM.Providers.StoredProcedureBaseClassColumn); AddToProviderConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_CLASS_NAME, providerEntry, MM.Providers.SPClassNameColumn); AddToProviderConfig(config, ConfigurationPropertyName.STRIP_COLUMN_TEXT, providerEntry, MM.Providers.StripColumnTextColumn); AddToProviderConfig(config, ConfigurationPropertyName.STRIP_PARAM_TEXT, providerEntry, MM.Providers.StripParamTextColumn); AddToProviderConfig(config, ConfigurationPropertyName.STRIP_STORED_PROCEDURE_TEXT, providerEntry, MM.Providers.StripSPTextColumn); AddToProviderConfig(config, ConfigurationPropertyName.STRIP_TABLE_TEXT, providerEntry, MM.Providers.StripTableTextColumn); AddToProviderConfig(config, ConfigurationPropertyName.STRIP_VIEW_TEXT, providerEntry, MM.Providers.StripViewTextColumn); AddToProviderConfig(config, ConfigurationPropertyName.TABLE_BASE_CLASS, providerEntry, MM.Providers.TableBaseClassColumn); AddToProviderConfig(config, ConfigurationPropertyName.USE_EXTENDED_PROPERTIES, providerEntry, MM.Providers.UseExtendedPropertiesColumn); AddToProviderConfig(config, ConfigurationPropertyName.USE_STORED_PROCEDURES, providerEntry, MM.Providers.UseSPsColumn); AddToProviderConfig(config, ConfigurationPropertyName.USE_UTC_TIMES, providerEntry, MM.Providers.UseUTCColumn); AddToProviderConfig(config, ConfigurationPropertyName.VIEW_BASE_CLASS, providerEntry, MM.Providers.ViewBaseClassColumn); AddToProviderConfig(config, ConfigurationPropertyName.VIEW_STARTS_WITH, providerEntry, MM.Providers.ViewStartsWithColumn); if(!providerEntry.IsConnectionStringIdNull()) { string connString = providerEntry.ConnectionString.ConnectionString; string location = providerEntry.Project.OriginalLocation; location = location.EndsWith(@"\") ? location : location + @"\"; location += @"App_Data\"; bool loadProvider = true; string modConn = Regex.Replace(connString, @"\|DataDirectory\|", location, RegexOptions.IgnoreCase); if(!Utility.IsMatch(modConn, connString)) { Match dbFileName = Regex.Match(connString, @"(?<=\|DataDirectory\|).*\.mdf", RegexOptions.IgnoreCase); if(dbFileName != null) { string fileLocation = location + dbFileName.Value; if(!File.Exists(fileLocation)) loadProvider = false; } } if(loadProvider) { Assembly asm = Assembly.Load("SubSonic"); Type type = asm.GetType("SubSonic." + providerEntry.ProviderType.InternalName); if(type != null) { DataProvider provider = (DataProvider)Activator.CreateInstance(type, false); provider.Initialize(providerEntry.Name, config); provider.DefaultConnectionString = modConn; DataService.Providers.Add(provider); } } } } Application.DoEvents(); }
private static void SetProvider(string appConfigPath) { //clear the providers and reset DataService.Provider = new SqlDataProvider(); DataService.Providers = new DataProviderCollection(); //if present, get the connection strings and the SubSonic config if (File.Exists(appConfigPath)) { ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); AddLogEntry(LogState.Information, "Building configuration from " + Path.Combine(Directory.GetCurrentDirectory(), appConfigPath)); fileMap.ExeConfigFilename = appConfigPath; // Open another config file Configuration subConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); try { SubSonicSection section = (SubSonicSection)subConfig.GetSection(ConfigurationSectionName.SUB_SONIC_SERVICE); if (section != null) { DataService.ConfigSection = section; string argTemplateDirectory = GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY); string activeTemplateDirectory = String.IsNullOrEmpty(argTemplateDirectory) ? section.TemplateDirectory : argTemplateDirectory; string argTraceFlag = GetArg(ConfigurationPropertyName.ENABLE_TRACE); string activeTraceFlag = String.IsNullOrEmpty(argTraceFlag) ? section.EnableTrace : argTraceFlag; if (!String.IsNullOrEmpty(activeTraceFlag)) { DataService.EnableTrace = Convert.ToBoolean(activeTraceFlag); } if (!String.IsNullOrEmpty(activeTemplateDirectory)) { AddLogEntry(LogState.Information, "Overriding default templates with those from " + section.TemplateDirectory); CodeService.TemplateDirectory = activeTemplateDirectory; } //initialize //need to pull out the default connection string //since this application doesn't have a config file, the target one does //so reconciling connection string won't work string connectionStringName = section.Providers[0].Parameters["connectionStringName"]; if (connectionStringName == null) { throw new ConfigurationErrorsException("The Parameter 'connectionStringName' was not specified"); } ConnectionStringSettings connSettings = subConfig.ConnectionStrings.ConnectionStrings[connectionStringName]; if (connSettings == null) { throw new ConfigurationErrorsException(string.Format("ConnectionStrings section missing connection string with the name '{0}'", connectionStringName)); } string connString = subConfig.ConnectionStrings.ConnectionStrings[connectionStringName].ConnectionString; //DataService.ConnectionString = connString; System.Web.Configuration.ProvidersHelper.InstantiateProviders(section.Providers, DataService.Providers, typeof(DataProvider)); //this is a tad backwards, but it's what needs to happen since our application //is configuring another application's providers //go back and reset the provider's connection strings //int counter = 0; foreach (DataProvider provider in DataService.Providers) { AddLogEntry(LogState.Information, "Adding connection to " + provider.Name); provider.SetDefaultConnectionString(subConfig.ConnectionStrings.ConnectionStrings[provider.ConnectionStringName].ConnectionString); //provider.ConnectionString = subConfig.ConnectionStrings.ConnectionStrings[provider.ConnectionStringName].ConnectionString; } //reset the default provider string providerName = GetArg("provider"); if (providerName != string.Empty) { try { DataService.Provider = DataService.Providers[providerName]; } catch (Exception e) { AddLogEntry(LogState.Error, string.Format("ERROR: There is no provider with the name '{0}'. Exception: {1}", providerName, e)); } } else { DataService.Provider = DataService.Providers[section.DefaultProvider]; } } } catch (ConfigurationErrorsException x) { //let the user know the config was problematic... Console.WriteLine("Can't set the configuration for the providers. There is an error with your config setup (did you remember to configure SubSonic in your config file?). '{0}'", x.Message); } } else { throw new Exception("There's no config file present at " + appConfigPath); } }