protected void FillSynchronizationRuleOutboundTransformationsDataSet()

in src/MIMConfigDocumenter/MIMServicePolicyDocumenter.cs [2717:2779]


        protected void FillSynchronizationRuleOutboundTransformationsDataSet(AttributeChange transformationsChange, bool pilotConfig)
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                var dataSet = pilotConfig ? this.PilotDataSet : this.ProductionDataSet;
                var table = dataSet.Tables[0];

                if (transformationsChange != null && transformationsChange.AttributeValues != null && transformationsChange.AttributeValues.Count > 0)
                {
                    foreach (var valueChange in transformationsChange.AttributeValues)
                    {
                        var exportFlowXml = pilotConfig ? (valueChange.ValueModificationType != DataRowState.Deleted ? valueChange.NewValue : string.Empty) : valueChange.OldValue; // Deleted values should be processed only when it's production config.
                        if (!string.IsNullOrEmpty(exportFlowXml))
                        {
                            try
                            {
                                var exportFlow = XElement.Parse(exportFlowXml);
                                if (!exportFlow.Name.LocalName.Equals("export-flow", StringComparison.OrdinalIgnoreCase))
                                {
                                    continue;
                                }

                                var destination = (string)exportFlow.Element("dest");
                                var initialFlow = transformationsChange.AttributeName.Equals("InitialFlow", StringComparison.OrdinalIgnoreCase) ? true : false;
                                var existenceTest = transformationsChange.AttributeName.Equals("ExistenceTest", StringComparison.OrdinalIgnoreCase) ? true : false;
                                var allowNull = ((string)exportFlow.Attribute("allows-null") ?? string.Empty).Equals("true", StringComparison.OrdinalIgnoreCase) ? true : false;
                                var referenceAttributePrecedence = string.Empty;
                                foreach (var csValue in exportFlow.XPathSelectElements("scope/csValue"))
                                {
                                    referenceAttributePrecedence += (string)csValue + ";";
                                }

                                var directFlow = exportFlow.Elements("fn").Count() == 0;
                                var source = string.Empty;
                                if (directFlow)
                                {
                                    source = exportFlow.XPathSelectElement("src/attr") != null ? (string)exportFlow.XPathSelectElement("src/attr") : (string)exportFlow.Element("src");
                                }
                                else
                                {
                                    source = this.ParseSynchronizationRuleFunctionExpression(exportFlow.Element("fn"));
                                }

                                Documenter.AddRow(table, new object[] { destination, initialFlow, existenceTest, allowNull, referenceAttributePrecedence, source, "→", destination });
                            }
                            catch (XmlException e)
                            {
                                var errorMsg = "Error parsing export flow xml: '" + exportFlowXml + "' Error: " + e.ToString();
                                Logger.Instance.WriteError(errorMsg);
                            }
                        }
                    }

                    table.AcceptChanges();
                }
            }
            finally
            {
                Logger.Instance.WriteMethodExit();
            }
        }