Files
pi_mcps/java/mss-failsafe/docs/QUESTIONNAIRE_WORKFLOW.md
T
Patrick Plate 1a0a56a626 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.
2026-06-13 19:55:28 +02:00

53 lines
2.3 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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