protected DataTable GetExtensible2ConfigParametersTable()

in src/MIMConfigDocumenter/Extensible2ConnectorDocumenter.cs [136:207]


        protected DataTable GetExtensible2ConfigParametersTable(IEnumerable<XElement> parameterDefinitions, IEnumerable<XElement> parameterValues)
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                var parametersTable = new DataTable("ConfigParametersTable") { Locale = CultureInfo.InvariantCulture };

                var column1 = new DataColumn("DisplayOrder", typeof(int));
                var column2 = new DataColumn("Setting");
                var column3 = new DataColumn("Configuration");
                var column4 = new DataColumn("Encrypted?");

                parametersTable.Columns.Add(column1);
                parametersTable.Columns.Add(column2);
                parametersTable.Columns.Add(column3);
                parametersTable.Columns.Add(column4);
                parametersTable.PrimaryKey = new[] { column1, column2 };

                if (parameterDefinitions != null && parameterValues != null)
                {
                    var parameterIndex = -1;
                    foreach (var parameterDefinition in parameterDefinitions)
                    {
                        ++parameterIndex;

                        var parameterName = (string)parameterDefinition.Element("name");
                        var parameterType = (string)parameterDefinition.Element("type") ?? string.Empty;
                        var parameterValue = string.Empty;

                        foreach (var parameter in parameterValues)
                        {
                            if ((string)parameter.Attribute("name") == parameterName)
                            {
                                parameterValue = (string)parameter;
                                break;
                            }
                        }

                        var encrypted = parameterType.StartsWith("encrypted", StringComparison.OrdinalIgnoreCase);

                        switch (parameterType.ToUpperInvariant())
                        {
                            case "FILE":
                                try
                                {
                                    parameterValue = Encoding.UTF8.GetString(Convert.FromBase64String(parameterValue));
                                }
                                catch (Exception e)
                                {
                                    Logger.Instance.WriteError(e.ToString());
                                }

                                break;
                            case "CHECKBOX":
                                parameterValue = parameterValue.Equals("1", StringComparison.OrdinalIgnoreCase) || parameterValue.Equals("true", StringComparison.OrdinalIgnoreCase) ? "Yes" : "No";
                                break;
                        }

                        Documenter.AddRow(parametersTable, new object[] { parameterIndex, parameterName, encrypted ? "******" : WebUtility.HtmlEncode(parameterValue ?? string.Empty), encrypted ? "Yes" : "No" });
                    }

                    parametersTable.AcceptChanges();
                }

                return parametersTable;
            }
            finally
            {
                Logger.Instance.WriteMethodEntry();
            }
        }