System Design - Kojee/TRustedServicesProject GitHub Wiki

Use Cases

Copy of SWENG_Esam_Use_Cases drawio

Nome caso d'uso Visualizza lista stati
Descrizione L'utente carica la lista degli stati selezionabili
Data Lista stati selezionabili
Stimulus GUI: automatico, CLI: inserimento comando
Response Viene mostrata la lista di stati selezionabili
Comment
Nome caso d'uso Visualizza lista nazioni
Descrizione L'utente carica la lista delle nazioni selezionabili
Data Lista nazioni selezionabili
Stimulus GUI: automatico, CLI: inserimento comando
Response Viene mostrata la lista di nazioni selezionabili
Comment
Nome caso d'uso Visualizza lista providers
Descrizione L'utente carica la lista dei provider selezionabili
Data Lista providers selezionabili
Stimulus GUI: automatico, CLI: inserimento comando
Response Viene mostrata la lista di providers selezionabili
Comment
Nome caso d'uso Visualizza lista tipi
Descrizione L'utente carica la lista dei tipi selezionabili
Data Lista tipi selezionabili
Stimulus GUI: automatico, CLI: inserimento comando
Response Viene mostrata la lista di tipi selezionabili
Comment
Nome caso d'uso Seleziona stato servizio
Descrizione L'utente seleziona lo stato di servizio per cui vuole filtrare tra quelli selezionabili
Data Lista stati servizio selezionati, lista stati servizio selezionabili, stato servizio,
Stimulus GUI: click su stato servizio, CLI: immissione comando specificante stato servizio
Response Lo stato selezionato entra a far parte del filtro attivo, viene mostrato nella lista di stati servizio selezionati e rimosso da quella degli stati selezionabili
Comment
Nome caso d'uso Seleziona provider
Descrizione L'utente seleziona il provider per cui vuole filtrare tra quelli selezionabili
Data Lista provider selezionati, lista provider selezionabili, provider
Stimulus GUI: click su provider, CLI: immissione comando specificante provider
Response Il provider selezionato entra a far parte del filtro attivo, viene mostrato nella lista di providers selezionati e rimosso da quella dei provider selezionabili
Comment
Nome caso d'uso Seleziona nazione
Descrizione L'utente seleziona la nazione per cui vuole filtrare tra quelli selezionabili
Data Lista nazioni selezionabili, lista nazioni selezionabili, nazione
Stimulus GUI: click su nazione, CLI: immissione comando specificante nazione
Response La nazione selezionata entra a far parte del filtro attivo, viene mostrata nella lista di nazioni selezionate e rimossa da quella delle nazioni selezionabili
Comment
Nome caso d'uso Seleziona tipo servizio
Descrizione L'utente seleziona il tipo di servizio per cui vuole filtrare tra quelli selezionabili
Data Lista tipi servizio selezionati, lista tipi servizio selezionabili, tipo servizio
Stimulus GUI: click su tipo servizio, CLI: immissione comando specificante tipo servizio
Response Il tipo selezionato entra a far parte del filtro attivo, viene mostrato nella lista di tipi selezionati e rimosso da quella dei tipi selezionabili
Comment
Nome caso d'uso Deseleziona stato servizio
Descrizione L'utente seleziona lo stato di servizio che vuole rimuovere dal filtro attivo tra quelli selezionati
Data Lista stati selezionati, lista stati selezionabili, stato servizio
Stimulus GUI: click su stato servizio, CLI: immissione comando specificante stato servizio
Response Lo stato selezionato viene rimosso dal filtro attivo, viene rimosso dalla lista degli stati selezionati e aggiunto a quella degli stati selezionabili
Comment
Nome caso d'uso Deseleziona provider
Descrizione L'utente seleziona il provider che vuole rimuovere dal filtro attivo tra quelli selezionati
Data Lista provider selezionati, lista provider selezionabili, provider
Stimulus GUI: click su provider, CLI: immissione comando specificante provider
Response Il provider selezionato viene rimosso dal filtro attivo, viene rimosso dalla lista dei provider selezionati e aggiunto a quella dei provider selezionabili
Comment
Nome caso d'uso Deseleziona nazione
Descrizione L'utente seleziona la nazione che vuole rimuovere dal filtro attivo tra quelli selezionati
Data Lista nazioni selezionate, lista nazioni selezionabili, nazione
Stimulus GUI: click su nazione, CLI: immissione comando specificante nazione
Response La nazione selezionata viene rimossa dal filtro attivo, viene rimossa dalla lista delle nazioni selezionate e aggiunta a quella delle nazioni selezionabili
Comment
Nome caso d'uso Deseleziona tipo servizio
Descrizione L'utente seleziona il tipo di servizio che vuole rimuovere dal filtro attivo tra quelli selezionati
Data Lista tipi selezionati, Lista tipi selezionabili, tipo servizio
Stimulus GUI: click su tipo servizio, CLI: immissione comando specificante tipo servizio
Response Il tipo selezionato viene rimosso dal filtro attivo, viene rimosso dalla lista degli stati selezionati e aggiunto a quella degli stati selezionabili
Comment
Nome caso d'uso Esegui query servizi
Descrizione L'utente richiede la lista dei servizi
Data Lista servizi
Stimulus GUI: pressione pulsante, CLI: inserimento comando
Response Lista dei servizi, filtrata dal filtro attivo se presente
Comment Il caso d'uso è esteso dai casi d'uso di selezione e deselzione in quanto questi ne aumento la funzionalità andando a impostare il filtro

Domain Model

2022-06-01 (1)

  • Tutti i filtri si occupano di mostrare all'utente la lista delle rispettive entità.
  • L'utente tramite il filtro vede le entità e seleziona quelle da aggiungere/rimuovere dal filtro.
  • L'aggiunta/rimozione di un entità a un filtro viene vista dal Service Filter, che è a conoscenza di tutti i filtri delle singole entità.
  • Il Service Filter si occupa, ad ogni aggiunta/rimozione di entità dai filtri sottostanti, di avvisare gli altri filtri in modo che le entità selezionabili siano filtrate a loro volta.
    • Ad esempio, se scelgo Italia dal Country Filter, il Service Filter si occupa di avvisare i restanti filtri in modo che questi selezionino le loro liste di entità per mostrare solo quelle compatibili con la country Italia.
  • Tramite il Service Filter, l'utente può richiedere la lista dei servizi.

Sequence Diagram

CLI

SWENG_Exam_CLI_Sequence_Diagram drawio

Si divide in tre parti:

  • AppCLI: Inizalizza i filtri, gestisce gli input dell'utente e mostra i risultati in output.
  • Filters: ricevono le richieste da AppCLI e provvedono a richiamare l'interfaccia dell'API per recuperare le entità richieste, fornendo eventuali filtri impostati dall'utente e provvedendo a notificare i subscriber agli eventi di modifica. ServiceFilter esegue il subscribe agli eventi di modifica dei vari Filter in modo che quando uno di questi subisce una modifica alle sue entità selezionate, le entità selezionabili degli altri filtri vengano filtrate di conseguenza.
  • TrustedServiceAPI: interfaccia al servizio API delle Trusted List. Riceve in input un filtro e ritorna le entità selezionate.

GUI

SWENG_Exam_GUI_Sequence_Diagram drawio

Si divide in tre parti principali:

  • View
  • Controller
  • Filter (Models)

Collegati al TrustedServiceAPI

  1. Lo User può scegliere di selezionare una o più Country, uno o più Provider, uno o più Tipi e uno o più Stati tramite le relative view.
  2. Ogni View chiamerà il proprio Controller che a sua volta richiamerà il proprio Filter. Il Filter andrà a modificare le proprie lista di entità selezionate e selezionabili e notificherà i subscriber di eventuali modifiche.
    • Un subscriber può essere il Controller che, ricevuta la notifica ,andrà ad aggiornare la View
    • Un altro subscriber è il ServiceFilter, che si occupa poi di dire agli altri Filter di aggiornare le liste di entità selezionabili in modo da mostrare solo quelle compatibili con il filtro impostato
  3. Dopo aver ripetuto i primi due punti quanto necessario, l'utente andrà a richiedere i servizi tramite la ServiceView. Questa chiamerà il proprio Controller che a sua volta chiama il proprio Filter e che infine chiamerà la TrustedServiceAPI fornendo il filtro costruito andando a prendere le entità selezionate da tutti gli altri filtri (Country, Type, Provider, Status). In base al filtro impostato, TrustedServiceAPI ritornerà i servizi compatibili. ServiceFilter ritornerà i servizi a ServiceController che andrà ad aggiornare ServiceView.

Design Model

SWENG_Exam_Design_Model drawio (1)

In questo design model possiamo vedere sia il pattern MVC utilizzato per il programma GUI, sia la classe AppCLI utilizzata per il programma CLI.

GUI

Il pattern MVC separa la logica della UI dalla business logic.

  • La business logic è gestita nei models, in questo caso le varie classi Filter.
  • Le azioni dell'utente e eventuali eventi scatenati dai models sono gestiti dai controllers.
  • Le view gestiscono la UI, e vengono mantenute, aggiornate dal controller in caso di modifiche e fatte partire dalla business logic.

Le view estendono il JPanel della libreria Swing in modo da poter essere inserite nella GUI.

I controller contengono sia la view sia il model in modo da poter:

  • aggiornare le view e gestire gli eventi delle tabelle e del pulsante
  • richiamare i metodi dei model e poter recuperare il contenuto delle liste per aggiornare le tabelle Inoltre estendono la classe Observer poichè si sottoscrivono agli eventi emessi dai models.

I models, ovvero le varie classi Filter, contengono le liste di servizi, selezionabili e selezionati. Estendono la classe Subject poichè notificano i vari subscriber quando le liste vengono aggiornate. Contengono anche un'istanza di ITrustedServiceAPI per poter eseguire le query.

ServiceFilter contiene, oltre alla lista dei servizi, le istanze dei vari Filter. Questo per facilitare la composizione del filtro al momento della richiesta dei servizi, in quanto esso può recuperare le liste di entità selezionate dai vari filtri. Inoltre, è un Observer per poter gestire le modifiche alle liste di entità selezionate dei filtri.

CLI

Le azioni dell'utente sono gestite dalla classe AppCLI. Questa contiene tutti i filter e si occupa di richiamarli in base al comando fornito dall'utente. La logica e struttura dei filter è poi la stessa definita al punto precedente.