UNPKG

navidev-adt-api

Version:

API de conexión al Abap Developer Tools

137 lines (136 loc) 7.66 kB
"use strict"; 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;