UNPKG

@abaplint/core

Version:
130 lines 5.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataElement = void 0; const _abstract_object_1 = require("./_abstract_object"); const ddic_1 = require("../ddic"); const Types = require("../abap/types/basic"); class DataElement extends _abstract_object_1.AbstractObject { constructor() { super(...arguments); this.parsedXML = undefined; this.parsedType = undefined; } getType() { return "DTEL"; } getDescription() { var _a; this.parse(); return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.description; } getAllowedNaming() { return { maxLength: 30, allowNamespace: true, }; } setDirty() { this.parsedXML = undefined; this.parsedType = undefined; super.setDirty(); } getDomainName() { var _a; this.parse(); return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.domname; } getTexts() { var _a; this.parse(); return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.texts; } parseType(reg) { var _a; const references = []; let lookup = undefined; if (this.parsedXML === undefined) { lookup = { type: new Types.UnknownType("Data Element " + this.getName() + ", parser error") }; } else { if (this.parsedType) { return this.parsedType; } const ddic = new ddic_1.DDIC(reg); if (this.parsedXML.refkind === "D") { if (this.parsedXML.domname === undefined || this.parsedXML.domname === "") { lookup = { type: new Types.UnknownType("DOMNAME unexpectely empty in " + this.getName()) }; } else { lookup = ddic.lookupDomain(this.parsedXML.domname, this.getName(), this.getDescription()); } } else if (this.parsedXML.refkind === "R") { if (this.parsedXML.domname === undefined || this.parsedXML.domname === "") { lookup = { type: new Types.UnknownType("DOMNAME unexpectely empty in " + this.getName()) }; } else { lookup = ddic.lookupObject(this.parsedXML.domname); } } else { if (this.parsedXML.datatype === undefined || this.parsedXML.datatype === "") { lookup = { type: new Types.UnknownType("DATATYPE unexpectely empty in " + this.getName()) }; } else { lookup = { type: ddic.textToType({ text: this.parsedXML.datatype, length: this.parsedXML.leng, decimals: this.parsedXML.decimals, infoText: this.getName(), qualifiedName: this.getName(), conversionExit: undefined, ddicName: this.getName(), description: (_a = this.parsedXML.texts) === null || _a === void 0 ? void 0 : _a.heading, }) }; } } } if (lookup.object) { references.push({ object: lookup.object }); } reg.getDDICReferences().setUsing(this, references); if (!(lookup.type instanceof Types.UnknownType)) { // the referenced type might not exist or contain syntax errors(for CLAS) // so dont cache it, expect the user to fix it this.parsedType = lookup.type; } return lookup.type; } parse() { var _a, _b, _c; if (this.parsedXML !== undefined) { return { updated: false, runtime: 0 }; } const start = Date.now(); this.parsedXML = {}; const parsed = super.parseRaw2(); if (parsed === undefined) { return { updated: false, runtime: 0 }; } const dd04v = (_c = (_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD04V; this.parsedXML = { description: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DDTEXT, refkind: dd04v === null || dd04v === void 0 ? void 0 : dd04v.REFKIND, domname: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DOMNAME, datatype: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DATATYPE, leng: dd04v === null || dd04v === void 0 ? void 0 : dd04v.LENG, decimals: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DECIMALS, texts: { short: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_S, medium: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_M, long: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_L, heading: dd04v === null || dd04v === void 0 ? void 0 : dd04v.REPTEXT, }, }; const end = Date.now(); return { updated: true, runtime: end - start }; } } exports.DataElement = DataElement; //# sourceMappingURL=data_element.js.map