diff --git a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/KogitoApplicationPropertyProvider.java b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/KogitoApplicationPropertyProvider.java index 6aceefe760e..aefc03e19f1 100644 --- a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/KogitoApplicationPropertyProvider.java +++ b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/KogitoApplicationPropertyProvider.java @@ -47,6 +47,11 @@ public void setApplicationProperty(String key, String value) { public Optional getApplicationProperty(String property, Class clazz) { return Optional.ofNullable(convert(properties.getProperty(property), clazz)); } + + @Override + public void removeApplicationProperty(String key) { + properties.remove(key); + } }; } @@ -57,4 +62,6 @@ public Optional getApplicationProperty(String property, Class clazz) { Collection getApplicationProperties(); void setApplicationProperty(String key, String value); + + void removeApplicationProperty(String key); } diff --git a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java index d46cfdb118a..f8cb06a9a0e 100644 --- a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java +++ b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java @@ -155,6 +155,11 @@ public void setApplicationProperty(String key, String value) { applicationProperties.setApplicationProperty(key, value); } + @Override + public void removeApplicationProperty(String key) { + applicationProperties.removeApplicationProperty(key); + } + @Override public String getPackageName() { return packageName; diff --git a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java index 5b8facb99d8..f239870d5a6 100644 --- a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java +++ b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java @@ -49,7 +49,8 @@ public class ApplicationGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationGenerator.class); public static final String APPLICATION_CLASS_NAME = "Application"; - private static final GeneratedFileType APPLICATION_SECTION_TYPE = GeneratedFileType.of("APPLICATION_SECTION", GeneratedFileType.Category.SOURCE); + private static final GeneratedFileType APPLICATION_SECTION_TYPE = GeneratedFileType.of("APPLICATION_SECTION", + GeneratedFileType.Category.SOURCE); private final ApplicationContainerGenerator applicationMainGenerator; private ApplicationConfigGenerator applicationConfigGenerator; @@ -95,8 +96,11 @@ public Collection generate() { public List generateComponents() { return generators.stream() - .flatMap(gen -> gen.generate().stream()) - .filter(this::filterGeneratedFile) + .flatMap(gen -> { + boolean keepRestFile = keepRestFile(gen); + return gen.generate().stream() + .filter(generatedFile -> filterGeneratedFile(generatedFile, keepRestFile)); + }) .collect(Collectors.toList()); } @@ -112,8 +116,12 @@ public GeneratedFile generateApplicationDescriptor() { return applicationMainGenerator.generate(); } - private boolean filterGeneratedFile(GeneratedFile generatedFile) { - boolean keepFile = context.hasRESTGloballyAvailable() || !REST_TYPE.equals(generatedFile.type()); + boolean keepRestFile(Generator generator) { + return context.hasRESTForGenerator(generator); + } + + private boolean filterGeneratedFile(GeneratedFile generatedFile, boolean keepRestFile) { + boolean keepFile = keepRestFile || !REST_TYPE.equals(generatedFile.type()); if (!keepFile) { LOGGER.warn("Skipping file because REST is disabled: " + generatedFile.relativePath()); } @@ -134,7 +142,7 @@ private Collection generateApplicationSections() { /** * Method to wire Generator with ApplicationGenerator if enabled - * + * * @param generator * @param * @return diff --git a/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java b/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java index ee642d44ab7..46b3019230e 100644 --- a/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java +++ b/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java @@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.kie.kogito.codegen.api.Generator.REST_TYPE; +import static org.kie.kogito.codegen.api.context.KogitoBuildContext.generateRESTConfigurationKeyForResource; public class ApplicationGeneratorTest { @@ -168,6 +169,66 @@ public void disableGlobalRestGeneration(KogitoBuildContext.Builder contextBuilde } } + @ParameterizedTest + @MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#contextBuilders") + public void keepRestFile(KogitoBuildContext.Builder contextBuilder) { + final KogitoBuildContext context = contextBuilder.build(); + final ApplicationGenerator appGenerator = new ApplicationGenerator(context); + final MockGenerator restGenerator = new MockGenerator(context, true); + final String generateRESTConfigurationKeyForResource = generateRESTConfigurationKeyForResource(restGenerator.name()); + + assertThat(appGenerator.registerGeneratorIfEnabled(restGenerator)) + .isNotEmpty(); + assertThat(appGenerator.getGenerators()).hasSize(1); + + if (context.hasRESTForGenerator(restGenerator)) { + // globally and engine-specific disable REST + context.setApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST, "false"); + context.setApplicationProperty(generateRESTConfigurationKeyForResource, "false"); + assertThat(appGenerator.keepRestFile(restGenerator)).isFalse(); + + // globally disable REST, engine-specific enable REST + context.setApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST, "false"); + context.setApplicationProperty(generateRESTConfigurationKeyForResource, "true"); + assertThat(appGenerator.keepRestFile(restGenerator)).isFalse(); + + // globally enable REST, engine-specific disable REST + context.setApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST, "true"); + context.setApplicationProperty(generateRESTConfigurationKeyForResource, "false"); + assertThat(appGenerator.keepRestFile(restGenerator)).isFalse(); + + // globally and engine-specific enable REST + context.setApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST, "true"); + context.setApplicationProperty(generateRESTConfigurationKeyForResource, "true"); + assertThat(appGenerator.keepRestFile(restGenerator)).isTrue(); + + // engine-specific enable REST + context.removeApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST); + context.setApplicationProperty(generateRESTConfigurationKeyForResource, "true"); + assertThat(appGenerator.keepRestFile(restGenerator)).isTrue(); + + // engine-specific disable REST + context.removeApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST); + context.setApplicationProperty(generateRESTConfigurationKeyForResource, "false"); + assertThat(appGenerator.keepRestFile(restGenerator)).isFalse(); + + // globally enable REST + context.setApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST, "true"); + context.removeApplicationProperty(generateRESTConfigurationKeyForResource); + assertThat(appGenerator.keepRestFile(restGenerator)).isTrue(); + + // globally disable REST + context.setApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST, "false"); + context.removeApplicationProperty(generateRESTConfigurationKeyForResource); + assertThat(appGenerator.keepRestFile(restGenerator)).isFalse(); + + // defaults + context.removeApplicationProperty(KogitoBuildContext.KOGITO_GENERATE_REST); + context.removeApplicationProperty(generateRESTConfigurationKeyForResource); + assertThat(appGenerator.keepRestFile(restGenerator)).isTrue(); + } + } + private void assertCompilationUnit(final CompilationUnit compilationUnit, final boolean checkCDI) { assertThat(compilationUnit).isNotNull(); diff --git a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusApplicationPropertiesProvider.java b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusApplicationPropertiesProvider.java index c0ac45589dc..a64c114c242 100644 --- a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusApplicationPropertiesProvider.java +++ b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusApplicationPropertiesProvider.java @@ -48,4 +48,9 @@ public Optional getApplicationProperty(String property, Class clazz) { public void setApplicationProperty(String key, String value) { System.setProperty(key, value); } + + @Override + public void removeApplicationProperty(String key) { + System.clearProperty(key); + } }