Пример #1
0
        /// <summary>
        /// Fills the extensible2 global parameters data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillExtensible2GlobalParametersDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var parameterDefinitions = connector.XPathSelectElements("private-configuration/MAConfig/parameter-definitions/parameter[use = 'global' and type != 'label' and type != 'divider']");
                    var parameterValues      = connector.XPathSelectElements("private-configuration/MAConfig/parameter-values/parameter[@use = 'global']");

                    var parameterTable = this.GetExtensible2ConfigParametersTable(parameterDefinitions, parameterValues);
                    foreach (DataRow row in parameterTable.Rows)
                    {
                        Documenter.AddRow(table, new object[] { row[0], row[1], row[2], row[3] });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
        /// <summary>
        /// Fills the Generic SQL schema page data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        /// <param name="pageNumber">The page number.</param>
        protected void FillGenericSqlSchemaPageDataSet(bool pilotConfig, int pageNumber)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var parameterDefinitions = connector.XPathSelectElements("private-configuration/MAConfig/parameter-definitions/parameter[use = 'schema' and type != 'label' and type != 'divider' and page-number = '" + pageNumber + "']");

                    var parameterIndex = -1;
                    foreach (var parameterDefinition in parameterDefinitions)
                    {
                        ++parameterIndex;
                        var parameterName = (string)parameterDefinition.Element("name");
                        var parameter     = connector.XPathSelectElement("private-configuration/MAConfig/parameter-values/parameter[@use = 'schema' and @name = '" + parameterName + "' and @page-number = '" + pageNumber + "']");
                        var encrypted     = (string)parameter.Attribute("encrypted") == "1";
                        Documenter.AddRow(table, new object[] { parameterIndex, (string)parameter.Attribute("name"), encrypted ? "******" : (string)parameter });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #3
0
        /// <summary>
        /// Fills the extensible2 extension information data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillExtensible2ExtensionInformationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var connectorAssembly        = (string)connector.XPathSelectElement("private-configuration/MAConfig/extension-config/filename");
                    var connectorAssemblyVersion = (string)connector.XPathSelectElement("private-configuration/MAConfig/extension-config/assembly-version");
                    var connectorCapabilityBits  = (string)connector.XPathSelectElement("private-configuration/MAConfig/extension-config/capability-bits");

                    Documenter.AddRow(table, new object[] { 1, "Connector Assembly Name", connectorAssembly });
                    Documenter.AddRow(table, new object[] { 2, "Connector Assembly Version", connectorAssemblyVersion });
                    Documenter.AddRow(table, new object[] { 3, "Connector Capability Bits", connectorCapabilityBits });

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
        /// <summary>
        /// Fills the active directory LDS connection information data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryLDSConnectionInformationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var forestName = (string)connector.XPathSelectElement("private-configuration/adma-configuration/forest-name");
                    var port       = (string)connector.XPathSelectElement("private-configuration/adma-configuration/forest-port");
                    var userName   = (string)connector.XPathSelectElement("private-configuration/adma-configuration/forest-login-user");
                    var userDomain = (string)connector.XPathSelectElement("private-configuration/adma-configuration/forest-login-domain");

                    Documenter.AddRow(table, new object[] { 1, "Server Name", forestName });
                    Documenter.AddRow(table, new object[] { 2, "Port", port });
                    Documenter.AddRow(table, new object[] { 3, "User Name", userName });
                    Documenter.AddRow(table, new object[] { 4, "Domain", userDomain });

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
        /// <summary>
        /// Fills the database columns information data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillDatabaseColumnsInformationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var columns = connector.XPathSelectElements("private-configuration/oledbma-configuration/mms-info/column-info/column");
                    foreach (var column in columns)
                    {
                        var name     = (string)column.Element("name");
                        var dataType = (string)column.Element("data-type");
                        var length   = (string)column.Element("length");
                        var nullable = (string)column.Element("isnullable") == "1" ? "Yes" : "No";
                        var type     = column.Element("mms-type") != null && (string)column.Element("mms-type").Attribute("dn") == "1" ? "Reference DN" : (string)column.Element("mms-type");
                        Documenter.AddRow(table, new object[] { name, dataType, length, nullable, type });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #6
0
        /// <summary>
        /// Fills the connector password management configuration data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryPasswordManagementConfigurationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var table = dataSet.Tables[0];

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var enablePasswordSync = !((string)connector.XPathSelectElement("password-sync-allowed") ?? string.Empty).Equals("1", StringComparison.OrdinalIgnoreCase) ? "No" : "Yes";

                    Documenter.AddRow(table, new object[] { 0, "Enable password management", enablePasswordSync });

                    if (enablePasswordSync.Equals("Yes", StringComparison.OrdinalIgnoreCase))
                    {
                        Documenter.AddRow(table, new object[] { 1, "Maximum retry count", (string)connector.XPathSelectElement("password-sync/maximum-retry-count") });
                        Documenter.AddRow(table, new object[] { 2, "Retry interval (seconds)", (string)connector.XPathSelectElement("password-sync/retry-interval") });
                        Documenter.AddRow(table, new object[] { 3, "Require secure connection for password synchronization options", !((string)connector.XPathSelectElement("password-sync/allow-low-security") ?? string.Empty).Equals("1", StringComparison.OrdinalIgnoreCase) ? "Yes" : "No" });
                        Documenter.AddRow(table, new object[] { 4, "Unlock locked accounts when resetting passwords", !((string)connector.XPathSelectElement("password-sync/unlock-account") ?? string.Empty).Equals("1", StringComparison.OrdinalIgnoreCase) ? "Yes" : "No" });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'.", pilotConfig);
            }
        }
Пример #7
0
        /// <summary>
        /// Fills the active directory connection option data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryConnectionOptionDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var signAndSeal = connector.XPathSelectElement("private-configuration/adma-configuration/sign-and-seal");

                    if ((string)signAndSeal == "1")
                    {
                        Documenter.AddRow(table, new object[] { 1, "Sign and Encrypt LDAP traffic", "Yes" });
                    }
                    else
                    {
                        Documenter.AddRow(table, new object[] { 1, "Sign and Encrypt LDAP traffic", "No" });

                        var sslBind = connector.XPathSelectElement("private-configuration/adma-configuration/ssl-bind");

                        if ((string)sslBind == "1")
                        {
                            Documenter.AddRow(table, new object[] { 2, "Enable SSL for the connection", "Yes" });

                            var crlCheck = sslBind.Attribute("crl-check");

                            var crlCheckEnabled = (string)crlCheck == "1" ? "Yes" : "No";
                            Documenter.AddRow(table, new object[] { 3, "Enable CRL Checking", crlCheckEnabled });
                        }
                        else
                        {
                            Documenter.AddRow(table, new object[] { 2, "Enable SSL for the connection", "No" });
                        }
                    }

                    // Only applicable for AD LDS connector
                    var simpleBind = connector.XPathSelectElement("private-configuration/adma-configuration/simple-bind");

                    if ((string)simpleBind == "1")
                    {
                        Documenter.AddRow(table, new object[] { 4, "Enable Simple Bind", "Yes" });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
        /// <summary>
        /// Fills the database connection information data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillDatabaseConnectionInformationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var serverName          = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/server");
                    var database            = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/databasename");
                    var dataSource          = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/datasource");
                    var tableName           = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/tablename");
                    var deltaTableName      = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/delta-tablename");
                    var multivalueTableName = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/multivalued-tablename");
                    var integratedAuth      = ((string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/authentication") ?? string.Empty).Equals("integrated", StringComparison.OrdinalIgnoreCase);
                    var userName            = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/user");
                    var userDomain          = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/connection-info/domain");

                    Documenter.AddRow(table, new object[] { 1, "Server Name", serverName });
                    if (!string.IsNullOrEmpty(dataSource))
                    {
                        Documenter.AddRow(table, new object[] { 2, "Data Source", dataSource });
                    }
                    else
                    {
                        Documenter.AddRow(table, new object[] { 2, "Database", database });
                    }

                    Documenter.AddRow(table, new object[] { 3, "Table/View", tableName });
                    Documenter.AddRow(table, new object[] { 4, "Delta Table/View", deltaTableName });
                    Documenter.AddRow(table, new object[] { 5, "Multivalue Table", multivalueTableName });

                    if (!this.ConnectorCategory.Equals("DB2", StringComparison.OrdinalIgnoreCase))
                    {
                        Documenter.AddRow(table, new object[] { 6, "Authentication", integratedAuth ? "Windows integrated authentication" : this.ConnectorCategory.Equals("MSSQL", StringComparison.OrdinalIgnoreCase) ? "SQL authentication" : "Database authentication" });
                    }

                    Documenter.AddRow(table, new object[] { 7, "User Name", userName });
                    Documenter.AddRow(table, new object[] { 8, "Password", "******" });
                    Documenter.AddRow(table, new object[] { 9, "Domain", userDomain });

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #9
0
        /// <summary>
        /// Fills the extensible2 run profile data set.
        /// </summary>
        /// <param name="runProfileName">Name of the run profile.</param>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected override void FillConnectorRunProfileDataSet(string runProfileName, bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Run Profile Name: '{0}'. Pilot Config: '{1}'.", runProfileName, pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    base.FillConnectorRunProfileDataSet(runProfileName, pilotConfig);

                    var table  = dataSet.Tables[0];
                    var table2 = dataSet.Tables[1];

                    var runProfileSteps = connector.XPathSelectElements("ma-run-data/run-configuration[name = '" + runProfileName + "']/configuration/step");

                    var stepIndex = 0;
                    foreach (var runProfileStep in runProfileSteps)
                    {
                        ++stepIndex;
                        var batchSize = (string)runProfileStep.XPathSelectElement("custom-data/extensible2-step-data/batch-size");
                        if (!string.IsNullOrEmpty(batchSize))
                        {
                            Documenter.AddRow(table2, new object[] { stepIndex, "Batch Size (objects)", batchSize, 1000 });
                        }

                        var timeout = (string)runProfileStep.XPathSelectElement("custom-data/extensible2-step-data/timeout");
                        if (!string.IsNullOrEmpty(timeout))
                        {
                            Documenter.AddRow(table2, new object[] { stepIndex, "Timeout (seconds)", timeout, 1001 });
                        }

                        var parameterDefinitions = connector.XPathSelectElements("private-configuration/MAConfig/parameter-definitions/parameter[use = 'run-step' and type != 'label' and type != 'divider']");
                        var parameterValues      = runProfileStep.XPathSelectElements("custom-data/parameter-values/parameter");

                        var parameterTable = this.GetExtensible2ConfigParametersTable(parameterDefinitions, parameterValues);
                        foreach (DataRow row in parameterTable.Rows)
                        {
                            Documenter.AddRow(table2, new object[] { stepIndex, row[1], row[2], 1000 + (int)row[0] });
                        }
                    }

                    table.AcceptChanges();
                    table2.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Run Profile Name: '{0}'. Pilot Config: '{1}'.", runProfileName, pilotConfig);
            }
        }
        /// <summary>
        /// Fills the database columns information data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillDatabaseSpecialAttributesDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var anchorAttributes = connector.XPathSelectElements("private-configuration/oledbma-configuration/mms-info/anchor/attribute");
                    var anchor           = string.Empty;
                    foreach (var anchorAttribute in anchorAttributes)
                    {
                        anchor += (string)anchorAttribute + "+";
                    }

                    Documenter.AddRow(table, new object[] { 1, "Anchor", anchor.Trim('+') });

                    var objectTypeColumn = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/mms-info/object-type-info/object-type-column") ?? string.Empty;

                    if (string.IsNullOrEmpty(objectTypeColumn))
                    {
                        var objectType = (string)connector.XPathSelectElement("private-configuration/oledbma-configuration/mms-info/object-type");

                        Documenter.AddRow(table, new object[] { 2, "Fixed Object Type", (string)objectType });
                    }
                    else
                    {
                        Documenter.AddRow(table, new object[] { 3, "Object Type Column", (string)objectTypeColumn });

                        var objectTypes = connector.XPathSelectElements("private-configuration/oledbma-configuration/mms-info/object-type-info/object-type");
                        for (var objectTypeIndex = 0; objectTypeIndex < objectTypes.Count(); ++objectTypeIndex)
                        {
                            var objectType = (string)objectTypes.ElementAt(objectTypeIndex);

                            Documenter.AddRow(table, new object[] { 4 + objectTypeIndex, "Object Type", objectType });
                        }
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #11
0
        /// <summary>
        /// Fills the Active Directory run profile data set.
        /// </summary>
        /// <param name="runProfileName">Name of the run profile.</param>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected override void FillConnectorRunProfileDataSet(string runProfileName, bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Run Profile Name: '{0}'. Pilot Config: '{1}'.", runProfileName, pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    base.FillConnectorRunProfileDataSet(runProfileName, pilotConfig);

                    var table  = dataSet.Tables[0];
                    var table2 = dataSet.Tables[1];

                    var runProfileSteps = connector.XPathSelectElements("ma-run-data/run-configuration[name = '" + runProfileName + "']/configuration/step");

                    var stepIndex = 0;
                    foreach (var runProfileStep in runProfileSteps)
                    {
                        ++stepIndex;
                        var batchSize = (string)runProfileStep.XPathSelectElement("custom-data/adma-step-data/batch-size");
                        if (!string.IsNullOrEmpty(batchSize))
                        {
                            Documenter.AddRow(table2, new object[] { stepIndex, "Batch Size (objects)", batchSize, 1000 });
                        }

                        var pageSize = (string)runProfileStep.XPathSelectElement("custom-data/adma-step-data/page-size");
                        if (!string.IsNullOrEmpty(pageSize))
                        {
                            Documenter.AddRow(table2, new object[] { stepIndex, "Page Size (objects)", pageSize, 1001 });
                        }

                        var timeout = (string)runProfileStep.XPathSelectElement("custom-data/adma-step-data/time-limit");
                        if (!string.IsNullOrEmpty(timeout))
                        {
                            Documenter.AddRow(table2, new object[] { stepIndex, "Timeout (seconds)", timeout, 1002 });
                        }
                    }

                    table.AcceptChanges();
                    table2.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Run Profile Name: '{0}'. Pilot Config: '{1}'.", runProfileName, pilotConfig);
            }
        }
Пример #12
0
        /// <summary>
        /// Fills the connector GAL Exchange configuration data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryGALExchangeConfigurationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var table  = dataSet.Tables[0];
                var table2 = dataSet.Tables[1];

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var smtpDomains = connector.XPathSelectElements("private-configuration/adma-configuration/ui-data/galma/smtp-mail-domains/domain");

                    Documenter.AddRow(table, new object[] { 0, "SMTP mail suffix(s) for mailbox and mail objects in this forest" });
                    if (smtpDomains.Count() == 0)
                    {
                        Documenter.AddRow(table2, new object[] { 0, "None" });
                    }
                    else
                    {
                        foreach (var smtpDomain in smtpDomains)
                        {
                            Documenter.AddRow(table2, new object[] { 0, smtpDomain.Value });
                        }
                    }

                    var mailRouting = ((string)connector.XPathSelectElement("private-configuration/adma-configuration/ui-data/galma/mail-routing") ?? string.Empty).Equals("true", StringComparison.OrdinalIgnoreCase) ? "Yes" : "No";

                    Documenter.AddRow(table, new object[] { 1, "Route mail through this forest for all contacts created from contacts in this forest" });
                    Documenter.AddRow(table2, new object[] { 1, mailRouting });

                    var crossForestDelegation = ((string)connector.XPathSelectElement("private-configuration/adma-configuration/ui-data/galma/cross-forest-delegation") ?? string.Empty).Equals("true", StringComparison.OrdinalIgnoreCase) ? "Yes" : "No";

                    Documenter.AddRow(table, new object[] { 2, "Support cross-forest delegation (Exchange 2007 or 2010 only)" });
                    Documenter.AddRow(table2, new object[] { 2, crossForestDelegation });

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'.", pilotConfig);
            }
        }
Пример #13
0
        /// <summary>
        /// Processes the connector configurations.
        /// </summary>
        private void ProcessConnectorConfigurations()
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                var pilot      = this.PilotXml.XPathSelectElements(Documenter.GetConnectorXmlRootXPath(true) + "/ma-data", Documenter.NamespaceManager);
                var production = this.ProductionXml.XPathSelectElements(Documenter.GetConnectorXmlRootXPath(false) + "/ma-data", Documenter.NamespaceManager);

                // Sort by name
                pilot                       = from connector in pilot
                                   let name = (string)connector.Element("name")
                                              orderby name
                                              select connector;

                // Sort by name
                production                       = from connector in production
                                        let name = (string)connector.Element("name")
                                                   orderby name
                                                   select connector;

                var pilotConnectors = from pilotConnector in pilot
                                      select(string) pilotConnector.Element("name");

                foreach (var connector in pilot)
                {
                    var configEnvironment = production.Any(productionConnector => (string)productionConnector.Element("name") == (string)connector.Element("name")) ? ConfigEnvironment.PilotAndProduction : ConfigEnvironment.PilotOnly;
                    if (configEnvironment == ConfigEnvironment.PilotOnly)
                    {
                        Logger.Instance.WriteWarning("The connector '{0}' only exists in the first set of configuration files. If this is not expected, please edit the config files to match names of this connector in the two enviorments as instructed in the ReadMe wiki.", (string)connector.Element("name"));
                    }

                    this.ProcessConnectorConfiguration(connector, configEnvironment);
                }

                production = production.Where(productionConnector => !pilotConnectors.Contains((string)productionConnector.Element("name")));

                foreach (var connector in production)
                {
                    Logger.Instance.WriteWarning("The connector '{0}' only exists in the second set of configuration files and will be documented as a connector that is deleted from the configuration. If this is not intended, please edit the config files to match names of this connector in the two enviorments as instructed in the ReadMe wiki.", (string)connector.Element("name"));

                    this.ProcessConnectorConfiguration(connector, ConfigEnvironment.ProductionOnly);
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit();
            }
        }
        /// <summary>
        /// Fills the database delta configuration data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillDatabaseDeltaConfigurationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var deltaInfo = connector.XPathSelectElement("private-configuration/oledbma-configuration/mms-info/delta-info");

                    if (deltaInfo != null)
                    {
                        var changeColumn    = (string)deltaInfo.Element("change-column");
                        var changeAdd       = (string)deltaInfo.Element("add");
                        var changeModify    = (string)deltaInfo.Element("update");
                        var changeDelete    = (string)deltaInfo.Element("delete");
                        var attributeColumn = (string)deltaInfo.Element("attribute-column");
                        var attributeModify = (string)deltaInfo.Element("update-attribute");

                        Documenter.AddRow(table, new object[] { 1, "Change type attribute", changeColumn });
                        Documenter.AddRow(table, new object[] { 2, "Modify", changeModify });
                        Documenter.AddRow(table, new object[] { 3, "Add", changeAdd });
                        Documenter.AddRow(table, new object[] { 4, "Delete", changeDelete });
                        Documenter.AddRow(table, new object[] { 5, "Enable attribute-level change type synchronization", !string.IsNullOrEmpty(attributeColumn) ? "Yes" : "No" });

                        if (!string.IsNullOrEmpty(attributeColumn))
                        {
                            Documenter.AddRow(table, new object[] { 6, "Attribute-level synchronization column", attributeColumn });
                            Documenter.AddRow(table, new object[] { 7, "Attribute modify", attributeModify });
                        }
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #15
0
        /// <summary>
        /// Processes the extensible2 partitions and hierarchies configuration.
        /// </summary>
        protected void ProcessExtensible2PartitionsAndHierarchiesConfiguration()
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                Logger.Instance.WriteInfo("Processing Extensible2 Partitions and Hierarchies Configuration.");

                var sectionTitle = "Partitions and Hierarchies";

                this.WriteSectionHeader(sectionTitle, 3);

                var xpath = "/ma-data[name ='" + this.ConnectorName + "']" + "//ma-partition-data/partition[selected = 1]";

                var pilot      = this.PilotXml.XPathSelectElements(Documenter.GetConnectorXmlRootXPath(true) + xpath, Documenter.NamespaceManager);
                var production = this.ProductionXml.XPathSelectElements(Documenter.GetConnectorXmlRootXPath(false) + xpath, Documenter.NamespaceManager);

                // Sort by name
                var pilotPartitions = from partition in pilot
                                      let name = (string)partition.Element("name")
                                                 orderby name
                                                 select name;

                foreach (var partition in pilotPartitions)
                {
                    this.ProcessExtensible2Partition(partition);
                }

                // Sort by name
                var productionPartitions = from partition in production
                                           let name = (string)partition.Element("name")
                                                      orderby name
                                                      select name;

                productionPartitions = productionPartitions.Where(productionPartition => !pilotPartitions.Contains(productionPartition));

                foreach (var partition in productionPartitions)
                {
                    this.ProcessExtensible2Partition(partition);
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit();
            }
        }
Пример #16
0
        /// <summary>
        /// Fills the extensible2 anchor configurations data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillExtensible2AnchorConfigurationsDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table  = dataSet.Tables[0];
                    var table2 = dataSet.Tables[1];

                    var objectTypes = connector.XPathSelectElements("private-configuration/MAConfig/importing/per-class-settings/class");

                    foreach (var objectType in objectTypes)
                    {
                        var objectName = (string)objectType.Element("name");
                        Documenter.AddRow(table, new object[] { objectName });

                        var anchor = objectType.Element("anchor");
                        if (anchor != null)
                        {
                            var anchorAttributes = anchor.Elements("attribute");

                            var attributeIndex = -1;
                            foreach (var anchorAttribute in anchorAttributes)
                            {
                                ++attributeIndex;
                                Documenter.AddRow(table2, new object[] { objectName, (string)anchorAttribute, attributeIndex });
                            }
                        }
                    }

                    table.AcceptChanges();
                    table2.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #17
0
        /// <summary>
        /// Fills the active directory partition settings data set.
        /// </summary>
        /// <param name="partitionName">Name of the partition.</param>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryPartitionSettingsDataSet(string partitionName, bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Partion Name: '{0}'. Pilot Config: '{1}'.", partitionName, pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");
                if (connector != null)
                {
                    var partition = connector.XPathSelectElement("ma-partition-data/partition[selected = 1 and name = '" + partitionName + "']");

                    if (partition != null)
                    {
                        var table  = dataSet.Tables[0];
                        var table2 = dataSet.Tables[1];

                        // Preferred Domain Controllers
                        Documenter.AddRow(table, new object[] { 0, "Preferred Domain Controllers" });
                        var preferredDomainControllers = partition.XPathSelectElements("custom-data/adma-partition-data/preferred-dcs/preferred-dc");

                        var pdcIndex = -1;
                        foreach (var preferredDomainController in preferredDomainControllers)
                        {
                            ++pdcIndex;
                            Documenter.AddRow(table2, new object[] { "Preferred Domain Controllers", pdcIndex, (string)preferredDomainController });
                        }

                        // Last Domain Controller used
                        var lastDomainControllerUsed = (string)partition.XPathSelectElement("custom-data/adma-partition-data/last-dc");
                        Documenter.AddRow(table, new object[] { 1, "Last domain controller used" });
                        Documenter.AddRow(table2, new object[] { "Last domain controller used", 0, lastDomainControllerUsed });

                        table.AcceptChanges();
                        table2.AcceptChanges();
                    }
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Partion Name: '{0}'. Pilot Config: '{1}'.", partitionName, pilotConfig);
            }
        }
Пример #18
0
        /// <summary>
        /// Fills the connector GAL container configuration data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryGALContainerConfigurationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var table  = dataSet.Tables[0];
                var table2 = dataSet.Tables[1];

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var targetOu = (string)connector.XPathSelectElement("private-configuration/adma-configuration/ui-data/galma/target-ou");

                    Documenter.AddRow(table, new object[] { 0, "Destination container for contacts synchronized with this forest" });
                    Documenter.AddRow(table2, new object[] { 0, targetOu });

                    var sourceOus = connector.XPathSelectElements("private-configuration/adma-configuration/ui-data/galma/source-contact-ous/ou");

                    Documenter.AddRow(table, new object[] { 1, "Source containers with authoritative contacts in the forest" });

                    if (sourceOus.Count() == 0)
                    {
                        Documenter.AddRow(table2, new object[] { 1, "None" });
                    }
                    else
                    {
                        foreach (var sourceOu in sourceOus)
                        {
                            Documenter.AddRow(table2, new object[] { 1, sourceOu.Value });
                        }
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'.", pilotConfig);
            }
        }
        /// <summary>
        /// Fills the database multi-value data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillDatabaseMultiValueConfigurationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var multiValueInfo = connector.XPathSelectElement("private-configuration/oledbma-configuration/mms-info/multivalued-info");

                    if (multiValueInfo != null)
                    {
                        var attributeColumn            = (string)multiValueInfo.Element("attribute-column");
                        var attributeColumnString      = (string)multiValueInfo.Element("string-column");
                        var attributeColumnLargeString = (string)multiValueInfo.Element("long-string-column");
                        var attributeColumnBinary      = (string)multiValueInfo.Element("binary-column");
                        var attributeColumnLargeBinary = (string)multiValueInfo.Element("long-binary-column");
                        var attributeColumnNumeric     = (string)multiValueInfo.Element("numeric-column");

                        Documenter.AddRow(table, new object[] { 1, "Attribute name column", attributeColumn });
                        Documenter.AddRow(table, new object[] { 2, "String attribute column", attributeColumnString });
                        Documenter.AddRow(table, new object[] { 3, "Large string attribute column", attributeColumnLargeString });
                        Documenter.AddRow(table, new object[] { 4, "Binary attribute column", attributeColumnBinary });
                        Documenter.AddRow(table, new object[] { 5, "Large Binary attribute column", attributeColumnLargeBinary });
                        Documenter.AddRow(table, new object[] { 6, "Number attribute column", attributeColumnNumeric });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
        /// <summary>
        /// Processes the connector configurations.
        /// </summary>
        private void ProcessConnectorConfigurations()
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                var pilot      = this.PilotXml.XPathSelectElements(Documenter.GetConnectorXmlRootXPath(true) + "/ma-data", Documenter.NamespaceManager);
                var production = this.ProductionXml.XPathSelectElements(Documenter.GetConnectorXmlRootXPath(false) + "/ma-data", Documenter.NamespaceManager);

                // Sort by name
                pilot                       = from connector in pilot
                                   let name = (string)connector.Element("name")
                                              orderby name
                                              select connector;

                // Sort by name
                production                       = from connector in production
                                        let name = (string)connector.Element("name")
                                                   orderby name
                                                   select connector;

                var pilotConnectors = from pilotConnector in pilot
                                      select(string) pilotConnector.Element("name");

                foreach (var connector in pilot)
                {
                    var configEnvironment = production.Any(productionConnector => (string)productionConnector.Element("name") == (string)connector.Element("name")) ? ConfigEnvironment.PilotAndProduction : ConfigEnvironment.PilotOnly;
                    this.ProcessConnectorConfiguration(connector, configEnvironment);
                }

                production = production.Where(productionConnector => !pilotConnectors.Contains((string)productionConnector.Element("name")));

                foreach (var connector in production)
                {
                    this.ProcessConnectorConfiguration(connector, ConfigEnvironment.ProductionOnly);
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit();
            }
        }
        /// <summary>
        /// Fills the FIM object type mapping data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillFIMObjectTypeMappingsDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var projectionRules = from projectionRule in connector.XPathSelectElements("projection/class-mapping")
                                          let sourceObjectType = (string)projectionRule.Attribute("cd-object-type")
                                                                 orderby sourceObjectType
                                                                 select projectionRule;

                    if (projectionRules.Count() == 0)
                    {
                        return;
                    }

                    foreach (var projectionRule in projectionRules)
                    {
                        var sourceObjectType    = (string)projectionRule.Attribute("cd-object-type");
                        var metaverseObjectType = (string)projectionRule.Element("mv-object-type") ?? string.Empty;

                        Documenter.AddRow(table, new object[] { sourceObjectType, metaverseObjectType });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
Пример #22
0
        /// <summary>
        /// Fills the active directory container credential settings data set.
        /// </summary>
        /// <param name="partitionName">Name of the partition.</param>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryContainerCredentialSettingsDataSet(string partitionName, bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Partion Name: '{0}'. Pilot Config: '{1}'.", partitionName, pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var partition = connector.XPathSelectElement("ma-partition-data/partition[selected = 1 and name = '" + partitionName + "']");

                    if (partition != null)
                    {
                        var table = dataSet.Tables[0];

                        var loginUser   = (string)partition.XPathSelectElement("custom-data/adma-partition-data/login-user");
                        var loginDomain = (string)partition.XPathSelectElement("custom-data/adma-partition-data/login-domain");

                        if (string.IsNullOrEmpty(loginUser))
                        {
                            Documenter.AddRow(table, new object[] { "Use default forest credentials", "Yes" });
                        }
                        else
                        {
                            Documenter.AddRow(table, new object[] { "Alternate credentials for this directory partition", loginDomain + @"\" + loginUser });
                        }

                        table.AcceptChanges();
                    }
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Partion Name: '{0}'. Pilot Config: '{1}'.", partitionName, pilotConfig);
            }
        }
Пример #23
0
        /// <summary>
        /// Fills the connector password management configuration data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryExchangeProvisioningConfigurationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var table = dataSet.Tables[0];

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var exchangeUri = (string)connector.XPathSelectElement("private-configuration/adma-configuration/cd-extension/server-name");

                    if (string.IsNullOrEmpty(exchangeUri))
                    {
                        Documenter.AddRow(table, new object[] { "Provision for", "None" });
                    }
                    else
                    {
                        var exchangeVersion = (string)connector.XPathSelectElement("private-configuration/adma-configuration/cd-extension/exchange-version");

                        Documenter.AddRow(table, new object[] { "Provision for", exchangeVersion });

                        var exchangeUriLabel = exchangeVersion.Equals("Exchange 2007", StringComparison.OrdinalIgnoreCase) ? "Exchange 2007 RUS Server" : exchangeVersion.Equals("Exchange 2010", StringComparison.OrdinalIgnoreCase) ? "Exchange 2010 RPS URI" : exchangeVersion;
                        Documenter.AddRow(table, new object[] { exchangeUriLabel, exchangeUri });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'.", pilotConfig);
            }
        }
Пример #24
0
        /// <summary>
        /// Fills the active directory connector parameters data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillActiveDirectoryConnectorParametersDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var parameters = connector.XPathSelectElements("private-configuration/adma-configuration/parameter-values/parameter");

                    // Sort by name
                    parameters                                                     = from parameter in parameters
                                                      let name                     = (string)parameter.Attribute("name")
                                                                           let use = (string)parameter.Attribute("use")
                                                                                     where string.Equals(use, "global", StringComparison.OrdinalIgnoreCase)
                                                                                     orderby name
                                                                                     select parameter;

                    for (var parameterIndex = 0; parameterIndex < parameters.Count(); ++parameterIndex)
                    {
                        var parameter = parameters.ElementAt(parameterIndex);
                        Documenter.AddRow(table, new object[] { (string)parameter.Attribute("name"), (string)parameter });
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }
        /// <summary>
        /// Fills the FIM connectivity information data set.
        /// </summary>
        /// <param name="pilotConfig">if set to <c>true</c>, the pilot configuration is loaded. Otherwise, the production configuration is loaded.</param>
        protected void FillFIMConnectivityInformationDataSet(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var config  = pilotConfig ? this.PilotXml : this.ProductionXml;
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;

                var connector = config.XPathSelectElement(Documenter.GetConnectorXmlRootXPath(pilotConfig) + "/ma-data[name ='" + this.ConnectorName + "']");

                if (connector != null)
                {
                    var table = dataSet.Tables[0];

                    var server         = (string)connector.XPathSelectElement("private-configuration/fimma-configuration/connection-info/server");
                    var database       = (string)connector.XPathSelectElement("private-configuration/fimma-configuration/connection-info/databasename");
                    var serviceHost    = (string)connector.XPathSelectElement("private-configuration/fimma-configuration/connection-info/serviceHost");
                    var integratedAuth = ((string)connector.XPathSelectElement("private-configuration/fimma-configuration/connection-info/authentication") ?? string.Empty).Equals("integrated", StringComparison.OrdinalIgnoreCase);
                    var userName       = (string)connector.XPathSelectElement("private-configuration/fimma-configuration/connection-info/user");
                    var domain         = (string)connector.XPathSelectElement("private-configuration/fimma-configuration/connection-info/domain");

                    Documenter.AddRow(table, new object[] { 1, "Server", server });
                    Documenter.AddRow(table, new object[] { 2, "Database", database });
                    Documenter.AddRow(table, new object[] { 3, "FIM Service base address", serviceHost });
                    Documenter.AddRow(table, new object[] { 4, "Authentication Mode", integratedAuth ? "Windows integrated authentication" : "SQL authentication" });
                    Documenter.AddRow(table, new object[] { 5, "User name", userName });
                    Documenter.AddRow(table, new object[] { 6, "Password", "*****" });
                    Documenter.AddRow(table, new object[] { 7, "Domain", domain });

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'", pilotConfig);
            }
        }