LogData.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { JavaObject, cast_java_lang_Object } from '../java/lang/JavaObject';
  2. import { Comparable, cast_java_lang_Comparable } from '../java/lang/Comparable';
  3. import { JavaString, cast_java_lang_String } from '../java/lang/JavaString';
  4. import { Arrays, cast_java_util_Arrays } from '../java/util/Arrays';
  5. import { LogLevel, cast_de_nrw_schule_svws_logger_LogLevel } from '../logger/LogLevel';
  6. import { System, cast_java_lang_System } from '../java/lang/System';
  7. export class LogData extends JavaObject implements Comparable<LogData | null> {
  8. private readonly time : number;
  9. private readonly level : LogLevel;
  10. private readonly text : String;
  11. private readonly newLine : boolean;
  12. private indent : number = 0;
  13. /**
  14. * Erzeugt eine neue Log-Information.
  15. *
  16. * @param level das zugehörige Log-Level
  17. * @param indent die Anzahl der Leerzeichen, die bei der Ausgabe zur Einrückung genutzt werden sollen
  18. * @param newLine gibt an, ob die Log-Informationen beim Ausgeben mit einer neuen Zeile beendet werden sollen oder nicht
  19. * @param text der Text der Log-Information
  20. */
  21. public constructor(level : LogLevel, indent : number, newLine : boolean, text : String) {
  22. super();
  23. this.time = System.currentTimeMillis();
  24. this.level = level;
  25. this.indent = (indent < 0) ? 0 : indent;
  26. this.newLine = newLine;
  27. this.text = (text === null) ? "" : text;
  28. }
  29. /**
  30. * Vergleicht zwei Log-Informationen anhand der Zeit.
  31. *
  32. * @param other die zu vergleichenden Log-Informationen
  33. *
  34. * @return ein negativer Wert, falls diese Log-Information früher geloggt wurde, 0, falls
  35. * sie zur gleichen Zeit geloggt wurden oder ein positiver Wert, falls diese
  36. * Log-Information später geloggt wurde
  37. */
  38. public compareTo(other : LogData) : number {
  39. if (this.time < other.time)
  40. return -1;
  41. if (this.time > other.time)
  42. return 1;
  43. return 0;
  44. }
  45. /**
  46. * Gibt diese Log-Information als JSON-String mit Zeit und Log-Level zurück.
  47. *
  48. * @return die Log-Informationen als JSON-String
  49. */
  50. public toString() : String {
  51. return "{ \"time\":" + this.time + ", \"level\":" + this.level.toInteger() + ", \"text\":\"" + this.getText().valueOf() + "\"}";
  52. }
  53. /**
  54. * Erhögt die Einrückung bei der Ausgabe, um den angebenen Wert.
  55. *
  56. * @param indent der Wert, um den die Einrückung erhöht wird.
  57. */
  58. public addIndent(indent : number) : void {
  59. this.indent += indent;
  60. }
  61. /**
  62. * Gibt den Zeitstempel der Log-Information zurück.
  63. *
  64. * @return der Zeitstempel der Log-Information
  65. */
  66. public getTime() : number {
  67. return this.time;
  68. }
  69. /**
  70. * Gibt das Log-Level der Log-Information zurück.
  71. *
  72. * @return das Log-Level der Log-Information
  73. */
  74. public getLevel() : LogLevel {
  75. return this.level;
  76. }
  77. /**
  78. * Gibt an, ob bei der Ausgabe mit einer neue Zeile beendet werden soll oder nicht.
  79. *
  80. * @return true, falls die Ausgabe mit einer neuen Zeile beendet werden soll, ansonsten false
  81. */
  82. public isNewLine() : boolean {
  83. return this.newLine;
  84. }
  85. /**
  86. * Gibt den Text dieser Log-Information mit Einrückung, aber ohne Zeitangabe und
  87. * Log-Level als String zurück.
  88. *
  89. * @return der Text dieser Log-Information
  90. */
  91. public getText() : String {
  92. if (this.indent <= 0)
  93. return this.text;
  94. let indentChars : Array<string> | null = Array(this.indent).fill("");
  95. Arrays.fill(indentChars, ' ');
  96. return indentChars.join("") + this.text.valueOf();
  97. }
  98. isTranspiledInstanceOf(name : string): boolean {
  99. return ['de.nrw.schule.svws.logger.LogData', 'java.lang.Comparable'].includes(name);
  100. }
  101. }
  102. export function cast_de_nrw_schule_svws_logger_LogData(obj : unknown) : LogData {
  103. return obj as LogData;
  104. }