Files
api-generator/Generator/Infrastructure/OpenApi/Builders/OpenApiJavaBuilder.cs
2025-10-11 13:08:09 +02:00

98 lines
3.3 KiB
C#

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<OpenApiYaml>
{
private readonly JavaConfig _config;
public OpenApiJavaBuilder(JavaConfig config, DisplayEmitter emitter)
: base(config.Invite, emitter)
{
_config = config;
}
///<inheritdoc/>
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);
}
///<inheritdoc/>
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);
}
/// <summary>
/// Creates config file used by openapi generator
/// </summary>
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<string, object>
{
{"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);
}
/// <summary>
/// Registers the generation of the openapi spec file
/// </summary>
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);
}
}