UNPKG

generator-fedhipster

Version:

Spring Boot + Angular/React in one handy generator

292 lines (281 loc) 12 kB
/** * Copyright 2013-2019 the original author or authors from the JHipster project. * * This file is part of the JHipster project, see https://www.jhipster.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 * * http://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 _ = require('lodash'); const randexp = require('randexp'); const chalk = require('chalk'); const faker = require('faker'); const fs = require('fs'); const utils = require('../utils'); const constants = require('../generator-constants'); /* Constants use throughout */ const INTERPOLATE_REGEX = constants.INTERPOLATE_REGEX; const SERVER_MAIN_SRC_DIR = constants.SERVER_MAIN_SRC_DIR; const SERVER_MAIN_RES_DIR = constants.SERVER_MAIN_RES_DIR; const TEST_DIR = constants.TEST_DIR; const SERVER_TEST_SRC_DIR = constants.SERVER_TEST_SRC_DIR; // In order to have consistent results with Faker, the seed is fixed. faker.seed(42); /** * 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 serverFiles = { db: [ { condition: generator => generator.databaseType === 'sql', path: SERVER_MAIN_RES_DIR, templates: [ { file: 'config/liquibase/changelog/added_entity.xml', options: { interpolate: INTERPOLATE_REGEX }, renameTo: generator => `config/liquibase/changelog/${generator.changelogDate}_added_entity_${generator.entityClass}.xml` }, { file: 'config/liquibase/data/table.csv', options: { interpolate: INTERPOLATE_REGEX, context: { faker } }, renameTo: generator => `config/liquibase/data/${generator.entityTableName}.csv` } ] }, { condition: generator => generator.databaseType === 'sql' && (generator.fieldsContainOwnerManyToMany || generator.fieldsContainOwnerOneToOne || generator.fieldsContainManyToOne), path: SERVER_MAIN_RES_DIR, templates: [ { file: 'config/liquibase/changelog/added_entity_constraints.xml', options: { interpolate: INTERPOLATE_REGEX }, renameTo: generator => `config/liquibase/changelog/${generator.changelogDate}_added_entity_constraints_${generator.entityClass}.xml` } ] }, { condition: generator => generator.databaseType === 'cassandra', path: SERVER_MAIN_RES_DIR, templates: [ { file: 'config/cql/changelog/added_entity.cql', renameTo: generator => `config/cql/changelog/${generator.changelogDate}_added_entity_${generator.entityClass}.cql` } ] } ], server: [ { path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/domain/Entity.java', renameTo: generator => `${generator.packageFolder}/domain/${generator.asEntity(generator.entityClass)}.java` }, { file: 'package/repository/EntityRepository.java', renameTo: generator => `${generator.packageFolder}/repository/${generator.entityClass}Repository.java` }, { file: 'package/web/rest/EntityResource.java', renameTo: generator => `${generator.packageFolder}/web/rest/${generator.entityClass}Resource.java` } ] }, { condition: generator => generator.jpaMetamodelFiltering, path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/service/dto/EntityCriteria.java', renameTo: generator => `${generator.packageFolder}/service/dto/${generator.entityClass}Criteria.java` }, { file: 'package/service/EntityQueryService.java', renameTo: generator => `${generator.packageFolder}/service/${generator.entityClass}QueryService.java` } ] }, { condition: generator => generator.searchEngine === 'elasticsearch', path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/repository/search/EntitySearchRepository.java', renameTo: generator => `${generator.packageFolder}/repository/search/${generator.entityClass}SearchRepository.java` } ] }, { condition: generator => generator.reactive && ['mongodb', 'cassandra', 'couchbase'].includes(generator.databaseType), path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/repository/reactive/EntityReactiveRepository.java', renameTo: generator => `${generator.packageFolder}/repository/reactive/${generator.entityClass}ReactiveRepository.java` } ] }, { condition: generator => generator.service === 'serviceImpl', path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/service/EntityService.java', renameTo: generator => `${generator.packageFolder}/service/${generator.entityClass}Service.java` }, { file: 'package/service/impl/EntityServiceImpl.java', renameTo: generator => `${generator.packageFolder}/service/impl/${generator.entityClass}ServiceImpl.java` } ] }, { condition: generator => generator.service === 'serviceClass', path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/service/impl/EntityServiceImpl.java', renameTo: generator => `${generator.packageFolder}/service/${generator.entityClass}Service.java` } ] }, { condition: generator => generator.dto === 'mapstruct', path: SERVER_MAIN_SRC_DIR, templates: [ { file: 'package/service/dto/EntityDTO.java', renameTo: generator => `${generator.packageFolder}/service/dto/${generator.asDto(generator.entityClass)}.java` }, { file: 'package/service/mapper/BaseEntityMapper.java', renameTo: generator => `${generator.packageFolder}/service/mapper/EntityMapper.java` }, { file: 'package/service/mapper/EntityMapper.java', renameTo: generator => `${generator.packageFolder}/service/mapper/${generator.entityClass}Mapper.java` } ] } ], test: [ { // TODO: add test for reactive condition: generator => !generator.reactive, path: SERVER_TEST_SRC_DIR, templates: [ { file: 'package/web/rest/EntityResourceIT.java', options: { context: { randexp, _, chalkRed: chalk.red, fs, SERVER_TEST_SRC_DIR } }, renameTo: generator => `${generator.packageFolder}/web/rest/${generator.entityClass}ResourceIT.java` } ] }, { condition: generator => generator.searchEngine === 'elasticsearch', path: SERVER_TEST_SRC_DIR, templates: [ { file: 'package/repository/search/EntitySearchRepositoryMockConfiguration.java', renameTo: generator => `${generator.packageFolder}/repository/search/${generator.entityClass}SearchRepositoryMockConfiguration.java` } ] }, { condition: generator => generator.gatlingTests, path: TEST_DIR, templates: [ { file: 'gatling/user-files/simulations/EntityGatlingTest.scala', options: { interpolate: INTERPOLATE_REGEX }, renameTo: generator => `gatling/user-files/simulations/${generator.entityClass}GatlingTest.scala` } ] } ] }; module.exports = { writeFiles, serverFiles }; function writeFiles() { return { saveRemoteEntityPath() { if (_.isUndefined(this.microservicePath)) { return; } this.copy( `${this.microservicePath}/${this.jhipsterConfigDirectory}/${this.entityNameCapitalized}.json`, this.destinationPath(`${this.jhipsterConfigDirectory}/${this.entityNameCapitalized}.json`) ); }, writeServerFiles() { if (this.skipServer) return; // write server side files this.writeFilesToDisk(serverFiles, this, false, this.fetchFromInstalledJHipster('entity-server/templates')); if (this.databaseType === 'sql') { if (this.fieldsContainOwnerManyToMany || this.fieldsContainOwnerOneToOne || this.fieldsContainManyToOne) { this.addConstraintsChangelogToLiquibase(`${this.changelogDate}_added_entity_constraints_${this.entityClass}`); } this.addChangelogToLiquibase(`${this.changelogDate}_added_entity_${this.entityClass}`); if (['ehcache', 'infinispan'].includes(this.cacheProvider) && this.enableHibernateCache) { this.addEntityToCache( this.asEntity(this.entityClass), this.relationships, this.packageName, this.packageFolder, this.cacheProvider ); } } }, writeEnumFiles() { this.fields.forEach(field => { if (field.fieldIsEnum === true) { const fieldType = field.fieldType; const enumInfo = utils.buildEnumInfo(field, this.angularAppName, this.packageName, this.clientRootFolder); if (!this.skipServer) { this.template( `${this.fetchFromInstalledJHipster( 'entity-server/templates' )}/${SERVER_MAIN_SRC_DIR}package/domain/enumeration/Enum.java.ejs`, `${SERVER_MAIN_SRC_DIR}${this.packageFolder}/domain/enumeration/${fieldType}.java`, this, {}, enumInfo ); } } }); } }; }