"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_abschluss_ge_AbschlussFaecherGruppen = exports.AbschlussFaecherGruppen = void 0;
const JavaObject_1 = require("../../../java/lang/JavaObject");
const StringBuilder_1 = require("../../../java/lang/StringBuilder");
const Predicate_1 = require("../../../java/util/function/Predicate");
class AbschlussFaecherGruppen extends JavaObject_1.JavaObject {
    fg1;
    fg2;
    /**
     * Erzeugt eine neues Objekt AbschlussFaecherGruppen
     *
     * @param fg1   die Fächergruppe 1
     * @param fg2   die Fächergruppe 2
     */
    constructor(fg1, fg2) {
        super();
        this.fg1 = fg1;
        this.fg2 = fg2;
    }
    /**
     * Prüft, ob eine der beiden Fächergruppen leer ist.
     *
     * @return true, falls eine der beiden Fächergruppen leer ist.
     */
    isEmpty() {
        return this.fg1 === null || this.fg2 === null || this.fg1.isEmpty() || this.fg2.isEmpty();
    }
    /**
     * Prüft, ob das Fach mit dem angegebenen Fachkürzel in einer der beiden
     * Fächergruppen enthalten ist oder nicht.
     *
     * @param kuerzel   das Kürzel des Faches, welches geprüft werden soll.
     *
     * @return true, falls das Fach vorhanden ist, und ansonsten false
     */
    contains(kuerzel) {
        return this.fg1.contains(kuerzel) || this.fg2.contains(kuerzel);
    }
    /**
     * Bestimmt alle Fächer beider Fächergruppen, welche dem übergebenen
     * Filterkriterium entsprechen.
     *
     * @param filter   die Funktion, die das Kriterium für die gesuchten Fächer angibt.
     *
     * @return eine Liste der Fächer, die dem Filterkriterium entsprechen
     */
    getFaecher(filter) {
        let faecher = this.fg1.getFaecher(filter);
        faecher.addAll(this.fg2.getFaecher(filter));
        return faecher;
    }
    /**
     * Gibt die Anzahl der Fächer beider Fächergruppen zurück, welche dem übergebenen
     * Filterkriterium entsprechen.
     *
     * @param filter   die Funktion, die das Kriterium für die gesuchten Fächer angibt.
     *
     * @return die Anzahl der Fächer
     */
    getFaecherAnzahl(filter) {
        return this.fg1.getFaecherAnzahl(filter) + this.fg2.getFaecherAnzahl(filter);
    }
    /**
     * Bestimmt die Kürzel aller Fächer beider Fächergruppen, welche dem übergebenen
     * Filterkriterium entsprechen.
     *
     * @param filter   die Funktion, die das Kriterium für die gesuchten Fächer angibt.
     *
     * @return eine Liste der Kürzel der Fächer, die dem Filterkriterium entsprechen
     */
    getKuerzel(filter) {
        let faecher = this.fg1.getKuerzel(filter);
        faecher.addAll(this.fg2.getKuerzel(filter));
        return faecher;
    }
    /**
     * Implementation for method overloads of 'getKuerzelListe'
     */
    getKuerzelListe(__param0, __param1) {
        if (((typeof __param0 !== "undefined") && ((typeof __param0 !== 'undefined') && (__param0 instanceof Object) && (__param0 !== null) && ('test' in __param0) && (typeof __param0.test === 'function')) || (__param0 === null)) && (typeof __param1 === "undefined")) {
            let filter = (0, Predicate_1.cast_java_util_function_Predicate)(__param0);
            let sb = new StringBuilder_1.StringBuilder();
            let faecher = this.getKuerzel(filter);
            for (let fach of faecher) {
                if (sb.length() > 0)
                    sb.append(", ");
                sb.append(fach);
            }
            return sb.toString();
        }
        else if (((typeof __param0 !== "undefined") && ((typeof __param0 !== 'undefined') && (__param0 instanceof Object) && (__param0 !== null) && ('test' in __param0) && (typeof __param0.test === 'function')) || (__param0 === null)) && ((typeof __param1 !== "undefined") && ((typeof __param1 !== 'undefined') && (__param1 instanceof Object) && (__param1 !== null) && ('test' in __param1) && (typeof __param1.test === 'function')) || (__param1 === null))) {
            let filterFG1 = (0, Predicate_1.cast_java_util_function_Predicate)(__param0);
            let filterFG2 = (0, Predicate_1.cast_java_util_function_Predicate)(__param1);
            let sb = new StringBuilder_1.StringBuilder();
            let faecherFG1 = this.fg1.getKuerzel(filterFG1);
            let faecherFG2 = this.fg2.getKuerzel(filterFG2);
            for (let fach of faecherFG1) {
                if (sb.length() > 0)
                    sb.append(", ");
                sb.append(fach);
            }
            for (let fach of faecherFG2) {
                if (sb.length() > 0)
                    sb.append(", ");
                sb.append(fach);
            }
            return sb.toString();
        }
        else
            throw new Error('invalid method overload');
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.abschluss.ge.AbschlussFaecherGruppen'].includes(name);
    }
}
exports.AbschlussFaecherGruppen = AbschlussFaecherGruppen;
function cast_de_nrw_schule_svws_core_abschluss_ge_AbschlussFaecherGruppen(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_abschluss_ge_AbschlussFaecherGruppen = cast_de_nrw_schule_svws_core_abschluss_ge_AbschlussFaecherGruppen;
//# sourceMappingURL=AbschlussFaecherGruppen.js.map