protected void FillWorkflowActivityDetails()

in src/MIMConfigDocumenter/MIMServicePolicyDocumenter.cs [1538:1633]


        protected void FillWorkflowActivityDetails(bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry("Pilot Config: '{0}'.", pilotConfig);

            try
            {
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;
                var activityBaseTable = dataSet.Tables[0];
                var activityAssemblyVersionTable = dataSet.Tables[1];
                var activitySelectedOptionsTable = dataSet.Tables[2];
                var activityConfigurationMultivaluesTable = dataSet.Tables[3];
                var activityValueExpressionsTable = dataSet.Tables[4];
                var activityUpdateExpressionsTable = dataSet.Tables[5];

                var xomlChange = this.GetAttributeChange("XOML");
                var xomlXml = ServiceCommonDocumenter.ConvertXomlToSimplifiedXml(pilotConfig ? xomlChange.NewValueText : xomlChange.OldValueText);

                if (xomlXml != null)
                {
                    var activities = xomlXml.Elements();
                    for (var activityIndex = 0; activityIndex < activities.Count(); ++activityIndex)
                    {
                        var activity = activities.ElementAt(activityIndex);
                        var activityType = activity.Name.LocalName;

                        if (activityType == "AuthenticationGateActivity")
                        {
                            activity = activity.XPathSelectElement("AuthenticationGateActivity.AuthenticationGate/child::node()");
                            activityType = activity.Name.LocalName;
                        }

                        var assemblyVersion = activity.Attribute("AssemblyVersion");
                        var activityDisplayName = (string)activity.Attribute("ActivityDisplayName");
                        activityDisplayName = string.IsNullOrEmpty(activityDisplayName) ? activityType : activityDisplayName + " (" + activityType + ")";

                        Documenter.AddRow(activityBaseTable, new object[] { activityIndex, activityType, activityDisplayName });
                        Documenter.AddRow(activityAssemblyVersionTable, new object[] { activityIndex, assemblyVersion });

                        foreach (var attribute in activity.Attributes().Where(attribute => !attribute.IsNamespaceDeclaration))
                        {
                            if (attribute.Name == "AssemblyVersion")
                            {
                                continue;
                            }

                            var selectedOption = attribute.Name.LocalName;
                            var optionValue = attribute.Value;
                            var optionValueMarkup = attribute.Value;

                            if (ServiceCommonDocumenter.IsGuid(optionValue))
                            {
                                var valueModificationType = this.Environment == ConfigEnvironment.PilotOnly ? DataRowState.Added : this.Environment == ConfigEnvironment.ProductionOnly ? DataRowState.Deleted : DataRowState.Unchanged; // Or should it be modified?
                                var resolvedValue = TryResolveReferences(optionValue, pilotConfig, valueModificationType);
                                optionValueMarkup = resolvedValue.Item1;
                                optionValue = resolvedValue.Item2;
                            }

                            if (optionValue != "{x:Null}" && optionValue != "00000000-0000-0000-0000-000000000000" && selectedOption != "Name" && selectedOption != "ActivityDisplayName")
                            {
                                Documenter.AddRow(activitySelectedOptionsTable, new object[] { activityIndex, selectedOption, WebUtility.HtmlEncode(optionValueMarkup), optionValue });
                            }
                        }

                        switch (activityType)
                        {
                            case "QAAuthenticationGate":
                                this.FillWorkflowActivityExpressionsList(activityConfigurationMultivaluesTable, activity.XPathSelectElement("QAAuthenticationGate.Questions/Array"), activityIndex);
                                break;
                            case "VerifyRequest":
                                this.FillWorkflowActivityValueExpressions(activityValueExpressionsTable, activity.XPathSelectElement("VerifyRequest.ConditionsTable/Hashtable"), activityIndex, 1);
                                break;
                            case "CreateResource":
                                this.FillWorkflowActivityValueExpressions(activityValueExpressionsTable, activity.XPathSelectElement("CreateResource.QueriesTable/Hashtable"), activityIndex, 1);
                                this.FillWorkflowActivityValueExpressions(activityValueExpressionsTable, activity.XPathSelectElement("CreateResource.AttributesTable/Hashtable"), activityIndex, 2);
                                break;
                            case "UpdateResources":
                                this.FillWorkflowActivityValueExpressions(activityValueExpressionsTable, activity.XPathSelectElement("UpdateResources.QueriesTable/Hashtable"), activityIndex, 1);
                                this.FillWorkflowActivityValueExpressions(activityUpdateExpressionsTable, activity.XPathSelectElement("UpdateResources.UpdatesTable/Hashtable"), activityIndex, 2);
                                break;
                            case "GenerateUniqueValue":
                                this.FillWorkflowActivityValueExpressions(activityValueExpressionsTable, activity.XPathSelectElement("GenerateUniqueValue.LdapQueriesTable/Hashtable"), activityIndex, 1);
                                this.FillWorkflowActivityExpressionsList(activityConfigurationMultivaluesTable, activity.XPathSelectElement("GenerateUniqueValue.ValueExpressions/ArrayList"), activityIndex);
                                break;
                            case "RunPowerShellScript":
                                this.FillWorkflowActivityValueExpressions(activityValueExpressionsTable, activity.XPathSelectElement("RunPowerShellScript.ParametersTable/Hashtable"), activityIndex, 1);
                                this.FillWorkflowActivityExpressionsList(activityConfigurationMultivaluesTable, activity.XPathSelectElement("RunPowerShellScript.Arguments/ArrayList"), activityIndex);
                                break;
                        }
                    }
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit("Pilot Config: '{0}'.", pilotConfig);
            }
        }