chore(java): consolidate mss-failsafe to single canonical copy

Replace the stale multi-module java/mss-failsafe skeleton (old user-management
prototype) with the active single-module machine-safety inspection app that was
living in its own standalone repo at the repo root.

- Remove old java/mss-failsafe/ multi-module tree (mss, userdata, userManagement,
  mssfailsafe.datalayer, mssfailsafeWeblayer) incl. committed build artifacts
- Add the active app (PrimeFaces 11 / JSF 2.3 / Hibernate 5.6 / iText / POI)
  flattened into java/mss-failsafe/ as the only mss-failsafe in git
- Working tree captured = master tip 2a142b5 + in-progress uncommitted work
  (incl. .github/*.instructions.md AI-context files)
- Archive the standalone repo's 33-commit history in GIT_HISTORY_ARCHIVE.md
  since its .git was not migrated

This is the source of truth / base for the upcoming upgraded rewrite.
This commit is contained in:
Patrick Plate
2026-06-13 19:55:28 +02:00
parent 7a573d7193
commit 1a0a56a626
504 changed files with 37052 additions and 7758 deletions
+52
View File
@@ -0,0 +1,52 @@
# Workflow: Fragebögen in Sicherheitsbereichen
## Ziel
Zuordnung strukturiert erfassbarer Fragebögen (`Questionaire`) zu einem `SecurityArea` via `SecurityAreaQuestionnaire`.
## Beteiligte Klassen
- `SecurityAreaController` UI Aktionen (add/remove, refresh).
- `SecurityAreaManager` Persistenzoperationen (add/remove/reload, Verfügbarkeitsliste).
- `SecurityAreaQuestionnaire` Assoziative Entity (enthält Name / ID des Fragebogens + Bezug zum Schutzbereich).
- `QuestionaireManager` (nicht gezeigt) Verwaltung aller Fragebögen.
## Hinzufügen Ablauf
1. Nutzer wählt Schutzbereich + Fragebogen im Dialog.
2. Controller ruft `securityAreaManager.addQuestionnaireToSecurityArea(selectedArea, selectedQuestionnaire)`.
3. Manager:
- Lädt `area` (falls persistent) neu per `em.find`.
- Erzeugt neues `SecurityAreaQuestionnaire` Objekt.
- Setzt Relation (wrapper.setArea(area)).
- Persistiert Wrapper, merged Area.
4. Controller: `refrehSelected()` (Merge + Initialize Lazy Collections), zeigt Erfolgsmeldung.
## Entfernen Ablauf
1. Nutzer wählt zugeordneten Fragebogen (Wrapper-Objekt).
2. Controller ruft `securityAreaManager.removeQuestionnaireFromSecurityArea(area, wrapper)`.
3. Manager lädt Entities (falls notwendig), entfernt aus Collection, `em.remove(wrapper)`, `em.merge(area)`.
4. Controller aktualisiert Verfügbare Liste.
## Verfügbare Fragebögen
- Abfrage aller Fragebögen: `SELECT q FROM Questionaire q ORDER BY q.name`.
- Filter: Namen bereits zugeordneter Wrapper (Verbesserung: Filter per ID zur Sicherheit gegen Namensduplikate).
## Edge Cases
- Bereich / Fragebogen null: Controller zeigt Fehlermeldung.
- Concurrent Änderung: Nach Persist immer Refresh durchführen.
- Doppelte Zuordnung: Filter verhindert erneute Anzeige; Manager könnte zusätzlich prüfen (Collection enthält bereits Name).
## Verbesserungen
- Validierung auf Einzigartigkeit im Manager (statt nur UI Filter).
- Optimierte Fetch Strategie (JOIN FETCH) bei Reload.
- Nutzung eines Service zur Kapselung Geschäftslogik + Manager nur für CRUD.
## Beispiel Pseudocode (Hinzufügen)
```java
if (questionnaire != null && area != null) {
areaManager.addQuestionnaireToSecurityArea(area, questionnaire);
controller.refrehSelected();
}
```
---
Aktualisiert: 2025-10-20