Files
pi_mcps/java/mss-failsafe/docs/SECURITY_AREA_DOMAIN.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.6 KiB
Executable File

Domain: SecurityArea

Zweck

Abbildung eines Schutzbereichs einer Maschine mit zugehörigen Schutzeinrichtungen, Gefahrenstellen und Schaltgeräten sowie Fragebögen zur Bewertung.

Haupt-Entitäten (Ausschnitt)

  • SecurityArea
  • SecurityDevice (Liste in Area)
  • DangerPoint
  • SwitchingDevice
  • SecurityAreaQuestionnaire (assoziative Entity zwischen Schutzbereich und Questionaire)
  • Questionaire

Lebenszyklus

  1. Erstellung im UI: Neues SecurityArea Objekt mit Fake-ID (negativ).
  2. Bearbeitung von Eigenschaften (Name, Typen/Enums: ProtectionType, MountingPosition, OverrunMeasurementType, ApproachSpeed).
  3. Hinzufügen von Schutzeinrichtungen/Gefahrenstellen/Schaltgeräten (ebenfalls ggf. mit Fake-ID bis persistiert).
  4. Speichern: Negative IDs der neuen Objekte werden auf null gesetzt → Persist durch SecurityAreaManager.save / Sammelspeicher.
  5. Nach Persist: Re-Load (refresh/reloadWithQuestionnaires) vor weiterer Bearbeitung.

Klonen

SecurityAreaManager.cloneArea(SecurityArea area):

  • Lädt persistente Quelle (falls ID > 0) vollständig.
  • Erzeugt neue Kopie via Copy-Konstruktor.
  • Controller passt Namen an (Original (Kopie)), setzt neue null IDs für untergeordnete Objekte.

Fragebogen-Verknüpfung

Hinzufügen

  • Methode: addQuestionnaireToSecurityArea(area, questionnaire).
  • Erzeugt SecurityAreaQuestionnaire Wrapper.
  • Persist Wrapper, merge Area.
  • UI aktualisiert Liste und sendet Erfolgsmeldung.

Entfernen

  • removeQuestionnaireFromSecurityArea(area, securityAreaQuestionnaire) entfernt Element aus Sammlung & ruft em.remove.

Verfügbare Fragebögen

  • getAvailableQuestionnaires(area) holt alle Questionaire und filtert bereits zugeordnete anhand Name. Verbesserung: Nutzung ID statt Name zur Eindeutigkeit.

Konsistenz / Referentielle Integrität

Beim Löschen eines Schutzbereichs (deleteSelected() im Controller):

  1. Entfernen aus Maschine.
  2. Auflösen aller Kind-Referenzen (SwitchingDevices, DangerPoints, SecurityDevices) durch Setzen der Area auf null.
  3. Entfernen der Kindobjekte via entsprechende Manager (removeAllIn).
  4. Löschen des SecurityArea via Named Query (SecurityArea.DELETE).

Potentielle Verbesserungen

  • Cascade Settings genauer prüfen (evtl. kann Teil der manuellen Löschlogik automatisiert werden).
  • Validierung (Bean Validation) für Pflichtfelder (Name nicht leer, Enums nicht null soweit fachlich notwendig).
  • Nutzung DTOs zur Entkopplung UI ↔ JPA (reduziert Lazy Probleme).

Aktualisiert: 2025-10-20