# 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
``` #### 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.