using System.Text; using Core; using Core.Events; using Core.Helpers; using Core.Settings; using Core.Yaml; namespace Generator.Infrastructure.OpenApi.Builders; public class OpenApiJavaBuilder : AbstractBuilder { private readonly JavaConfig _config; public OpenApiJavaBuilder(JavaConfig config, DisplayEmitter emitter) : base(config.Invite, emitter) { _config = config; } /// public override void Generate() { CheckForNullSpec(); GenerateOpenApi(); var configFile = new Location([_config.DockerRoot, _config.ConfigFilePath()]); var command = $"docker run --rm -it -v {_config.LocalRoot}:{_config.DockerRoot} {_config.GenerationImage} " + $"batch --clean {configFile}"; Executor.Register(command); } /// public override void Build() { CheckForNullSpec(); var templateFolder = new Location([_config.DockerRoot, _config.TemplateFolder]); var outputFolder = new Location([_config.DockerRoot, _config.OutputFolder()]); var stringBuilder = new StringBuilder(); stringBuilder.Append($"docker run --rm -it -v {_config.LocalRoot}:{_config.DockerRoot} {_config.BuildImage} /bin/sh -c '"); stringBuilder.Append($"cp {templateFolder}/settings.xml /root/.m2 && "); stringBuilder.Append($"cd {outputFolder} && "); stringBuilder.Append("mvn package'"); var command = stringBuilder.ToString(); Executor.Register(command); } /// /// Creates config file used by openapi generator /// public void CreateGeneratorConfig() { CheckForNullSpec(); var inputPath = new Location([_config.LocalRoot, _config.ServerConfigTemplate]); var outputPath = new Location([_config.LocalRoot, _config.ConfigFilePath()]); PathHelper.CreateFileIfNotExists(outputPath.ToString()); var artifact = $"{SpecFile.Name}-api"; var data = new Dictionary { {"specPath", new Location([_config.DockerRoot, _config.OpenApiSpecFile()]).ToString()}, {"templateFolder", new Location([_config.DockerRoot, _config.TemplateFolder]).ToString()}, {"generatorVersion", "7.3.0"}, {"outputFolder", new Location([_config.DockerRoot, _config.OutputFolder()]).ToString()}, {"groupId", SpecFile.Config.JavaGroup}, {"artifactId", artifact}, {"artifactVersion", SpecFile.Info["version"]}, }; MakeTemplate(inputPath.ToString(), outputPath.ToString(), data); } /// /// Registers the generation of the openapi spec file /// private void GenerateOpenApi() { CheckForNullSpec(); var specFile = new Location([_config.DockerRoot, _config.SpecFile]); var output = new Location([_config.DockerRoot, _config.OpenApiFolder()]); PathHelper.CreateFileIfNotExists(output.ToString()); var command = $"docker run --rm -it -v {_config.LocalRoot}:{_config.DockerRoot} {_config.GenerationImage} " + $"generate -g openapi-yaml -i {specFile} -o {output}"; Executor.Register(command); } }