UNPKG

genie-uml

Version:

UML support for JHipster via XMI files

127 lines (112 loc) 5.25 kB
'use strict'; const argv = require('./jhipsteruml/command_line_handler').argv, buildException = require('./exceptions/exception_factory').buildException, exceptions = require('./exceptions/exception_factory').exceptions; if (Object.keys(argv).length < 3) { throw new buildException( exceptions.WrongCall, "参数个数不正确,输入文件和数据库类型('sql', 'mongodb' or 'cassandra')必填.\n" + "Use the command 'genie-uml -help' to see the available commands."); } const fs = require('fs'), chalk = require('chalk'), createEntities = require('./entitiescreator').createEntities, ParserFactory = require('./editors/parser_factory'), jhipsterOptionHelper = require('./helpers/jhipster_option_helper'), generateEntities = require('./entity_generator').generateEntities, isYoRcFilePresent = require('./utils/jhipster_utils').isYoRcFilePresent, isJumlFilePresent = require('./utils/jhipster-uml_utils').isJumlFilePresent, readJSONFiles = require('./utils/jhipster_utils').readJSONFiles, areJHipsterEntitiesEqual = require('./helpers/object_helper').areJHipsterEntitiesEqual, values = require('./utils/object_utils').values, exportToJSON = require('./export/json_exporter').exportToJSON, toJDLString = require('./export/jdl_exporter').toJDLString, getEntitiesToGenerate = require('./jhipsteruml/entities_to_generate_handler').getEntitiesToGenerate, writeFile = require('./export/file_writer').writeFile; if (!isYoRcFilePresent()) { console.info( chalk.yellow( 'Warning: 请在项目目录运行该命令.')); } if (!argv.db && !isYoRcFilePresent()) { throw new buildException( exceptions.WrongCall, 'The database type must either be supplied with the -db option, ' + 'or a .yo-rc.json file must exist in the current directory.\n' + "Use the command 'genie-uml -help' to see the available options." ); } else { argv.db = argv.db || JSON.parse( fs.readFileSync('./.yo-rc.json') )['generator-jhipster'].databaseType; } var noUserManagement = argv['skip-user-management'] != null; var parserData = ParserFactory.createParser(initParserFactoryArgs()); var parser = parserData.parser; var parsedData = parser.parse(parserData.data); var options = { force: argv.f, listDTO: (argv.dto) ? jhipsterOptionHelper.askForDTO(parsedData.classes, argv.dto) : {}, listPagination: (argv.paginate) ? jhipsterOptionHelper.askForPagination(parsedData.classes, argv.paginate) : {}, listService: (argv.service) ? jhipsterOptionHelper.askForService(parsedData.classes, argv.service) : {}, listOfNoClient: (argv['skip-client']) ? jhipsterOptionHelper.askForClassesToSkipClientCode(parsedData.classes) : [], listOfNoServer: (argv['skip-server']) ? jhipsterOptionHelper.askForClassesToSkipServerCode(parsedData.classes) : [], angularSuffixes: (argv['angular-suffix']) ? jhipsterOptionHelper.askForAngularSuffixes(parsedData.classes, argv['angular-suffix']) : {}, microserviceNames: (argv['microservice-name']) ? jhipsterOptionHelper.askForMicroserviceNames(parsedData.classes, argv['microservice-name']) : {}, searchEngines: (argv['search-engine']) ? jhipsterOptionHelper.askForSearchEngines(parsedData.classes, argv['search-engine']) : {}, noFluentMethods: (argv['no-fluent-methods']) ? jhipsterOptionHelper.askForClassesWithNoFluentMethods(parsedData.classes) : [] }; if (argv['to-jdl']) { writeJdlFile(argv['to-jdl'], parsedData, options); process.exit(0); } var entities = createEntities(parsedData, parserData.data.databaseTypes, options); var entityIdsByName = {}; for (let i = 0, entityIds = Object.keys(parsedData.classes); i < parsedData.classNames.length; i++) { entityIdsByName[parsedData.getClass(entityIds[i]).name] = entityIds[i]; } var entityNamesToGenerate = filterOutUnchangedEntities(entities, parsedData); if (isJumlFilePresent()) { if (entityNamesToGenerate.length !== 0) { entityNamesToGenerate = getEntitiesToGenerate(entityNamesToGenerate); } } else { options.force = true; writeFile({ fileName: '.juml', content: '' }); } exportToJSON(entities, values(entityIdsByName), parsedData, entityNamesToGenerate); generateEntities(values(entityIdsByName), parsedData.classes, entityNamesToGenerate, options); function initParserFactoryArgs() { var parserFactoryArgs = { databaseType: argv.db, noUserManagement: noUserManagement }; if (argv['_'].length >= 1) { parserFactoryArgs.file = argv['_'][0]; } else { console.error('At least one file to parse must be passed.'); process.exit(1); } return parserFactoryArgs; } function filterOutUnchangedEntities(entities, parsedData) { var onDiskEntities = readJSONFiles(parsedData.classNames); return parsedData.classNames.filter(function (name) { var currEntity = onDiskEntities[name]; var newEntity = entities[entityIdsByName[name]]; if (!currEntity) { return true; } return !areJHipsterEntitiesEqual(currEntity, newEntity); }); } function writeJdlFile(fileName, parsedData, options) { writeFile({ fileName: fileName, content: toJDLString(parsedData, options) }); console.info(`The file '${fileName}' has been written.`); }