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.
2.3 KiB
Executable File
2.3 KiB
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
- Nutzer wählt Schutzbereich + Fragebogen im Dialog.
- Controller ruft
securityAreaManager.addQuestionnaireToSecurityArea(selectedArea, selectedQuestionnaire). - Manager:
- Lädt
area(falls persistent) neu perem.find. - Erzeugt neues
SecurityAreaQuestionnaireObjekt. - Setzt Relation (wrapper.setArea(area)).
- Persistiert Wrapper, merged Area.
- Lädt
- Controller:
refrehSelected()(Merge + Initialize Lazy Collections), zeigt Erfolgsmeldung.
Entfernen Ablauf
- Nutzer wählt zugeordneten Fragebogen (Wrapper-Objekt).
- Controller ruft
securityAreaManager.removeQuestionnaireFromSecurityArea(area, wrapper). - Manager lädt Entities (falls notwendig), entfernt aus Collection,
em.remove(wrapper),em.merge(area). - 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)
if (questionnaire != null && area != null) {
areaManager.addQuestionnaireToSecurityArea(area, questionnaire);
controller.refrehSelected();
}
Aktualisiert: 2025-10-20