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.
This commit is contained in:
+54
@@ -0,0 +1,54 @@
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user