This commit is contained in:
Christian Berger
2025-11-24 09:15:38 +01:00
commit fa7c019588
86 changed files with 3916 additions and 0 deletions

64
src/model/DataModels.java Normal file
View File

@@ -0,0 +1,64 @@
package model;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Zentrale Datenquelle für alle statischen Auswahl-Listen (ComboBox-Optionen)
* und standardisierte Mappings (z. B. CSV-Spalten zu SQLite-Feldern).
*/
public final class DataModels {
private DataModels() {
// Utility class: no instances
}
/** CSV → SQLite Spalten-Mapping (zentrale Definition, Reihenfolge garantiert) */
public static Map<String, String> getCsvToSqliteMapping() {
Map<String, String> map = new LinkedHashMap<>();
map.put("ID", "id");
map.put("Datum", "datum");
map.put("Startzeit", "startzeit");
map.put("Typ", "veranstaltungstyp");
map.put("Titel", "titel");
map.put("Thema", "inhaltstyp");
map.put("Modus", "modus");
map.put("Dauer (Min)", "dauer_minuten");
map.put("Anzahl TN", "teilnehmende_anzahl");
map.put("Typ TN", "teilnehmende_typ");
map.put("Von (PHID)", "durchfuehrende_person");
map.put("Ausfall", "ausgefallen_grund");
map.put("Kommentar", "kommentar");
map.put("Bewertung (16)", "evaluation"); // <-- added line
return map;
}
/** Veranstaltungstypen (z. B. Schulung, Führung) */
public static List<String> getVeranstaltungstypen() {
return Arrays.asList("schulung", "fuehrung", "coffeelecture", "selbstlerneinheit");
}
/** Modus der Veranstaltung (Präsenz, Online, Selbstlerneinheit) */
public static List<String> getModi() {
return Arrays.asList("online", "praesenz");
}
/** Typ der Teilnehmenden */
public static List<String> getTeilnehmendeTypen() {
return Arrays.asList("studierende", "mitarbeitende", "externe", "sonstige", "gemischt");
}
/** Gründe für ausgefallene Veranstaltungen */
public static List<String> getAusgefallenGruende() {
return Arrays.asList(
"",
"keine anmeldung",
"weniger als 3 anmeldungen",
"nicht erschienen",
"sonstiger grund"
);
}
}

View File

@@ -0,0 +1,79 @@
package model;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import db.UserDAO;
public class PersonMapping {
private static final Map<String, String> KUERZEL_TO_NAME = new LinkedHashMap<>();
private static final List<String> ADMINS = List.of("cbu615", "jbo733");
private static String dbPath = null;
private static boolean initialized = false;
/** Holt die Daten aus der DB, falls noch nicht erfolgt */
private static synchronized void loadPeople() {
dbPath = util.Config.getDbPath();
if (dbPath == null) throw new IllegalStateException("DB-Pfad nicht gesetzt!");
UserDAO dao = new UserDAO(dbPath);
List<String[]> users = dao.getAllUsers();
KUERZEL_TO_NAME.clear();
for (String[] user : users) {
KUERZEL_TO_NAME.put(user[0], user[1]);
}
initialized = true;
}
/** Prüft, ob geladen, und lädt ggf. */
private static void listLoadedCheck() {
if (!initialized) {
System.out.println("load");
loadPeople();
}
}
public static void forceReloadPeople() {
// Nur explizit von außen aufrufen!
loadPeople();
}
public static boolean isAdmin(String login) {
if (login == null) return false;
login = normalizeLogin(login);
return ADMINS.contains(login.toLowerCase());
}
/** Kürzel → Klarname */
public static String toName(String kuerzel) {
listLoadedCheck();
if (kuerzel == null || kuerzel.isBlank()) return "";
return KUERZEL_TO_NAME.getOrDefault(kuerzel, kuerzel);
}
/** Klarname → Kürzel */
public static String toKuerzel(String name) {
listLoadedCheck();
if (name == null || name.isBlank()) return "";
for (Map.Entry<String, String> e : KUERZEL_TO_NAME.entrySet()) {
if (e.getValue().equalsIgnoreCase(name.trim())) {
return e.getKey();
}
}
return name;
}
/** Für Dropdown-Menüs: alle Klarnamen (sortiert nach Eintragungsreihenfolge) */
public static java.util.List<String> getAllNames() {
listLoadedCheck();
return new java.util.ArrayList<>(KUERZEL_TO_NAME.values());
}
public static String normalizeLogin(String login) {
if (login == null) return "";
login = login.trim().toLowerCase();
return login;
}
}