trm-core
Version:
TRM (Transport Request Manager) Core
191 lines (190 loc) • 8.43 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setTrmDependencies = void 0;
const logger_1 = require("../../logger");
const systemConnector_1 = require("../../systemConnector");
const transport_1 = require("../../transport");
const trmPackage_1 = require("../../trmPackage");
var aRootDevclass = [];
var trmServerPackage;
var trmRestPackage;
const _getRootDevclass = (devclass) => __awaiter(void 0, void 0, void 0, function* () {
const oRootDevclass = aRootDevclass.find(o => o.devclass === devclass);
if (oRootDevclass) {
return oRootDevclass.rootDevclass;
}
else {
logger_1.Logger.loading(`Searching root of devclass ${devclass}...`, true);
var tdevcDevclass = devclass;
var rootDevclass = null;
while (rootDevclass === null) {
const tdevc = yield systemConnector_1.SystemConnector.getDevclass(tdevcDevclass);
logger_1.Logger.log(`Parent of ${tdevcDevclass} is ${tdevc.parentcl}`, true);
if (tdevc.parentcl) {
tdevcDevclass = tdevc.parentcl;
aRootDevclass.push({
devclass: tdevcDevclass,
rootDevclass: tdevc.parentcl
});
}
else {
rootDevclass = tdevcDevclass;
aRootDevclass.push({
devclass: tdevcDevclass,
rootDevclass: tdevcDevclass
});
}
}
logger_1.Logger.success(`Root devclass of ${devclass} is ${rootDevclass}`, true);
return rootDevclass;
}
});
const _getTadirDependencies = (tadirDependencies) => __awaiter(void 0, void 0, void 0, function* () {
var trmDependencies = [];
if (!trmServerPackage) {
try {
const systemTrmServerPackage = yield systemConnector_1.SystemConnector.getTrmServerPackage();
if (systemTrmServerPackage.manifest) {
trmServerPackage = { package: systemTrmServerPackage };
}
else {
trmServerPackage = {};
}
}
catch (e) {
trmServerPackage = {};
}
}
if (!trmRestPackage) {
try {
const systemTrmRestPackage = yield systemConnector_1.SystemConnector.getTrmRestPackage();
if (systemTrmRestPackage.manifest) {
trmRestPackage = { package: systemTrmRestPackage };
}
else {
trmRestPackage = {};
}
}
catch (e) {
trmRestPackage = {};
}
}
for (const tadirDependency of tadirDependencies) {
const tadir = {
pgmid: tadirDependency.object.PGMID,
object: tadirDependency.object.OBJECT,
objName: tadirDependency.object.OBJ_NAME,
devclass: tadirDependency.object.DEVCLASS
};
var trmRelevantTransports = [];
var latestTransport;
var devclass;
var trmPackage;
var integrity;
var arrayIndex1;
var arrayIndex2;
if (trmServerPackage.package && trmServerPackage.package.getDevclass() === tadir.devclass) {
logger_1.Logger.log(`Dependency with TRM SERVER package`, true);
devclass = trmServerPackage.package.getDevclass();
trmPackage = trmServerPackage.package;
if (trmServerPackage.integrity) {
integrity = trmServerPackage.integrity;
}
else {
integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
}
}
else if (trmRestPackage.package && trmRestPackage.package.getDevclass() === tadir.devclass) {
logger_1.Logger.log(`Dependency with TRM REST package`, true);
devclass = trmRestPackage.package.getDevclass();
trmPackage = trmRestPackage.package;
if (trmRestPackage.integrity) {
integrity = trmRestPackage.integrity;
}
else {
integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
}
}
else {
logger_1.Logger.log(`Searching transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true);
const allTransports = yield transport_1.Transport.getTransportsFromObject(tadir);
logger_1.Logger.log(`Found ${allTransports.length} transports for object ${tadir.pgmid} ${tadir.object} ${tadir.objName}`, true);
for (const transport of allTransports) {
if (yield transport.isTrmRelevant()) {
logger_1.Logger.log(`Transport ${transport.trkorr} is TRM relevant`, true);
trmRelevantTransports.push(transport);
}
}
latestTransport = yield transport_1.Transport.getLatest(trmRelevantTransports);
if (latestTransport) {
logger_1.Logger.log(`Latest transport is ${latestTransport.trkorr}`, true);
trmPackage = yield latestTransport.getLinkedPackage();
const alreadyInArray = trmDependencies.find(o => o.package && trmPackage_1.TrmPackage.compare(o.package, trmPackage));
if (alreadyInArray) {
devclass = alreadyInArray.devclass;
integrity = alreadyInArray.integrity;
}
else {
integrity = yield systemConnector_1.SystemConnector.getPackageIntegrity(trmPackage);
if (!integrity) {
throw new Error(`Package "${trmPackage.packageName}", integrity not found!`);
}
try {
devclass = yield latestTransport.getDevclass();
}
catch (e) {
devclass = '';
}
}
}
else {
logger_1.Logger.log(`Object without TRM package`, true);
devclass = yield _getRootDevclass(tadir.devclass);
}
}
arrayIndex1 = trmDependencies.findIndex(o => o.devclass === devclass);
if (arrayIndex1 < 0) {
arrayIndex1 = trmDependencies.push({
devclass,
package: trmPackage,
integrity,
sapEntries: []
});
arrayIndex1--;
}
arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.findIndex(o => o.table === 'TADIR');
if (arrayIndex2 < 0) {
arrayIndex2 = trmDependencies[arrayIndex1].sapEntries.push({
table: 'TADIR',
dependencies: []
});
arrayIndex2--;
}
trmDependencies[arrayIndex1].sapEntries[arrayIndex2].dependencies.push(tadirDependency);
}
return trmDependencies;
});
exports.setTrmDependencies = {
name: 'set-trm-dependencies',
run: (context) => __awaiter(void 0, void 0, void 0, function* () {
logger_1.Logger.log('Set TRM dependencies step', true);
var trmDependencies = [];
logger_1.Logger.loading(`Searching TRM dependencies...`);
for (const entryDependency of context.runtime.dependencies.customObjects) {
if (entryDependency.table === 'TADIR') {
trmDependencies = trmDependencies.concat(yield _getTadirDependencies(entryDependency.dependencies));
}
}
context.runtime.dependencies.withTrmPackage = trmDependencies.filter(o => o.package);
context.runtime.dependencies.withoutTrmPackage = trmDependencies.filter(o => !o.package);
})
};