Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.backbase.oss.boat;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Slf4j
public abstract class AbstractGenerateMojo extends GenerateMojo {

Expand Down Expand Up @@ -52,29 +50,13 @@ public void execute(String generatorName, String library, boolean isEmbedded, bo
}
log.debug("Using configOptions={}", this.configOptions);

Stream<String> supportingFiles = Optional.ofNullable(getGeneratorSpecificSupportingFiles())
.filter(CollectionUtils::isNotEmpty)
.map(Collection::stream)
.orElse(Stream.empty());

if (isEmbedded) {
supportingFiles = Stream.concat(supportingFiles, EMBEDDED_SUPPORTING_FILES.stream());
this.supportingFilesToGenerate = uniqueJoin(EMBEDDED_SUPPORTING_FILES);
}

this.supportingFilesToGenerate = supportingFiles
.map(String::trim)
.filter(StringUtils::isNotEmpty)
.distinct()
.sorted()
.collect(Collectors.joining(","));

super.execute();
}

protected Collection<String> getGeneratorSpecificSupportingFiles() {
return Collections.emptySet();
}

private static Map<?, ?> mergeOptions(Map<String, String> defaultOptions, Map<?, ?> overrides) {
var merged = new HashMap<>();
merged.putAll(defaultOptions);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
package com.backbase.oss.boat;

import static java.lang.String.format;
import static java.util.Arrays.stream;
import static java.util.Collections.emptyMap;
import static java.util.stream.Collectors.joining;
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyAdditionalPropertiesKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyAdditionalPropertiesKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyImportMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyImportMappingsKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyInstantiationTypesKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyInstantiationTypesKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyLanguageSpecificPrimitivesCsv;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyLanguageSpecificPrimitivesCsvList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyOpenAPINormalizerKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyReservedWordsMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyReservedWordsMappingsKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applySchemaMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applySchemaMappingsKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyServerVariablesKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyServerVariablesKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyTypeMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyTypeMappingsKvpList;

import com.backbase.oss.boat.transformers.Bundler;
import com.backbase.oss.boat.transformers.DereferenceComponentsPropertiesTransformer;
import com.backbase.oss.boat.transformers.UnAliasTransformer;
Expand All @@ -24,13 +47,16 @@
import java.nio.channels.ReadableByteChannel;
import java.nio.charset.StandardCharsets;
import java.nio.file.StandardCopyOption;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -51,29 +77,6 @@
import org.sonatype.plexus.build.incremental.BuildContext;
import org.sonatype.plexus.build.incremental.DefaultBuildContext;

import static java.lang.String.format;
import static java.util.Arrays.stream;
import static java.util.Collections.emptyMap;
import static java.util.stream.Collectors.joining;
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyAdditionalPropertiesKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyAdditionalPropertiesKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyImportMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyImportMappingsKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyInstantiationTypesKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyInstantiationTypesKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyLanguageSpecificPrimitivesCsv;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyLanguageSpecificPrimitivesCsvList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyOpenAPINormalizerKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyReservedWordsMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyReservedWordsMappingsKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applySchemaMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applySchemaMappingsKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyServerVariablesKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyServerVariablesKvpList;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyTypeMappingsKvp;
import static org.openapitools.codegen.config.CodegenConfiguratorUtils.applyTypeMappingsKvpList;

/**
* Generates client/server code from an OpenAPI json/yaml definition.
*/
Expand All @@ -93,6 +96,15 @@ private static String trimCSV(String text) {
}
}

static String uniqueJoin(Collection<String> values) {
return values.stream()
.map(String::trim)
.filter(StringUtils::isNotEmpty)
.distinct()
.sorted()
.collect(Collectors.joining(","));
}

public static final String INSTANTIATION_TYPES = "instantiation-types";
public static final String IMPORT_MAPPINGS = "import-mappings";
public static final String TYPE_MAPPINGS = "type-mappings";
Expand Down Expand Up @@ -734,8 +746,17 @@ public void execute() throws MojoExecutionException, MojoFailureException {
GlobalSettings.clearProperty(CodegenConstants.MODELS);
}

if (null != generateSupportingFiles && generateSupportingFiles) {
GlobalSettings.setProperty(CodegenConstants.SUPPORTING_FILES, trimCSV(supportingFilesToGenerate));
String generatorSupportingFilesToGenerate = Optional.ofNullable(getGeneratorSpecificSupportingFiles())
.map(GenerateMojo::uniqueJoin)
.orElse("");

if (generateSupportingFiles != null && generateSupportingFiles) {
String allToGenerate = Stream.of(trimCSV(supportingFilesToGenerate), generatorSupportingFilesToGenerate)
.filter(StringUtils::isNotBlank)
.collect(joining(","));
GlobalSettings.setProperty(CodegenConstants.SUPPORTING_FILES, allToGenerate);
} else if (StringUtils.isNotBlank(generatorSupportingFilesToGenerate)) {
GlobalSettings.setProperty(CodegenConstants.SUPPORTING_FILES, generatorSupportingFilesToGenerate);
} else {
GlobalSettings.clearProperty(CodegenConstants.SUPPORTING_FILES);
}
Expand Down Expand Up @@ -929,6 +950,10 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}
}

protected Collection<String> getGeneratorSpecificSupportingFiles() {
return Collections.emptySet();
}

/**
* Calculate openapi specification file hash. If specification is hosted on remote resource it is downloaded first
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.backbase.oss.boat;

import java.util.Collection;
import java.util.Set;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
Expand All @@ -15,4 +17,9 @@ public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Generating Client using Spring Rest Template");
execute("java", "resttemplate", true, false, true);
}

@Override
protected Collection<String> getGeneratorSpecificSupportingFiles() {
return Set.of("BigDecimalCustomSerializer.java");
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.backbase.oss.boat;

import java.util.Collection;
import java.util.Set;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;

import java.util.Collection;
import java.util.Set;

/**
* Generating Server Stubs using Spring Boot.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.backbase.oss.boat;

import java.util.Collection;
import java.util.Set;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
Expand All @@ -16,4 +18,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
execute("java", "webclient", true, true, true);
}

@Override
protected Collection<String> getGeneratorSpecificSupportingFiles() {
return Set.of("BigDecimalCustomSerializer.java");
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
package com.backbase.oss.boat;

import static java.util.Collections.singletonMap;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

import com.backbase.oss.codegen.java.BoatJavaCodeGen;
import com.backbase.oss.codegen.java.BoatSpringCodeGen;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
Expand All @@ -11,16 +23,6 @@
import org.openapitools.codegen.DefaultCodegen;
import org.sonatype.plexus.build.incremental.DefaultBuildContext;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import static java.util.Collections.singletonMap;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

class GenerateMojoTests {
private final DefaultBuildContext buildContext = new DefaultBuildContext();
private final MavenProject project = new MavenProject();
Expand Down Expand Up @@ -80,6 +82,10 @@ void useJavaBoatForRestTemplateEmbedded() throws MojoExecutionException, MojoFai
"RFC3339DateFormat.java,ServerConfiguration.java,ServerVariable.java,StringUtil.java",
mojo.supportingFilesToGenerate
);
assertThat(
mojo.getGeneratorSpecificSupportingFiles(),
containsInAnyOrder("BigDecimalCustomSerializer.java")
);
}

@Test
Expand All @@ -91,10 +97,14 @@ void useSpringBoatForSpringBootEmbedded() throws MojoExecutionException, MojoFai
assertThat(mojo.generatorName, equalTo(BoatSpringCodeGen.NAME));
assertEquals(
"ApiClient.java,ApiKeyAuth.java,Authentication.java,BeanValidationException.java," +
"BigDecimalCustomSerializer.java,HttpBasicAuth.java,HttpBearerAuth.java,JavaTimeFormatter.java," +
"HttpBasicAuth.java,HttpBearerAuth.java,JavaTimeFormatter.java," +
"RFC3339DateFormat.java,ServerConfiguration.java,ServerVariable.java,StringUtil.java",
mojo.supportingFilesToGenerate
);
assertThat(
mojo.getGeneratorSpecificSupportingFiles(),
containsInAnyOrder("BigDecimalCustomSerializer.java")
);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@

import com.backbase.oss.codegen.java.BoatCodeGenUtils.CodegenValueType;
import io.swagger.v3.oas.models.media.Schema;
import java.io.File;
import lombok.Getter;
import lombok.Setter;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.languages.JavaClientCodegen;
import org.openapitools.codegen.utils.ModelUtils;

Expand Down Expand Up @@ -118,6 +120,17 @@ private void processRestTemplateOpts() {
this.createApiComponent = convertPropertyToBoolean(CREATE_API_COMPONENT);
}
writePropertyBack(CREATE_API_COMPONENT, this.createApiComponent);

if (useJacksonConversion) {
final var serializerTemplate = "BigDecimalCustomSerializer";
String targetDir = (sourceFolder + File.separator + modelPackage).replace(".", java.io.File.separator);
String importPackage = targetDir.replace("\\", ".").replace("/", ".");
if (importPackage.length() > 0 && !importPackage.endsWith(".")) {
importPackage += ".";
}
this.supportingFiles.add(new SupportingFile(serializerTemplate + ".mustache", targetDir, serializerTemplate + ".java"));
this.importMapping.put(serializerTemplate, importPackage + serializerTemplate);
}
}

@Override
Expand Down
Loading