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

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.

  1. Nella tabella UTENTI_REGISTRATI è stata inserita una colonna LOGGED di tipo BOOL, 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 a FALSE.

  2. 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.

  3. 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.
  4. 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 di UTENTI_REGISTRATI come semplice valore letterale generico, i cui controlli di validità sono rimandati al software di gestione della base di dati ServerES.

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.

JavaDoc ClientES

JavaDoc ServerES