From f543b9f881564b4dfd731f091b16480f9aaed704 Mon Sep 17 00:00:00 2001 From: Marcelo Shima Date: Sun, 4 Aug 2024 08:12:28 -0300 Subject: [PATCH] fixes --- generators/spring-boot/generator.js | 92 +++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 12 deletions(-) diff --git a/generators/spring-boot/generator.js b/generators/spring-boot/generator.js index 58a982dc9..05d6f39cf 100644 --- a/generators/spring-boot/generator.js +++ b/generators/spring-boot/generator.js @@ -1,4 +1,5 @@ -import { basename, join } from 'path'; +import { basename, dirname, join } from 'path'; +import { existsSync, mkdirSync, renameSync } from 'fs'; // Use spring-boot as parent due to this context in generators import BaseApplicationGenerator from 'generator-jhipster/generators/base-application'; import { createNeedleCallback } from 'generator-jhipster/generators/base/support'; @@ -62,7 +63,6 @@ export default class extends BaseApplicationGenerator { // Ignore files from generators file => [ - 'jhipster:spring-boot', 'jhipster:spring-cloud:gateway', 'jhipster:spring-cloud-stream:kafka', 'jhipster:spring-cloud-stream:pulsar', @@ -83,10 +83,60 @@ export default class extends BaseApplicationGenerator { '_enumName_.java', '_persistClass_.java.jhi.jackson_identity_info', '_entityClass_GatlingTest.java', + + 'SpaWebFilter_imperative.java', + 'SpaWebFilterIT_imperative.java', + 'SecurityJwtConfiguration.java', + 'AuthenticationIntegrationTest.java', + 'JwtAuthenticationTestUtils.java', + 'AuthenticationIntegrationTest.java', + 'TokenAuthenticationSecurityMetersIT.java', + 'TokenAuthenticationIT.java', + 'AuthenticateController.java', + 'AuthenticateControllerIT.java', + 'CRLFLogConverterTest.java', + 'SpaWebFilterIT_reactive.java', + 'SpaWebFilterTestController_reactive.java', + 'AccountResource_oauth2.java', ].includes(sourceBasename) ? undefined : file; }, + // Prepare spring-boot v3 templates + file => { + if (file.namespace === 'jhipster-kotlin:spring-boot-v2' || !file.sourceFile.includes('.java')) return file; + const resolvedKotlinFile = this.templatePath(`${convertToKotlinFile(file.sourceFile)}.ejs`); + if (existsSync(resolvedKotlinFile)) return file; + let ktFile = convertToKotlinFile(file.sourceFile); + for (const fileMap of [ + ['/EntityMapper.', '/BaseEntityMapper.'], + ['SecurityUtilsUnitTest_imperative.', 'SecurityUtilsUnitTest.'], + ['SecurityConfiguration_imperative.', 'SecurityConfiguration.'], + ['ExceptionTranslatorIT_imperative.', 'ExceptionTranslatorIT.'], + ['SpaWebFilter_reactive.', 'SpaWebFilter.'], + ['LogoutResource_imperative.', 'LogoutResource.'], + ]) { + // Files renamed in v8 + ktFile = ktFile.replace(...fileMap); + } + for (const resolvedSourceFile of [ + this.templatePath('../../spring-boot-v2/templates', `${ktFile}.ejs`), + this.templatePath('../../spring-boot-v2/templates', `${ktFile.replace('/_entityPackage_', '')}.ejs`), + ]) { + // Copy from v2 to v3 templates + if (existsSync(resolvedSourceFile)) { + mkdirSync(dirname(resolvedKotlinFile), { recursive: true }); + renameSync(resolvedSourceFile, resolvedKotlinFile); + return file; + } + } + if (file.namespace === 'jhipster:spring-boot') { + // Print files that should be implemented for spring-boot v3 + // console.log(`'${basename(file.sourceFile)}',`); + return undefined; + } + return file; + }, // Updated templates from v8 file => { if (!['jhipster-kotlin:spring-boot-v2'].includes(file.namespace)) return file; @@ -105,9 +155,9 @@ export default class extends BaseApplicationGenerator { return file; }, file => { - let { resolvedSourceFile, sourceFile, destinationFile, namespace } = file; + let { resolvedSourceFile, sourceFile, destinationFile, namespace: ns } = file; // Already resolved kotlin files - if (resolvedSourceFile.endsWith('.kt') || resolvedSourceFile.includes('.kt.')) { + if (resolvedSourceFile && (resolvedSourceFile.endsWith('.kt') || resolvedSourceFile.includes('.kt.'))) { return file; } @@ -123,7 +173,7 @@ export default class extends BaseApplicationGenerator { const sourceBasename = basename(sourceFile); if ( - file.namespace === 'jhipster:spring-data-relational' && + ns === 'jhipster:spring-data-relational' && ['UserSqlHelper_reactive.java', 'ColumnConverter_reactive.java', 'EntityManager_reactive.java'].includes( sourceBasename, ) @@ -133,10 +183,10 @@ export default class extends BaseApplicationGenerator { const isCommonFile = filename => { const sourceBasename = basename(filename); - if (['_entityClass_Repository.java', '_entityClass_Repository_reactive.java'].includes(sourceBasename)) { - return file.namespace !== 'spring-data-couchbase'; + if (['_entityClass_Repository.kt', '_entityClass_Repository_reactive.kt'].includes(sourceBasename)) { + return ns !== 'spring-data-couchbase'; } - return ['TestContainersSpringContextCustomizerFactory.java'].includes(sourceBasename); + return ['TestContainersSpringContextCustomizerFactory.kt'].includes(sourceBasename); }; // TestContainersSpringContextCustomizerFactory uses a single template for modularized (dbs) and non-modularized (kafka, etc) templates @@ -156,10 +206,28 @@ export default class extends BaseApplicationGenerator { } sourceFile = sourceFile.replace('/java/package/', '/java/_package_/'); - sourceFile = - file.namespace === 'jhipster-kotlin:spring-boot-v2' || isCommonFile(sourceFile) - ? convertToKotlinFile(sourceFile) - : join(namespace.split(':').pop(), convertToKotlinFile(sourceFile)); + sourceFile = convertToKotlinFile(sourceFile); + + if (ns === 'jhipster-kotlin:spring-boot-v2' && !isCommonFile(sourceFile)) { + let resolvedSourceFile = this.templatePath('../../spring-boot-v2/templates', sourceFile); + if (!existsSync(`${resolvedSourceFile}.ejs`)) { + // This condition can make the file to render twice, but fixes jhipster v7 files differences. + resolvedSourceFile = this.templatePath(sourceFile); + if (!existsSync(`${resolvedSourceFile}.ejs`)) { + return undefined; + } + } + return { + ...file, + sourceFile, + javaResolvedSourceFile: resolvedSourceFile, + resolvedSourceFile, + destinationFile: convertToKotlinFile(destinationFile), + }; + } + + const prefix = ns === 'jhipster:spring-boot' || isCommonFile(sourceFile) ? '' : ns.split(':').pop(); + sourceFile = join(prefix, sourceFile); return { ...file,