"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_types_Sprachpruefungniveau = exports.Sprachpruefungniveau = void 0;
const JavaObject_1 = require("../../java/lang/JavaObject");
const HashMap_1 = require("../../java/util/HashMap");
class Sprachpruefungniveau extends JavaObject_1.JavaObject {
    /** the name of the enumeration value */
    __name;
    /** the ordinal value for the enumeration value */
    __ordinal;
    /** an array containing all values of this enumeration */
    static all_values_by_ordinal = [];
    /** an array containing all values of this enumeration indexed by their name*/
    static all_values_by_name = new Map();
    static NIVEAU_HA9 = new Sprachpruefungniveau("NIVEAU_HA9", 0, 1, "NIVEAU_HA9", "Hauptschulabschluss nach Klasse 9", null, null);
    static NIVEAU_HA10 = new Sprachpruefungniveau("NIVEAU_HA10", 1, 2, "NIVEAU_HA10", "Hauptschulabschluss nach Klasse 10", null, null);
    static NIVEAU_MSA = new Sprachpruefungniveau("NIVEAU_MSA", 2, 3, "NIVEAU_MSA", "Mittlerer Schulabschluss (Fachoberschulreife) / Berechtigung zum Besuch der gymnasialen Oberstufe (Gymnasium G8 Klasse 9)", null, null);
    static NIVEAU_EF = new Sprachpruefungniveau("NIVEAU_EF", 3, 4, "NIVEAU_EF", "Ende der Einführungsphase der gymnasialen Oberstufe in einer fortgeführten Fremdsprache (Gymnasium und Gesamtschule)", null, null);
    static NIVEAU_FHR = new Sprachpruefungniveau("NIVEAU_FHR", 4, 5, "NIVEAU_FHR", "Fachhochschulreife (Abschluss an berufsbildenden Schulen)", null, null);
    static NIVEAU_WBK_FF = new Sprachpruefungniveau("NIVEAU_WBK_FF", 5, 6, "NIVEAU_WBK_FF", "Fortgeführte Fremdsprache gemäß § 34 Abs. 4 APO-WbK (nur zweite Pflichtfremdsprache)", null, null);
    static _mapID = new HashMap_1.HashMap();
    static _mapBezeichnung = new HashMap_1.HashMap();
    id;
    bezeichnung;
    beschreibung;
    gueltigVon;
    gueltigBis;
    /**
     * Erstellt ein neues Prüfungsniveau dieser Aufzählung.
     *
     * @param id            die ID des Prüfungsniveaus
     * @param bezeichnung   die Bezeichnung des Prüfungsniveaus
     * @param beschreibung  die Beschreibung des Prüfungsniveaus
     * @param gueltigVon	Schuljahr, ab dem das Niveau gültig ist
     * @param gueltigBis	Schuljahr, bis zu dem das Niveau gültig war
     */
    constructor(name, ordinal, id, bezeichnung, beschreibung, gueltigVon, gueltigBis) {
        super();
        this.__name = name;
        this.__ordinal = ordinal;
        Sprachpruefungniveau.all_values_by_ordinal.push(this);
        Sprachpruefungniveau.all_values_by_name.set(name, this);
        this.id = id;
        this.bezeichnung = bezeichnung;
        this.beschreibung = beschreibung;
        this.gueltigVon = gueltigVon;
        this.gueltigBis = gueltigBis;
    }
    /**
     * Gibt eine Map von den IDs der Sprachprüfungsniveaus auf die zugehörigen Sprachprüfungsniveaus
     * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
     *
     * @return die Map von den IDs der Sprachprüfungsniveaus auf die zugehörigen Sprachprüfungsniveaus
     */
    static getMapSprachpruefungniveauByID() {
        if (Sprachpruefungniveau._mapID.size() === 0)
            for (let l of Sprachpruefungniveau.values())
                Sprachpruefungniveau._mapID.put(l.id, l);
        return Sprachpruefungniveau._mapID;
    }
    /**
     * Gibt eine Map von den Bezeichnungen der Sprachprüfungsniveaus auf die zugehörigen Sprachprüfungsniveaus
     * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
     *
     * @return die Map von den Bezeichnungen der Sprachprüfungsniveaus auf die zugehörigen Sprachprüfungsniveaus
     */
    static getMapSprachpruefungniveauByBezeichnung() {
        if (Sprachpruefungniveau._mapBezeichnung.size() === 0)
            for (let l of Sprachpruefungniveau.values())
                Sprachpruefungniveau._mapBezeichnung.put(l.bezeichnung, l);
        return Sprachpruefungniveau._mapBezeichnung;
    }
    /**
     * Gibt das Prüfungsniveau für die übergebene ID zurück.
     *
     * @param id   die ID des Prüfungsniveaus
     *
     * @return das Prüfungsniveaus oder null, wenn die ID ungültig ist
     */
    static getByID(id) {
        return Sprachpruefungniveau.getMapSprachpruefungniveauByID().get(id);
    }
    /**
     * Gibt das Prüfungsniveau für die übergebene Bezeichnung zurück.
     *
     * @param bezeichnung   die Bezeichnung des Prüfungsniveaus
     *
     * @return das Prüfungsniveaus oder null, wenn die Bezeichnung ungültig ist
     */
    static getByBezeichnung(bezeichnung) {
        return Sprachpruefungniveau.getMapSprachpruefungniveauByBezeichnung().get(bezeichnung);
    }
    /**
     * Returns the name of this enumeration value.
     *
     * @returns the name
     */
    name() {
        return this.__name;
    }
    /**
     * Returns the ordinal value of this enumeration value.
     *
     * @returns the ordinal value
     */
    ordinal() {
        return this.__ordinal;
    }
    /**
     * Returns the name of this enumeration value.
     *
     * @returns the name
     */
    toString() {
        return this.__name;
    }
    /**
     * Returns true if this and the other enumeration values are equal.
     *
     * @param other   the other enumeration value
     *
     * @returns true if they are equal and false otherwise
     */
    equals(other) {
        if (!(other instanceof Sprachpruefungniveau))
            return false;
        return this === other;
    }
    /**
     * Returns the ordinal value as hashcode, since the ordinal value is unique.
     *
     * @returns the ordinal value as hashcode
     */
    hashCode() {
        return this.__ordinal;
    }
    /**
     * Compares this enumeration value with the other enumeration value by their ordinal value.
     *
     * @param other   the other enumeration value
     *
     * @returns a negative, zero or postive value as this enumeration value is less than, equal to
     *          or greater than the other enumeration value
     */
    compareTo(other) {
        return this.__ordinal - other.__ordinal;
    }
    /**
     * Returns an array with enumeration values.
     *
     * @returns the array with enumeration values
     */
    static values() {
        return [...this.all_values_by_ordinal];
    }
    /**
     * Returns the enumeration value with the specified name.
     *
     * @param name   the name of the enumeration value
     *
     * @returns the enumeration values or null
     */
    static valueOf(name) {
        let tmp = this.all_values_by_name.get(name);
        return (!tmp) ? null : tmp;
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.types.Sprachpruefungniveau'].includes(name);
    }
}
exports.Sprachpruefungniveau = Sprachpruefungniveau;
function cast_de_nrw_schule_svws_core_types_Sprachpruefungniveau(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_types_Sprachpruefungniveau = cast_de_nrw_schule_svws_core_types_Sprachpruefungniveau;
//# sourceMappingURL=Sprachpruefungniveau.js.map