Files
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

62 lines
2.6 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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