AbschlussFaecherGruppe.ts 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import { JavaObject, cast_java_lang_Object } from '../../../java/lang/JavaObject';
  2. import { GEAbschlussFach, cast_de_nrw_schule_svws_core_data_abschluss_GEAbschlussFach } from '../../../core/data/abschluss/GEAbschlussFach';
  3. import { StringBuilder, cast_java_lang_StringBuilder } from '../../../java/lang/StringBuilder';
  4. import { List, cast_java_util_List } from '../../../java/util/List';
  5. import { JavaString, cast_java_lang_String } from '../../../java/lang/JavaString';
  6. import { Vector, cast_java_util_Vector } from '../../../java/util/Vector';
  7. import { GELeistungsdifferenzierteKursart, cast_de_nrw_schule_svws_core_types_ge_GELeistungsdifferenzierteKursart } from '../../../core/types/ge/GELeistungsdifferenzierteKursart';
  8. import { AbschlussManager, cast_de_nrw_schule_svws_core_abschluss_AbschlussManager } from '../../../core/abschluss/AbschlussManager';
  9. import { Predicate, cast_java_util_function_Predicate } from '../../../java/util/function/Predicate';
  10. export class AbschlussFaecherGruppe extends JavaObject {
  11. private readonly faecher : Vector<GEAbschlussFach> = new Vector();
  12. /**
  13. * Erzeugt eine Fächergruppe aus den angegebenen Fächern und den vorgegebenen Kriterien.
  14. *
  15. * @param faecherAlle eine Liste aller vorhandenen Leistungen
  16. * @param faecherNutzen nur die gelisteten Fächer nutzen, null bedeutet grundsätzlich alle benoteten Fächer nutzen (außer den gefilterten)
  17. * @param faecherFiltern null bedeutet keinen Filter verwenden, ansonsten werden die gelisteten Fächer gefiltert
  18. */
  19. public constructor(faecherAlle : List<GEAbschlussFach>, faecherNutzen : List<String> | null, faecherFiltern : List<String> | null) {
  20. super();
  21. if (faecherAlle === null)
  22. return;
  23. for (let i : number = 0; i < faecherAlle.size(); i++){
  24. let fach : GEAbschlussFach = faecherAlle.get(i);
  25. if (fach.kuerzel === null)
  26. continue;
  27. if ((faecherFiltern !== null) && faecherFiltern.contains(fach.kuerzel))
  28. continue;
  29. if ((faecherNutzen !== null) && !faecherNutzen.contains(fach.kuerzel))
  30. continue;
  31. this.faecher.add(AbschlussManager.erstelleAbschlussFach(fach.kuerzel, fach.bezeichnung, fach.note, GELeistungsdifferenzierteKursart.from(fach.kursart), fach.istFremdsprache));
  32. }
  33. }
  34. /**
  35. * Prüft, ob die gelisteten Fächer in der Fächergruppe sind und nur diese.
  36. *
  37. * @param faecherAbgleich die Fächer, welche in der Fächergruppe sein sollen.
  38. *
  39. * @return true, falls die angegebenen Fächer und nur diese in der Fächergruppe sind, ansonsten false.
  40. */
  41. public istVollstaendig(faecherAbgleich : List<String> | null) : boolean {
  42. if (faecherAbgleich === null)
  43. return true;
  44. if (this.isEmpty())
  45. return false;
  46. for (let kuerzel of faecherAbgleich) {
  47. if (!this.contains(kuerzel))
  48. return false;
  49. }
  50. for (let i : number = 0; i < this.faecher.size(); i++){
  51. let fach : GEAbschlussFach = this.faecher.get(i);
  52. if (!faecherAbgleich.contains(fach.kuerzel))
  53. return false;
  54. }
  55. return true;
  56. }
  57. /**
  58. * Gibt zurück, ob die Fächergruppe leer ist oder mindestens ein Fach beinhaltet.
  59. *
  60. * @return true, falls die Fächergruppe leer ist, ansonsten false
  61. */
  62. public isEmpty() : boolean {
  63. return (this.faecher === null) || (this.faecher.isEmpty());
  64. }
  65. /**
  66. * Prüft, ob das Fach mit dem angegebenen Fachkürzel in der Fächergruppe enthalten ist
  67. * oder nicht.
  68. *
  69. * @param kuerzel das Kürzel des Faches, welches geprüft werden soll.
  70. *
  71. * @return true, falls das Fach vorhanden ist, und ansonsten false
  72. */
  73. public contains(kuerzel : String | null) : boolean {
  74. if (kuerzel === null)
  75. return false;
  76. for (let i : number = 0; i < this.faecher.size(); i++){
  77. let fach : GEAbschlussFach = this.faecher.get(i);
  78. if ((fach !== null) && (JavaObject.equalsTranspiler(fach.kuerzel, (kuerzel))))
  79. return true;
  80. }
  81. return false;
  82. }
  83. /**
  84. * Entfernt alle Fächer aus der Fächergruppe, die dem übergebenen Filter entsprechen.
  85. *
  86. * @param filter die Funktion, um die zu entfernenden Fächer zu bestimmen
  87. *
  88. * @return die Liste der tatsächlich entfernten Fächer
  89. */
  90. public entferneFaecher(filter : Predicate<GEAbschlussFach>) : List<GEAbschlussFach> {
  91. let selected : Vector<GEAbschlussFach> = new Vector();
  92. for (let i : number = 0; i < this.faecher.size(); i++){
  93. let fach : GEAbschlussFach = this.faecher.get(i);
  94. if (filter.test(fach))
  95. selected.add(fach);
  96. }
  97. this.faecher.removeAll(selected);
  98. return selected;
  99. }
  100. /**
  101. * Bestimmt das Fach, welches dem übergebenen Filter entspricht. Entsprechen
  102. * mehrere Fächer dem Filterkriterium, so wird nur das erste Fach
  103. * der internen Liste zurückgegeben.
  104. *
  105. * @param filter die Funktion, die das Kriterium für das gesuchte Fach angibt.
  106. *
  107. * @return das Fach, sofern eines gefunden wurde, ansonsten false
  108. */
  109. public getFach(filter : Predicate<GEAbschlussFach>) : GEAbschlussFach | null {
  110. for (let i : number = 0; i < this.faecher.size(); i++){
  111. let fach : GEAbschlussFach = this.faecher.get(i);
  112. if (filter.test(fach))
  113. return fach;
  114. }
  115. return null;
  116. }
  117. /**
  118. * Bestimmt alle Fächer, welche dem übergebenen Filterkriterium entsprechen.
  119. *
  120. * @param filter die Funktion, die das Kriterium für die gesuchten Fächer angibt.
  121. *
  122. * @return eine Liste der Fächer, die dem Filterkriterium entsprechen
  123. */
  124. public getFaecher(filter : Predicate<GEAbschlussFach>) : List<GEAbschlussFach> {
  125. let result : Vector<GEAbschlussFach> = new Vector();
  126. for (let i : number = 0; i < this.faecher.size(); i++){
  127. let fach : GEAbschlussFach = this.faecher.get(i);
  128. if (filter.test(fach))
  129. result.add(fach);
  130. }
  131. return result;
  132. }
  133. /**
  134. * Gibt die Anzahl der Fächer zurück, welche dem übergebenen Filterkriterium entsprechen.
  135. *
  136. * @param filter die Funktion, die das Kriterium für die gesuchten Fächer angibt.
  137. *
  138. * @return die Anzahl der Fächer
  139. */
  140. public getFaecherAnzahl(filter : Predicate<GEAbschlussFach>) : number {
  141. let count : number = 0;
  142. for (let i : number = 0; i < this.faecher.size(); i++){
  143. let fach : GEAbschlussFach = this.faecher.get(i);
  144. if (filter.test(fach))
  145. count++;
  146. }
  147. return count;
  148. }
  149. /**
  150. * Bestimmt die Kürzel aller Fächer, welche dem übergebenen Filterkriterium entsprechen.
  151. *
  152. * @param filter die Funktion, die das Kriterium für die gesuchten Fächer angibt.
  153. *
  154. * @return eine Liste der Kürzel der Fächer, die dem Filterkriterium entsprechen
  155. */
  156. public getKuerzel(filter : Predicate<GEAbschlussFach>) : List<String> {
  157. let result : Vector<String> = new Vector();
  158. for (let i : number = 0; i < this.faecher.size(); i++){
  159. let fach : GEAbschlussFach = this.faecher.get(i);
  160. if (filter.test(fach) && (fach.kuerzel !== null))
  161. result.add(fach.kuerzel);
  162. }
  163. return result;
  164. }
  165. /**
  166. * Erstellt eine Zeichenkette mit einer Komma-separierten Liste der Kürzel aller Fächer,
  167. * welche dem übergebenen Filterkriterium entsprechen.
  168. *
  169. * @param filter die Funktion, die das Kriterium für die gesuchten Fächer angibt.
  170. *
  171. * @return die Zeichenkette mit einer Komma-separierten Liste der Fächerkürzel
  172. */
  173. public getKuerzelListe(filter : Predicate<GEAbschlussFach>) : String {
  174. let sb : StringBuilder = new StringBuilder();
  175. for (let i : number = 0; i < this.faecher.size(); i++){
  176. let fach : GEAbschlussFach = this.faecher.get(i);
  177. if (filter.test(fach)) {
  178. if (sb.length() > 0)
  179. sb.append(", ");
  180. sb.append(fach.kuerzel);
  181. }
  182. }
  183. return sb.toString();
  184. }
  185. /**
  186. * Gibt eine Komma-separierte Liste, der Abschlussfächer aus. Dabei wird
  187. * die toString Methode der Klasse AbschlussFach verwendet.
  188. */
  189. public toString() : String {
  190. let sb : StringBuilder = new StringBuilder();
  191. for (let i : number = 0; i < this.faecher.size(); i++){
  192. let fach : GEAbschlussFach = this.faecher.get(i);
  193. if (sb.length() > 0)
  194. sb.append(", ");
  195. let diffkursinfo : String = "";
  196. if ((fach.kursart === null) || (fach.kuerzel === null))
  197. continue;
  198. if (!GELeistungsdifferenzierteKursart.Sonstige.hat(fach.kursart))
  199. diffkursinfo += fach.kursart + ",";
  200. sb.append(fach.kuerzel + "(" + diffkursinfo.valueOf() + fach.note + ")");
  201. }
  202. return sb.toString();
  203. }
  204. isTranspiledInstanceOf(name : string): boolean {
  205. return ['de.nrw.schule.svws.core.abschluss.ge.AbschlussFaecherGruppe'].includes(name);
  206. }
  207. }
  208. export function cast_de_nrw_schule_svws_core_abschluss_ge_AbschlussFaecherGruppe(obj : unknown) : AbschlussFaecherGruppe {
  209. return obj as AbschlussFaecherGruppe;
  210. }