public int OnExecute(CommandLineApplication configCmd)
        {
            ConsoleHelper.WriteHeader();

            var verboseMode = CommandLineApplicationHelper.GetVerboseMode(configCmd);
            var apiOptions  = ApiOptionsHelper.CreateDefault(configCmd);

            ApiOptionsHelper.ApplyValidationOverrides(apiOptions, configCmd);
            ApiOptionsHelper.ApplyGeneratorOverrides(apiOptions, configCmd);

            var specificationPath = CommandLineApplicationHelper.GetSpecificationPath(configCmd);
            var apiDocument       = OpenApiDocumentHelper.CombineAndGetApiDocument(specificationPath);

            var logItems = new List <LogKeyValueItem>();

            logItems.AddRange(OpenApiDocumentHelper.Validate(apiDocument, apiOptions.Validation));

            if (logItems.Any(x => x.LogCategory == LogCategoryType.Error))
            {
                return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
            }

            var projectPrefixName = CommandLineApplicationHelper.GetProjectPrefixName(configCmd);
            var outputSlnPath     = CommandLineApplicationHelper.GetOutputSlnPath(configCmd);
            var outputSrcPath     = CommandLineApplicationHelper.GetOutputSrcPath(configCmd);
            var outputTestPath    = CommandLineApplicationHelper.GetOutputTestPath(configCmd);

            logItems.AddRange(GenerateHelper.GenerateServerApi(
                                  projectPrefixName,
                                  outputSrcPath,
                                  outputTestPath,
                                  apiDocument,
                                  apiOptions));

            if (logItems.Any(x => x.LogCategory == LogCategoryType.Error))
            {
                return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
            }

            logItems.AddRange(GenerateHelper.GenerateServerDomain(
                                  projectPrefixName,
                                  outputSrcPath,
                                  outputTestPath,
                                  apiDocument,
                                  apiOptions,
                                  outputSrcPath));

            if (logItems.Any(x => x.LogCategory == LogCategoryType.Error))
            {
                return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
            }

            logItems.AddRange(GenerateHelper.GenerateServerHost(
                                  projectPrefixName,
                                  outputSrcPath,
                                  outputTestPath,
                                  apiDocument,
                                  apiOptions,
                                  outputSrcPath,
                                  outputSrcPath));

            logItems.AddRange(GenerateHelper.GenerateServerSln(
                                  projectPrefixName,
                                  outputSlnPath,
                                  outputSrcPath,
                                  outputTestPath));

            logItems.AddRange(GenerateAtcCodingRulesHelper.Generate(
                                  outputSlnPath,
                                  outputSrcPath,
                                  outputTestPath));

            return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
        }