generator-jhipster-feign-client
Version:
JHipster module for create feign client with entity for communication between two microservices
351 lines (336 loc) • 13.9 kB
JavaScript
const packagejs = require('../../package.json');
const chalk = require('chalk');
const path = require('path');
const shelljs = require('shelljs');
const semver = require('semver');
const BaseGenerator = require('generator-jhipster/generators/generator-base');
const fs = require('fs');
const constants = require('generator-jhipster/generators/generator-constants');
const genUtils = require('./utils');
const SERVER_MAIN_SRC_DIR = constants.SERVER_MAIN_SRC_DIR;
const microserviceServerFiles = {
server: [
{
condition: generator => generator.jpaMetamodelFiltering,
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/dto/EntityCriteria.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/dto/${
generator.entityClass
}Criteria.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/dto/EntityDTO.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/dto/${
generator.entityClass
}DTO.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/client/EntityClient.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/client/${
generator.microserviceName
}${generator.entityClass}Client.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/client/EntityClientFallback.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/client/${
generator.microserviceName
}${generator.entityClass}ClientFallback.java`
}
]
}
]
};
const uaaServerFiles = {
server: [
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/client/UaaAuthorityClient.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/client/${
generator.uaaClassifyBaseName
}AuthorityClient.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file:
'package/web/rest/client/UaaAuthorityClientFallback.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/client/${
generator.uaaClassifyBaseName
}AuthorityClientFallback.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/client/UaaUserClient.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/client/${
generator.uaaClassifyBaseName
}UserClient.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/client/UaaUserClientFallback.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/client/${
generator.uaaClassifyBaseName
}UserClientFallback.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/dto/AuthorityDTO.java',
renameTo: generator =>
`${
generator.packageFolder
}/web/rest/dto/AuthorityDTO.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/dto/UserDTO.java',
renameTo: generator =>
`${generator.packageFolder}/web/rest/dto/UserDTO.java`
}
]
},
{
path: SERVER_MAIN_SRC_DIR,
templates: [
{
file: 'package/web/rest/dto/ManagedUsersAuthorityDTO.java',
renameTo: generator =>
`${
generator.packageFolder
}/web/rest/dto/ManagedUsersAuthorityDTO.java`
}
]
}
]
};
module.exports = class extends BaseGenerator {
constructor(args, opts) {
super(args, opts);
this.context = {};
}
get initializing() {
return {
getConfig() {
const context = this.context;
context.entityTableName = 'None';
context.prodDatabaseType = 'None';
context.databaseType = 'sql';
context.jhipsterConfigDirectory = '.jhipster';
context.fieldNamesUnderscored = [];
context.fieldNameChoices = [];
context.relNameChoices = [];
context.filename = `${context.jhipsterConfigDirectory}/${
context.entityNameCapitalized
}.json`;
if (shelljs.test('-f', context.filename)) {
this.log(chalk.green(`\nFound the ${
context.filename
} configuration file, entity can be automatically generated!\n`));
context.useConfigurationFile = true;
}
},
readConfig() {
this.jhipsterAppConfig = this.getJhipsterAppConfig();
if (!this.jhipsterAppConfig) {
this.error('Can\'t read .yo-rc.json');
}
this.uaaAuthentication =
this.jhipsterAppConfig.authenticationType === 'uaa';
this.uaaClient = false;
},
displayLogo() {
this.log('');
this.log(`${chalk.blue('██████╗ ')}${chalk.red('██')}${chalk.blue('╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ')}`);
this.log(`${chalk.blue('██╔══██╗██║██╔════╝ ██╔══██╗██║ ██║██╔════╝ ')}`);
this.log(`${chalk.blue('██████╔╝██║██║ ███╗██████╔╝██║ ██║██║ ███╗')}`);
this.log(`${chalk.blue('██╔══██╗██║██║ ██║██╔══██╗██║ ██║██║ ██║')}`);
this.log(`${chalk.blue('██████╔╝██║╚██████╔╝██████╔╝╚██████╔╝╚██████╔╝')}`);
this.log(`${chalk.blue('╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ')}`);
this.log(chalk.white(`Running ${chalk.bold.blue('JHipster Feign Client')} Generator! ${chalk.yellow(`v${packagejs.version}\n`)}`));
},
checkServerFramework() {
if (this.jhipsterAppConfig.skipServer) {
this.env.error(`${chalk.red.bold('ERROR!')} This module works only for server...`);
}
},
checkJhipster() {
const currentJhipsterVersion = this.jhipsterAppConfig
.jhipsterVersion;
const minimumJhipsterVersion =
packagejs.dependencies['generator-jhipster'];
if (
!semver.satisfies(
currentJhipsterVersion,
minimumJhipsterVersion
)
) {
this.warning(`\nYour generated project used an old JHipster version (${currentJhipsterVersion})... you need at least (${minimumJhipsterVersion})\n`);
}
}
};
}
prompting() {
const context = this.context;
function getEntityList(theMicroservicePath) {
const existingEntities = [];
const existingEntityChoices = [];
let existingEntityNames = [];
existingEntityNames = fs.readdirSync(`${theMicroservicePath}/.jhipster`);
existingEntityNames.forEach((entry) => {
if (entry.indexOf('.json') !== -1) {
const entityName = entry.replace('.json', '');
existingEntities.push(entityName);
existingEntityChoices.push({
name: entityName,
value: entityName
});
}
});
return existingEntityChoices;
}
const askMicroservicePath = {
when: !this.uaaAuthentication
? true
: response => response.clientType === 'microservice',
type: 'input',
name: 'microservicePath',
message: 'Enter the path to the microservice root directory:',
store: true,
validate: (input) => {
let fromPath = '';
if (path.isAbsolute(input)) {
// fromPath = `${input}/${context.filename}`;
fromPath = `${input}`;
} else {
// fromPath = this.destinationPath(`${input}/${context.filename}`);
fromPath = this.destinationPath(`${input}`);
}
if (shelljs.test('-d', fromPath)) {
return true;
}
// return `${context.filename} not found in ${input}/`;
return `${input} not found`;
}
};
const prompts = !this.uaaAuthentication
? askMicroservicePath
: [
{
type: 'list',
name: 'clientType',
message: 'Which feign client do you want to generate?',
choices: [
{
name: 'other microservice entities',
value: 'microservice'
},
{
name: 'uaa service user and authority entities',
value: 'uaa'
}
],
default: 'microservice'
},
askMicroservicePath,
{
when: response => response.clientType === 'microservice',
type: 'checkbox',
name: 'entitiesNames',
message: 'Please choose the entities to be audited',
choices: response =>
getEntityList(response.microservicePath),
default: 'none'
}
];
const done = this.async();
this.prompt(prompts).then((props) => {
this.props = props;
if (props.clientType === 'uaa') {
this.createUaaFeignClient = true;
}
if (props.microservicePath) {
if (path.isAbsolute(props.microservicePath)) {
context.microservicePath = props.microservicePath;
} else {
context.microservicePath = path.resolve(props.microservicePath);
}
context.useConfigurationFile = true;
context.useMicroserviceJson = true;
}
if (props.entitiesNames) {
this.entitiesNames = props.entitiesNames;
}
done();
});
}
writing() {
// read config from .yo-rc.json
this.baseName = this.jhipsterAppConfig.baseName;
this.packageName = this.jhipsterAppConfig.packageName;
this.packageFolder = this.jhipsterAppConfig.packageFolder;
this.clientFramework = this.jhipsterAppConfig.clientFramework;
this.clientPackageManager = this.jhipsterAppConfig.clientPackageManager;
this.buildTool = this.jhipsterAppConfig.buildTool;
if (!this.createUaaFeignClient) {
this.log(`\n${chalk.bold.green('Creating feign client for microservice')}`);
this.entitiesNames.forEach((entityName) => {
this.context.name = entityName;
this.loadEntityJson(`${
this.context.microservicePath
}/.jhipster/${entityName}.json`);
genUtils.writeEntityFeignClient(this, microserviceServerFiles);
});
} else {
this.log(`\n${chalk.bold.green('Creating uaa feign client')}`);
genUtils.writeUaaFeignClient(this, uaaServerFiles);
}
}
end() {
this.log(`\n${chalk.bold.green('Create feign client for microservice is done')}`);
}
};