KursblockungDynFachart.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 { KursblockungDynKurs, cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynKurs } from '../../core/kursblockung/KursblockungDynKurs';
  4. import { JavaString, cast_java_lang_String } from '../../java/lang/JavaString';
  5. import { System, cast_java_lang_System } from '../../java/lang/System';
  6. export class KursblockungDynFachart extends JavaObject {
  7. private readonly nr : number;
  8. private readonly representation : String;
  9. private kursArr : Array<KursblockungDynKurs>;
  10. private schuelerMax : number = 0;
  11. private kurseMax : number = 0;
  12. private schuelerAnzNow : number = 0;
  13. private readonly statistik : KursblockungDynStatistik;
  14. /**
  15. * @param pNr Eine laufende Nummer (ID) für alle Facharten.
  16. * @param pRepresentation Eine String-Darstellung der Fachart, z.B. 'D;LK'.
  17. * @param pStatistik Dem Statistik-Objekt wird eine Veränderung der
  18. * Kursdifferenz mitgeteilt.
  19. */
  20. public constructor(pNr : number, pRepresentation : String, pStatistik : KursblockungDynStatistik) {
  21. super();
  22. this.nr = pNr;
  23. this.representation = pRepresentation;
  24. this.statistik = pStatistik;
  25. this.kursArr = Array(0).fill(null);
  26. this.kurseMax = 0;
  27. this.schuelerMax = 0;
  28. this.schuelerAnzNow = 0;
  29. }
  30. /**
  31. * Durch das Überschreiben dieser Methode, liefert dieses Objekt eine
  32. * automatische String-Darstellung, beispielsweise 'D;LK'.
  33. */
  34. public toString() : String {
  35. return this.representation;
  36. }
  37. /**
  38. * Liefert die Nummer dieser Fachart.
  39. *
  40. * @return Die Nummer dieser Fachart.
  41. */
  42. public gibNr() : number {
  43. return this.nr;
  44. }
  45. /**
  46. * Liefert die maximale Anzahl ({@link #schuelerMax}) an SuS, die dieser Fachart
  47. * zugeordnet sein können. Das ist die Anzahl der Fachwahlen.
  48. *
  49. * @return Die Anzahl der SuS, die diese Fachart gewählt haben.
  50. */
  51. public gibSchuelerMax() : number {
  52. return this.schuelerMax;
  53. }
  54. /**
  55. * Liefert die aktuelle Anzahl ({@link #schuelerAnzNow}) an SuS, die dieser
  56. * Fachart zugeordnet sind.
  57. *
  58. * @return Die Anzahl der SuS, die diese Fachart aktuell zugeordnet sind.
  59. */
  60. public gibSchuelerZordnungen() : number {
  61. return this.schuelerAnzNow;
  62. }
  63. /**
  64. * Liefert die Anzahl der Kurse die dieser Fachart zugeordnet sind.
  65. *
  66. * @return Die Anzahl der Kurse die dieser Fachart zugeordnet sind.
  67. */
  68. public gibKurseMax() : number {
  69. return this.kurseMax;
  70. }
  71. /**
  72. * Liefert die aktuell größte Kursdifferenz.
  73. *
  74. * @return Die aktuell größte Kursdifferenz.
  75. */
  76. public gibKursdifferenz() : number {
  77. return this.kursArr[this.kursArr.length - 1].gibSchuelerAnzahl() - this.kursArr[0].gibSchuelerAnzahl();
  78. }
  79. /**
  80. * Liefert das Array aller Kurse dieser Fachart.
  81. *
  82. * @return Das Array aller Kurse dieser Fachart.
  83. */
  84. public gibKurse() : Array<KursblockungDynKurs> {
  85. return this.kursArr;
  86. }
  87. /**
  88. * Ordnet alle Kurse der Fachart zu. Die Kurse haben noch keine SuS und sind
  89. * somit automatisch sortiert.
  90. *
  91. * @param pKursArr Alle Kurse der Fachart.
  92. */
  93. public aktionSetKurse(pKursArr : Array<KursblockungDynKurs>) : void {
  94. this.kursArr = pKursArr;
  95. }
  96. /**
  97. * Erhöht die Anzahl ({@link #schuelerMax}) an SuS, die diese Fachart gewählt
  98. * haben um 1.
  99. */
  100. public aktionMaxSchuelerErhoehen() : void {
  101. this.schuelerMax++;
  102. }
  103. /**
  104. * Erhöht die Anzahl ({@link #kurseMax}) an Kursen, die zu dieser Fachart
  105. * gehören.
  106. */
  107. public aktionMaxKurseErhoehen() : void {
  108. this.kurseMax++;
  109. }
  110. /**
  111. * Muss aufgerufen werden, bevor die Schüleranzahl eines Kurses verändert wird.
  112. */
  113. public aktionKursdifferenzEntfernen() : void {
  114. this.statistik.aktionKursdifferenzEntfernen(this.gibKursdifferenz());
  115. }
  116. /**
  117. * Muss aufgerufen werden, nachdem die Schüleranzahl eines Kurses verändert
  118. * wird.
  119. */
  120. public aktionKursdifferenzHinzufuegen() : void {
  121. this.statistik.aktionKursdifferenzHinzufuegen(this.gibKursdifferenz());
  122. }
  123. /**
  124. * Erhöht die Anzahl ({@link #schuelerAnzNow}) an Schülern, die dieser Fachart
  125. * momentan zugeordnet sind um 1. Die Aufru
  126. */
  127. public aktionSchuelerWurdeHinzugefuegt() : void {
  128. this.schuelerAnzNow++;
  129. for (let i : number = 1; i < this.kursArr.length; i++){
  130. let kursL : KursblockungDynKurs = this.kursArr[i - 1];
  131. let kursR : KursblockungDynKurs = this.kursArr[i];
  132. if (kursL.gibSchuelerAnzahl() > kursR.gibSchuelerAnzahl()) {
  133. this.kursArr[i - 1] = kursR;
  134. this.kursArr[i] = kursL;
  135. }
  136. }
  137. }
  138. /**
  139. * Verringert die Anzahl ({@link #schuelerAnzNow}) an SuS, die dieser Fachart
  140. * momentan zugeordnet sind um 1.
  141. */
  142. public aktionSchuelerWurdeEntfernt() : void {
  143. this.schuelerAnzNow--;
  144. for (let i : number = this.kursArr.length - 1; i >= 1; i--){
  145. let kursL : KursblockungDynKurs = this.kursArr[i - 1];
  146. let kursR : KursblockungDynKurs = this.kursArr[i];
  147. if (kursL.gibSchuelerAnzahl() > kursR.gibSchuelerAnzahl()) {
  148. this.kursArr[i - 1] = kursR;
  149. this.kursArr[i] = kursL;
  150. }
  151. }
  152. }
  153. /**
  154. * Debug Ausgabe. Nur für Testzwecke.
  155. */
  156. public debug() : void {
  157. for (let i : number = 0; i < this.kursArr.length; i++){
  158. console.log(JSON.stringify(" " + this.kursArr[i] + " --> " + this.kursArr[i].gibSchuelerAnzahl() + " SuS."));
  159. }
  160. }
  161. /**
  162. * Liefert TRUE, falls mindestens ein Kurs dieser Fachart ein Multikur ist.
  163. *
  164. * @return TRUE, falls mindestens ein Kurs dieser Fachart ein Multikur ist.
  165. */
  166. public gibHatMultikurs() : boolean {
  167. for (let kurs of this.kursArr) {
  168. if (kurs.gibSchienenAnzahl() > 1) {
  169. return true;
  170. }
  171. }
  172. return false;
  173. }
  174. isTranspiledInstanceOf(name : string): boolean {
  175. return ['de.nrw.schule.svws.core.kursblockung.KursblockungDynFachart'].includes(name);
  176. }
  177. }
  178. export function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynFachart(obj : unknown) : KursblockungDynFachart {
  179. return obj as KursblockungDynFachart;
  180. }