Manuale - Kojee/TRustedServicesProject GitHub Wiki

Overview

Per la progettazione di questo programma è stato applicato il seguente flusso:

  1. Stesura use cases
  2. Creazione Domain Model
  3. Analisi Domain model per poter estrarre eventuali pattern da applicare e per capire come suddividere le varie entità del programma
  4. Creazione Internal Behaviour Diagram
  5. Creazione Design Model
  6. 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:

  1. In CountryFilter viene selezionata "Italy"
  2. ServiceFilter riceve la notifica
  3. ServiceFilter comunica agli altri filtri che è stata selezionala la Country "Italy"
  4. 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 in modo tale che avvenga l'installazione
  • Premere Next
  • Premere Charge se si vuole modificare la cartella di destinazione, altrimenti premere ancora Next
  • Premere Close

Verificare che le variabili d'ambiente siano state impostate:

  1. Aprire il cmd
  2. Eseguire javac -version
  3. 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

  1. Aprire il menu Start di Windows
  2. Aprire le Impostazioni e premere su Sistema
  3. Andare in fondo alla pagina e premere su Informazioni nella colonna a sinistra
  4. Andare in fondo alla pagina e premere su Impostazioni di sistema avanzate
  5. Premere su Variabili d'ambiente...
  6. Sotto Variabili di sistema premere due volte su path
  7. Premere su Nuovo
  8. Inserire l'indirizzo della cartella in cui è stato collocato il JDK
    1. 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
    2. Altrimenti cercare la cartella in cui è stato collocato il JDK e copiare l'indirizzo della cartella
  9. Premere su OK, ancora su OK e riavviare il sistema.

MacOS

Installazione Java Development Kit

  • collegarsi alla seguente pagina https://www.oracle.com/java/technologies/downloads/#jdk18-mac
    1. se si possiede un Mac dotato di processore Intel, premere sul link di download corrispondente alla voce x64 DMG Installer
    2. se si possiede un Mac dotato di chip della famiglia Apple, premere sul link di download corrispondente alla voce Arm 64 DMG Installer
  • 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 premere Chiudi

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

  1. Scaricare maven da https://maven.apache.org/download.cgi (Scaricare il binary zip archive)
  2. Estrarre il contenuto del file zip scaricato
  3. 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
  4. Navigare fino alla cartella principale del progetto
  5. Eseguire mvn package
    • In caso il comando non venga riconosciuto, riavviare la shell
  6. Eseguire java -jar .\target\TrustedServiceProject-1.0.jar

Ubuntu / Debian

Maven

Installare maven

sudo apt update
sudo apt install maven
  1. Navigare fino alla cartella principale del progetto.
  2. Eseguire mvn package
  3. 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

Esecuzione del file .jar

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