generator-pyhipster
Version:
Python (Flask) + Angular/React/Vue in one handy generator
471 lines (462 loc) • 18.2 kB
JavaScript
/**
* Copyright 2013-2022 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
*
* 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 _ = require('lodash');
const chalk = require('chalk');
const fs = require('fs');
const utils = require('../utils');
const constants = require('../generator-constants');
const { CASSANDRA, COUCHBASE, MONGODB, NEO4J, SQL } = require('../../jdl/jhipster/database-types');
const { ELASTICSEARCH } = require('../../jdl/jhipster/search-engine-types');
const { MapperTypes, ServiceTypes } = require('../../jdl/jhipster/entity-options');
const { EHCACHE, CAFFEINE, INFINISPAN, REDIS } = require('../../jdl/jhipster/cache-types');
const { writeEntityCouchbaseFiles } = require('./files-couchbase');
const { MAPSTRUCT } = MapperTypes;
const { SERVICE_CLASS, SERVICE_IMPL } = ServiceTypes;
/* 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;
/**
* 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 = {
dbChangelog: [
{
condition: generator => generator.databaseType === CASSANDRA && !generator.skipDbChangelog,
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.jhi',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi`,
// },
{
file: 'package/domain/Entity.py.jhi',
renameTo: generator => `domain/${generator.persistClass}.py.jhi`,
},
// {
// file: 'package/domain/Entity.java.jhi.javax_validation',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.javax_validation`,
// },
],
},
// {
// condition: generator => generator.databaseTypeSql && generator.reactive,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.spring_data_reactive',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.spring_data_reactive`,
// },
// ],
// },
// {
// condition: generator => generator.databaseTypeSql && generator.requiresPersistableImplementation,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.spring_data_persistable',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.spring_data_persistable`,
// },
// ],
// },
// {
// condition: generator => generator.databaseTypeSql && generator.reactive && generator.requiresPersistableImplementation,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/EntityCallback.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}Callback.java`,
// },
// ],
// },
// {
// condition: generator => generator.databaseTypeSql && !generator.reactive && generator.requiresPersistableImplementation,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.javax_lifecycle_events',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.javax_lifecycle_events`,
// },
// ],
// },
// FIXME: To be enabled in later releases
// {
// condition: generator => generator.databaseTypeCassandra,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.spring_data_cassandra',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.spring_data_cassandra`,
// },
// ],
// },
// {
// condition: generator => generator.databaseTypeNeo4j,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.spring_data_neo4j',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.spring_data_neo4j`,
// },
// ],
// },
// {
// condition: generator => generator.databaseTypeSql && !generator.reactive,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.javax_persistence',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.javax_persistence`,
// },
// ],
// },
// FIXME: To be enabled in later releases
// {
// condition: generator => generator.databaseTypeMongodb,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.spring_data_mongodb',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.spring_data_mongodb`,
// },
// ],
// },
// {
// condition: generator => generator.databaseTypeSql && !generator.reactive && generator.enableHibernateCache,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.hibernate_cache',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.hibernate_cache`,
// },
// ],
// },
// FIXME: To be enabled in later releases
// {
// condition: generator => generator.searchEngineElasticsearch,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/domain/Entity.java.jhi.elastic_search',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java.jhi.elastic_search`,
// },
// ],
// },
// {
// condition: generator => !generator.embedded,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/web/rest/EntityResource.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/web/rest/${generator.entityClass}Resource.java`,
// },
// ],
// },
// {
// condition: generator => !generator.embedded,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/web/rest/__init__.py',
// renameTo: () => 'rest/__init__.py',
// },
// ],
// },
{
condition: generator => !generator.embedded,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/EntityResource.py',
renameTo: generator => `rest/${generator.entityClass}Resource.py`,
},
],
},
{
condition: generator => !generator.embedded,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/schema/EntitySchema.py',
renameTo: generator => `schema/${generator.entityClass}Schema.py`,
},
],
},
// {
// condition: generator => generator.jpaMetamodelFiltering,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/service/criteria/EntityCriteria.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/criteria/${generator.entityClass}Criteria.java`,
// },
// {
// file: 'package/service/EntityQueryService.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/${generator.entityClass}QueryService.java`,
// },
// ],
// },
// {
// condition: generator => generator.searchEngine === ELASTICSEARCH && !generator.embedded,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/repository/search/EntitySearchRepository.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/repository/search/${generator.entityClass}SearchRepository.java`,
// },
// ],
// },
// {
// condition: generator => !generator.reactive && !generator.embedded && generator.databaseType !== COUCHBASE,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/repository/EntityRepository.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/repository/${generator.entityClass}Repository.java`,
// },
// ],
// },
// {
// condition: generator => !generator.reactive && generator.databaseTypeSql && !generator.embedded && generator.containsBagRelationships,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/repository/EntityRepositoryWithBagRelationships.java',
// renameTo: generator => `${generator.packageFolder}/repository/${generator.entityClass}RepositoryWithBagRelationships.java`,
// },
// {
// file: 'package/repository/EntityRepositoryWithBagRelationshipsImpl.java',
// renameTo: generator => `${generator.packageFolder}/repository/${generator.entityClass}RepositoryWithBagRelationshipsImpl.java`,
// },
// ],
// },
// {
// condition: generator => generator.reactive && !generator.embedded && generator.databaseType !== COUCHBASE,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/repository/EntityRepository_reactive.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/repository/${generator.entityClass}Repository.java`,
// },
// ],
// },
// {
// condition: generator => generator.reactive && generator.databaseType === SQL && !generator.embedded,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/repository/EntityRepositoryInternalImpl_reactive.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/repository/${generator.entityClass}RepositoryInternalImpl.java`,
// },
// {
// file: 'package/repository/EntitySqlHelper_reactive.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/repository/${generator.entityClass}SqlHelper.java`,
// },
// {
// file: 'package/repository/rowmapper/EntityRowMapper.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/repository/rowmapper/${generator.entityClass}RowMapper.java`,
// },
// ],
// },
// {
// condition: generator => generator.service === SERVICE_IMPL && !generator.embedded,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/service/EntityService.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/${generator.entityClass}Service.java`,
// },
// {
// file: 'package/service/impl/EntityServiceImpl.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/impl/${generator.entityClass}ServiceImpl.java`,
// },
// ],
// },
// {
// condition: generator => generator.service === SERVICE_CLASS && !generator.embedded,
// path: SERVER_MAIN_SRC_DIR,
// templates: [
// {
// file: 'package/service/impl/EntityServiceImpl.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/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.entityAbsoluteFolder}/service/dto/${generator.asDto(generator.entityClass)}.java`,
// },
// {
// file: 'package/service/mapper/BaseEntityMapper.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/mapper/EntityMapper.java`,
// },
// {
// file: 'package/service/mapper/EntityMapper.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/mapper/${generator.entityClass}Mapper.java`,
// },
// ],
// },
],
// FIXME: To be enabled in later releases
test: [
// {
// condition: generator => !generator.embedded,
// path: SERVER_TEST_SRC_DIR,
// templates: [
// {
// file: 'package/web/rest/EntityResourceIT.java',
// options: {
// context: {
// _,
// chalkRed: chalk.red,
// fs,
// SERVER_TEST_SRC_DIR,
// },
// },
// renameTo: generator => `${generator.entityAbsoluteFolder}/web/rest/${generator.entityClass}ResourceIT.java`,
// },
// ],
// },
// {
// condition: generator => generator.searchEngine === ELASTICSEARCH && !generator.embedded,
// path: SERVER_TEST_SRC_DIR,
// templates: [
// {
// file: 'package/repository/search/EntitySearchRepositoryMockConfiguration.java',
// renameTo: generator =>
// `${generator.entityAbsoluteFolder}/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`,
// },
// ],
// },
// {
// path: SERVER_TEST_SRC_DIR,
// templates: [
// {
// file: 'package/domain/EntityTest.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}Test.java`,
// },
// ],
// },
// {
// condition: generator => generator.dto === MAPSTRUCT,
// path: SERVER_TEST_SRC_DIR,
// templates: [
// {
// file: 'package/service/dto/EntityDTOTest.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/dto/${generator.asDto(generator.entityClass)}Test.java`,
// },
// ],
// },
// {
// condition: generator => generator.dto === MAPSTRUCT && [SQL, MONGODB, COUCHBASE, NEO4J].includes(generator.databaseType),
// path: SERVER_TEST_SRC_DIR,
// templates: [
// {
// file: 'package/service/mapper/EntityMapperTest.java',
// renameTo: generator => `${generator.entityAbsoluteFolder}/service/mapper/${generator.entityClass}MapperTest.java`,
// },
// ],
// },
],
};
module.exports = {
writeFiles,
serverFiles,
customizeFiles,
};
function writeFiles() {
return {
writeServerFiles() {
if (this.skipServer) return undefined;
// write server side files
if (this.reactive) {
return this.writeFilesToDisk(serverFiles, ['reactive', '']);
}
return this.writeFilesToDisk(serverFiles);
},
writeEnumFiles() {
this.fields.forEach(field => {
if (!field.fieldIsEnum) {
return;
}
const fieldType = field.fieldType;
const enumInfo = {
...utils.getEnumInfo(field, this.clientRootFolder),
frontendAppName: this.frontendAppName,
packageName: this.packageName,
entityAbsolutePackage: this.entityAbsolutePackage || this.packageName,
};
// FIXME: To be enabled in later releases
// eslint-disable-next-line no-console
if (!this.skipServer) {
const pathToTemplateFile = `${this.fetchFromInstalledJHipster(
'entity-server/templates'
// )}/${SERVER_MAIN_SRC_DIR}package/domain/enumeration/Enum.java.ejs`;
)}/${SERVER_MAIN_SRC_DIR}package/domain/enumeration/Enum.py.ejs`;
this.template(
pathToTemplateFile,
// `${SERVER_MAIN_SRC_DIR}${this.entityAbsoluteFolder}/domain/enumeration/${fieldType}.java`,
`${SERVER_MAIN_SRC_DIR}/domain/enumeration/${fieldType}.py`,
this,
{},
enumInfo
);
}
});
},
...writeEntityCouchbaseFiles(),
};
}
function customizeFiles() {
if (this.databaseType === SQL) {
if ([EHCACHE, CAFFEINE, INFINISPAN, REDIS].includes(this.cacheProvider) && this.enableHibernateCache) {
this.addEntityToCache(this.entityAbsoluteClass, this.relationships, this.packageName, this.packageFolder, this.cacheProvider);
}
this.addEntitiesToAPIList(this.entityClass);
}
}