123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynKurs = exports.KursblockungDynKurs = void 0;
- const JavaObject_1 = require("../../java/lang/JavaObject");
- const KursblockungOutputKursZuSchiene_1 = require("../../core/data/kursblockung/KursblockungOutputKursZuSchiene");
- const System_1 = require("../../java/lang/System");
- const LogLevel_1 = require("../../logger/LogLevel");
- class KursblockungDynKurs extends JavaObject_1.JavaObject {
- guiID;
- representation;
- fachart;
- schienenLage;
- schienenLageSaveS;
- schienenLageSaveK;
- schienenLageFixiert;
- schienenFrei;
- schienenFreiSaveS;
- schienenFreiSaveK;
- schuelerAnz = 0;
- logger;
- /**
- * Der Kurs wählt eine zufällige Schienenlage und fügt sich selbst den
- * entsprechenden Schienen hinzu.
- *
- * @param pSchienenLage Ein Array aller Schienen, in denen der Kurs
- * gerade liegt.
- * @param pSchienenLageFixiert Anzahl an Schienen in {@code pSchienenLage}, die
- * fixiert ist.
- * @param pSchienenFrei Ein Array aller Schienen, in die der Kurs
- * wechseln könnte.
- * @param iKurs Alle Informationen zu diesem Kurs. Das Objekt
- * stammt von der GUI.
- * @param pFachart Die zu diesem Kurs zugehörige Fachart.
- * @param pLogger Logger für Benutzerhinweise, Warnungen und
- * Fehler.
- */
- constructor(pSchienenLage, pSchienenLageFixiert, pSchienenFrei, iKurs, pFachart, pLogger) {
- super();
- this.schienenLage = pSchienenLage;
- this.schienenLageFixiert = pSchienenLageFixiert;
- this.schienenFrei = pSchienenFrei;
- this.guiID = iKurs.id;
- this.representation = iKurs.representation;
- this.fachart = pFachart;
- this.schuelerAnz = 0;
- this.logger = pLogger;
- this.schienenLageSaveS = Array(this.schienenLage.length).fill(null);
- this.schienenLageSaveK = Array(this.schienenLage.length).fill(null);
- for (let i = 0; i < this.schienenLage.length; i++) {
- this.schienenLageSaveS[i] = this.schienenLage[i];
- this.schienenLageSaveK[i] = this.schienenLage[i];
- }
- this.schienenFreiSaveS = Array(this.schienenFrei.length).fill(null);
- this.schienenFreiSaveK = Array(this.schienenFrei.length).fill(null);
- for (let i = 0; i < this.schienenFrei.length; i++) {
- this.schienenFreiSaveS[i] = this.schienenFrei[i];
- this.schienenFreiSaveK[i] = this.schienenFrei[i];
- }
- for (let i = 0; i < this.schienenLage.length; i++) {
- this.schienenLage[i].aktionKursHinzufuegen(this);
- }
- }
- toString() {
- return this.representation;
- }
- /**
- * Die Kurs-ID der GUI.
- *
- * @return Die Kurs-ID der GUI.
- */
- gibID() {
- return this.guiID;
- }
- /**
- * Eine String-Darstellung des Kurses, z.B. 'D;GK1'.
- *
- * @return Eine String-Darstellung des Kurses, z.B. 'D;GK1'.
- */
- gibRepresentation() {
- return this.representation;
- }
- /**
- * Liefert die zum Kurs zugehörige Fachart.
- *
- * @return Die zum Kurs zugehörige Fachart.
- */
- gibFachart() {
- return this.fachart;
- }
- /**
- * Liefert die aktuelle Anzahl an Schülern in diesem Kurs.
- *
- * @return Die aktuelle Anzahl an Schülern in diesem Kurs.
- */
- gibSchuelerAnzahl() {
- return this.schuelerAnz;
- }
- /**
- * Liefert {@code true} falls die Schienenlage des Kurses noch veränderbar ist.
- * Wenn der Kurs komplett fixiert ist, oder so viele Schienen gesperrt sind,
- * dass der Kurs keine Wahlmöglichkeit bezüglich seiner Schienen hat, dann ist
- * das Resultat {@code false}
- *
- * @return Liefert {@code true}, falls die Schienenlage des Kurses noch
- * veränderbar ist.
- */
- gibHatFreiheitsgrade() {
- return (this.schienenLageFixiert < this.schienenLage.length) && (this.schienenFrei.length > 0);
- }
- /**
- * Liefert die aktuelle Schienenlage dieses Kurses.
- *
- * @return Ein Array, das angibt, in welchen Schienen der Kurs ist. Die Werte
- * sind 0-indiziert.
- */
- gibSchienenLage() {
- let length = this.schienenLage.length;
- let lage = Array(length).fill(0);
- for (let i = 0; i < length; i++) {
- lage[i] = this.schienenLage[i].gibNr();
- }
- return lage;
- }
- /**
- * Liefert die Anzahl an Schienen, die dieser Kurs belegt.
- *
- * @return Die Anzahl an Schienen, die dieser Kurs belegt.
- */
- gibSchienenAnzahl() {
- return this.schienenLage.length;
- }
- /**
- * Speichert die aktuelle Lage der Schienen im Zustand S, um diese bei Bedarf
- * mit der Methode {@link #aktionZustandLadenS} zu laden.
- */
- aktionZustandSpeichernS() {
- System_1.System.arraycopy(this.schienenLage, 0, this.schienenLageSaveS, 0, this.schienenLage.length);
- System_1.System.arraycopy(this.schienenFrei, 0, this.schienenFreiSaveS, 0, this.schienenFrei.length);
- }
- /**
- * Speichert die aktuelle Lage der Schienen im Zustand K, um diese bei Bedarf
- * mit der Methode {@link #aktionZustandLadenK} zu laden.
- */
- aktionZustandSpeichernK() {
- System_1.System.arraycopy(this.schienenLage, 0, this.schienenLageSaveK, 0, this.schienenLage.length);
- System_1.System.arraycopy(this.schienenFrei, 0, this.schienenFreiSaveK, 0, this.schienenFrei.length);
- }
- /**
- * Lädt die zuvor mit der Methode {@link #aktionZustandSpeichernS} gespeicherte
- * Lage der Schienen.
- */
- aktionZustandLadenS() {
- this.aktionSchienenLageEntfernen();
- System_1.System.arraycopy(this.schienenLageSaveS, 0, this.schienenLage, 0, this.schienenLage.length);
- System_1.System.arraycopy(this.schienenFreiSaveS, 0, this.schienenFrei, 0, this.schienenFrei.length);
- this.aktionSchienenLageHinzufuegen();
- }
- /**
- * Lädt die zuvor mit der Methode {@link #aktionZustandSpeichernK} gespeicherte
- * Lage der Schienen.
- */
- aktionZustandLadenK() {
- this.aktionSchienenLageEntfernen();
- System_1.System.arraycopy(this.schienenLageSaveK, 0, this.schienenLage, 0, this.schienenLage.length);
- System_1.System.arraycopy(this.schienenFreiSaveK, 0, this.schienenFrei, 0, this.schienenFrei.length);
- this.aktionSchienenLageHinzufuegen();
- }
- /**
- * Verteilt den Kurs auf die Schienen zufällig.
- */
- aktionZufaelligVerteilen() {
- if (!this.gibHatFreiheitsgrade()) {
- return;
- }
- if (this.schuelerAnz > 0) {
- this.logger.log(LogLevel_1.LogLevel.ERROR, "Kurs.aktionZufaelligVerteilen: schuelerAnz > 0 (Ein Kurs mit SuS darf nicht verteilt werden)");
- return;
- }
- for (let i1 = this.schienenLageFixiert; i1 < this.schienenLage.length; i1++) {
- let i2 = (Math.random() * this.schienenFrei.length);
- let schiene1 = this.schienenLage[i1];
- let schiene2 = this.schienenFrei[i2];
- schiene1.aktionKursEntfernen(this);
- schiene2.aktionKursHinzufuegen(this);
- this.schienenLage[i1] = schiene2;
- this.schienenFrei[i2] = schiene1;
- }
- }
- /**
- * Setzt die Lage des Kurses auf die in der Liste übergebenen Schienen.
- *
- * @param pSchienenWahl Die Schienen (0-indiziert), in denen der Kurs liegen
- * soll.
- */
- aktionVerteileAufSchienen(pSchienenWahl) {
- for (let iLage = this.schienenLageFixiert; iLage < this.schienenLage.length; iLage++) {
- let schieneL = this.schienenLage[iLage];
- if (pSchienenWahl.contains(schieneL.gibNr())) {
- continue;
- }
- for (let iFrei = 0; iFrei < this.schienenFrei.length; iFrei++) {
- let schieneF = this.schienenFrei[iFrei];
- if (pSchienenWahl.contains(schieneF.gibNr())) {
- schieneL.aktionKursEntfernen(this);
- schieneF.aktionKursHinzufuegen(this);
- this.schienenFrei[iFrei] = schieneL;
- this.schienenLage[iLage] = schieneF;
- break;
- }
- }
- }
- }
- /**
- * Speichert die aktuelle Kurs-Schiene-Zuordnung im Vector
- * {@code vKursZuSchiene}.
- *
- * @param vKursZuSchiene Diesem Vektor wird die aktuelle Kurszuordnung
- * hinzugefügt.
- */
- aktionOutputErzeugen(vKursZuSchiene) {
- let kursZuSchiene = new KursblockungOutputKursZuSchiene_1.KursblockungOutputKursZuSchiene();
- kursZuSchiene.kurs = this.guiID;
- kursZuSchiene.schienen = this.gibSchienenLage();
- vKursZuSchiene.add(kursZuSchiene);
- }
- /**
- * Entfernt einen Schüler aus diesem Kurs.
- */
- aktionSchuelerEntfernen() {
- this.fachart.aktionKursdifferenzEntfernen();
- this.schuelerAnz--;
- this.fachart.aktionSchuelerWurdeEntfernt();
- this.fachart.aktionKursdifferenzHinzufuegen();
- }
- /**
- * Fügt einen Schüler diesem Kurs hinzu.
- */
- aktionSchuelerHinzufügen() {
- this.fachart.aktionKursdifferenzEntfernen();
- this.schuelerAnz++;
- this.fachart.aktionSchuelerWurdeHinzugefuegt();
- this.fachart.aktionKursdifferenzHinzufuegen();
- }
- /**
- * Liefert TRUE, wenn die Schiene für den Kurs gesperrt wurde.
- *
- * @param pSchiene Die Schiene nach der gefragt wurde.
- *
- * @return TRUE, wenn die Schiene für den Kurs gesperrt wurde.
- */
- gibIstSchieneGesperrt(pSchiene) {
- for (let s of this.schienenLage) {
- if (s.gibNr() === pSchiene) {
- return false;
- }
- }
- for (let s of this.schienenFrei) {
- if (s.gibNr() === pSchiene) {
- return false;
- }
- }
- return true;
- }
- /**
- * Liefert TRUE, wenn die Schiene für den Kurs fixiert wurde.
- *
- * @param pSchiene Die Schiene nach der gefragt wurde.
- *
- * @return TRUE, wenn die Schiene für den Kurs fixiert wurde.
- */
- gibIstSchieneFixiert(pSchiene) {
- for (let iLage = 0; iLage < this.schienenLageFixiert; iLage++) {
- if (this.schienenLage[iLage].gibNr() === pSchiene) {
- return true;
- }
- }
- return false;
- }
- aktionSchienenLageHinzufuegen() {
- for (let i = 0; i < this.schienenLage.length; i++) {
- this.schienenLage[i].aktionKursHinzufuegen(this);
- }
- }
- aktionSchienenLageEntfernen() {
- for (let i = 0; i < this.schienenLage.length; i++) {
- this.schienenLage[i].aktionKursEntfernen(this);
- }
- }
- isTranspiledInstanceOf(name) {
- return ['de.nrw.schule.svws.core.kursblockung.KursblockungDynKurs'].includes(name);
- }
- }
- exports.KursblockungDynKurs = KursblockungDynKurs;
- function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynKurs(obj) {
- return obj;
- }
- exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynKurs = cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynKurs;
- //# sourceMappingURL=KursblockungDynKurs.js.map
|