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
@@ -0,0 +1,199 @@
# Questionnaires für SecurityArea - Implementierungsplan
## Übersicht
Implementierung der Funktionalität zur Hinzufügung von Fragebögen (Questionnaires) zu SecurityArea-Entitäten in den Basisdaten. Dies ermöglicht es, Fragebögen bereits bei der Erstellung von Sicherheitsbereichen zu hinterlegen, anstatt erst bei der Ticket-Erstellung.
## Hintergrund
- **Aktueller Stand**: Questionnaires werden nur zu TicketSecurityArea hinzugefügt
- **Neues Ziel**: Questionnaires sollen auch zu SecurityArea (Basisdaten) hinzugefügt werden können
- **Grund**: Verbesserung des Workflows entsprechend Kundenwunsch
## Schritt-für-Schritt Implementierung
### 1. Datenbankmodell erweitern
#### 1.1 SecurityArea Entität anpassen
- **Datei**: `src/main/java/model/securityarea/SecurityArea.java`
- **Aufgabe**:
- Neue Beziehung zu Questionnaires hinzufügen
- `@OneToMany` Mapping für `SecurityAreaQuestionnaire` implementieren
- Ähnlich wie bei TicketSecurityArea → SecurityAreaQuestionnaire
#### 1.2 Neue Entität: SecurityAreaQuestionnaire
- **Datei**: `src/main/java/model/securityarea/SecurityAreaQuestionnaire.java` (neu erstellen)
- **Aufgabe**:
- Entität ähnlich zu `TicketSecurityAreaQuestionnaire` erstellen
- `@ManyToOne` Beziehung zu SecurityArea
- `@OneToMany` Beziehung zu SecurityAreaQuestion
- Konstruktor für Kopieren von Questionnaire → SecurityAreaQuestionnaire
#### 1.3 Neue Entität: SecurityAreaQuestion
- **Datei**: `src/main/java/model/securityarea/SecurityAreaQuestion.java` (neu erstellen)
- **Aufgabe**:
- Entität ähnlich zu `SecurityAreaQuestion` aus tickets package erstellen
- `@ManyToOne` Beziehung zu SecurityAreaQuestionnaire
- Alle notwendigen Felder für Fragen implementieren
### 2. Business Logic implementieren
#### 2.1 SecurityAreaManager erweitern
- **Datei**: `src/main/java/business/securityarea/SecurityAreaManager.java`
- **Aufgabe**:
- Methoden für Questionnaire-Management hinzufügen
- `addQuestionnaireToSecurityArea()`
- `removeQuestionnaireFromSecurityArea()`
- `getAvailableQuestionnaires()`
#### 2.2 QuestionnaireManager anpassen
- **Datei**: `src/main/java/business/questions/QuestionnaireManager.java`
- **Aufgabe**:
- Methoden für SecurityArea-Questionnaire Verknüpfung
- Validierung für Questionnaire-Zuordnung
### 3. Controller Layer erweitern
#### 3.1 SecurityAreaController anpassen
- **Datei**: `src/main/java/controller/securityarea/SecurityAreaController.java`
- **Aufgabe**:
- Properties für Questionnaire-Auswahl hinzufügen
- `selectedQuestionnaire`, `availableQuestionnaires`
- Methoden: `addQuestionnaireToArea()`, `removeQuestionnaireFromArea()`
- Integration in `save()` und `editSelected()` Methoden
#### 3.2 Neue Controller für SecurityAreaQuestionnaire
- **Datei**: `src/main/java/controller/securityarea/SecurityAreaQuestionnaireController.java` (optional)
- **Aufgabe**:
- Dedicated Controller für Questionnaire-Management
- Ähnlich zu bestehenden Questionnaire-Controllern
### 4. UI Implementation
#### 4.1 Hauptseite erweitern
- **Datei**: `src/main/webapp/resources/user/sec/create.xhtml`
- **Aufgabe**:
- Neue Sektion für Questionnaires in SecurityArea-Details hinzufügen
- Position: Nach den DangerPoints, vor dem Bottom-Bereich
- Accordion-Panel für Questionnaires ähnlich wie bei SecurityDevices
#### 4.2 Questionnaire-Management UI
- **Komponenten hinzufügen**:
- DataTable für angehängte Questionnaires
- Buttons: "Fragebogen hinzufügen", "Bearbeiten", "Entfernen"
- Dialog für Questionnaire-Auswahl
- Dialog für Questionnaire-Bearbeitung
#### 4.3 Dialog-Implementierung
- **Neue Dialogs in create.xhtml**:
- `dlgAddQuestionnaire`: Auswahl verfügbarer Questionnaires
- `dlgEditQuestionnaire`: Bearbeitung der Questions
- Ähnlich zu bestehenden Device/DangerPoint Dialogs
### 5. Integration und Workflow
#### 5.1 Ticket-Erstellung anpassen
- **Aufgabe**: Bei Ticket-Erstellung Questionnaires von SecurityArea automatisch kopieren
- **Dateien**:
- Ticket-Erstellungs-Controller
- TicketSecurityArea-Business-Logic
#### 5.2 Copy/Clone Funktionalität
- **Aufgabe**: Beim Kopieren von SecurityAreas auch Questionnaires mitkopieren
- **Betroffene Methoden**: `cloneToSelectedMachine()` in SecurityAreaController
### 6. UI/UX Details
#### 6.1 SecurityArea-Karte erweitern
```html
<!-- Nach DangerPoints Accordion hinzufügen -->
<div class="p-col-12">
<p:accordionPanel value="#{securityAreaController.selected.questionnaires}" var="questionnaire" activeIndex="#">
<p:tab title="Fragebogen: #{questionnaire.name}">
<!-- Questionnaire Details und Questions anzeigen -->
</p:tab>
</p:accordionPanel>
</div>
```
#### 6.2 Questionnaire-Management Buttons
- In das "Mehr"-Menü (dynaButton) integrieren
- Neue Menüpunkte: "Fragebogen hinzufügen", "Fragebögen verwalten"
### 7. Testing und Validierung
#### 7.1 Unit Tests
- **Neue Test-Klassen**:
- `SecurityAreaQuestionnaireTest`
- `SecurityAreaQuestionTest`
- `SecurityAreaManagerTest` (erweitern)
#### 7.2 Integration Tests
- Questionnaire-Zuordnung zu SecurityArea
- Kopieren von Questionnaires bei Ticket-Erstellung
- UI-Workflow Tests
#### 7.3 Datenbank-Migration
- **Aufgabe**: SQL-Scripts für neue Tabellen erstellen
- Tables: `SECURITY_AREA_QUESTIONNAIRE`, `SECURITY_AREA_QUESTION`
- Foreign Key Constraints definieren
## Reihenfolge der Implementierung
1. **Phase 1**: Datenbankmodell (SecurityAreaQuestionnaire, SecurityAreaQuestion)
2. **Phase 2**: Business Logic (Manager-Erweiterungen)
3. **Phase 3**: Controller Layer (SecurityAreaController erweitern)
4. **Phase 4**: UI Implementation (create.xhtml erweitern)
5. **Phase 5**: Integration (Ticket-Erstellung anpassen)
6. **Phase 6**: Testing und Finalisierung
## Wichtige Überlegungen
### Datenmodell-Konsistenz
- Questionnaires in SecurityArea müssen kompatibel zu TicketSecurityArea sein
- Beim Ticket-Erstellen: SecurityArea-Questionnaires → TicketSecurityArea kopieren
### UI-Konsistenz
- Gleiche Bedienung wie bei SecurityDevices/DangerPoints
- Accordion-Panel für übersichtliche Darstellung
- Standard CRUD-Operationen (Create, Read, Update, Delete)
### Performance
- Lazy Loading für Questionnaires implementieren
- Effizienter Datentransfer bei Questionnaire-Kopierung
## Dependencies
### Neue Dateien zu erstellen:
- `model/securityarea/SecurityAreaQuestionnaire.java`
- `model/securityarea/SecurityAreaQuestion.java`
- Controller-Erweiterungen
- UI-Erweiterungen in create.xhtml
### Bestehende Dateien zu modifizieren:
- `model/securityarea/SecurityArea.java`
- `controller/securityarea/SecurityAreaController.java`
- `business/securityarea/SecurityAreaManager.java`
- `resources/user/sec/create.xhtml`
## Zeitschätzung
- **Phase 1-2**: 2-3 Tage (Backend)
- **Phase 3-4**: 3-4 Tage (Controller + UI)
- **Phase 5-6**: 2-3 Tage (Integration + Testing)
- **Gesamt**: ~8-10 Arbeitstage
## Risiken und Mitigationen
### Datenbankmigrationen
- **Risiko**: Bestehende Daten könnten beeinträchtigt werden
- **Mitigation**: Backup vor Migration, schrittweise Einführung
### UI-Komplexität
- **Risiko**: UI wird zu überladen
- **Mitigation**: Accordion-Panel verwenden, ähnlich zu bestehenden Komponenten
### Performance
- **Risiko**: Laden von vielen Questionnaires könnte langsam werden
- **Mitigation**: Lazy Loading, Paging implementieren
---
**Nächste Schritte**: Mit Phase 1 (Datenbankmodell) beginnen und die SecurityAreaQuestionnaire Entität implementieren.