Introduzione
Emotional Songs è un software per l’annotazione delle emozioni percepite durante l’ascolto di canzoni o brani musicali. Permette di creare playlist di canzoni e, per ciascuna, annotare le emozioni provate. Infine, è possibile visualizzare, per ciascuna canzone, un report statistico delle emozioni mediamente provate dagli utenti registrati nel sistema, corredato di grafici informativi.
Emotional Songs è stato sviluppato utilizzando l’IDE NetBeans, con la JDK 17.
Il software Emotional Songs è stato sviluppato utilizzando l’API di Java RMI (Remote Method Invocation), con cui risulta più semplice gestire l’accesso concorrente al software ed al suo database.
RMI – Remote Method Invocation
Le RMI (Invocazioni di Metodi Remoti) introducono la possibilità di richiedere l’esecuzione di metodi remoti in Java, integrando il tutto con il paradigma Object Oriented.
In particolare, RMI è un insieme di politiche e meccanismi che permettono ad un’applicazione Java, in esecuzione su una macchina, di invocare i metodi di un oggetto di un’altra applicazione Java in esecuzione su una macchina remota. Viene quindi creato localmente solo il riferimento ad un oggetto remoto, che è invece effettivamente attivo su un nodo remoto. Un programma client invoca i metodi attraverso questo riferimento locale.
RMI viene implementato in Java con la libreria java.rmi
. Per ulteriori informazioni sul paradigma di programmazione RMI e la sua implementazione in Java, visita il sito web di Oracle.
Struttura generale del sistema di classi
Emotional Songs è strutturato in due package distinti. ClientES
è il programma che ciascun utente del software deve installare sul proprio PC per utilizzare tutte le funzionalità offerte. ServerES
costituisce invece il backend del software, e necessita di essere installato sulla macchina facente funzione di server.
ClientES
emotionalsongs
Contiene la classe main
del programma, oltre ai metodi che indicano quale utente ha effettuato l’accesso al programma e la lingua di visualizzazione per un dato momento.
emotionalsongs.clientES
Insieme di classi che consentono di effettuare il collegamento ai servizi offerti dal database e di inizializzare il software per il client.
emotionalsongs.clientES.client_internal_services
Insieme di classi che gestiscono la costruzione della finestra per l’utilizzo del programma lato client. In particolare, si occupa di visualizzare le icone ed i pulsanti, di gestire la visualizzazione delle playlist e dei dati delle canzoni visualizzate.
emotionalsongs.clientES.dialogs
Insieme di classi che si occupano dell’internazionalizzazione dell’interfaccia. Attualmente sono presenti le lingue italiana e inglese.
emotionalsongs.clientES.gui
Insieme di classi che si occupano di costruire gli elementi grafici che compongono le finestre del software lato client.
emotionalsongs.clientES.wrappers
Gruppo di classi wrapper (c.d. classi «involucro»), il cui scopo è la costruzione degli oggetti rappresentanti gli elementi fondamentali di Emotional Songs: emozioni, playlist, canzoni e utenti.
emotionalsongs.serverES.server_services_commons_interfaces
Si tratta di due package che richiamano le funzioni comuni con il server. Tale implementazione è prevista da RMI.
ServerES
emotionalsongs.serverES
Gruppo di classi che si occupa di gestire la connessione tra il software e il DBMS. In particolare, sono presenti classi che:
- instaurano il collegamento al DBMS.
- creano le tabelle e le relazioni, se non presenti.
- verificano la correttezza dei dati inviati, prima che questi vengano inoltrati al DBMS.
Tali gruppi di classi sono divisi ulteriormente in base agli elementi manipolati:
- canzoni
- emozioni
- playlist
- utenti registrati
serverES.welcome_email_sender
Struttura di classi adibite all’invio di una e-mail di benvenuto, ogni volta che un nuovo utente si registra al sistema.
Interfaccia grafica
L’interfaccia grafica di Emotional Songs è realizzata con l’IDE Apache NetBeans, usato per costruire le finestre ed i singoli elementi della GUI.
La libreria utilizzata per la GUI è Java Swing, una delle più famose e ampiamente usate.
Librerie di terze parti
Emotional Songs sfrutta alcune librerie di terze parti, che elenchiamo qui di seguito.
postgresql-42.6.0
Il driver PostgreSQL JDBC consente ai programmi Java di connettersi a un database PostgreSQL utilizzando un codice Java standard indipendente dal database. pgJDBC è un driver JDBC open source scritto in Pure Java (Tipo 4), e comunica nel protocollo di rete nativo PostgreSQL.
In Emotional Songs, questa libreria di classi viene sfruttata per la comunicazione tra il software e il DB creato usando il DBMS PostgreSQL.
jfreechart
JFreeChart è una libreria di grafici Java 100% gratuita che rende facile per gli sviluppatori visualizzare grafici nelle loro applicazioni.
In Emotional Songs viene sfruttata per la costruzione dei grafici riassuntivi all’interno del report delle emozioni per ciascuna canzone.
jsoup
jsoup è una libreria Java per lavorare con HTML. Fornisce un’API molto comoda per recuperare URL ed estrarre e manipolare dati, utilizzando i migliori metodi HTML5 DOM e selettori CSS.
javax.mail
L’API JavaMail fornisce un framework indipendente dalla piattaforma e dal protocollo per creare applicazioni di posta e messaggistica.
Nel caso di Emotional Songs, viene sfruttata la libreria javax.mail
per inviare in automatico una e-mail di conferma all’atto della registrazione, con un riassunto dei dati forniti.
Altre librerie di terze parti
AbsoluteLayout-RELEASE130
commons-lang3-3.1
commons-validator
javaee-api-8.0.1
activation-1.1
commons-beanutils-1.9.4
commons-collections-3.2.2
commons-digester-2.1
commons-logging-1.2
jcommon-1.0.16
Database
Schema UML – ER della base di dati
Clicca qui per le query SQL utilizzate per la creazione della base di dati con PostgreSQL
.
Note progettuali della base di dati
In fase di progettazione della base di dati sono state fatte alcune scelte progettuali, che riportiamo di seguito.
Nella tabella
UTENTI_REGISTRATI
è stata inserita una colonnaLOGGED
di tipoBOOL
, in modo da permettere al server di controllare che ciascun utente non abbia effettuato il login da più terminali contemporaneamente. Tale valore è settato di default aFALSE
.Per questioni di gestione della visualizzazione delle canzoni nel repository, si è deciso di assegnare a ciascuna tupla della tabella
CANZONI
un indice univoco, rappresentato dalla colonna REPO_INDEX di tipo numerico, UNIQUE.Poiché:
- una playlist può contenere più canzoni,
- ogni playlist è assegnata ad un solo utente,
- ogni utente può avere più playlist,
si è deciso di dividere la rappresentazione della playlist all’interno della base di dati in due tabelle distinte:
PLAYLIST
- Contiene l’ID univoco della playlist (generato dal software che si interfaccia con la base di dati), il suo nome (scelto dall’utente in fase di creazione della playlist) e l’ID del proprietario.
- Sostanzialmente rappresenta l’associazione utente – playlist.
CONTENUTO_PLAYLIST
- Contiene, per ciascuna tupla, l’ID della playlist e l’ID di una delle canzoni in essa contenute.
- Ogni playlist è rappresentata da un insieme di righe, avente in comune il valore della colonna
PLAYLIST_ID
.
Non essendo stato richiesto che il software esegua alcun tipo di campionamento per zona geografica, si è deciso di rappresentare l’indirizzo dell’utente nella colonna
INDIRIZZO
diUTENTI_REGISTRATI
come semplice valore letterale generico, i cui controlli di validità sono rimandati al software di gestione della base di datiServerES
.
Complessità degli algoritmi di ordinamento
Gli algoritmi di ordinamento e ricerca sono contenuti nel DBMS PostgreSQL, e sono il merge sort e l’heap sort, i quali hanno complessità n log n.
JavaDoc
Fai click sui pulsanti seguenti per visualizzare i file JavaDoc, utili per approfondire le classi e i metodi implementati in Emotional Songs.