KursblockungDynSchiene.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import { JavaObject, cast_java_lang_Object } from '../../java/lang/JavaObject';
  2. import { KursblockungDynStatistik, cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynStatistik } from '../../core/kursblockung/KursblockungDynStatistik';
  3. import { HashMap, cast_java_util_HashMap } from '../../java/util/HashMap';
  4. import { JavaLong, cast_java_lang_Long } from '../../java/lang/JavaLong';
  5. import { KursblockungDynKurs, cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynKurs } from '../../core/kursblockung/KursblockungDynKurs';
  6. import { JavaString, cast_java_lang_String } from '../../java/lang/JavaString';
  7. import { Logger, cast_de_nrw_schule_svws_logger_Logger } from '../../logger/Logger';
  8. import { LogLevel, cast_de_nrw_schule_svws_logger_LogLevel } from '../../logger/LogLevel';
  9. import { System, cast_java_lang_System } from '../../java/lang/System';
  10. export class KursblockungDynSchiene extends JavaObject {
  11. private readonly nr : number;
  12. private readonly logger : Logger;
  13. private readonly kursMap : HashMap<Number, KursblockungDynKurs>;
  14. private readonly statistik : KursblockungDynStatistik;
  15. /**
  16. * Im Konstruktor werden die Referenzen übernommen und das HashMap erzeugt.
  17. *
  18. * @param pLogger Logger für Benutzerhinweise, Warnungen und Fehler.
  19. * @param pNr Die Nummer der Schiene.
  20. * @param pStatistik Das Statistik-Objekt wird über die aktuellen Kurs-Paarungen
  21. * informiert.
  22. */
  23. public constructor(pLogger : Logger, pNr : number, pStatistik : KursblockungDynStatistik) {
  24. super();
  25. this.logger = pLogger;
  26. this.nr = pNr;
  27. this.kursMap = new HashMap();
  28. this.statistik = pStatistik;
  29. }
  30. public toString() : String {
  31. return "" + this.nr;
  32. }
  33. /**
  34. * Fügt der Schiene einen Kurs hinzu. Das Statistik-Objekt wird über neue
  35. * Kurs-Paarungen informiert.
  36. *
  37. * @param kurs1 Der Kurs, welcher der Schiene hinzugefügt werden soll.
  38. */
  39. public aktionKursHinzufuegen(kurs1 : KursblockungDynKurs) : void {
  40. let kursID : number = kurs1.gibID();
  41. if (this.kursMap.containsKey(kursID)) {
  42. this.logger.logLn(LogLevel.ERROR, "Kurs \'" + kurs1.gibRepresentation().valueOf() + "\' soll in Schiene " + this.nr + ", ist aber bereits drin. ");
  43. return;
  44. }
  45. for (let kurs2 of this.kursMap.values()) {
  46. this.statistik.aktionKurspaarInSchieneHinzufuegen(kurs1, kurs2);
  47. }
  48. this.kursMap.put(kursID, kurs1);
  49. }
  50. /**
  51. * Entfernt aus der Schiene einen Kurs. Das Statistik-Objekt wird über zu
  52. * entfernende Kurs-Paarungen informiert.
  53. *
  54. * @param kurs1 Der Kurs, welcher aus der Schiene entfernt werden soll.
  55. */
  56. public aktionKursEntfernen(kurs1 : KursblockungDynKurs) : void {
  57. let kursID : number = kurs1.gibID();
  58. if (!this.kursMap.containsKey(kursID)) {
  59. this.logger.logLn(LogLevel.ERROR, "Kurs \'" + kurs1.gibRepresentation().valueOf() + "\' soll aus Schiene " + this.nr + " enternt werden, ist aber nicht drin.");
  60. return;
  61. }
  62. this.kursMap.remove(kursID);
  63. for (let kurs2 of this.kursMap.values()) {
  64. this.statistik.aktionKurspaarInSchieneEntfernen(kurs1, kurs2);
  65. }
  66. }
  67. /**
  68. * Liefert die aktuelle Nummer der Schiene (0-indiziert).
  69. *
  70. * @return Die aktuelle Nummer der Schiene (0-indiziert).
  71. */
  72. public gibNr() : number {
  73. return this.nr;
  74. }
  75. /**
  76. * Liefert die aktuelle Anzahl an Kursen in dieser Schiene.
  77. *
  78. * @return Die aktuelle Anzahl an Kursen in dieser Schiene.
  79. */
  80. public gibKursAnzahl() : number {
  81. return this.kursMap.size();
  82. }
  83. /**
  84. * Debug-Ausgabe. Nur für Testzwecke.
  85. * @param nurMultikurse Fallse TRUE, werden nur Multikurse angezeigt.
  86. */
  87. public debug(nurMultikurse : boolean) : void {
  88. for (let k of this.kursMap.values()) {
  89. if (nurMultikurse) {
  90. if (k.gibSchienenAnzahl() < 2) {
  91. continue;
  92. }
  93. }
  94. console.log(JSON.stringify(" " + k.gibRepresentation().valueOf() + "\n"));
  95. }
  96. }
  97. isTranspiledInstanceOf(name : string): boolean {
  98. return ['de.nrw.schule.svws.core.kursblockung.KursblockungDynSchiene'].includes(name);
  99. }
  100. }
  101. export function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynSchiene(obj : unknown) : KursblockungDynSchiene {
  102. return obj as KursblockungDynSchiene;
  103. }