Manuale - Kojee/TRustedServicesProject GitHub Wiki
Overview
Per la progettazione di questo programma è stato applicato il seguente flusso:
- Stesura use cases
- Creazione Domain Model
- Analisi Domain model per poter estrarre eventuali pattern da applicare e per capire come suddividere le varie entità del programma
- Creazione Internal Behaviour Diagram
- Creazione Design Model
- Codifica/Stesura unit tests
Il programma era originariamente stato pensato per essere eseguito in una GUI. Da qui, si è scelto di utilizzare il pattern MVC per gestire gli eventi provenienti dall'utente:
- Le view gestiscono gli input dell'utente e mostrano le modifiche applicate ai model. Esiste una view per ogni entità, e tutte le view contengono una tabella per mostrare le entità selezionabili e una tabella per mostrare le entità selezionate. Il click sulla riga di una tabella comporta lo spostamento dell'entità selezionata nella tabella opposta. La view dei servizi contiene solo una tabella e un pulsante. Alla pressione del pulsante, viene eseguita la query dei servizi basandosi sul contenuto delle tabelle delle entità selezionate nelle altre view.
- I controller inviano ai model le richieste provenienti dalle view, e aggiornano le view quando i model vengono modificati.
- I model si occupano di eseguire la business logic e di mantenere i dati da mostrare nelle view.
Per gestire gli eventi relativi alla modifica delle liste di selezione, si è scelto di usare l'observer pattern: i controller eseguono il subscribe sugli oggetti osservabili, i model, in modo da essere notificati di eventuali modifiche alle liste. Ad ogni notifica di modifica, il controller provvede ad aggiornare la relativa view.
Per gestire la logica delle query sull'API, si è scelto di astrarre l'API con un interfaccia (ITrustedServiceAPI) e di crearne un'implementazione HTTP (HttpTrustedServiceAPI). Questa classe implementa le funzioni definite dall'interfaccia in modo da eseguire richieste HTTP agli endpoint e di applicare i filtri forniti dai vari models. E' stato scelto poi di eseguire un caricamento preventivo dei dati all'avvio per velocizzare le seguenti query, in modo da rendere l'applicazione più reattiva.
Si è scelto di creare cinque models:
- TypeFilter
- StatusFilter
- CountryFilter
- ProviderFilter
- ServiceFilter
E di organizzarli in modo che ServiceFilter abbia visione completa degli altri filtri. Questo per facilitare l'esecuzione della query sui servizi: avendo la visione di tutti i "sotto-filtri" e del loro contenuto, ServiceFilter può facilmente comporre il filtro da passare a ITrustedServiceAPI. Inoltre, esegue il subscribe sulle modifiche dei sotto-filtri, in modo che quando uno di questi subisce una modifica alle sue entità selezionate, ServiceFilter veda questa modifica e notifichi gli altri filtri in modo che aggiornino di conseguenza le loro entità selezionabili. Ad esempio:
- In CountryFilter viene selezionata "Italy"
- ServiceFilter riceve la notifica
- ServiceFilter comunica agli altri filtri che è stata selezionala la Country "Italy"
- Gli altri filtri aggiornano le proprie entità selezionabili in modo da mostrare solo quelle compatibili con Country "Italy"
In parallelo allo sviluppo della GUI con pattern MVC, è stata sviluppata anche una classe, AppCLI, per gestire gli eventi utente da CLI. Tale classe ammette alcuni comandi, visualizzabili anche immettendo il comando help:
- list-selectable entity_name: mostra le entità selezionabili per l'entità richiesta
- list-selected entity_name: mostra le entità selezionate per l'entità richiesta
- add-filter entity_name string: aggiunge alle entità selezionate di entity_name la stringa string
- remove-filter entity_name string: rimuove dalle entità selezionate di entity_name la stringa string
- get-services [filename]: stampa a schermo la lista dei servizi filtrati dalle entità correntemente selezionate. Se [filename] è popolato ed è un path valido ad un file, scrive il risultato sul file indicato. Se il file non esiste viene creato.
La classe AppCLI interagisce con i vari Filter richiamando le funzioni per aggiungere o rimuovere le entità ai filtri. I model poi si occupano di richiamare ITrustedServiceAPI che provvedere ad eseguire le query con i filtri forniti.
Le due implementazioni differiscono quindi solamente per come vengono processati gli input dell'utente.
Prerequisiti
Windows
Installazione Java Development Kit
- Premere il seguente link https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.exe per avviare il download
- Una volta terminato, aprire il pacchetto
.exe
appena scaricato - Premere
Sì
in modo tale che avvenga l'installazione - Premere
Next
- Premere
Charge
se si vuole modificare la cartella di destinazione, altrimenti premere ancoraNext
- Premere
Close
Verificare che le variabili d'ambiente siano state impostate:
- Aprire il cmd
- Eseguire
javac -version
- Verificare che il comando venga riconosciuto
Impostare le variabili d'ambiente
In caso al passo precedente il comando javac -version
non venga riconosciuto, potrebbe essere necessario impostare le variabili d'ambiente di Windows
- Aprire il menu
Start
di Windows - Aprire le
Impostazioni
e premere suSistema
- Andare in fondo alla pagina e premere su
Informazioni
nella colonna a sinistra - Andare in fondo alla pagina e premere su
Impostazioni di sistema avanzate
- Premere su
Variabili d'ambiente...
- Sotto
Variabili di sistema
premere due volte supath
- Premere su
Nuovo
- Inserire l'indirizzo della cartella in cui è stato collocato il JDK
- Se non è stato modificata la cartella di destinazione durante l'installazione del JDK basta inserire
C:\Program Files\Java\jdk-18.0.1.1\bin
- Altrimenti cercare la cartella in cui è stato collocato il JDK e copiare l'indirizzo della cartella
- Se non è stato modificata la cartella di destinazione durante l'installazione del JDK basta inserire
- Premere su
OK
, ancora suOK
e riavviare il sistema.
MacOS
Installazione Java Development Kit
- collegarsi alla seguente pagina https://www.oracle.com/java/technologies/downloads/#jdk18-mac
- se si possiede un Mac dotato di processore Intel, premere sul link di download corrispondente alla voce
x64 DMG Installer
- se si possiede un Mac dotato di chip della famiglia Apple, premere sul link di download corrispondente alla voce
Arm 64 DMG Installer
- se si possiede un Mac dotato di processore Intel, premere sul link di download corrispondente alla voce
- una volta scaricato il pacchetto d'installazione JDK, aprire con doppio click e premere sul file
.pkg
al suo interno - premere su
Continua
- premere su
Installa
- immettere la
password di amministrazione
del Mac quando richiesta - premere
Installa software
e premereChiudi
Ubuntu / Debian
Installazione Java Development Kit
Installare curl in caso non sia già presente:
sudo apt update
sudo apt install -y curl wget
Scaricare OpenJDK 18
curl -O https://download.java.net/java/GA/jdk18/43f95e8614114aeaa8e8a5fcf20a682d/36/GPL/openjdk-18_linux-x64_bin.tar.gz
Estrarre il contenuto del tar.gz
tar xvf openjdk-18_linux-x64_bin.tar.gz
Spostare la cartella in /opt
sudo mv jdk-18 /opt/
Configurare l'ambiene Java
sudo tee /etc/profile.d/jdk18.sh <<EOF
export JAVA_HOME=/opt/jdk-18
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
Eseguire il source del profilo e aggiungere il comando java
source /etc/profile.d/jdk18.sh
Download codice sorgente
Tramite Git
- inserire da riga di comando:
$ git clone https://github.com/Kojee/TRustedServicesProject.git
La cartella verrà scaricata automaticamente.
Tramite file ZIP
- Scaricare l'archivio zippato dal seguente link
https://github.com/Kojee/TRustedServicesProject/archive/refs/heads/main.zip
- Estrarre la cartella
Compilazione
Windows
Maven
- Scaricare maven da https://maven.apache.org/download.cgi (Scaricare il binary zip archive)
- Estrarre il contenuto del file zip scaricato
- Aggiungere la cartella bin contenuta nella cartella estratta alla variabile PATH
- Ad esempio, se lo zip è stato estratto in C:\Program Files, aggiungere alla variabile PATH la seguente stringa:
C:\Program Files\apache-maven-3.8.5\bin
- Ad esempio, se lo zip è stato estratto in C:\Program Files, aggiungere alla variabile PATH la seguente stringa:
- Navigare fino alla cartella principale del progetto
- Eseguire
mvn package
- In caso il comando non venga riconosciuto, riavviare la shell
- Eseguire
java -jar .\target\TrustedServiceProject-1.0.jar
Ubuntu / Debian
Maven
Installare maven
sudo apt update
sudo apt install maven
- Navigare fino alla cartella principale del progetto.
- Eseguire
mvn package
- Eseguire
java -jar .\target\TrustedServiceProject-1.0.jar
Compilare e generare JAR per versione CLI
Per creare il jar della versione CLI dell'applicazione, sostituire App
con AppCLI
nel file src/main/resources/META-INF/MANIFEST.MF
Avvio del Software
.jar
Esecuzione del file Da CLI
- Dopo aver scaricato il sorgente del progetto, eseguire
cd .\TRustedServicesProject\
- Eseguire
java -jar .\target\TrustedServiceProject-1.0.jar
Da file explorer
- Dopo aver scaricato il sorgente del progetto, navigare nella cartella
.\TrustedServicesProject\target\
- Eseguire doppio-clic sul file
TrustedServiceProject-1.0.jar
Librerie usate
- JUnit per eseguire gli unit tests
- Swing per la realizzazione della GUI
- GSON per deserializzare i JSON