All files / src/objects maintenance_and_transport_object.ts

67.34% Statements 66/98
68% Branches 17/25
66.66% Functions 6/9
67.34% Lines 66/98

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 87 88 89 90 91 92 93 94 95 96 97 98 991x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 1x 1x       1x 1x           1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x                                             1x 1x 4x 3x 3x 1x 1x 1x 1x 1x 1x 1x 4x     1x 4x 4x 4x 4x 4x 4x 4x 1x 1x  
import {UnknownType, VoidType} from "../abap/types/basic";
import {AbstractType} from "../abap/types/basic/_abstract_type";
import {DDIC} from "../ddic";
import {IObjectAndToken} from "../_iddic_references";
import {IRegistry} from "../_iregistry";
import {AbstractObject} from "./_abstract_object";
 
export class MaintenanceAndTransportObject extends AbstractObject {
  private parsedXML: {
    area?: string,
    objectName?: string,
    objectType?: string,
  } | undefined;
 
  public setDirty() {
    super.setDirty();
    this.parsedXML = undefined;
  }
 
  public getType(): string {
    return "TOBJ";
  }
 
  public getDescription(): string | undefined {
    // todo
    return undefined;
  }
 
  public getAllowedNaming() {
    return {
      maxLength: 31,
      allowNamespace: true,
    };
  }
 
  public getArea(): string | undefined {
    this.parse();
    return this.parsedXML?.area;
  }
 
  public getObjectName(): string | undefined {
    this.parse();
    return this.parsedXML?.objectName;
  }
 
  public getObjectType(): string | undefined {
    this.parse();
    return this.parsedXML?.objectType;
  }
 
  public parseType(reg: IRegistry): AbstractType {
    this.parse();

    const references: IObjectAndToken[] = [];
    const ddic = new DDIC(reg);

    if (this.parsedXML?.objectName && this.parsedXML.objectType === "S") {
      const found = ddic.lookupTableOrView2(this.parsedXML.objectName);
      if (found) {
        references.push({object: found});
        reg.getDDICReferences().setUsing(this, references);
        return found.parseType(reg);
      } else if (ddic.inErrorNamespace(this.parsedXML.objectName)) {
        return new UnknownType(this.parsedXML.objectName + " not found");
      } else {
        return new VoidType(this.parsedXML.objectName);
      }
    } else if (this.parsedXML?.objectType !== "S" && this.parsedXML?.objectName){
      return new VoidType(this.parsedXML.objectName);
    } else {
      return new UnknownType("Parsing error");
    }
  }
 
  public parse() {
    if (this.parsedXML) {
      return {updated: false, runtime: 0};
    }
 
    const start = Date.now();
    this.parsedXML = {};
    const parsed = super.parseRaw2();
 
    if (parsed === undefined
        || parsed.abapGit === undefined
        || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
      return {updated: false, runtime: 0};
    }
 
    this.parsedXML.area = parsed.abapGit["asx:abap"]["asx:values"].TOBJ?.TVDIR?.AREA;
    this.parsedXML.objectName = parsed.abapGit["asx:abap"]["asx:values"].OBJH?.OBJECTNAME;
    this.parsedXML.objectType = parsed.abapGit["asx:abap"]["asx:values"].OBJH?.OBJECTTYPE;
 
    const end = Date.now();
    return {updated: true, runtime: end - start};
  }
 
}