/// <summary>
        /// Adds the ADM instructions that describe the policies that can be used to override the configuration
        /// information represented by a configuration section.
        /// </summary>
        /// <param name="contentBuilder">The <see cref="AdmContentBuilder"/> to which the Adm instructions are to be appended.</param>
        /// <param name="configurationSection">The configuration section instance.</param>
        /// <param name="configurationSource">The configuration source from where to get additional configuration
        /// information, if necessary.</param>
        /// <param name="sectionKey">The root key for the section's policies.</param>
        protected override void AddAdministrativeTemplateDirectives(AdmContentBuilder contentBuilder,
                                                                    ConnectionStringsSection configurationSection,
                                                                    IConfigurationSource configurationSource,
                                                                    String sectionKey)
        {
            contentBuilder.StartCategory(Resources.ConnectionStringsCategoryName);
            {
                foreach (ConnectionStringSettings connectionString in configurationSection.ConnectionStrings)
                {
                    contentBuilder.StartPolicy(String.Format(CultureInfo.InvariantCulture,
                                                             Resources.ConnectionStringPolicyNameTemplate,
                                                             connectionString.Name),
                                               sectionKey + @"\" + connectionString.Name);

                    contentBuilder.AddEditTextPart(Resources.ConnectionStringConnectionStringPartName,
                                                   ConnectionStringPropertyName,
                                                   connectionString.ConnectionString,
                                                   500,
                                                   true);

                    contentBuilder.AddComboBoxPart(Resources.ConnectionStringProviderNamePartName,
                                                   ProviderNamePropertyName,
                                                   connectionString.ProviderName,
                                                   255,
                                                   true,
                                                   "System.Data.SqlClient",
                                                   "System.Data.OracleClient");

                    contentBuilder.EndPolicy();
                }
            }
            contentBuilder.EndCategory();
        }
        protected override void AddAdministrativeTemplateDirectives(
            AdmContentBuilder contentBuilder,
            DatabaseSettings configurationSection,
            IConfigurationSource configurationSource,
            string sectionKey)
        {
            contentBuilder.StartPolicy(Resources.DatabaseSettingsPolicyName, sectionKey);
            List <AdmDropDownListItem> dropDownListItemList = new List <AdmDropDownListItem>();
            ConnectionStringsSection   section = (ConnectionStringsSection)configurationSource.GetSection("connectionStrings");

            if (section != null)
            {
                foreach (ConnectionStringSettings connectionString in (ConfigurationElementCollection)section.ConnectionStrings)
                {
                    dropDownListItemList.Add(new AdmDropDownListItem(connectionString.Name, connectionString.Name));
                }
            }
            contentBuilder.AddDropDownListPart(Resources.DatabaseSettingsDefaultDatabasePartName, "defaultDatabase", (IEnumerable <AdmDropDownListItem>)dropDownListItemList, configurationSection.DefaultDatabase);
            contentBuilder.EndPolicy();
            if (configurationSection.ProviderMappings.Count <= 0)
            {
                return;
            }
            contentBuilder.StartCategory(Resources.ProviderMappingsCategoryName);
            foreach (DbProviderMapping providerMapping in configurationSection.ProviderMappings)
            {
                contentBuilder.StartPolicy(string.Format((IFormatProvider)CultureInfo.InvariantCulture, Resources.ProviderMappingPolicyNameTemplate, (object)providerMapping.Name), sectionKey + "\\providerMappings\\" + providerMapping.Name);
                contentBuilder.AddComboBoxPart(Resources.ProviderMappingDatabaseTypePartName, "databaseType", providerMapping.DatabaseType.AssemblyQualifiedName, (int)byte.MaxValue, false, DatabaseSettingsManageabilityProvider.DatabaseTypeNames);
                contentBuilder.EndPolicy();
            }
            contentBuilder.EndCategory();
        }
        /// <summary>
        /// Adds the ADM parts that represent the properties of
        /// a specific instance of the configuration element type managed by the receiver.
        /// </summary>
        /// <param name="contentBuilder">The <see cref="AdmContentBuilder"/> to which the Adm instructions are to be appended.</param>
        /// <param name="configurationObject">The configuration object instance.</param>
        /// <param name="configurationSource">The configuration source from where to get additional configuration
        /// information, if necessary.</param>
        /// <param name="elementPolicyKeyName">The key for the element's policies.</param>
        /// <remarks>
        /// Subclasses managing objects that must not create a policy will likely need to include the elements' keys when creating the parts.
        /// </remarks>
        protected override void AddElementAdministrativeTemplateParts(AdmContentBuilder contentBuilder,
                                                                      LoggingExceptionHandlerData configurationObject,
                                                                      IConfigurationSource configurationSource,
                                                                      String elementPolicyKeyName)
        {
            contentBuilder.AddTextPart(String.Format(CultureInfo.CurrentCulture,
                                                     Resources.HandlerPartNameTemplate,
                                                     configurationObject.Name));

            contentBuilder.AddEditTextPart(Resources.LoggingHandlerTitlePartName,
                                           elementPolicyKeyName,
                                           TitlePropertyName,
                                           configurationObject.Title,
                                           255,
                                           true);

            contentBuilder.AddNumericPart(Resources.LoggingHandlerEventIdPartName,
                                          elementPolicyKeyName,
                                          EventIdPropertyName,
                                          configurationObject.EventId);

            contentBuilder.AddDropDownListPartForEnumeration <TraceEventType>(Resources.LoggingHandlerSeverityPartName,
                                                                              elementPolicyKeyName,
                                                                              SeverityPropertyName,
                                                                              configurationObject.Severity);

            contentBuilder.AddNumericPart(Resources.LoggingHandlerPriorityPartName,
                                          elementPolicyKeyName,
                                          PriorityPropertyName,
                                          configurationObject.Priority);

            LoggingSettings loggingConfigurationSection
                = configurationSource.GetSection(LoggingSettings.SectionName) as LoggingSettings;

            contentBuilder.AddDropDownListPartForNamedElementCollection <TraceSourceData>(Resources.LoggingHandlerCategoryPartName,
                                                                                          elementPolicyKeyName,
                                                                                          LogCategoryPropertyName,
                                                                                          loggingConfigurationSection.TraceSources,
                                                                                          configurationObject.LogCategory,
                                                                                          false);

            contentBuilder.AddComboBoxPart(Resources.LoggingHandlerFormatterPartName,
                                           elementPolicyKeyName,
                                           FormatterTypePropertyName,
                                           configurationObject.FormatterType.AssemblyQualifiedName,
                                           255,
                                           true,
                                           typeof(TextExceptionFormatter).AssemblyQualifiedName,
                                           typeof(XmlExceptionFormatter).AssemblyQualifiedName);
        }
 protected override void AddAdministrativeTemplateDirectives(
     AdmContentBuilder contentBuilder,
     ConnectionStringsSection configurationSection,
     IConfigurationSource configurationSource,
     string sectionKey)
 {
     contentBuilder.StartCategory(Resources.ConnectionStringsCategoryName);
     foreach (ConnectionStringSettings connectionString in (ConfigurationElementCollection)configurationSection.ConnectionStrings)
     {
         contentBuilder.StartPolicy(string.Format((IFormatProvider)CultureInfo.InvariantCulture, Resources.ConnectionStringPolicyNameTemplate, (object)connectionString.Name), sectionKey + "\\" + connectionString.Name);
         contentBuilder.AddEditTextPart(Resources.ConnectionStringConnectionStringPartName, "connectionString", connectionString.ConnectionString, 500, true);
         contentBuilder.AddComboBoxPart(Resources.ConnectionStringProviderNamePartName, "providerName", connectionString.ProviderName, (int)byte.MaxValue, true, "System.Data.SqlClient", "System.Data.OracleClient");
         contentBuilder.EndPolicy();
     }
     contentBuilder.EndCategory();
 }
        /// <summary>
        /// Adds the ADM instructions that describe the policies that can be used to override the configuration
        /// information represented by a configuration section.
        /// </summary>
        /// <param name="contentBuilder">The <see cref="AdmContentBuilder"/> to which the Adm instructions are to be appended.</param>
        /// <param name="configurationSection">The configuration section instance.</param>
        /// <param name="configurationSource">The configuration source from where to get additional configuration
        /// information, if necessary.</param>
        /// <param name="sectionKey">The root key for the section's policies.</param>
        protected override void AddAdministrativeTemplateDirectives(AdmContentBuilder contentBuilder,
                                                                    DatabaseSettings configurationSection,
                                                                    IConfigurationSource configurationSource, String sectionKey)
        {
            contentBuilder.StartPolicy(Resources.DatabaseSettingsPolicyName, sectionKey);
            {
                List <AdmDropDownListItem> connectionStrings = new List <AdmDropDownListItem>();
                ConnectionStringsSection   connectionStringsSection
                    = (ConnectionStringsSection)configurationSource.GetSection("connectionStrings");
                if (connectionStringsSection != null)
                {
                    foreach (ConnectionStringSettings connectionString in connectionStringsSection.ConnectionStrings)
                    {
                        connectionStrings.Add(new AdmDropDownListItem(connectionString.Name, connectionString.Name));
                    }
                }
                contentBuilder.AddDropDownListPart(Resources.DatabaseSettingsDefaultDatabasePartName,
                                                   DefaultDatabasePropertyName,
                                                   connectionStrings,
                                                   configurationSection.DefaultDatabase);
            }
            contentBuilder.EndPolicy();

            if (configurationSection.ProviderMappings.Count > 0)
            {
                contentBuilder.StartCategory(Resources.ProviderMappingsCategoryName);
                {
                    foreach (DbProviderMapping providerMapping in configurationSection.ProviderMappings)
                    {
                        contentBuilder.StartPolicy(String.Format(CultureInfo.InvariantCulture,
                                                                 Resources.ProviderMappingPolicyNameTemplate,
                                                                 providerMapping.Name),
                                                   sectionKey + @"\" + ProviderMappingsKeyName + @"\" + providerMapping.Name);

                        contentBuilder.AddComboBoxPart(Resources.ProviderMappingDatabaseTypePartName,
                                                       DatabaseTypePropertyName,
                                                       providerMapping.DatabaseType.AssemblyQualifiedName,
                                                       255,
                                                       false,
                                                       DatabaseTypeNames);

                        contentBuilder.EndPolicy();
                    }
                }
                contentBuilder.EndCategory();
            }
        }
        public void AddComboBoxPartWithInvalidMaxLengthThrows()
        {
            AdmContentBuilder builder = new AdmContentBuilder();

            builder.StartCategory("category");
            builder.StartPolicy("policy", "key");
            builder.AddComboBoxPart("part", "key", "value", "default", 1100, true, "sug1", "sug2", "suggestion");
        }
        public void CanAddComboBoxPartWithKeyName()
        {
            AdmContentBuilder builder = new AdmContentBuilder();

            builder.StartCategory("category");
            builder.StartPolicy("policy", "key");
            builder.AddComboBoxPart("part", "key", "value", "default", 10, true, "sug1", "sug2");
            builder.EndPolicy();
            builder.EndCategory();
            AdmContent content = builder.GetContent();

            IEnumerator<AdmCategory> categoriesEnumerator = content.Categories.GetEnumerator();
            categoriesEnumerator.MoveNext();
            IEnumerator<AdmPolicy> policiesEnumerator = categoriesEnumerator.Current.Policies.GetEnumerator();
            policiesEnumerator.MoveNext();
            IEnumerator<AdmPart> partsEnumerator = policiesEnumerator.Current.Parts.GetEnumerator();
            Assert.IsTrue(partsEnumerator.MoveNext());
            Assert.AreSame(typeof(AdmComboBoxPart), partsEnumerator.Current.GetType());
            Assert.AreEqual("part", ((AdmComboBoxPart)partsEnumerator.Current).PartName);
            Assert.AreEqual("key", ((AdmComboBoxPart)partsEnumerator.Current).KeyName);
            Assert.AreEqual("value", ((AdmComboBoxPart)partsEnumerator.Current).ValueName);
            Assert.AreEqual("default", ((AdmComboBoxPart)partsEnumerator.Current).DefaultValue);
            //Assert.AreEqual(10, ((AdmComboBoxPart)partsEnumerator.Current).Maxlen);	// because of workaround for GPMC bug
            Assert.AreEqual(true, ((AdmComboBoxPart)partsEnumerator.Current).Required);
            IEnumerator<String> suggestionsEnumerator = ((AdmComboBoxPart)partsEnumerator.Current).Suggestions.GetEnumerator();
            Assert.IsTrue(suggestionsEnumerator.MoveNext());
            Assert.AreEqual("sug1", suggestionsEnumerator.Current);
            Assert.IsTrue(suggestionsEnumerator.MoveNext());
            Assert.AreEqual("sug2", suggestionsEnumerator.Current);
            Assert.IsFalse(suggestionsEnumerator.MoveNext());
        }