Files
pi_mcps/java/mss-failsafe/QUESTIONNAIRES_FOR_SECURITY_AREAS_IMPLEMENTATION_GUIDE.md
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

7.6 KiB
Executable File

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

<!-- 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.