System Design - Kojee/TRustedServicesProject GitHub Wiki
Use Cases

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

- 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

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

Si divide in tre parti principali:
- View
- Controller
- Filter (Models)
Collegati al TrustedServiceAPI
- 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.
- 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
- 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

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.