Esempio n. 1
0
        private string GetLanguage(WebApiClientGeneratorLanguage language)
        {
            string languageValue = string.Empty;

            switch (language)
            {
            case WebApiClientGeneratorLanguage.DotNet4:
            case WebApiClientGeneratorLanguage.DotNet45:
            case WebApiClientGeneratorLanguage.NetCoreStandard2:
                languageValue = "csharp";
                break;

            case WebApiClientGeneratorLanguage.Php:
                languageValue = "php";
                break;

            case WebApiClientGeneratorLanguage.Java:
                languageValue = "java";
                break;

            case WebApiClientGeneratorLanguage.TypescriptAngular:
                languageValue = "typescript-angular";
                break;

            default:
                languageValue = "all";
                break;
            }
            return(languageValue);
        }
Esempio n. 2
0
        private string GetExtraOptions(WebApiClientGeneratorLanguage language)
        {
            string extraOptions = string.Empty;

            switch (language)
            {
            case WebApiClientGeneratorLanguage.DotNet4:
            case WebApiClientGeneratorLanguage.DotNet45:
            case WebApiClientGeneratorLanguage.NetCoreStandard2:
                break;

            case WebApiClientGeneratorLanguage.Php:
                break;

            case WebApiClientGeneratorLanguage.Java:
                break;

            case WebApiClientGeneratorLanguage.TypescriptAngular:
                break;

            default:
                break;
            }
            return(extraOptions);
        }
Esempio n. 3
0
        /// <summary>
        /// Build package from source code
        /// </summary>
        /// <param name="inputFile">OpenApi Document (swagger.json) full path</param>
        /// <param name="outputDir">Target directory for compiled package (nupkg, etc..)</param>
        /// <param name="language">Client implementation language</param>
        /// <param name="packageName">Package name</param>
        /// <param name="packageVersion">Package version</param>
        public FileInfo BuildPackage(string inputFile, string outputDir, WebApiClientGeneratorLanguage language, string packageName, string packageVersion = null)
        {
            GenerateClientSourceCode(inputFile, outputDir, language, packageName, packageVersion);

            BuildPackage(language, outputDir, packageName, outputDir);

            return(null);
        }
Esempio n. 4
0
        /// <summary>
        /// Build package from source code
        /// </summary>
        /// <param name="language">Client implementation language</param>
        /// <param name="sourceCodeDir">Source code directory</param>
        /// <param name="packageName">Package name</param>
        /// <param name="outputDir">Target directory for compiled package (nupkg, etc..)</param>
        public FileInfo BuildPackage(WebApiClientGeneratorLanguage language, string sourceCodeDir, string packageName, string outputDir)
        {
            switch (language)
            {
            case WebApiClientGeneratorLanguage.DotNet4:
            {
                Directory.CreateDirectory(outputDir);
                string targetDll = Path.Combine(outputDir, packageName + ".dll");

                string data = File.ReadAllText(Path.Combine(sourceCodeDir, "build.bat"));
                data = data.Replace(@"Microsoft.NET\Framework\v3.5", @"Microsoft.NET\Framework\v4.0.30319");
                data = data.Replace($"/out:bin\\{packageName}.dll", $"/out:\"{targetDll}\"");
                File.WriteAllText(Path.Combine(sourceCodeDir, "build.bat"), data);

                Process process = new Process()
                {
                    StartInfo = new ProcessStartInfo
                    {
                        WorkingDirectory = Path.Combine(sourceCodeDir),
                        FileName         = Path.Combine(sourceCodeDir, "build.bat"),
                    }
                };
                process.Start();
                process.WaitForExit();

                return(new FileInfo(targetDll));
            }

            case WebApiClientGeneratorLanguage.DotNet45:
            {
                Directory.CreateDirectory(outputDir);
                string targetDll = Path.Combine(outputDir, packageName + ".dll");

                string data = File.ReadAllText(Path.Combine(sourceCodeDir, "build.bat"));
                data = data.Replace($"/out:bin\\{packageName}.dll", $"/out:\"{targetDll}\"");
                File.WriteAllText(Path.Combine(sourceCodeDir, "build.bat"), data);

                Process process = new Process()
                {
                    StartInfo = new ProcessStartInfo
                    {
                        WorkingDirectory = Path.Combine(sourceCodeDir),
                        FileName         = Path.Combine(sourceCodeDir, "build.bat"),
                    }
                };
                process.Start();
                process.WaitForExit();

                return(new FileInfo(targetDll));
            }

            case WebApiClientGeneratorLanguage.NetCoreStandard2:
                string projectDir = Path.Combine(sourceCodeDir, "src", packageName);

                var arguments = new List <string> {
                    $"pack",
                    $"-o \"{outputDir}\"",
                };

                Process p = new Process()
                {
                    StartInfo = new ProcessStartInfo
                    {
                        WorkingDirectory = projectDir,
                        FileName         = _options.DotNetCommandPath,
                        Arguments        = string.Join(" ", arguments),
                    }
                };

                Console.WriteLine(_options.DotNetCommandPath + " " + string.Join(" ", arguments));

                p.Start();
                p.WaitForExit();
                break;

            case WebApiClientGeneratorLanguage.Php:
                //{
                //    string src = Path.Combine(sourceCodeDir, "SwaggerClient-php");
                //    //Planet.Core.IO.Directory.RecursiveDelete(output, true);
                //    Directory.Move(src, outputDir);
                //}
                break;

            case WebApiClientGeneratorLanguage.Java:
                break;

            default:
                break;
            }

            //Planet.Core.IO.Directory.RecursiveDelete(tempCodeFolder, true);
            return(null);
        }
Esempio n. 5
0
        private SwaggerCodeGeneratorConfigOptions?GetConfigOptions(WebApiClientGeneratorLanguage language, string packageName, string packageVersion = null)
        {
            Nullable <SwaggerCodeGeneratorConfigOptions> configOptions = null;

            switch (language)
            {
            case WebApiClientGeneratorLanguage.DotNet4:
                configOptions = new SwaggerCodeGeneratorConfigOptions
                {
                    PackageName     = packageName,
                    TargetFramework = "v3.5",
                };
                break;

            case WebApiClientGeneratorLanguage.DotNet45:
                configOptions = new SwaggerCodeGeneratorConfigOptions
                {
                    PackageName         = packageName,
                    ModelPropertyNaming = "PascalCase",
                    TargetFramework     = "4.5",
                };
                break;

            case WebApiClientGeneratorLanguage.NetCoreStandard2:
                configOptions = new SwaggerCodeGeneratorConfigOptions
                {
                    ModelPropertyNaming       = "PascalCase",
                    NetCoreProjectFile        = true,
                    OptionalEmitDefaultValues = false,
                    PackageName              = packageName,
                    PackageVersion           = packageVersion,
                    SortParamsByRequiredFlag = true,
                    TargetFramework          = "5.0",
                };
                break;

            case WebApiClientGeneratorLanguage.TypescriptAngular:
                configOptions = new SwaggerCodeGeneratorConfigOptions
                {
                    PackageName = packageName,
                };
                break;

            case WebApiClientGeneratorLanguage.Php:
                configOptions = new SwaggerCodeGeneratorConfigOptions
                {
                    GitUserId      = "planet",
                    GitRepoId      = "php-tallorno-data-api-client",
                    InvokerPackage = packageName.Replace(".", "\\"),
                };
                break;

            case WebApiClientGeneratorLanguage.Java:
                break;

            default:
                break;
            }

            return(configOptions);
        }
Esempio n. 6
0
        /// <summary>
        /// Generate client source code
        /// </summary>
        /// <param name="inputFile">OpenApi Document (swagger.json) full path</param>
        /// <param name="outputDir">Target directory for generated source code<param>
        /// <param name="language">Client implementation language</param>
        /// <param name="packageName">Package name</param>
        /// <param name="packageVersion">Package version</param>
        public void GenerateClientSourceCode(string inputFile, string outputDir, WebApiClientGeneratorLanguage language, string packageName, string packageVersion = null)
        {
            string currentDirectory = Directory.GetCurrentDirectory();
            string tempCodeFolder   = outputDir ?? Path.Combine(currentDirectory, "temp");
            string jarPath          = Path.Combine(currentDirectory, _options.SwaggerCodeGeneratorJarPath);

            Directory.CreateDirectory(tempCodeFolder);

            #region Generate code for client
            var languageValue = GetLanguage(language);
            var configOptions = GetConfigOptions(language, packageName, packageVersion);
            var extraOptions  = GetExtraOptions(language);

            var arguments = new List <string> {
                $"-jar \"{jarPath}\" generate",
                $"-i \"{inputFile}\"",
                $"-o \"{tempCodeFolder}\"",
                $"-l {languageValue}",
            };

            if (configOptions != null)
            {
                string configOptionsData = JsonConvert.SerializeObject(configOptions);
                string configOptionsPath = Path.Combine(currentDirectory, ConfigOptionsFilename);
                File.WriteAllText(configOptionsPath, configOptionsData);
                arguments.Add($"-c \"{configOptionsPath}\"");
            }

            if (extraOptions != string.Empty)
            {
                arguments.Add(extraOptions);
            }

            Process p = new Process()
            {
                StartInfo = new ProcessStartInfo
                {
                    WorkingDirectory = currentDirectory,
                    FileName         = _options.JavaCommandPath,
                    Arguments        = string.Join(" ", arguments),
                }
            };

            Console.WriteLine(_options.JavaCommandPath + " " + string.Join(" ", arguments));

            p.Start();
            p.WaitForExit();

            if (configOptions != null)
            {
                File.Delete(Path.Combine(currentDirectory, ConfigOptionsFilename));
            }

            switch (language)
            {
            case WebApiClientGeneratorLanguage.NetCoreStandard2:
                FixSourceCodeForNetCore2(outputDir, packageName);
                break;
            }
            #endregion
        }