Class UserPanelController

java.lang.Object
it.unisa.diem.wordageddon_g16.controllers.UserPanelController
All Implemented Interfaces:
javafx.fxml.Initializable

public class UserPanelController extends Object implements javafx.fxml.Initializable
Controller per la gestione della vista del pannello utente.

Gestisce la visualizzazione delle statistiche personali dell’utente, la gestione dei documenti, delle stopwords e, se l’utente ha privilegi amministrativi, fornisce gli strumenti per la gestione degli utenti.

  • Field Details

    • service

      private final UserPanelService service
    • adminPanel

      private javafx.scene.layout.Pane adminPanel
    • livelloClm

      private javafx.scene.control.TableColumn<GameReport, String> livelloClm
    • totalGameLabel

      private javafx.scene.control.Label totalGameLabel
    • avgScoreLabel

      private javafx.scene.control.Label avgScoreLabel
    • maxScoreLabel

      private javafx.scene.control.Label maxScoreLabel
    • punteggioClm

      private javafx.scene.control.TableColumn<GameReport, Integer> punteggioClm
    • tempoClm

      private javafx.scene.control.TableColumn<GameReport, String> tempoClm
    • userTableView

      private javafx.scene.control.TableView<GameReport> userTableView
    • usernameLabel

      private javafx.scene.control.Label usernameLabel
    • anchorSemicerchio

      private javafx.scene.layout.AnchorPane anchorSemicerchio
    • stackMedio

      private javafx.scene.layout.StackPane stackMedio
    • currentUser

      private final User currentUser
      Riferimento all’utente attualmente autenticato nell'applicazione.
    • appContext

      private final AppContext appContext
      Riferimento al contesto applicativo che fornisce accesso ai servizi e alle risorse condivise.
    • isRecalculatingWDMs

      private final AtomicBoolean isRecalculatingWDMs
      Indica se è in corso un ricalcolo delle WDM, per evitare concorrenza.
    • needsRecalculation

      private final AtomicBoolean needsRecalculation
      Se 'true', segnala che un altro ricalcolo WDM è stato richiesto mentre uno era già in esecuzione.
    • threadPool

      ExecutorService threadPool
      Thread pool utilizzato per il ricalcolo parallelo delle WDM. Ogni thread esegue un task di aggiornamento della WDM di una specifica WDM. Per evitare concorrenza indesiderata, tali thread sono usati solo per il calcolo delle WDM
  • Constructor Details

    • UserPanelController

      public UserPanelController(AppContext context)
      Costruttore del controller.
      Parameters:
      context - Il contesto applicativo che fornisce accesso all'utente corrente e ai service delle interfacce.
  • Method Details

    • handleAdmin

      private void handleAdmin()
      Apre un popup per la gestione dei ruoli degli utenti presenti nel sistema.

      Viene visualizzata una lista di utenti (escluso l'attuale tramite UserPanelService.getAllUsersExceptCurrent()), ognuno dei quali può essere promosso o degradato tramite un ToggleButton. L’aggiornamento del ruolo viene effettuato tramite chiamate a UserPanelService.promoteUser(String) o UserPanelService.demoteUser(String).

    • handleDocumenti

      private void handleDocumenti()
      Apre un popup per la gestione dei documenti testuali.

      Funzionalità offerte:

      • Visualizzazione di tutti i documenti salvati nel database.
      • Rimozione di documenti esistenti.
      • Caricamento di nuovi documenti con estensione ".txt" tramite FileChooser.

      Dopo il caricamento, viene avviato in background il calcolo automatico della WDM associata, tramite UserPanelService.updateWDM(WDM).

    • handleLogOut

      private void handleLogOut()
      Effettua il logout dell'utente corrente e ritorna alla schermata di autenticazione.
    • handleGoBack

      private void handleGoBack()
      Gestisce il ritorno alla schermata del menu principale.
    • handleStopWords

      private void handleStopWords()
      Apre un popup che permette la gestione delle stopwords.

      Le funzionalità offerte includono:

      • Aggiunta manuale tramite un TextField
      • Caricamento da file di solo tipo '.txt'
      • Rimozione selezionata di stopwords da una ListView

      Se viene rilevata una modifica alle stopwords, al termine della finestra viene avviato automaticamente il ricalcolo di tutte le WDM associate ai documenti esistenti nel sistema in modo ascrincono attraverso il thread pool

    • reCalculateWDMs

      private void reCalculateWDMs()
      Avvia il ricalcolo parallelo delle WDM (Word Document Matrix) per tutti i documenti registrati nel database.

      Viene creato un Task per ogni documento, eseguito tramite un ExecutorService . Ogni task aggiorna la matrice WDM associata invocando UserPanelService.updateWDM(WDM).

      Il metodo assicura che il ricalcolo non avvenga in parallelo ad altri ricalcoli tramite il flag isRecalculatingWDMs, mentre eventuali richieste successive vengono accodate tramite needsRecalculation.

    • completeRecalculation

      private void completeRecalculation()
      Metodo di callback chiamato al termine del ricalcolo delle WDM.

      Ripristina il flag isRecalculatingWDMs a 'false'. Se durante l’esecuzione erano state richieste ulteriori modifiche (es. nuove stopwords), il metodo ne avvia automaticamente un nuovo ricalcolo.

    • initialize

      public void initialize(URL url, ResourceBundle resourceBundle)
      Metodo di inizializzazione del controller, invocato automaticamente da JavaFX.

      Imposta i contenuti iniziali dell’interfaccia utente, tra cui:

      Specified by:
      initialize in interface javafx.fxml.Initializable