1a0a56a626
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.
53 lines
2.3 KiB
Markdown
Executable File
53 lines
2.3 KiB
Markdown
Executable File
# 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
|
||
|