/// <summary>
        /// To generate WebAPI Sub Projects and added those projects to root solutions created by Swagger Codegen
        /// </summary>
        /// <param name="webapiName">Package Name from Swagger codegen. example - For ProtoType.Api, webapiName is Prototype </param>
        /// <param name="subProjects"></param>
        /// <param name=""></param>
        /// <param name=""></param>
        public async Task GenerateSubProjectProjectCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            string apiRootProjectPath = config.outputFolderPath + "\\" + "src";
            string apiSolutionPath    = config.outputFolderPath + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".sln";

            string[] folders = System.IO.Directory.GetDirectories(apiRootProjectPath);

            if (folders != null && folders.Length > 0)
            {
                foreach (var subProject in webApiProjectStructure.SubProjects)
                {
                    var subProjectDirectoryPath = apiRootProjectPath + "\\" + config.PackageName + "." + subProject.SubProjectPath;
                    if (Directory.Exists(apiRootProjectPath))
                    {
                        Directory.CreateDirectory(subProjectDirectoryPath);
                    }

                    var codeGenerationOptions = new DotNetCoreCommandOptions();
                    codeGenerationOptions.ProjectName    = config.PackageName + "." + subProject.SubProjectName;
                    codeGenerationOptions.ProjectType    = subProject.SubProjectType;
                    codeGenerationOptions.OutPutLocation = subProjectDirectoryPath;

                    await CodeGenerationCoreOperations.CreateNewDotNetCoreProject(codeGenerationOptions);

                    var csprojFilePath = codeGenerationOptions.OutPutLocation + "\\" + codeGenerationOptions.ProjectName + ".csproj";

                    while (!File.Exists(csprojFilePath))
                    {
                    }

                    await CodeGenerationCoreOperations.AddProjectToSoluion(apiSolutionPath, csprojFilePath);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Generate and customize API code based on Mustache template
        /// </summary>
        /// <param name="config">Configuration values to customize API Code</param>
        /// <param name="webApiProjectStructure">API Structure and dependencies</param>
        public static async Task CustomizeAPICode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            //Generate Startup.cs file

            await GenerateStartupCode(config, webApiProjectStructure);

            //Generate Docker file
            await GenerateDockerfileCode(config, webApiProjectStructure);

            //Generate Deployment Manifest File
            await GenerateDeploymentManifestCode(config);

            //Generate Pipeline code
            await GeneratePipelineCode(config);

            //Generate Jenkins file
            await GenerateJenkinsfileCode(config);

            //Generate UpdateAssembly file
            await GenerateUpdateAssemblyCode(config);

            //Generate AppSettings file
            await GenerateAppSettings(config, webApiProjectStructure);

            await GenerateGitIgnoreCode(config);
        }
Beispiel #3
0
        private static async Task GenerateDockerfileCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            string fileName = "Dockerfile";

            string dockerFilePath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + fileName;

            dynamic dockerConfig = new JObject();

            dockerConfig.packageName      = config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix;
            dockerConfig.donotcoreVersion = webApiProjectStructure.DotnetCoreVersion;


            await MustacheParser.GenerateCodeFile(fileName, dockerFilePath, dockerConfig);
        }
Beispiel #4
0
        private static async Task GenerateStartupCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            string csprojAPIPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".csproj";
            string fileName      = "Startup";
            string fileExtension = "cs";

            string startupFilePath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + fileName + "." + fileExtension;

            dynamic startupConfig = new JObject();

            if (config.UseCircuitbreaker == true)
            {
                startupConfig.isPolly = true;

                //Add Polly Package to Web API Project
                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.PollyWebApiPackage.PackageName, webApiProjectStructure.PollyWebApiPackage.Version);
            }

            if (config.UseLogging == true)
            {
                startupConfig.isSteeltoe = true;

                //Add Steeltoe Package to Web API Project
                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.SteeltoeWebApiPackage.PackageName, webApiProjectStructure.SteeltoeWebApiPackage.Version);
            }

            if (config.Database == EnumDatabase.MongoDB)
            {
                startupConfig.isMongo             = true;
                startupConfig.mongoConnectionName = config.PackageName + "MongoConnectionString";
                //Add Mongo Package
                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoDBDriver.PackageName, webApiProjectStructure.MongoDBDriver.Version);

                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoDBDriverCore.PackageName, webApiProjectStructure.MongoDBDriverCore.Version);

                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoBSON.PackageName, webApiProjectStructure.MongoBSON.Version);

                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoHealthCheck.PackageName, webApiProjectStructure.MongoHealthCheck.Version);
            }
            startupConfig.packageName = config.PackageName;
            startupConfig.apiTitle    = config.PackageName + " " + webApiProjectStructure.RootWebAPIProjectNameSuffix;
            startupConfig.apiVersion  = webApiProjectStructure.ApiVersion;


            await MustacheParser.GenerateCodeFile(fileName, startupFilePath, startupConfig);
        }
Beispiel #5
0
        public async Task AddProjectReferenceForWebApiProjects(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            //Add Project Reference for API project

            string csprojAPIPath     = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".csproj";
            var    csprojAPITestPath = config.outputFolderPath + "\\" + webApiProjectStructure.TestProject.RootTestDirectory + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + ".csproj";

            while (!File.Exists(csprojAPITestPath))
            {
            }
            //Add API Project reference to API Test Project
            await CodeGenerationCoreOperations.AddProjectReference(csprojAPITestPath, csprojAPIPath);

            foreach (var subProject in webApiProjectStructure.SubProjects)
            {
                string csprojSubProjectPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + subProject.SubProjectPath + "\\" + config.PackageName + "." + subProject.SubProjectName + ".csproj";

                while (!File.Exists(csprojSubProjectPath))
                {
                }
                //Add subProjectReference to main API project
                await CodeGenerationCoreOperations.AddProjectReference(csprojAPIPath, csprojSubProjectPath);

                while (!File.Exists(csprojAPITestPath))
                {
                }
                //Add subProjectReference to API Test project
                await CodeGenerationCoreOperations.AddProjectReference(csprojAPITestPath, csprojSubProjectPath);

                //Add project reference for all depedencies
                if (subProject.ProjectDependencies != null && subProject.ProjectDependencies.Count > 0)
                {
                    foreach (var project in subProject.ProjectDependencies)
                    {
                        var csprojDepedentProject = config.outputFolderPath + "\\src\\" + config.PackageName + "." + project + "\\" + config.PackageName + "." + project + ".csproj";

                        //Add depedent project reference
                        await CodeGenerationCoreOperations.AddProjectReference(csprojSubProjectPath, csprojDepedentProject);
                    }
                }
            }
        }
Beispiel #6
0
        private static async Task GenerateAppSettings(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            string fileName      = "appsettings";
            string fileExtension = "json";

            string appSettingsPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + fileName + "." + fileExtension;

            dynamic appSettingsConfig = new JObject();

            if (config.Database == EnumDatabase.MongoDB)
            {
                appSettingsConfig.isMongo             = true;
                appSettingsConfig.mongoConnectionName = config.PackageName + "MongoConnectionString";
            }

            if (config.Database == EnumDatabase.Oracle)
            {
                appSettingsConfig.isOracle             = true;
                appSettingsConfig.oracleConnectionName = config.PackageName + "OracleConnectionString";
            }
            if (config.Messaging.Contains("kafka"))
            {
                appSettingsConfig.isKafka = true;
            }
            else
            {
                appSettingsConfig.isKafka = false;
            }
            if (config.Messaging.Contains("ibmmq"))
            {
                appSettingsConfig.isIBMMq = true;
            }
            else
            {
                appSettingsConfig.isIBMMq = false;
            }


            await MustacheParser.GenerateCodeFile(fileName, appSettingsPath, appSettingsConfig);
        }
        public async Task GenerateTestProjectCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            string apiSolutionPath = config.outputFolderPath + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".sln";

            DirectoryInfo rootTestDirectory = new DirectoryInfo(config.outputFolderPath);

            string[] folders = System.IO.Directory.GetDirectories(config.outputFolderPath);

            if (folders != null && folders.Length > 0)
            {
                if (Directory.Exists(config.outputFolderPath))
                {
                    rootTestDirectory = Directory.CreateDirectory(config.outputFolderPath + "\\" + webApiProjectStructure.TestProject.RootTestDirectory);
                }

                var apiTestProjectDirectory = rootTestDirectory + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix;

                if (Directory.Exists(rootTestDirectory.FullName))
                {
                    Directory.CreateDirectory(apiTestProjectDirectory);
                }

                var codeGenerationOptions = new DotNetCoreCommandOptions();
                codeGenerationOptions.ProjectName    = config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix;
                codeGenerationOptions.ProjectType    = webApiProjectStructure.TestProject.TestProjectType;
                codeGenerationOptions.OutPutLocation = apiTestProjectDirectory;

                await CodeGenerationCoreOperations.CreateNewDotNetCoreProject(codeGenerationOptions);

                var csprojFilePath = codeGenerationOptions.OutPutLocation + "\\" + codeGenerationOptions.ProjectName + ".csproj";
                while (!File.Exists(csprojFilePath))
                {
                    // Console.WriteLine("Not Present" + csprojFilePath);
                }
                await CodeGenerationCoreOperations.AddProjectToSoluion(apiSolutionPath, csprojFilePath);
            }
        }
Beispiel #8
0
        public async Task AddPackagesForWebApiProjects(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure)
        {
            //Add Project Reference for API project
            var    outPutCodePath    = config.outputFolderPath; //@"D:\E-Comm\Modernization\CodeGeneratorAPI\CodeGeneratorAPI\Output";//config.outputFolderPath;
            string csprojAPIPath     = outPutCodePath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".csproj";
            var    csprojAPITestPath = outPutCodePath + "\\" + webApiProjectStructure.TestProject.RootTestDirectory + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + ".csproj";

            string fileContent = File.ReadAllText(csprojAPIPath);

            if (fileContent.Contains("netcoreapp2.2"))
            {
                fileContent = fileContent.Replace("netcoreapp2.2", "netcoreapp3.1");
                var replaceValue = @"<PackageReference Include=""Microsoft.AspNetCore.App"" />"; //To DO
                fileContent = fileContent.Replace(replaceValue, "");
            }

            await File.WriteAllTextAsync(csprojAPIPath, fileContent);

            //Delete Unwanted Files from Root Folder
            var deleteBuildBatFile = outPutCodePath + "\\" + "build.bat";
            var deleteBuildshFile  = outPutCodePath + "\\" + "build.sh";

            if (File.Exists(deleteBuildBatFile))
            {
                File.Delete(deleteBuildBatFile);
            }

            if (File.Exists(deleteBuildshFile))
            {
                File.Delete(deleteBuildshFile);
            }

            //Delete Filter Files
            var           filterFolderPath = outPutCodePath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + "Filters";
            DirectoryInfo filterDir        = new DirectoryInfo(filterFolderPath);

            foreach (FileInfo file in filterDir.GetFiles())
            {
                file.Delete();
            }

            while (!File.Exists(csprojAPIPath))
            {
            }

            //Add package to Web API Project
            foreach (var package in webApiProjectStructure.WebApiPackages)
            {
                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, package.PackageName, package.Version);
            }

            //Add package to Web API Sub Projects
            foreach (var subProject in webApiProjectStructure.SubProjects)
            {
                string csprojSubProjectPath = outPutCodePath + "\\src\\" + config.PackageName + "." + subProject.SubProjectPath + "\\" + config.PackageName + "." + subProject.SubProjectName + ".csproj";

                while (!File.Exists(csprojSubProjectPath))
                {
                }

                foreach (var package in subProject.ProjectPackages)
                {
                    await CodeGenerationCoreOperations.AddPackageToProject(csprojSubProjectPath, package.PackageName, package.Version);
                }
            }

            while (!File.Exists(csprojAPITestPath))
            {
            }
            //Add package to Web API Test Project
            foreach (var package in webApiProjectStructure.TestProject.ProjectPackages)
            {
                await CodeGenerationCoreOperations.AddPackageToProject(csprojAPITestPath, package.PackageName, package.Version);
            }
        }