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:
Patrick Plate
2026-06-13 19:55:28 +02:00
parent 7a573d7193
commit 1a0a56a626
504 changed files with 37052 additions and 7758 deletions
+61
View File
@@ -0,0 +1,61 @@
# Coding Guidelines
## Allgemein
- Sprache: Deutsch in UI-Messages, Englisch im Code (Klassennamen etc.).
- Einrückung: 4 Spaces (NetBeans Standard). Keine Tab-Mischung.
- Zeilenlänge: Empfehlung max. 140 Zeichen.
- Vermeide überflüssige System.out.println nutze Logger.
## Packages
- `business.<domain>` für Manager/Logik.
- `controller.<domain>` für JSF Backing Beans.
- `model.<domain>` für Entities/Enums.
## Benennung
- Manager endet auf `Manager` (CRUD + Fachlogik).
- Controller endet auf `Controller`.
- Entities nutzen Substantive singular (`SecurityArea`, `DangerPoint`).
- Enums nutzen PascalCase Konstanten (`APPROACH_SPEED`, hier bereits gemischt beibehalten vorhandene Fälle, Konsistenz bei neuen).
## Fehlerbehandlung
- Aktuell: Logging + bool Rückgabe. Bei neuen komplexen Methoden: Ziehe eigene Exceptions in Betracht (`BusinessException`).
- Niemals stack trace verlieren immer loggen. Falls Benutzerfeedback nötig → Message über Controller.
## Persistenz
- Vor Persist neuer Entity: ID muss `null` sein (oder negativ Fake-ID nur temporär). Setze beim finalen Speichern negative IDs auf `null`.
- Verwende `AbstractManager.refresh(entity)` um Lazy Collections zu initialisieren.
## Transaktionen
- Schreibmethoden erhalten `@Transactional`. Beim EJB Stateless reicht oft Container-Transaktion; Annotation verstärkt Klarheit.
## Performance
- Sammel-Speicheroperationen bevorzugt `saveAll(Collection<T>)` statt Schleifen mit einzelnen Flushes.
- Beim Klonen großer Objektgraphen prüfen: Nur notwendige Collections initialisieren.
## UI / JSF
- Vermeide direkte Änderungen an listengebundenen Collections ohne Aktualisierung des Backing Beans (PrimeFaces kann sonst nicht updaten).
- Nutze klare Dialog-Helper (closeDialogs) statt roher JavaScript Strings.
## PDF
- Konsistenz: Verwende iText7 API für neue Funktionen. Markiere Altcode (iText5) für spätere Entfernung.
## Sicherheit
- Keine sensiblen Daten in Logs.
- Prüfe vor Löschaktionen, dass referenzielle Integrität gewährleistet (vor Entfernen Beziehungen lösen, wie im `deleteSelected()` umgesetzt).
## Tests (Empfehlung)
- JUnit + Arquillian für EJB/Entity Tests.
- Test-Namensschema: `<ClassName>Test`.
- Mindestens: CRUD, Klonen, Fragebogen hinzufügen/entfernen.
## Kommentar-Stil
- Klassenheader: Kurze Beschreibung Funktion/Zweck.
- Methoden: JavaDoc nur bei komplexer Logik / öffentlich verwendeten APIs.
## Anti-Pattern vermeiden
- "God Controller" trenne Verantwortlichkeiten (nicht alles in einem Controller ansammeln).
- Direkte UI-Logik im Manager vermeiden.
---
Aktualisiert: 2025-10-20