UNPKG

navidev-adt-api

Version:

API de conexión al Abap Developer Tools

209 lines (208 loc) 11.7 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 adtExceptionController_1 = __importDefault(require("../shared/exceptions/adtExceptionController")); const conversion_1 = __importDefault(require("../shared/utilities/general/conversion")); const xmlParser_1 = __importDefault(require("../shared/utilities/parser/xmlParser")); const transportConstants_1 = require("./transportConstants"); const transportTypes_1 = require("./transportTypes"); class TransportConfigurationApp { constructor(connectionController) { this.connectionController = connectionController; this.exceptionController = new adtExceptionController_1.default(); } /** * Obtiene los metadatos de la configuración * @returns */ getConfigurationMetadata() { return __awaiter(this, void 0, void 0, function* () { const response = yield this.connectionController.request(`${transportConstants_1.TRANSPORT_URL.CONFIGURATIONS}/metadata`, { method: "GET", }); if (response.isSuccess) { let httpResponse = response.getValue(); let bodyParsed = xmlParser_1.default.fullParse(httpResponse.body); return Result_1.Result.ok(this.fillConfigurationMetadata(bodyParsed["configuration:configuration"]["configuration:properties"]["configuration:property"])); } else { return Result_1.Result.fail(response.getErrorValue()); } }); } /** * Búsqueda de la configuración, o del ID, del usuario del sistema de transportes. * Más bien, se busca la URL, que contiene un identificador único, que se usará para luego * llamarla y obtener dicha configuración. */ searchConfigurations() { return __awaiter(this, void 0, void 0, function* () { const response = yield this.connectionController.request(`${transportConstants_1.TRANSPORT_URL.CONFIGURATIONS}/configurations`, { method: "GET", }); if (response.isSuccess) { let httpResponse = response.getValue(); let bodyParsed = xmlParser_1.default.fullParse(httpResponse.body); if (bodyParsed["configurations:configurations"]) { let configurations = xmlParser_1.default.xmlArray(bodyParsed["configurations:configurations"]["configuration:configuration"]); return Result_1.Result.ok({ changedAt: new Date(configurations[0]["@_changedAt"]), changedBy: configurations[0]["@_changedBy"], client: configurations[0]["@_client"], createdAt: new Date(configurations[0]["@_createdAt"]), createdBy: configurations[0]["@_createdBy"], etag: configurations[0]["atom:link"]["@_etag"], urlGetConfiguration: configurations[0]["atom:link"]["@_href"], idConfiguration: configurations[0]["atom:link"]["@_href"].replace(`${transportConstants_1.TRANSPORT_URL.CONFIGURATIONS}/configurations/`, ""), }); } else { return Result_1.Result.fail(this.exceptionController.fromText("Not implemented in this version of SAP", 404)); } } else { return Result_1.Result.fail(response.getErrorValue()); } }); } /** * Obtiene la configuración de transporte * @param idConfiguration */ getConfiguration(idConfiguration) { return __awaiter(this, void 0, void 0, function* () { const response = yield this.connectionController.request(`${transportConstants_1.TRANSPORT_URL.CONFIGURATIONS}/configurations/${idConfiguration}`, { method: "GET", }); if (response.isSuccess) { let httpResponse = response.getValue(); let bodyParsed = xmlParser_1.default.fullParse(httpResponse.body); return Result_1.Result.ok(this.fillConfiguration(bodyParsed["configuration:configuration"]["configuration:properties"]["configuration:property"])); } else { return Result_1.Result.fail(response.getErrorValue()); } }); } /** * Modifica la configuración * @param idConfiguration * @param transportConfiguration * @returns */ setConfiguration(idConfiguration, transportConfiguration, etag) { return __awaiter(this, void 0, void 0, function* () { let headers = { Accept: "application/vnd.sap.adt.configuration.v1+xml", "Content-Type": "application/vnd.sap.adt.configuration.v1+xml", }; if (etag) headers["If-Match"] = etag; let body = `<?xml version="1.0" encoding="UTF-8"?><configuration:configuration xmlns:configuration="http://www.sap.com/adt/configuration"> <configuration:properties> <configuration:property key="WorkbenchRequests">${transportConfiguration.workbenchRequests}</configuration:property> <configuration:property key="TransportOfCopies">${transportConfiguration.transportOfCopies}</configuration:property> <configuration:property key="User">${transportConfiguration.user}</configuration:property> <configuration:property key="Released">${transportConfiguration.released}</configuration:property> <configuration:property key="CustomizingRequests">${transportConfiguration.customizingRequests}</configuration:property> <configuration:property key="com.sap.adt.tm.facets.order">request_type,target,cts_project,request_status</configuration:property> <configuration:property key="DateFilter">${transportConfiguration.dateFilter}</configuration:property> <configuration:property key="Modifiable">${transportConfiguration.modifiable}</configuration:property> `; if (transportConfiguration.dateFilter === transportTypes_1.TransportDateFilter.DateRange) { body += `<configuration:property key="FromDate">${conversion_1.default.DateToSAPDate(transportConfiguration.fromDate)}</configuration:property> <configuration:property key="ToDate">${conversion_1.default.DateToSAPDate(transportConfiguration.toDate)}</configuration:property>`; } body += `</configuration:properties> </configuration:configuration>`; const response = yield this.connectionController.request(`${transportConstants_1.TRANSPORT_URL.CONFIGURATIONS}/configurations/${idConfiguration}`, { method: etag ? "PUT" : "POST", headers: headers, body: body, }); if (response.isSuccess) { let httpResponse = response.getValue(); let bodyParsed = xmlParser_1.default.fullParse(httpResponse.body); return Result_1.Result.ok(this.fillConfiguration(bodyParsed["configuration:configuration"]["configuration:properties"]["configuration:property"])); } else { return Result_1.Result.fail(response.getErrorValue()); } }); } /** * Rellena la configuración del transporte que se devuelve al leer la configuración o es * la respuesta al actualizar la configuración * @param confParsed * @returns */ fillConfiguration(confParsed) { let transportConf = { workbenchRequests: false, transportOfCopies: false, user: "", released: false, customizingRequests: false, dateFilter: transportTypes_1.TransportDateFilter.SinceYesterday, modifiable: false, }; confParsed.forEach((row) => { if (row["@_key"] == "WorkbenchRequests") transportConf.workbenchRequests = row["#text"]; else if (row["@_key"] == "TransportOfCopies") transportConf.transportOfCopies = row["#text"]; else if (row["@_key"] == "User") transportConf.user = row["#text"]; else if (row["@_key"] == "Released") transportConf.released = row["#text"]; else if (row["@_key"] == "CustomizingRequests") transportConf.customizingRequests = row["#text"]; else if (row["@_key"] == "DateFilter") transportConf.dateFilter = row["#text"]; else if (row["@_key"] == "Modifiable") transportConf.modifiable = row["#text"]; else if (row["@_key"] == "FromDate") transportConf.fromDate = conversion_1.default.DateFromSAPDate(String(row["#text"])); else if (row["@_key"] == "ToDate") transportConf.toDate = conversion_1.default.DateFromSAPDate(String(row["#text"])); }); return transportConf; } fillConfigurationMetadata(confParsed) { let confMetadata = Object.assign(Object.assign({}, this.fillConfiguration(confParsed)), { workbenchRequestsIsMandatory: true, transportOfCopiesIsMandatory: true, userIsMandatory: true, releasedIsMandatory: true, customizingRequestsIsMandatory: true, dateFilterIsMandatory: true, modifiableIsMandatory: true, fromDateIsMandatory: false, toDateIsMandatory: false }); confParsed.forEach((row) => { if (row["@_key"] == "WorkbenchRequests") confMetadata.workbenchRequestsIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "TransportOfCopies") confMetadata.transportOfCopiesIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "User") confMetadata.userIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "Released") confMetadata.releasedIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "CustomizingRequests") confMetadata.customizingRequestsIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "DateFilter") confMetadata.dateFilterIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "Modifiable") confMetadata.modifiableIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "FromDate") confMetadata.fromDateIsMandatory = row["@_isMandatory"]; else if (row["@_key"] == "ToDate") confMetadata.toDateIsMandatory = row["@_isMandatory"]; }); return confMetadata; } } exports.default = TransportConfigurationApp;