navidev-adt-api
Version:
API de conexión al Abap Developer Tools
137 lines (136 loc) • 7.66 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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Result_1 = require("../shared/core/Result");
const xmlParser_1 = __importDefault(require("../shared/utilities/parser/xmlParser"));
class ClassContentApp {
constructor(connectionController) {
this.connectionController = connectionController;
}
/**
* Lectura del contenido de una clase
* @param objectUri URL del objeto
* @param version Tipo de version
* @returns Resultado
*/
readContent(objectUri_1) {
return __awaiter(this, arguments, void 0, function* (objectUri, version = "active") {
// La lectura del contenido consta de varias partes:
// 1) Lectura de la clase donde esta la definición y los includes con el codigo fuente
// 2) Leer el código fuente de las distintas partes del contenido a partir de las URL obtenidas en el paso anterior
let resultClassDefinition = yield this.readDefinition(objectUri, version);
if (resultClassDefinition.isSuccess) {
let classDefinition = resultClassDefinition.getValue();
// Sacamos el codigo fuente que si va bien se añadirá al mismo campo donde están los includes
let resultClassSourceIncludes = yield this.readSourceCodeInclude(objectUri, classDefinition.sourceIncludes, version);
if (resultClassSourceIncludes.isSuccess)
classDefinition.sourceIncludes =
resultClassSourceIncludes.getValue();
let classContent = {
metadata: classDefinition.metadata,
sourceIncludes: classDefinition.sourceIncludes,
};
return Result_1.Result.ok(classContent);
}
else {
return Result_1.Result.fail(resultClassDefinition.getErrorValue());
}
});
}
/**
* Lectura de la definición general de la clase: metadatos e includes asociados a la clase.
* @param objectUri URL de la clase
* @returns Resultado con la definición de la clase
*/
readDefinition(objectUri_1) {
return __awaiter(this, arguments, void 0, function* (objectUri, version = "active") {
const response = yield this.connectionController.request(`${objectUri}`, {
method: "GET",
qs: { version: version },
});
if (response.isSuccess) {
let httpResponse = response.getValue();
const bodyParse = xmlParser_1.default.fullParse(httpResponse.body);
let metadata = {
abstract: bodyParse["class:abapClass"]["@_class:abstract"],
activeUnicodeCheck: bodyParse["class:abapClass"]["@_abapsource:activeUnicodeCheck"],
category: bodyParse["class:abapClass"]["@_class:category"],
changedAt: new Date(bodyParse["class:abapClass"]["@_adtcore:changedAt"]),
changedBy: bodyParse["class:abapClass"]["@_adtcore:changedBy"],
createdAt: new Date(bodyParse["class:abapClass"]["@_adtcore:createdAt"]),
createdBy: bodyParse["class:abapClass"]["@_adtcore:createdBy"],
description: bodyParse["class:abapClass"]["@_adtcore:description"],
descriptionTextLimit: bodyParse["class:abapClass"]["@_adtcore:descriptionTextLimit"],
final: bodyParse["class:abapClass"]["@_class:final"],
fixPointArithmetic: bodyParse["class:abapClass"]["@_abapsource:fixPointArithmetic"],
language: bodyParse["class:abapClass"]["@_adtcore:language"],
masterLanguage: bodyParse["class:abapClass"]["@_adtcore:masterLanguage"],
masterSystem: bodyParse["class:abapClass"]["@_adtcore:masterSystem"],
modeled: bodyParse["class:abapClass"]["@_abapoo:modeled"],
name: bodyParse["class:abapClass"]["@_adtcore:name"],
responsible: bodyParse["class:abapClass"]["@_adtcore:responsible"],
sharedMemoryEnabled: bodyParse["class:abapClass"]["@_class:sharedMemoryEnabled"],
type: bodyParse["class:abapClass"]["@_adtcore:type"],
version: bodyParse["class:abapClass"]["@_adtcore:version"],
visibility: bodyParse["class:abapClass"]["@_class:visibility"],
packageRefName: bodyParse["class:abapClass"]["adtcore:packageRef"]["@_adtcore:name"],
packageRefType: bodyParse["class:abapClass"]["adtcore:packageRef"]["@_adtcore:type"],
};
let sourceIncludes = [];
bodyParse["class:abapClass"]["class:include"].forEach((rowInclude) => {
sourceIncludes.push({
changedAt: new Date(rowInclude["@_adtcore:changedAt"]),
changedBy: rowInclude["@_adtcore:changedBy"],
contentSource: "",
createdAt: new Date(rowInclude["@_adtcore:createdAt"]),
createdBy: rowInclude["@_adtcore:createdBy"],
includeType: rowInclude["@_class:includeType"],
name: rowInclude["@_adtcore:name"],
sourceUri: rowInclude["@_abapsource:sourceUri"],
type: rowInclude["@_adtcore:type"],
version: rowInclude["@_adtcore:version"],
});
});
return Result_1.Result.ok({
metadata: metadata,
sourceIncludes: sourceIncludes,
});
}
else {
return Result_1.Result.fail(response.getErrorValue());
}
});
}
/**
* Lectura del codigo fuente de los includes asociados a la clase
* @param includes Array con los includes de la clases
* @returns Resultado con los includes
*/
readSourceCodeInclude(className_1, includes_1) {
return __awaiter(this, arguments, void 0, function* (className, includes, version = "active") {
for (let x = 0; x < includes.length; x++) {
const response = yield this.connectionController.request(`${className}/${includes[x].sourceUri}`, {
method: "GET",
qs: { version: version },
});
if (response.isSuccess) {
let httpResponse = response.getValue();
includes[x].contentSource = httpResponse.body;
}
}
return Result_1.Result.ok(includes);
});
}
}
exports.default = ClassContentApp;