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 46x 46x 46x 46x 188x 188x 46x 46x       46x 46x 6x 6x 6x 6x 6x 46x 46x 11x 11x 11x 46x 46x 51x 51x 51x 46x 46x 34x 34x 34x 34x 46x 46x 11x 11x 11x 14x 10x 10x 14x 1x 1x 46x 46x 46x 46x 56x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 56x     28x 56x 56x 56x 56x 56x 3x 3x 56x 33x 33x 25x 46x 46x
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));
    }
  }
 
}