generator-reddgen
Version:
Reddgen is a development platform to quickly generate, develop, & deploy modern web applications & microservice architectures.
1,435 lines (1,428 loc) • 65.6 kB
JavaScript
/**
* Copyright 2013-2022 the original author or authors from the Reddgen project.
*
* This file is part of the Reddgen project, see https://www.reddgen.tech/
* for more information.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const serverCleanup = require('./cleanup');
const constants = require('../generator-constants');
const { addSectionsCondition, mergeSections } = require('../utils');
const { writeCouchbaseFiles } = require('./files-couchbase');
const { writeSqlFiles } = require('./files-sql');
/* Constants use throughout */
const INTERPOLATE_REGEX = constants.INTERPOLATE_REGEX;
const DOCKER_DIR = constants.DOCKER_DIR;
const TEST_DIR = constants.TEST_DIR;
const SERVER_MAIN_SRC_DIR = constants.SERVER_MAIN_SRC_DIR;
const SERVER_MAIN_RES_DIR = constants.SERVER_MAIN_RES_DIR;
const SERVER_TEST_SRC_DIR = constants.SERVER_TEST_SRC_DIR;
const SERVER_TEST_RES_DIR = constants.SERVER_TEST_RES_DIR;
const shouldSkipUserManagement = generator =>
generator.skipUserManagement && (!generator.applicationTypeMonolith || !generator.authenticationTypeOauth2);
const liquibaseFiles = {
serverResource: [
{
path: SERVER_MAIN_RES_DIR,
templates: [
{
override: generator => !generator.reddgenConfig.incrementalChangelog || generator.configOptions.recreateInitialChangelog,
file: 'config/liquibase/changelog/initial_schema.xml',
renameTo: () => 'config/liquibase/changelog/00000000000000_initial_schema.xml',
options: { interpolate: INTERPOLATE_REGEX },
},
{
override: generator => !generator.reddgenConfig.incrementalChangelog || generator.configOptions.recreateInitialChangelog,
file: 'config/liquibase/master.xml',
},
],
},
],
};
const mongoDbFiles = {
docker: [
{
path: DOCKER_DIR,
templates: ['mongodb.yml', 'mongodb-cluster.yml', 'mongodb/MongoDB.Dockerfile', 'mongodb/scripts/init_replicaset.js'],
},
],
serverResource: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/dbmigrations/package-info.java',
renameTo: generator => `${generator.javaDir}config/dbmigrations/package-info.java`,
},
],
},
{
condition: generator => !generator.skipUserManagement || (generator.skipUserManagement && generator.authenticationTypeOauth2),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/dbmigrations/InitialSetupMigration.java',
renameTo: generator => `${generator.javaDir}config/dbmigrations/InitialSetupMigration.java`,
},
],
},
{
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/MongoDbTestContainer.java',
renameTo: generator => `${generator.testDir}config/MongoDbTestContainer.java`,
},
{
file: 'package/config/EmbeddedMongo.java',
renameTo: generator => `${generator.testDir}config/EmbeddedMongo.java`,
},
],
},
],
};
const neo4jFiles = {
docker: [
{
path: DOCKER_DIR,
templates: ['neo4j.yml'],
},
],
serverResource: [
{
condition: generator => !generator.skipUserManagement || generator.authenticationTypeOauth2,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/neo4j/Neo4jMigrations.java',
renameTo: generator => `${generator.javaDir}config/neo4j/Neo4jMigrations.java`,
},
{
file: 'package/config/neo4j/package-info.java',
renameTo: generator => `${generator.javaDir}config/neo4j/package-info.java`,
},
],
},
{
condition: generator => !generator.skipUserManagement || generator.authenticationTypeOauth2,
path: SERVER_MAIN_RES_DIR,
templates: ['config/neo4j/migrations/user__admin.json', 'config/neo4j/migrations/user__user.json'],
},
],
serverTestFw: [
{
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/Neo4jTestContainer.java',
renameTo: generator => `${generator.testDir}config/Neo4jTestContainer.java`,
},
{
file: 'package/config/EmbeddedNeo4j.java',
renameTo: generator => `${generator.testDir}config/EmbeddedNeo4j.java`,
},
],
},
],
};
const cassandraFiles = {
docker: [
{
path: DOCKER_DIR,
templates: [
// docker-compose files
'cassandra.yml',
'cassandra-cluster.yml',
'cassandra-migration.yml',
// dockerfiles
'cassandra/Cassandra-Migration.Dockerfile',
// scripts
'cassandra/scripts/autoMigrate.sh',
'cassandra/scripts/execute-cql.sh',
],
},
],
serverResource: [
{
path: SERVER_MAIN_RES_DIR,
templates: [
'config/cql/create-keyspace-prod.cql',
'config/cql/create-keyspace.cql',
'config/cql/drop-keyspace.cql',
{ file: 'config/cql/changelog/README.md', method: 'copy' },
],
},
{
condition: generator =>
!generator.applicationTypeMicroservice && (!generator.skipUserManagement || generator.authenticationTypeOauth2),
path: SERVER_MAIN_RES_DIR,
templates: [
{ file: 'config/cql/changelog/create-tables.cql', renameTo: () => 'config/cql/changelog/00000000000000_create-tables.cql' },
{
file: 'config/cql/changelog/insert_default_users.cql',
renameTo: () => 'config/cql/changelog/00000000000001_insert_default_users.cql',
},
],
},
],
serverTestFw: [
{
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/CassandraKeyspaceIT.java',
renameTo: generator => `${generator.testDir}CassandraKeyspaceIT.java`,
},
{
file: 'package/config/CassandraTestContainer.java',
renameTo: generator => `${generator.testDir}config/CassandraTestContainer.java`,
},
{
file: 'package/config/EmbeddedCassandra.java',
renameTo: generator => `${generator.testDir}config/EmbeddedCassandra.java`,
},
],
},
],
};
/**
* The default is to use a file path string. It implies use of the template method.
* For any other config an object { file:.., method:.., template:.. } can be used
*/
const baseServerFiles = {
jib: [
{
path: 'src/main/docker/jib/',
templates: ['entrypoint.sh'],
},
],
packageJson: [
{
condition: generator => generator.skipClient,
templates: ['package.json'],
},
],
docker: [
{
path: DOCKER_DIR,
templates: [
'app.yml',
'reddgen-control-center.yml',
'sonar.yml',
'monitoring.yml',
'prometheus/prometheus.yml',
'grafana/provisioning/dashboards/dashboard.yml',
'grafana/provisioning/dashboards/JVM.json',
'grafana/provisioning/datasources/datasource.yml',
],
},
{
condition: generator => generator.cacheProviderHazelcast,
path: DOCKER_DIR,
templates: ['hazelcast-management-center.yml'],
},
{
condition: generator => generator.cacheProviderMemcached,
path: DOCKER_DIR,
templates: ['memcached.yml'],
},
{
condition: generator => generator.cacheProviderRedis,
path: DOCKER_DIR,
templates: ['redis.yml', 'redis-cluster.yml', 'redis/Redis-Cluster.Dockerfile', 'redis/connectRedisCluster.sh'],
},
{
condition: generator => generator.searchEngineElasticsearch,
path: DOCKER_DIR,
templates: ['elasticsearch.yml'],
},
{
condition: generator => generator.messageBrokerKafka,
path: DOCKER_DIR,
templates: ['kafka.yml'],
},
{
condition: generator => !!generator.serviceDiscoveryType,
path: DOCKER_DIR,
templates: [{ file: 'config/README.md', renameTo: () => 'central-server-config/README.md' }],
},
{
condition: generator => generator.serviceDiscoveryType && generator.serviceDiscoveryConsul,
path: DOCKER_DIR,
templates: [
'consul.yml',
{ file: 'config/git2consul.json', method: 'copy' },
{ file: 'config/consul-config/application.yml', renameTo: () => 'central-server-config/application.yml' },
],
},
{
condition: generator => generator.serviceDiscoveryType && generator.serviceDiscoveryEureka,
path: DOCKER_DIR,
templates: [
'reddgen-registry.yml',
{
file: 'config/docker-config/application.yml',
renameTo: () => 'central-server-config/docker-config/application.yml',
},
{
file: 'config/localhost-config/application.yml',
renameTo: () => 'central-server-config/localhost-config/application.yml',
},
],
},
{
condition: generator => !!generator.enableSwaggerCodegen,
path: DOCKER_DIR,
templates: ['swagger-editor.yml'],
},
{
condition: generator => generator.authenticationTypeOauth2 && !generator.applicationTypeMicroservice,
path: DOCKER_DIR,
templates: ['keycloak.yml', { file: 'config/realm-config/reddgen-realm.json', renameTo: () => 'realm-config/reddgen-realm.json' }],
},
{
condition: generator => generator.serviceDiscoveryType || generator.applicationTypeGateway || generator.applicationTypeMicroservice,
path: DOCKER_DIR,
templates: ['zipkin.yml'],
},
],
serverBuild: [
{
templates: [
{ file: 'checkstyle.xml', options: { interpolate: INTERPOLATE_REGEX } },
{ file: 'devcontainer/devcontainer.json', renameTo: () => '.devcontainer/devcontainer.json' },
{ file: 'devcontainer/Dockerfile', renameTo: () => '.devcontainer/Dockerfile' },
],
},
{
condition: generator => generator.buildToolGradle,
templates: [
'build.gradle',
'settings.gradle',
'gradle.properties',
'gradle/sonar.gradle',
'gradle/docker.gradle',
{ file: 'gradle/profile_dev.gradle', options: { interpolate: INTERPOLATE_REGEX } },
{ file: 'gradle/profile_prod.gradle', options: { interpolate: INTERPOLATE_REGEX } },
'gradle/war.gradle',
'gradle/zipkin.gradle',
{ file: 'gradlew', method: 'copy', noEjs: true },
{ file: 'gradlew.bat', method: 'copy', noEjs: true },
{ file: 'gradle/wrapper/gradle-wrapper.jar', method: 'copy', noEjs: true },
'gradle/wrapper/gradle-wrapper.properties',
],
},
{
condition: generator => generator.buildToolGradle && !!generator.enableSwaggerCodegen,
templates: ['gradle/swagger.gradle'],
},
{
condition: generator => generator.buildToolMaven,
templates: [
{ file: 'mvnw', method: 'copy', noEjs: true },
{ file: 'mvnw.cmd', method: 'copy', noEjs: true },
{ file: '.mvn/jvm.config', method: 'copy', noEjs: true },
{ file: '.mvn/wrapper/maven-wrapper.jar', method: 'copy', noEjs: true },
{ file: '.mvn/wrapper/maven-wrapper.properties', method: 'copy', noEjs: true },
{ file: 'pom.xml', options: { interpolate: INTERPOLATE_REGEX } },
],
},
{
condition: generator => !generator.skipClient,
templates: [
{ file: 'npmw', method: 'copy', noEjs: true },
{ file: 'npmw.cmd', method: 'copy', noEjs: true },
],
},
],
serverResource: [
{
condition: generator => generator.clientFrameworkReact,
path: SERVER_MAIN_RES_DIR,
templates: [
{
file: 'banner-react.txt',
method: 'copy',
noEjs: true,
renameTo: () => 'banner.txt',
},
],
},
{
condition: generator => generator.clientFrameworkVue,
path: SERVER_MAIN_RES_DIR,
templates: [
{
file: 'banner-vue.txt',
method: 'copy',
noEjs: true,
renameTo: () => 'banner.txt',
},
],
},
{
condition: generator => !generator.clientFrameworkReact && !generator.clientFrameworkVue,
path: SERVER_MAIN_RES_DIR,
templates: [{ file: 'banner.txt', method: 'copy', noEjs: true }],
},
{
condition: generator => !!generator.enableSwaggerCodegen,
path: SERVER_MAIN_RES_DIR,
templates: ['swagger/api.yml'],
},
{
path: SERVER_MAIN_RES_DIR,
templates: [
// Thymeleaf templates
{ file: 'templates/error.html', method: 'copy' },
'logback-spring.xml',
'config/application.yml',
'config/application-dev.yml',
'config/application-tls.yml',
'config/application-prod.yml',
'i18n/messages.properties',
],
},
],
serverJavaAuthConfig: [
{
condition: generator =>
!generator.reactive && (generator.databaseTypeSql || generator.databaseTypeMongodb || generator.databaseTypeCouchbase),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/SpringSecurityAuditorAware.java',
renameTo: generator => `${generator.javaDir}security/SpringSecurityAuditorAware.java`,
},
],
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/SecurityUtils.java',
renameTo: generator => `${generator.javaDir}security/SecurityUtils.java`,
},
{
file: 'package/security/AuthoritiesConstants.java',
renameTo: generator => `${generator.javaDir}security/AuthoritiesConstants.java`,
},
{
file: 'package/security/package-info.java',
renameTo: generator => `${generator.javaDir}security/package-info.java`,
},
],
},
{
condition: generator => !generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/security/SecurityUtilsUnitTest.java',
renameTo: generator => `${generator.testDir}security/SecurityUtilsUnitTest.java`,
},
],
},
{
condition: generator => generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/security/SecurityUtilsUnitTest_reactive.java',
renameTo: generator => `${generator.testDir}security/SecurityUtilsUnitTest.java`,
},
],
},
{
condition: generator => generator.authenticationTypeJwt,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/jwt/TokenProvider.java',
renameTo: generator => `${generator.javaDir}security/jwt/TokenProvider.java`,
},
{
file: 'package/security/jwt/JWTFilter.java',
renameTo: generator => `${generator.javaDir}security/jwt/JWTFilter.java`,
},
{
file: 'package/management/SecurityMetersService.java',
renameTo: generator => `${generator.javaDir}management/SecurityMetersService.java`,
},
],
},
{
condition: generator => generator.authenticationTypeJwt && !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/jwt/JWTConfigurer.java',
renameTo: generator => `${generator.javaDir}security/jwt/JWTConfigurer.java`,
},
],
},
{
condition: generator => generator.reactive && generator.applicationTypeGateway && generator.authenticationTypeJwt,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/jwt/JWTRelayGatewayFilterFactory.java',
renameTo: generator => `${generator.testDir}security/jwt/JWTRelayGatewayFilterFactory.java`,
},
],
},
{
condition: generator => !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/SecurityConfiguration.java',
renameTo: generator => `${generator.javaDir}config/SecurityConfiguration.java`,
},
],
},
{
condition: generator => generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/SecurityConfiguration_reactive.java',
renameTo: generator => `${generator.javaDir}config/SecurityConfiguration.java`,
},
],
},
{
condition: generator => !shouldSkipUserManagement(generator) && generator.authenticationTypeSession && !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/PersistentTokenRememberMeServices.java',
renameTo: generator => `${generator.javaDir}security/PersistentTokenRememberMeServices.java`,
},
{
file: 'package/domain/PersistentToken.java',
renameTo: generator => `${generator.javaDir}domain/PersistentToken.java`,
},
],
},
{
condition: generator =>
!shouldSkipUserManagement(generator) &&
generator.authenticationTypeSession &&
!generator.reactive &&
!generator.databaseTypeCouchbase,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/repository/PersistentTokenRepository.java',
renameTo: generator => `${generator.javaDir}repository/PersistentTokenRepository.java`,
},
],
},
{
condition: generator => generator.authenticationTypeOauth2,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/oauth2/AudienceValidator.java',
renameTo: generator => `${generator.javaDir}security/oauth2/AudienceValidator.java`,
},
{
file: 'package/security/oauth2/JwtGrantedAuthorityConverter.java',
renameTo: generator => `${generator.javaDir}security/oauth2/JwtGrantedAuthorityConverter.java`,
},
{
file: 'package/security/oauth2/OAuthIdpTokenResponseDTO.java',
renameTo: generator => `${generator.javaDir}security/oauth2/OAuthIdpTokenResponseDTO.java`,
},
],
},
{
condition: generator => generator.authenticationTypeOauth2,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/security/oauth2/AudienceValidatorTest.java',
renameTo: generator => `${generator.javaDir}security/oauth2/AudienceValidatorTest.java`,
},
{
file: 'package/config/TestSecurityConfiguration.java',
renameTo: generator => `${generator.testDir}config/TestSecurityConfiguration.java`,
},
],
},
{
condition: generator =>
!generator.reactive &&
generator.authenticationTypeOauth2 &&
(generator.applicationTypeMicroservice || generator.applicationTypeGateway),
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/security/oauth2/AuthorizationHeaderUtilTest.java',
renameTo: generator => `${generator.javaDir}security/oauth2/AuthorizationHeaderUtilTest.java`,
},
],
},
{
condition: generator => !shouldSkipUserManagement(generator) && !generator.authenticationTypeOauth2,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/DomainUserDetailsService.java',
renameTo: generator => `${generator.javaDir}security/DomainUserDetailsService.java`,
},
{
file: 'package/security/UserNotActivatedException.java',
renameTo: generator => `${generator.javaDir}security/UserNotActivatedException.java`,
},
],
},
{
condition: generator => !generator.applicationTypeMicroservice && generator.authenticationTypeJwt,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/vm/LoginVM.java',
renameTo: generator => `${generator.javaDir}web/rest/vm/LoginVM.java`,
},
{
file: 'package/web/rest/UserJWTController.java',
renameTo: generator => `${generator.javaDir}web/rest/UserJWTController.java`,
},
],
},
{
condition: generator => !!generator.enableSwaggerCodegen,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/OpenApiConfiguration.java',
renameTo: generator => `${generator.javaDir}config/OpenApiConfiguration.java`,
},
],
},
{
condition: generator => !generator.reactive && generator.authenticationTypeOauth2 && !generator.applicationTypeMicroservice,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/oauth2/CustomClaimConverter.java',
renameTo: generator => `${generator.javaDir}security/oauth2/CustomClaimConverter.java`,
},
],
},
{
condition: generator => !generator.reactive && generator.authenticationTypeOauth2 && !generator.applicationTypeMicroservice,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/security/oauth2/CustomClaimConverterIT.java',
renameTo: generator => `${generator.javaDir}security/oauth2/CustomClaimConverterIT.java`,
},
],
},
],
serverJavaGateway: [
{
condition: generator => generator.applicationTypeGateway && generator.serviceDiscoveryType,
path: SERVER_MAIN_SRC_DIR,
templates: [
{ file: 'package/web/rest/vm/RouteVM.java', renameTo: generator => `${generator.javaDir}web/rest/vm/RouteVM.java` },
{
file: 'package/web/rest/GatewayResource.java',
renameTo: generator => `${generator.javaDir}web/rest/GatewayResource.java`,
},
],
},
{
condition: generator => generator.authenticationTypeOauth2 && (generator.applicationTypeMonolith || generator.applicationTypeGateway),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/AuthInfoResource.java',
renameTo: generator => `${generator.javaDir}web/rest/AuthInfoResource.java`,
},
],
},
{
condition: generator =>
generator.authenticationTypeOauth2 &&
!generator.reactive &&
(generator.applicationTypeMonolith || generator.applicationTypeGateway),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/LogoutResource.java',
renameTo: generator => `${generator.javaDir}web/rest/LogoutResource.java`,
},
],
},
{
condition: generator =>
generator.authenticationTypeOauth2 && generator.reactive && (generator.applicationTypeMonolith || generator.applicationTypeGateway),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/LogoutResource_reactive.java',
renameTo: generator => `${generator.javaDir}web/rest/LogoutResource.java`,
},
],
},
{
condition: generator => generator.applicationTypeGateway && generator.serviceDiscoveryType && generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/filter/ModifyServersOpenApiFilter.java',
renameTo: generator => `${generator.javaDir}web/filter/ModifyServersOpenApiFilter.java`,
},
],
},
{
condition: generator => generator.applicationTypeGateway && generator.serviceDiscoveryType && generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/filter/ModifyServersOpenApiFilterTest.java',
renameTo: generator => `${generator.testDir}web/filter/ModifyServersOpenApiFilterTest.java`,
},
],
},
],
serverMicroservice: [
{
condition: generator =>
!generator.reactive &&
(generator.applicationTypeMicroservice || generator.applicationTypeGateway) &&
generator.authenticationTypeJwt,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/FeignConfiguration.java',
renameTo: generator => `${generator.javaDir}config/FeignConfiguration.java`,
},
{
file: 'package/client/JWT_UserFeignClientInterceptor.java',
renameTo: generator => `${generator.javaDir}client/UserFeignClientInterceptor.java`,
},
],
},
{
condition: generator =>
!generator.reactive &&
generator.authenticationTypeOauth2 &&
(generator.applicationTypeMicroservice || generator.applicationTypeGateway),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/security/oauth2/AuthorizationHeaderUtil.java',
renameTo: generator => `${generator.javaDir}security/oauth2/AuthorizationHeaderUtil.java`,
},
{
file: 'package/config/FeignConfiguration.java',
renameTo: generator => `${generator.javaDir}config/FeignConfiguration.java`,
},
{
file: 'package/client/AuthorizedFeignClient.java',
renameTo: generator => `${generator.javaDir}client/AuthorizedFeignClient.java`,
},
{
file: 'package/client/OAuth2InterceptedFeignConfiguration.java',
renameTo: generator => `${generator.javaDir}client/OAuth2InterceptedFeignConfiguration.java`,
},
{
file: 'package/client/TokenRelayRequestInterceptor.java',
renameTo: generator => `${generator.javaDir}client/TokenRelayRequestInterceptor.java`,
},
],
},
{
condition: generator => !generator.reactive && generator.applicationTypeGateway && !generator.serviceDiscoveryType,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/RestTemplateConfiguration.java',
renameTo: generator => `${generator.javaDir}config/RestTemplateConfiguration.java`,
},
],
},
{
condition: generator => generator.applicationTypeMicroservice,
path: SERVER_MAIN_RES_DIR,
templates: [{ file: 'static/microservices_index.html', renameTo: () => 'static/index.html' }],
},
],
serverMicroserviceAndGateway: [
{
condition: generator => generator.serviceDiscoveryType,
path: SERVER_MAIN_RES_DIR,
templates: ['config/bootstrap.yml', 'config/bootstrap-prod.yml'],
},
],
serverJavaApp: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [{ file: 'package/Application.java', renameTo: generator => `${generator.javaDir}${generator.mainClass}.java` }],
},
{
condition: generator => generator.serviceDiscoveryType && generator.serviceDiscoveryEureka,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/EurekaWorkaroundConfiguration.java',
renameTo: generator => `${generator.javaDir}/config/EurekaWorkaroundConfiguration.java`,
},
],
},
{
condition: generator => !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [{ file: 'package/ApplicationWebXml.java', renameTo: generator => `${generator.javaDir}ApplicationWebXml.java` }],
},
{
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/TechnicalStructureTest.java',
renameTo: generator => `${generator.testDir}TechnicalStructureTest.java`,
},
],
},
{
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/AsyncSyncConfiguration.java',
renameTo: generator => `${generator.testDir}config/AsyncSyncConfiguration.java`,
},
{
file: 'package/IntegrationTest.java',
renameTo: generator => `${generator.testDir}/IntegrationTest.java`,
},
{
file: 'package/config/SpringBootTestClassOrderer.java',
renameTo: generator => `${generator.testDir}config/SpringBootTestClassOrderer.java`,
},
],
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/GeneratedByReddgen.java',
renameTo: generator => `${generator.javaDir}GeneratedByReddgen.java`,
},
],
},
],
serverJavaConfig: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/aop/logging/LoggingAspect.java',
renameTo: generator => `${generator.javaDir}aop/logging/LoggingAspect.java`,
},
{ file: 'package/config/package-info.java', renameTo: generator => `${generator.javaDir}config/package-info.java` },
{
file: 'package/config/AsyncConfiguration.java',
renameTo: generator => `${generator.javaDir}config/AsyncConfiguration.java`,
},
{
file: 'package/config/CRLFLogConverter.java',
renameTo: generator => `${generator.javaDir}config/CRLFLogConverter.java`,
},
{
file: 'package/config/DateTimeFormatConfiguration.java',
renameTo: generator => `${generator.javaDir}config/DateTimeFormatConfiguration.java`,
},
{
file: 'package/config/LoggingConfiguration.java',
renameTo: generator => `${generator.javaDir}config/LoggingConfiguration.java`,
},
{
file: 'package/config/ApplicationProperties.java',
renameTo: generator => `${generator.javaDir}config/ApplicationProperties.java`,
},
{
file: 'package/config/JacksonConfiguration.java',
renameTo: generator => `${generator.javaDir}config/JacksonConfiguration.java`,
},
{
file: 'package/config/LoggingAspectConfiguration.java',
renameTo: generator => `${generator.javaDir}config/LoggingAspectConfiguration.java`,
},
{ file: 'package/config/WebConfigurer.java', renameTo: generator => `${generator.javaDir}config/WebConfigurer.java` },
],
},
{
condition: generator => !generator.skipClient && !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/StaticResourcesWebConfiguration.java',
renameTo: generator => `${generator.javaDir}config/StaticResourcesWebConfiguration.java`,
},
],
},
{
condition: generator =>
!generator.skipUserManagement ||
generator.databaseTypeSql ||
generator.databaseTypeMongodb ||
generator.databaseTypeCouchbase ||
generator.databaseTypeNeo4j,
path: SERVER_MAIN_SRC_DIR,
templates: [{ file: 'package/config/Constants.java', renameTo: generator => `${generator.javaDir}config/Constants.java` }],
},
{
condition: generator => !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/LocaleConfiguration.java',
renameTo: generator => `${generator.javaDir}config/LocaleConfiguration.java`,
},
],
},
{
condition: generator => generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/ReactorConfiguration.java',
renameTo: generator => `${generator.javaDir}config/ReactorConfiguration.java`,
},
{
file: 'package/config/LocaleConfiguration_reactive.java',
renameTo: generator => `${generator.javaDir}config/LocaleConfiguration.java`,
},
],
},
{
condition: generator =>
generator.cacheProviderEhCache ||
generator.cacheProviderCaffeine ||
generator.cacheProviderHazelcast ||
generator.cacheProviderInfinispan ||
generator.cacheProviderMemcached ||
generator.cacheProviderRedis ||
generator.applicationTypeGateway,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/CacheConfiguration.java',
renameTo: generator => `${generator.javaDir}config/CacheConfiguration.java`,
},
],
},
{
condition: generator => generator.cacheProviderInfinispan,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/CacheFactoryConfiguration.java',
renameTo: generator => `${generator.javaDir}config/CacheFactoryConfiguration.java`,
},
],
},
{
condition: generator => generator.cacheProviderRedis,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/EmbeddedRedis.java',
renameTo: generator => `${generator.testDir}config/EmbeddedRedis.java`,
},
{
file: 'package/config/RedisTestContainer.java',
renameTo: generator => `${generator.testDir}config/RedisTestContainer.java`,
},
],
},
{
condition: generator => !generator.databaseTypeNo,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: generator => `package/config/DatabaseConfiguration_${generator.databaseType}.java`,
renameTo: generator => `${generator.javaDir}config/DatabaseConfiguration.java`,
},
],
},
{
condition: generator => generator.communicationSpringWebsocket,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/WebsocketConfiguration.java',
renameTo: generator => `${generator.javaDir}config/WebsocketConfiguration.java`,
},
{
file: 'package/config/WebsocketSecurityConfiguration.java',
renameTo: generator => `${generator.javaDir}config/WebsocketSecurityConfiguration.java`,
},
],
},
{
condition: generator => generator.searchEngineElasticsearch,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/ElasticsearchConfiguration.java',
renameTo: generator => `${generator.javaDir}config/ElasticsearchConfiguration.java`,
},
],
},
],
serverJavaDomain: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [{ file: 'package/domain/package-info.java', renameTo: generator => `${generator.javaDir}domain/package-info.java` }],
},
{
condition: generator =>
generator.databaseTypeSql || generator.databaseTypeMongodb || generator.databaseTypeNeo4j || generator.databaseTypeCouchbase,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/domain/AbstractAuditingEntity.java',
renameTo: generator => `${generator.javaDir}domain/AbstractAuditingEntity.java`,
},
],
},
],
serverJavaPackageInfo: [
{
condition: generator => generator.searchEngineElasticsearch,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/repository/search/package-info.java',
renameTo: generator => `${generator.javaDir}repository/search/package-info.java`,
},
],
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{ file: 'package/repository/package-info.java', renameTo: generator => `${generator.javaDir}repository/package-info.java` },
],
},
],
serverJavaServiceError: [
{
condition: generator => !generator.skipUserManagement,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/service/EmailAlreadyUsedException.java',
renameTo: generator => `${generator.javaDir}service/EmailAlreadyUsedException.java`,
},
{
file: 'package/service/InvalidPasswordException.java',
renameTo: generator => `${generator.javaDir}service/InvalidPasswordException.java`,
},
{
file: 'package/service/UsernameAlreadyUsedException.java',
renameTo: generator => `${generator.javaDir}service/UsernameAlreadyUsedException.java`,
},
],
},
],
serverJavaService: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [{ file: 'package/service/package-info.java', renameTo: generator => `${generator.javaDir}service/package-info.java` }],
},
{
condition: generator => generator.messageBrokerKafka,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/KafkaSseConsumer.java',
renameTo: generator => `${generator.javaDir}config/KafkaSseConsumer.java`,
},
{
file: 'package/config/KafkaSseProducer.java',
renameTo: generator => `${generator.javaDir}config/KafkaSseProducer.java`,
},
],
},
],
serverJavaWebError: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/errors/package-info.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/package-info.java`,
},
{
file: 'package/web/rest/errors/BadRequestAlertException.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/BadRequestAlertException.java`,
},
{
file: 'package/web/rest/errors/ErrorConstants.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/ErrorConstants.java`,
},
{
file: 'package/web/rest/errors/ExceptionTranslator.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/ExceptionTranslator.java`,
},
{
file: 'package/web/rest/errors/FieldErrorVM.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/FieldErrorVM.java`,
},
],
},
{
condition: generator => !generator.skipUserManagement,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/errors/EmailAlreadyUsedException.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/EmailAlreadyUsedException.java`,
},
{
file: 'package/web/rest/errors/InvalidPasswordException.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/InvalidPasswordException.java`,
},
{
file: 'package/web/rest/errors/LoginAlreadyUsedException.java',
renameTo: generator => `${generator.javaDir}web/rest/errors/LoginAlreadyUsedException.java`,
},
],
},
],
serverJavaWeb: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/vm/package-info.java',
renameTo: generator => `${generator.javaDir}web/rest/vm/package-info.java`,
},
{
file: 'package/web/rest/package-info.java',
renameTo: generator => `${generator.javaDir}web/rest/package-info.java`,
},
],
},
{
condition: generator => !generator.skipClient && !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/ClientForwardController.java',
renameTo: generator => `${generator.javaDir}web/rest/ClientForwardController.java`,
},
],
},
{
condition: generator => !generator.skipClient && generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/filter/SpaWebFilter.java',
renameTo: generator => `${generator.javaDir}web/filter/SpaWebFilter.java`,
},
],
},
{
condition: generator => generator.messageBrokerKafka && generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/KafkaResource_reactive.java',
renameTo: generator => `${generator.javaDir}web/rest/${generator.upperFirstCamelCase(generator.baseName)}KafkaResource.java`,
},
],
},
{
condition: generator => generator.messageBrokerKafka && !generator.reactive,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/KafkaResource.java',
renameTo: generator => `${generator.javaDir}web/rest/${generator.upperFirstCamelCase(generator.baseName)}KafkaResource.java`,
},
],
},
],
serverJavaWebsocket: [
{
condition: generator => generator.communicationSpringWebsocket,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/websocket/package-info.java',
renameTo: generator => `${generator.javaDir}web/websocket/package-info.java`,
},
{
file: 'package/web/websocket/ActivityService.java',
renameTo: generator => `${generator.javaDir}web/websocket/ActivityService.java`,
},
{
file: 'package/web/websocket/dto/package-info.java',
renameTo: generator => `${generator.javaDir}web/websocket/dto/package-info.java`,
},
{
file: 'package/web/websocket/dto/ActivityDTO.java',
renameTo: generator => `${generator.javaDir}web/websocket/dto/ActivityDTO.java`,
},
],
},
],
serverTestReactive: [
{
condition: generator => generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/ReddgenBlockHoundIntegration.java',
renameTo: generator => `${generator.testDir}config/ReddgenBlockHoundIntegration.java`,
},
],
},
{
condition: generator => generator.reactive,
path: SERVER_TEST_RES_DIR,
templates: ['META-INF/services/reactor.blockhound.integration.BlockHoundIntegration'],
},
],
springBootOauth2: [
{
condition: generator => generator.authenticationTypeOauth2 && generator.applicationTypeMonolith,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/config/OAuth2Configuration.java',
renameTo: generator => `${generator.javaDir}config/OAuth2Configuration.java`,
},
],
},
{
condition: generator => generator.authenticationTypeOauth2 && !generator.applicationTypeMicroservice,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: generator => `package/web/filter/OAuth2${generator.reactive ? 'Reactive' : ''}RefreshTokensWebFilter.java`,
renameTo: generator => `${generator.javaDir}web/filter/OAuth2${generator.reactive ? 'Reactive' : ''}RefreshTokensWebFilter.java`,
},
],
},
{
condition: generator => generator.authenticationTypeOauth2 && !generator.applicationTypeMicroservice,
path: SERVER_TEST_SRC_DIR,
templates: [
{ file: 'package/test/util/OAuth2TestUtil.java', renameTo: generator => `${generator.testDir}test/util/OAuth2TestUtil.java` },
],
},
],
serverTestFw: [
{
path: SERVER_TEST_SRC_DIR,
templates: [
{ file: 'package/web/rest/TestUtil.java', renameTo: generator => `${generator.testDir}web/rest/TestUtil.java` },
{
file: 'package/web/rest/errors/ExceptionTranslatorTestController.java',
renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorTestController.java`,
},
],
},
{
condition: generator => !generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/rest/errors/ExceptionTranslatorIT.java',
renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorIT.java`,
},
],
},
{
condition: generator => generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/rest/errors/ExceptionTranslatorIT_reactive.java',
renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorIT.java`,
},
],
},
{
condition: generator => !generator.skipClient && !generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/rest/ClientForwardControllerTest.java',
renameTo: generator => `${generator.testDir}web/rest/ClientForwardControllerTest.java`,
},
],
},
{
path: SERVER_TEST_RES_DIR,
templates: ['config/application.yml', 'logback.xml', 'junit-platform.properties'],
},
{
// TODO : add these tests to reactive
condition: generator => !generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/WebConfigurerTest.java',
renameTo: generator => `${generator.testDir}config/WebConfigurerTest.java`,
},
{
file: 'package/config/WebConfigurerTestController.java',
renameTo: generator => `${generator.testDir}config/WebConfigurerTestController.java`,
},
],
},
{
// TODO : add these tests to reactive
condition: generator => !generator.skipClient && !generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/StaticResourcesWebConfigurerTest.java',
renameTo: generator => `${generator.testDir}config/StaticResourcesWebConfigurerTest.java`,
},
],
},
{
condition: generator => generator.serviceDiscoveryType,
path: SERVER_TEST_RES_DIR,
templates: ['config/bootstrap.yml'],
},
{
condition: generator => generator.authenticationTypeOauth2 && (generator.applicationTypeMonolith || generator.applicationTypeGateway),
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/rest/LogoutResourceIT.java',
renameTo: generator => `${generator.testDir}web/rest/LogoutResourceIT.java`,
},
],
},
{
condition: generator => generator.gatlingTests,
path: TEST_DIR,
templates: [
// Create Gatling test files
'gatling/conf/gatling.conf',
'gatling/conf/logback.xml',
],
},
{
condition: generator => generator.cucumberTests,
path: SERVER_TEST_SRC_DIR,
templates: [
// Create Cucumber test files
{ file: 'package/cucumber/CucumberIT.java', renameTo: generator => `${generator.testDir}cucumber/CucumberIT.java` },
{
file: 'package/cucumber/stepdefs/StepDefs.java',
renameTo: generator => `${generator.testDir}cucumber/stepdefs/StepDefs.java`,
},
{
file: 'package/cucumber/CucumberTestContextConfiguration.java',
renameTo: generator => `${generator.testDir}cucumber/CucumberTestContextConfiguration.java`,
},
],
},
{
condition: generator => generator.cucumberTests,
path: SERVER_TEST_RES_DIR,
templates: [{ file: 'package/features/gitkeep', renameTo: generator => `${generator.testDir}cucumber/gitkeep`, noEjs: true }],
},
{
condition: generator => !shouldSkipUserManagement(generator) && !generator.authenticationTypeOauth2,
path: SERVER_TEST_SRC_DIR,
templates: [
// Create auth config test files
{
file: 'package/security/DomainUserDetailsServiceIT.java',
renameTo: generator => `${generator.testDir}security/DomainUserDetailsServiceIT.java`,
},
],
},
{
condition: generator => generator.messageBrokerKafka,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/config/KafkaTestContainer.java',
renameTo: generator => `${generator.testDir}config/KafkaTestContainer.java`,
},
{
file: 'package/config/EmbeddedKafka.java',
renameTo: generator => `${generator.testDir}config/EmbeddedKafka.java`,
},
],
},
{
condition: generator => generator.messageBrokerKafka && !generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/rest/KafkaResourceIT.java',
renameTo: generator => `${generator.testDir}web/rest/${generator.upperFirstCamelCase(generator.baseName)}KafkaResourceIT.java`,
},
],
},
{
condition: generator => generator.messageBrokerKafka && generator.reactive,
path: SERVER_TEST_SRC_DIR,
templates: [
{
file: 'package/web/rest/KafkaResourceIT_reactive.java',
renameTo: generator => `${generator.testDir}web/rest/${generator.upperFirstCamelCase(generator.baseName)}KafkaResourceIT.java`,
},
],
},
],
serverJavaUserManagement: [
{
condition: generator => generator.isUsingBuiltInUser(),
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/domain/User.java',
renameTo: generator => `${generator.javaDir}domain/${generator.asEntity('User')}.java`,
},
],
},
{
condition: generator => generator.isUsingBuiltInAuthority(),
path: SERVER_MAIN_SRC_DIR,
templates: [
{ file: 'package/domain/Authority.java', renameTo: generator => `${generator.javaDir}domain/Authority.java` },
{
file: 'package/repository/AuthorityRepository.java',
renameTo: generator => `${generator.javaDir}repository/AuthorityRepository.java`,
},
],
},
{
condition: generator =>
(generator.authenticationTypeOauth2 && !generator.applicationTypeMicroservice) ||
(!generator.skipUserManagement && generator.databaseTypeSql),
path: SERVER_MAIN_RES_DIR,
templates: ['config/liquibase/data/user.csv'],
},
{
condition: generator =>
(generator.authenticationTypeOauth2 && !generator.