Files
pi_mcps/java/mss-failsafe/docs/QUESTIONNAIRE_WORKFLOW.md
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

2.3 KiB
Executable File
Raw Permalink Blame History

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)

if (questionnaire != null && area != null) {
    areaManager.addQuestionnaireToSecurityArea(area, questionnaire);
    controller.refrehSelected();
}

Aktualisiert: 2025-10-20