Università degli Studi di Modena e Reggio Emilia Dipartimento di Ingegneria ‘’Enzo Ferrari’’ Corso di Laurea in Ingegneria Informatica Sviluppo applicazione web ‘’DBGroupThesis’’ Relatore: Sonia Bergamaschi Candidato: Fabio Travaglioli Anno Accademico 2015 - 2016
Il progetto 2 differenti tipologie d’utente Studente Professore DBGroupThesis è una Single Page Web Application (SPA), ovvero una pagina web JavaScript in grado di modificare il proprio contenuto in base alle richieste ed azioni dell’utente utilizzatore. 2 differenti tipologie d’utente Studente Professore Visualizzazione informazioni (elenco studenti, tesi, etc..) Manipolazione d’informazioni (insert, update, delete) Filtraggio dei risultati attraverso form di ricerca
Classi delle tabelle del database Struttura Pattern MVC (Model View Controller): suddivide il codice in blocchi dalle funzionalità ben distinte: View Controller Model View: definisce le modalità di presentazione dei dati e l’interazione con l’utente Pagina JavaScript (lato client) Model: gestisce l’accesso ai dati e si occupa del loro aggiornamento Classi delle tabelle del database Classe Java Controller: determina la logica di controllo, gestendo gli eventi generati dall’utente
Entità e linguaggi Pagina web Server web Database Sintassi simile a C, C++ Object oriented Dichiarativo Interpretato Garbage Collection Standard per DBMS Gestione degli eventi Basato su tabelle
Il database Tabella studente Tabella tesi Tabella relatore Una delle caratteristiche fondamentali di DBGroupThesis è la presenza di un database in grado di raccogliere e gestire l’intera mole di dati del progetto. Tra le tabelle presenti, si evidenziano: Associa ad ogni tesi realizzata il ricercatore/professore che seguirà l’andamento di una tesi Raccoglie le informazioni anagrafiche e accademiche di ogni studente Raccoglie le informazioni principali per ogni elaborato Tabella studente Tabella tesi Tabella relatore Attributi Foreign key Tesi_id: chiave primaria Relatore_id: chiave primaria Studente_id: chiave primaria Matricola (AK), nome, cognome, media, data_prevista_tesi, voto_finale_tesi Attributi canonici per una tesi: anno_accademico, abstract, note, pubblicabile Principale (flag) 2 chiavi esterne 3 chiavi esterne 1 chiave esterna Tipo_studente_id (triennale, magistrale, dottorato) Studente_id, tipologia tesi_id, azienda_id Tesi_id, ricercatore_id
Argomento della tesi Problema n°1: un professore vuole suddividere le tesi in base all’argomento trattato Soluzione: implementazione di una nuova tabella all’interno del database: tabella Tag Tag: parola chiave che identifica al meglio un progetto di tesi Ogni tag è identificato univocamente da un tag_id, ha un nome e una descrizione Problema n°2: un determinato tag non può essere associato a più tesi (e viceversa) con un’associazione «uno a molti» Soluzione: implementazione di una nuova tabella all’interno del database: tabella tesi_tag Relazione «molti a molti»: ora ogni tesi può avere più tags Ogni riga della tabella ha una PK tesi_tag_id, due chiavi esterne (tesi_id e tag_id) e il campo principale
Step 1: creazione codice Grazie all’utilizzo del framework DBGroup, è possibile ricavare in modo automatico il codice sorgente necessario per gestire le principali funzioni della tabella Tag. Creazione classe tag.java Nuova voce nel menù Tag_update Per ogni funzionalità viene creato: Un metodo Java Una funzione JavaScript Tag.java Implementazioni nuove funzioni: Tag_insert Inserimento nuovo tag Visualizzazione dei tag esistenti Tag_list Aggiornamento di un tag Tag_delete Eliminazione di un tag
Step 2: implementazione tesi_tag @Transactional @RequestMapping(value="tag_id/tesi_tag_setprincipale") public void tesi_tag_setprincipale(HttpSession session , HttpServletResponse response , @RequestParam("content") String scontent ) throws Exception { String status = null; JSONObject rv = new JSONObject(); if ((status = appSessionTools.hasPermission(session, "db_tesi_tag_update"))!=null) status = "permissionDenied " + status; appControllerTools.appDoRequestMappingResponse(response, status, rv); return; } JSONObject content = new JSONObject(scontent); int tesi_tag_id = content.getInt("tesi_tag_id"); tesi_tag.setPrincipale(tesi_tag_id); status = "ok"; appControllerTools.appDoRequestMappingResponse(response, status, rv) ; Step 2: implementazione tesi_tag Problema: non è possibile generare il codice in modo automatico (grazie ad un framework) per una relazione «molti a molti». Soluzione: è necessaria la produzione manuale del codice per la gestione della tabella tesi_tag. Vantaggi Vincol i Creazione di un’interfaccia grafica personalizzabile Maggiore complessità Maggiore intuitività per l’utente Creazione nuove classi Implementazione nuove funzionalità Impostazione di un tag come principale
Step 3: interfaccia grafica 2° tipologia: aggiunta di un nuovo tab all’interno della scheda di ciascuna tesi 1° tipologia: aggiunta di un apposito campo all’interno della scheda di ciascuna tesi Dal punto di vista grafico, all’interno di DBGroupThesis sono state implementate due differenti tipologie di visualizzazione dei tags per ogni tesi registrata. Tab 1° tipologia: aggiunta di un apposito campo all’interno della scheda di ciascuna tesi Elenco tags Visualizzazione 2° tipologia: aggiunta di un nuovo tab all’interno della scheda di ciascuna tesi Nuovo campo tag Visualizzazione e manipolazione (CRUD) Form aggiunta tag Elenco tags
Grazie per l’attenzione