All files / src/objects message_class.ts

94.25% Statements 82/87
88.46% Branches 46/52
88.88% Functions 8/9
94.25% Lines 82/87

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 871x 1x 1x 1x 1x 1x 1x 1x 1x 1x 47x 47x 47x 47x 203x 203x 47x 47x       47x 47x 6x 6x 6x 6x 6x 47x 47x 12x 12x 12x 47x 47x 52x 52x 52x 47x 47x 35x 35x 35x 35x 47x 47x 11x 11x 11x 14x 10x 10x 14x 1x 1x 47x 47x 47x 47x 58x 29x 29x 29x 29x 29x 29x 29x 29x 29x 29x 58x     29x 58x 58x 58x 58x 58x 3x 3x 58x 34x 34x 26x 47x 47x
import {AbstractObject} from "./_abstract_object";
import {Message} from "../abap/types/message";
import {xmlToArray, unescape} from "../xml_utils";
 
export type parsedMessageClass = {
  topName: string | undefined,
  description: string | undefined,
  parsedMessages: Message[] | undefined
};
 
export class MessageClass extends AbstractObject {
  private xml: parsedMessageClass | undefined = undefined;
 
  public getType(): string {
    return "MSAG";
  }
 
  public getDescription(): string | undefined {
    this.parseXML();
    return this.xml?.description;
  }
 
  public getAllowedNaming() {
    return {
      maxLength: 20,
      allowNamespace: true,
    };
  }
 
  public getParsed(): parsedMessageClass | undefined {
    this.parseXML();
    return this.xml;
  }
 
  public setDirty(): void {
    this.xml = undefined;
    super.setDirty();
  }
 
  public getMessages(): readonly Message[] {
    this.parseXML();
    const msg = this.xml?.parsedMessages;
    return msg ? msg : [];
  }
 
  public getByNumber(num: string): Message | undefined {
    this.parseXML();
    // todo, optimize performance,
    for (const message of this.getMessages()) {
      if (message.getNumber() === num) {
        return message;
      }
    }
    return undefined;
  }
 
/////////////////////////////////
 
  private parseXML() {
    if (this.xml !== undefined) {
      return;
    }
 
    this.xml = {
      topName: undefined,
      description: undefined,
      parsedMessages: [],
    };
 
    const parsed = super.parseRaw2();
    if (parsed === undefined) {
      return;
    }
 
    this.xml.topName = parsed?.abapGit?.["asx:abap"]["asx:values"]?.T100A?.ARBGB;
    this.xml.description = parsed?.abapGit?.["asx:abap"]["asx:values"]?.T100A?.STEXT;
 
    const t100 = parsed?.abapGit?.["asx:abap"]["asx:values"]?.T100;
    if (t100 === undefined) {
      return;
    }
    for (const msg of xmlToArray(t100.T100)) {
      this.xml!.parsedMessages!.push(new Message(msg.MSGNR, unescape(msg.TEXT), msg.ARBGB));
    }
  }
 
}