generator-pyhipster
Version:
Python (Flask) + Angular/React/Vue in one handy generator
104 lines (91 loc) • 3.04 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 { merge } = require('../utils/object-utils');
const { addAll } = require('../utils/set-utils');
class AbstractJDLOption {
constructor(args) {
const merged = merge(defaults(), args);
if (!merged.name) {
throw new Error("The option's name must be passed to create an option.");
}
this.name = merged.name;
this.entityNames = new Set(merged.entityNames);
if (this.entityNames.size === 0) {
this.entityNames.add('*');
}
this.excludedNames = new Set(merged.excludedNames);
}
addEntityName(entityName) {
if (!entityName) {
throw new Error('An entity name has to be passed so as to be added to the option.');
}
if (this.excludedNames.has(entityName)) {
return false;
}
if (this.entityNames.has('*')) {
this.entityNames.delete('*');
}
return this.entityNames.add(entityName);
}
addEntitiesFromAnotherOption(option) {
if (!option) {
return false;
}
addAll(this.entityNames, option.entityNames);
addAll(this.excludedNames, option.excludedNames);
return true;
}
excludeEntityName(entityName) {
if (!entityName) {
throw new Error('An entity name has to be passed so as to be excluded from the option.');
}
if (this.entityNames.has(entityName)) {
return;
}
this.excludedNames.add(entityName);
}
getType() {
throw new Error('Unsupported operation');
}
setEntityNames(newEntityNames) {
this.entityNames = new Set(newEntityNames);
}
/**
* Resolves the option's list of entity names (without '*' and taking into account the excluded names).
* @param entityNames all the entity names declared in a JDL Object.
* @returns the resolved list.
*/
resolveEntityNames(entityNames) {
if (!entityNames) {
throw new Error("Entity names have to be passed to resolve the option's entities.");
}
const resolvedEntityNames = this.entityNames.has('*') ? new Set(entityNames) : this.entityNames;
this.excludedNames.forEach(excludedEntityName => {
resolvedEntityNames.delete(excludedEntityName);
});
return resolvedEntityNames;
}
}
module.exports = AbstractJDLOption;
function defaults() {
return {
entityNames: new Set(['*']),
excludedNames: new Set(),
};
}