private async Task ProcessOutputs()

in Services/DataX.Config/DataX.Config/ConfigGeneration/Processor/S500_ResolveOutputs.cs [96:195]


        private async Task<FlowOutputSpec[]> ProcessOutputs(string inputMode, FlowGuiOutput[] uiOutputs, RulesCode rulesCode, string configName)
        {
            var outputList = uiOutputs.Select(o => o.Id).ToList();

            var outputsFiltered = rulesCode.Outputs.Where(o => outputList.Contains(o.Item2)).ToList();

            var flattenedOutputs = new Dictionary<string, List<string>>();
            foreach (var o in outputsFiltered)
            {
                var outputNames = o.Item1.Split(new char[] { ',' });
                foreach (string outputName in outputNames)
                {
                    var name = outputName.Trim();
                    if (flattenedOutputs.TryGetValue(name, out List<string> val))
                    {
                        val.Add(o.Item2);
                    }
                    else
                    {
                        flattenedOutputs[name] = new List<string>() { o.Item2 };
                    }
                }
            }

            List<FlowOutputSpec> fOutputList = new List<FlowOutputSpec>();

            foreach (var fOut in flattenedOutputs)
            {
                FlowOutputSpec flowOutput = new FlowOutputSpec() { Name = fOut.Key };

                foreach (var item in fOut.Value)
                {
                    var output = uiOutputs.SingleOrDefault(o => o.Id.Equals(item));
                    switch (output.Type.ToLower())
                    {
                        case "cosmosdb":
                            {
                                var cosmosDbOutput = ProcessOutputCosmosDb(output);
                                Ensure.EnsureNullElseThrowNotSupported(flowOutput.CosmosDbOutput, "Multiple target cosmosDB output for same dataset not supported.");
                                flowOutput.CosmosDbOutput = cosmosDbOutput;
                                break;
                            }
                        case "eventhub":
                            {
                                var eventhubOutput = ProcessOutputEventHub(output);
                                Ensure.EnsureNullElseThrowNotSupported(flowOutput.EventHubOutput, "Multiple target eventHub/metric output for same dataset not supported.");
                                flowOutput.EventHubOutput = eventhubOutput;
                                break;
                            }
                        case "metric":
                            {
                                if (LocalUtility.IsLocalEnabled(Configuration))
                                {
                                    if (Configuration.TryGet(Constants.ConfigSettingName_LocalMetricsHttpEndpoint, out string localMetricsEndpoint))
                                    {
                                        var httpOutput = ProcessLocalOutputMetric(configName, localMetricsEndpoint);
                                        Ensure.EnsureNullElseThrowNotSupported(flowOutput.HttpOutput, "Multiple target httpost/metric output for same dataset not supported.");
                                        flowOutput.HttpOutput = httpOutput;
                                    }
                                    break;
                                }
                                else
                                {
                                    var eventhubOutput = ProcessOutputMetric(output);
                                    Ensure.EnsureNullElseThrowNotSupported(flowOutput.EventHubOutput, "Multiple target eventHub/metric output for same dataset not supported.");
                                    flowOutput.EventHubOutput = eventhubOutput;
                                    break;
                                }
                            }
                        case "blob":
                            {
                                var blobOutput = await ProcessOutputBlob(inputMode, configName, output);
                                Ensure.EnsureNullElseThrowNotSupported(flowOutput.BlobOutput, "Multiple target blob output for same dataset not supported.");
                                flowOutput.BlobOutput = blobOutput;
                                break;
                            }
                        case "local":
                            {
                                var blobOutput = ProcessOutputLocal(configName, output);
                                Ensure.EnsureNullElseThrowNotSupported(flowOutput.BlobOutput, "Multiple target blob output for same dataset not supported.");
                                flowOutput.BlobOutput = blobOutput;
                                break;
                            }
                        case "sqlserver":
                            {
                                var sqlOutput = await ProcessOutputSql(configName, output).ConfigureAwait(false);
                                Ensure.EnsureNullElseThrowNotSupported(flowOutput.SqlOutput, "Multiple target Sql output for same dataset not supported.");
                                flowOutput.SqlOutput = sqlOutput;
                                break;
                            }
                        default:
                            throw new NotSupportedException($"{output.Type} output type not supported");
                    }
                }

                fOutputList.Add(flowOutput);
            }

            return fOutputList.ToArray();
        }