navidev-adt-api
Version:
API de conexión al Abap Developer Tools
209 lines (208 loc) • 11.7 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 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;