ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning...

72
UNIVERSITÀ DEGLI STUDI DI PARMA DIPARTIMENTO DI MATEMATICA E INFORMATICA Corso di Laurea in Informatica Tesi di Laurea Progettazione e Realizzazione di una Applicazione Android per l’Accesso a Learning Management System Relatore: Candidato: Prof. Federico Bergenti Bartolomeo Lombardi Anno Accademico 2014/2015

Transcript of ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning...

Page 1: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

UNIVERSITÀ DEGLI STUDI DI PARMADIPARTIMENTO DI MATEMATICA E

INFORMATICACorso di Laurea in Informatica

Tesi di Laurea

Progettazione e Realizzazionedi una Applicazione Androidper l’Accesso a LearningManagement System

Relatore: Candidato:Prof. Federico Bergenti Bartolomeo Lombardi

Anno Accademico 2014/2015

Page 2: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Ai miei genitori, Vito e Teresa.Alle mie sorelle, Mariagrazia e Giusy.

Page 3: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Indice

1 Learning Management System 51.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 CampusNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 61.2.2 Sezioni di CampusNet . . . . . . . . . . . . . . . . . . 61.2.3 Caratteristiche . . . . . . . . . . . . . . . . . . . . . . 81.2.4 Autenticazione . . . . . . . . . . . . . . . . . . . . . . 9

1.3 EasyCourse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 101.3.2 Motivi dell’utilizzo . . . . . . . . . . . . . . . . . . . . 101.3.3 Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.4 Integrazione . . . . . . . . . . . . . . . . . . . . . . . . 13

1.4 ESSE3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 141.4.2 Scopo dell’utilizzo . . . . . . . . . . . . . . . . . . . . . 141.4.3 Integrazione con altri sistemi . . . . . . . . . . . . . . . 161.4.4 Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 171.4.5 Usabilità . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2 Fonti Dati Utilizzate 182.1 Pagine di CampusNet . . . . . . . . . . . . . . . . . . . . . . . 18

2.1.1 Avvisi e news . . . . . . . . . . . . . . . . . . . . . . . 182.1.2 Docenti . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1.3 Corsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.2 Pagine di ESSE3 . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.1 Bacheca Appelli d’esame . . . . . . . . . . . . . . . . . 252.2.2 Carriera universitaria . . . . . . . . . . . . . . . . . . . 28

3 Implementazione e Funzionamento 303.1 Strumenti utilizzati . . . . . . . . . . . . . . . . . . . . . . . . 30

3.1.1 Android SDK . . . . . . . . . . . . . . . . . . . . . . . 30

2

Page 4: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.1.2 Android Studio . . . . . . . . . . . . . . . . . . . . . . 313.2 Libreria Jsoup . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 333.2.2 Caricare documenti . . . . . . . . . . . . . . . . . . . . 333.2.3 Estrazione e manipolazione dati . . . . . . . . . . . . . 35

3.3 Architettura dell’applicazione . . . . . . . . . . . . . . . . . . 413.3.1 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.2 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.3.3 Controller . . . . . . . . . . . . . . . . . . . . . . . . . 66

Riferimenti bibliografici 70

3

Page 5: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Sommario

L’obiettivo di questa tesi è di indagare la possibilità di realizzare un’applica-zione Android in grado di accedere ad alcune informazioni contenute in alcu-ni LMS, attualmente il corso di informatica fa riferimento a tre piattaformeLMS.

Quindi lo scopo principale è stato quello di studiare la struttura di ognisingola piattaforma e di implementare componenti in grado di ricavare in-formazioni da esse e gestirle nel miglior modo possibile. Le informazioni chesi è scelto di rendere accessibili attraverso l’applicazione sono: avvisi, news,docenti, corsi, appelli e la propria carriera universitaria.

Il lavoro di tesi è organizzato nel modo seguente: Il capitolo 1 introducebrevemente la nozione di Learning Management System e descrive più indettaglio le piattaforme utilizzate dal corso di informatica. Il capitolo 2descrive le pagine HTML che sono state utilizzate per acquisire informazioniriguardo le varie piattaforme. Il capitolo 3 descrive tutti i processi di sviluppodi ogni singola sezione dell’applicazione partendo dagli strumenti e le librerieutilizzate. Infine vi è spazio alle conclusioni e sviluppi futuri.

4

Page 6: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Capitolo 1

Learning Management System

1.1 IntroduzioneCon il termine Learning Management System LMS si identifica una piattafor-ma applicativa in grado di erogare informazioni e servizi, tipicamente usataper l’amministrazione di corsi di formazione e corsi di laurea.LMS presidia la distribuzione dei corsi on-line, l’iscrizione degli studenti, iltracciamento delle attività on-line. La maggior parte degli LMS sono strut-turati in maniera tale da facilitarne, dovunque e in qualunque momento,l’accesso e la gestione dei contenuti, la maggior parte di questi sistemi tengo-no conto dello studente principiante, facilitandone l’auto-iscrizione e l’accessoai corsi. Il motivo principale dell’uso è la capacità di erogare strumenti qualicreazione, gestione, memorizzazione dei contenuti didattici, composizione emodularizzazione delle unità didattiche fondamentali, tracciamento e memo-rizzazione delle interazioni degli studenti. L’Università di Parma attualmenteadopera tali sistemi per offrire dati relativi ai corsi di laurea.

Il corso di studio di Informatica attualmente adopera tre LMS, ovveroCampusNet http://informatica.unipr.it/cgi-bin/campusnet/home.plper informazioni relative al corso di studio, EasyCourse http://easycourse.unipr.it/Orario/CdS_in_Matematica_e_Informatica/2014-2015/index.html per gli orari delle lezioni e Esse3 https://unipr.esse3.cineca.it/Home.do per la gestione amministrativa e carriera universitaria.

5

Page 7: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.2 CampusNet Learning Management System

1.2 CampusNet

1.2.1 IntroduzioneCampusNet è una piattaforma informatica che consente di gestire in modofacile ed intuitivo tutti i servizi Web relativi ad uno o più percorsi formativiuniversitari. CampusNet mette a disposizione di studenti e docenti un am-biente Web altamente integrato al fine di facilitare e promuovere uno scambiodiretto di informazioni.

Attraverso CampusNet i docenti possono inserire tutte le informazionirelative ai propri corsi di insegnamento, inserire materiale didattico, gestirel’orario delle lezioni, pubblicare le date degli appelli, inserire i risultati degliesami, prenotare un’aula, mettere avvisi nella homepage, proporre argomentidi tesi, inviare email a gruppi di studenti, mantenere un proprio registro delleattività.

Invece gli studenti, possono consultare le informazioni relative ai corsi,scaricare il materiale didattico, iscriversi online agli appelli, inserire annunciin bacheca, consultare l’agenda del docente, iscriversi ad attività propostedal docente, ricevere per email informazioni riguardanti corsi, appelli ed altreattività.

1.2.2 Sezioni di CampusNetSi possono notare le varie sezioni del sito dal menu principale, in figura 1.1,che sono appunto i moduli base che mette a disposizione la piattaforma,ovvero:

• Home viene descritto il corso di laurea e eventuali avvisi e news relativiad uno specifico corso o docente.

• Docenti contiene tutte le informazioni relative ai docenti: nome, in-dirizzo, contatti, ruolo, orario di ricevimento studenti e interessi. Ognidocente può modificare le proprie informazioni in qualsiasi momento.

• Corsi gestisce i dati relativi ai corsi di insegnamento: nome del corso,tipologia, crediti, obiettivi formativi, programma, testi consigliati. Émantenuto dai singoli docenti che possono modificare solo i dati relativiai propri corsi.

• Orario Lezioni organizza l’orario delle lezioni dell’intero corso prov-vedendo alla prenotazione delle aule e fornisce strumenti per evitaresovrapposizioni di orario o di aula. Gli orari possono essere inseriti daisingoli docenti, dall’amministratore o dalla segreteria didattica.

6

Page 8: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.2 CampusNet Learning Management System

• Aule raccoglie le informazioni relative alle aule quali nome, capienza,strumenti disponibili e responsabile. Un sistema di mappe interattiveche utilizza la Google Maps API https://developers.google.com/maps/ permette una facile localizzazione dell’aula. A seconda delleesigenze le strutture didattiche possono o meno essere inserite nel ca-lendario delle prenotazioni. Oltre alle singole informazioni è possibileeffettuare prenotazioni degli spazi didattici, con possibilità di prenota-zione per uno o più giorni, controllando automaticamente la disponibi-lità. Un sistema di ricerca permette di trovare un aula disponibile inmodo semplice e veloce.

• Appelli gestisce le date degli appelli, prenota l’aula e consente agli stu-denti di iscriversi online. Gli appelli possono essere inseriti dai docenti odalla segreteria didattica. Il docente può inserire i risultati degli esamiche verranno mostrati solo allo studente iscritto. Il docente può inviareemail al gruppo di studenti iscritti ad un determinato appello. Un si-stema automatico invia un promemoria al docente alcuni giorni primadell’appello. Appelli imminenti vengono automaticamente visualizzatinella homepage.

• Iscrizioni Esami consente agli studenti di iscriversi agli appelli d’esa-me. Studenti iscritti agli appelli possono ricevere comunicazioni emailda parte del docente e consultare il risultato del loro esame.

Figura 1.1: Homepage di CampusNet

7

Page 9: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.2 CampusNet Learning Management System

1.2.3 CaratteristicheLa caratteristica principale di CampusNet è senza dubbio l’estrema versatilitàdel software all’adeguarsi alle innumerevoli situazioni presenti nel panoramadella didattica universitaria. Lo testimonia il fatto che CampusNet è ingrado di gestire percorsi formativi di facoltà letterarie, mediche e scientifichee soddisfare le esigenze di diversi atenei.

Le principali caratteristiche sono:

• Pagine Web create in modo dinamico a partire da informazioni inseritedirettamente dai docenti e dagli studenti.

• Informazioni non ridondanti, tutti i database sono interconnessi traloro in modo da permettere lo scambio di informazioni e facilitarel’aggiornamento dei contenuti.

• Grafica omogenea e facilmente personalizzabile senza intervenire sulcodice.

• Amministrazione tramite Web browser.

• L’amministratore di un’istanza ha la possibilità di cambiare aspetto econtenuti di tutte le pagine del sito da lui gestito.

• Pagine conformi ai requisiti della legge sull’accessibilità, inoltre è pre-visto un foglio di stile adatto per la navigazione da parte di personeipovedenti.

• Protezione dei dati, infatti tutte le informazioni sono modificabili dal-l’utente che le ha inserite o dall’amministratore dell’istanza.

• Tutti i contenuti possono essere facilmente esportati in formati tabulari,CSV, XML, JSON.

• Tutte le form di inserimento dati si basano su uno schema comune alfine di facilitare l’utilizzo da parte di docenti e studenti.

• Utilizzo della Google maps API per la creazione di mappe interattiveutili per localizzare strutture, aule, laboratori.

• I siti di CampusNet prevedono l’uso di AJAX per creare pagine concontenuti ottenuti in modo asincrono mediante XMLHttpRequest.

8

Page 10: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.2 CampusNet Learning Management System

1.2.4 AutenticazionePer accedere a risorse private come materiale didattico o iscrizione agli esami,CampusNet prevede un’autenticazione; esistono quattro tipologie di utentiche possono accedere:

• Guest

• Studenti

• Docenti

• Ammministratore

L’autenticazione degli studenti e dei docenti avviene o mediante server re-moto LDAP o accesso federato CAS, quindi le credenziali sono le stesse perl’accesso alla Web mail.

La piattaforma consiste di trenta database relazionali gestiti dal kernelWODA (Web-Oriented-Database) attraverso dei file di definizione scritti inPerl. L’architettura di CampusNet garantisce un’elevata velocità di esecuzio-ne e questo rende facilmente la navigabilità con qualsiasi tipo di connessione.La grafica risulta accessibile con qualsiasi tipo di browser. La struttura mo-dulare del software permette una facile integrazione di CampusNet con altriservizi Web.

CampusNet facilita notevolmente anche il lavoro del Webmaster mettendoa disposizione una serie di strumenti avanzati per l’amministrazione del sito,la creazione di pagine Web e la gestione dei contenuti. Tutte le operazioni diamministrazione vengono interamente svolte attraverso Web browser.

9

Page 11: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.3 EasyCourse Learning Management System

1.3 EasyCourse

1.3.1 IntroduzioneLa seconda piattaforma utilizzata è EasyCourse http://easycourse.unipr.it/Orario/CdS_in_Matematica_e_Informatica/2014-2015/index.html,un sistema informatico per la gestione e la ottimizzazione degli orari dellelezioni. EasyCourse è capace di contemperare gli interessi di studenti e do-centi, restituendo un orario delle lezioni ottimizzato in funzione degli spazidisponibili e dei vincoli inseriti dall’amministratore.

1.3.2 Motivi dell’utilizzoLa scelta è ricaduta su EasyCourse in quanto la compilazione manuale degliorari produceva i seguenti problemi:

• Procedimento di pianificazione degli orari delle lezioni lungo e macchi-noso;

• Assenza di un procedimento automatico di controllo;

• Recupero difficoltoso delle richieste dei docenti;

• Incastro laborioso delle lezioni dello studente;

• Aule sovraffollate;

• Errore umano.

Dopo aver inserito tutti i vincoli e gli orari delle lezioni, l’algoritmo consi-dera tutti i dati e rispetto alle disponibilità delle aule restituisce il calendariodelle lezioni per ogni giorno della settimana. In figura 1.2 viene mostrata lapagina principale della piattaforma.

10

Page 12: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.3 EasyCourse Learning Management System

Figura 1.2: Homepage di EasyCourse

1.3.3 VantaggiIl vantaggio principale della piattaforma è la possibilità di raccogliere dati inmodo automatica, ovvero tutti i docenti accedono al proprio profilo onlineed esprimono le loro disponibilità temporali.I docenti possono esprimere preferenze del tipo:

• Fascia oraria;

• Giorni allocabili;

• Giorni di impossibilità;

• Giorni di sgradevolezza;

• Aule desiderate;

• Aule indifferenti;

• Aule non conforme;

• Aule sgradite.

11

Page 13: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.3 EasyCourse Learning Management System

Il docente fuori sede potrà scegliere di fare lezione giorni consecutivi e lafascia oraria di inizio per il primo giorno e la fascia oraria di fine per l’ultimogiorno. Successivamente è compito dell’amministratore scegliere se accettareo modificare le preferenze desiderate dai docenti.

Il secondo vantaggio di EasyCourse è rappresentato dal fatto che in fasedi calcolo il software è in grado di prendere in considerazione regole inseritedall’amministratore, ciascuna regola ha un peso, infatti l’algoritmo lavora suun’insieme di regole ponderandole in funzione del suddetto peso. Ogni rego-la può essere impostata come vincolo, ossia irrinunciabile nell’elaborazionedell’orario, oppure come obiettivo al quale può essere attribuito un livello diimportanza da 0 a 100. Una regola o un vincolo che riguardano le aule, idocenti, gli insegnamenti e le esigenze degli studenti vengono quindi presein carico dall’algoritmo di ottimizzazione elaborandole ed ottenendo comerisultato l’orario delle lezioni.

Il terzo vantaggio di EasyCourse è poter revisionare manualmente l’orarioin modo semplice attraverso pratiche funzioni di gestione e controlli automa-tici. Il livello di revisione degli orari prevede diverse funzionalità, per esempioè possibile visualizzare i conflitti per insegnamento di sovrapposizione, oppu-re le indisponibilità temporale dei docenti.

L’ultimo vantaggio importante della piattaforma è dato dalla possibilità dipubblicare l’orario sul Web in modo automatico, in modo tale da renderloaccessibile agli studenti e ai docenti, figura 1.3. Gli orari sono visualizza-bili e organizzati per categoria: specifici docenti, aule e percorso di studio.Cliccando su ogni cella è possibile visualizzare le informazioni del corso, peresempio: insegnamento, crediti, nome del docente, sede e capienza dell’aula.Mentre cliccando sul nome del docente è possibile visualizzare tutti i corsida egli sostenuti.

12

Page 14: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.3 EasyCourse Learning Management System

Figura 1.3: Tabella orario lezione

1.3.4 IntegrazioneEasyCourse è completamente integrabile con sistemi informatici per la gestio-ne dell’offerta didattica, come ESSE3 e SIADI http://www.cineca.it/it;è possibile accedere a tale piattaforma con le credenziali di Ateneo, poichépuò comunicare con: LDAP, CAS, SHIBBOLETH; inoltre può gestire la pre-notazione delle aule direttamente con: MRBS o EasyRoom. Una funzioneutile per gli studenti è Umemo, ovvero la possibilità di ricevere notifiche dellelezioni tramite SMS.

13

Page 15: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.4 ESSE3 Learning Management System

1.4 ESSE3

1.4.1 IntroduzioneESSE3 https://unipr.esse3.cineca.it/Home.do è il sistema informaticodi gestione della Didattica che offre a studenti e docenti un’area riservatadove gestire le proprie iscrizioni agli esami, la pubblicazione degli appelli,la gestione dei voti, il pagamento delle tasse, la partecipazione ad iniziativeorganizzate dall’Ateneo, ecc. ESSE3 è un gestionale studenti per le segreterieuniversitarie (servizi e segreteria studenti) nato per la gestione della riformauniversitaria italiana (D.M. 509) e per l’attuazione del Bologna Process inItalia. Permette di gestire la carriera dello studente e l’organizzazione del-l’Ateneo con un unico sistema informativo, una base dati coerente e accessiWeb per tutti gli utenti della didattica.

1.4.2 Scopo dell’utilizzoLo scopo principale è quello di fornire allo stesso tempo sia le funzionalitàrivolte all’amministrazione universitaria (segreteria studenti) per gestire tut-to il percorso di attraversamento dello studente, sia i servizi Web a valoreaggiunto rivolti al singolo studente. ESSE3 è quindi al tempo stesso in tuttele università che lo adottano il principale sistema di backoffice centrale aduso non solo delle segreterie studenti ma anche degli uffici che si occupano dialtri processi amministrativi legati alla gestione (presidenze, nuclei di valu-tazione, uffici tirocini e stage, uffici Erasmus, ecc..) e ma anche il sito Web diriferimento dei servizi studente in università spesso integrato con altri servizidel portale universitario o legati all’e-learning.

Le funzioni principali di ESSE3 sono suddivise in diverse aree:

• Area didattica:

– Gestione dell’offerta didattica per il controllo carriere;– Gestione della carriera dello studente;– Esami di profitto e certificazione titolo;– Area Amministrativa;– Gestione ammissioni;– Gestione studente in ingresso e in uscita.

• Area tasse:

– Gestione tasse per studente;

14

Page 16: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.4 ESSE3 Learning Management System

– Configurazione e operazioni massive;– Gestione diritto allo studio;– Chiusure contabili per la ragioneria.

• Area Post-Lauream:

– Gestione Esame di Stato;– Gestione Scuole di Specializzazione;– Gestione Dottorati di Ricerca;– Gestione stage e tirocini professionalizzanti.

Oltre a queste funzioni applicative il sistema fornisce alcuni servizi comuni,relativi a:

• Amministrazione del sistema;

• Funzioni di servizio;

• Statistiche e Reportistica generale.

É possibile notare in figura 1.4 le varie sezioni appena menzionate.

Figura 1.4: Homepage di ESSE3

15

Page 17: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.4 ESSE3 Learning Management System

1.4.3 Integrazione con altri sistemiLa Programmazione Didattica trasmette a ESSE3 oltre all’assetto globaledell’offerta formativa anche lo scadenzario del calendario accademico e lapianificazione degli appelli d’esame. L’attivazione del modulo Communityconsente, tramite un apposito gateway di comunicazione, l’integrazione conil mondo delle piattaforme e-learning, facilitando enormemente la gestionedell’iscrizione e dell’accesso ai corsi a distanza. Attraverso University Plan-ner, arricchisce i propri servizi Web dei dati relativi agli orari delle lezioni edella possibilità di consultare la disponibilità delle risorse.

L’integrazione di questo Modulo con U-GOV Risorse Umane garantiscel’allineamento della anagrafica dei docenti, con il dettaglio dei dati necessario.Fondamentale risulta anche l’integrazione con U-GOV Contabilità, legata atutta l’area finanziaria e di gestione delle tasse. Per quanto riguarda i modulidi U-GOV Pianificazione e Controllo, sono già disponibili report standard dianalisi sui flussi degli studenti e di monitoraggio delle performance degli stessi(esami di profitto, laurea, crediti acquisiti, etc).

ESSE3 consente ovviamente integrazioni con altri sistemi esterni quali:

• Sistemi MiUR: per tutti gli adempimenti necessari (Es: rilevazionistatistiche, Anagrafe Nazionale Studenti).

• Banche ed enti tesorieri: il sistema gestisce il flusso finanziario dei datirelativi ai pagamenti con banche o enti convenzionati con l’Università,compresa la modalità di pagamento on line.

• Enti Regionali per il diritto allo studio: gestisce il flusso di dati delgistudenti in uscita e in ingresso per determinare il criterio di assegna-zione delle borse di studio.

• Banche dati studenti laureati: Consorzio Almalurea e Vulcano.

• Gestionali studenti CINECA di altre università: per quanto riguardala gestione dei trasferimenti esiste un protocollo di scambio fra datiche facilità l’acquisizione/esportazione dei dati degli studenti trasferitifra un Ateneo e l’altro; per la verifica di autocertificazioni presentatedagli studenti presso pubbliche amministrazioni è attivabile l’adesionea E3Network.

• Sistemi per la gestione della mobilità internazionale: Move-on, Move-onnet (prodotti del partner Unisolution).

16

Page 18: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

1.4 ESSE3 Learning Management System

1.4.4 VantaggiESSE3 dispone di un’area Web sia per l’accesso pubblico che per l’interazio-ne diretta da parte di studente e docente, i principali attori della didattica,ma anche aziende e pubbliche amministrazioni. L’architettura permette unaportabilità multi-piattaforma dell’interfaccia, consentendo anche l’uso di po-stazioni remote (totem) e device portatili. Il servizio si configura come unvero e proprio portale della didattica che si compone di un’area pubblica,sulla quale ogni utente può liberamente consultare informazioni relative al-l’offerta didattica dell’Ateneo, ai test di ingresso di ammissione, agli appellie alle sessioni di laurea.

Dall’area pubblica ogni utente può effettuare una registrazione al portale,che dal punto di vista del sistema, significa prendere in carico una nuova per-sona nella fase di prescrizione-orientamento all’Ateneo. Dall’area registrato,il futuro studente può iscriversi ad un test di ammissione o immatricolarsi,iniziando l’iter della carriera come studente effettivo.

Una volta immatricolato, dall’area riservata studente, si può accedere allefunzionalità caratteristiche della gestione ordinaria del proprio iter universi-tario, sia dal punto di vista amministrativo che dal punto di vista didattico(pagamento tasse, iscrizione, piano di studi, prenotazione esami, ecc..). Pa-rallelamente anche il docente o in generale chi ha una parte nella gestionedella didattica ha un accesso privilegiato alla gestione della propria attività.Esiste dunque un’area docente, riservata ai docenti titolari e/o ai loro col-laboratori, da dove compilare il syllabus, il registro delle proprie attività, everbalizzare gli esami - anche con firma digitale.

1.4.5 UsabilitàIl modulo offre un’interfaccia client per le funzionalità di back-office (rivoltaessenzialmente al personale amministrativo interno) e un interfaccia Webper gli attori principali della didattica (studenti e docenti). Entrambe sonoampiamente customizzabili secondo le esigenze organizzative dell’Ateneo eprogettate secondo i criteri documentati di usabilità e accessibilità.

Le funzionalità gestionali di back office si avvalgono anche di strumentiper l’organizzazione del lavoro (task manager), per rendere più immediatol’utilizzo del software e ottimizzare la distribuzione del carico. Automatismiconfigurabili consentono anche la generazione automatica di alcuni task, sullabase del workflow impostato nel sistema.

17

Page 19: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Capitolo 2

Fonti Dati Utilizzate

In questo capitolo verranno descritte le pagine HTML che sono state utilizza-te per acquisire informazioni riguardo le varie piattaforme. Le informazionisono poi state usate per l’implementazione di alcune sezioni dell’applicazione,che verranno descritte poi nel capitolo seguente.

2.1 Pagine di CampusNet

2.1.1 Avvisi e newsNella homepage di CampusNet è possibile notare una tabella contenente gliavvisi importanti del corso di laurea, come: comunicazioni relative al corso,esiti degli esami o modifiche relative agli orari di lezione. Ogni avviso èidentificato dal titolo e dal docente che lo ha creato e cliccando su questo siviene reindirizzati alla pagina contenente la descrizione completa dell’avvisocon ulteriori precisazioni.

Figura 2.1: Elenco degli avvisi in CampusNet

18

Page 20: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.1 Pagine di CampusNet Fonti Dati Utilizzate

La figura 2.1 riporta un esempio di avvisi probabili della homepage diCampusNet. Volendo ottenere informazioni in modo dinamico, si è scelto diricavare tali dati attraverso la lettura della pagina sorgente HTML, inoltretale tecnica è stata utilizzata per tutte le pagine delle piattaforme, descrittein questo capitolo.Prendendo il primo avviso come riferimento, possiamo notare l’HTML, ge-nerato dalla piattaforma.<DIV CLASS=HOME-AVVISI_DC >

<TABLE CLASS=AVVISI-FORMAT-3 BORDER=0 CELLSPACING=2CELLPADDING=2 WIDTH= "100">

<TH CLASS=AVVISI-FORMAT-3 ALIGN=LEFT COLSPAN=2 ><B> Avvisi </B></TH>

<TD CLASS=AVVISI-FORMAT-3 ><TR><A HREF="http: // informatica.unipr.it / cgi-bin /

campusnet / avvisi.pl /Show?_id=9a9a;sort=U1;search= %7 btipologia %7d %20%21%7e%20m%2 fprimopiano %2fi %20 and %20%7 bdata %7d%20 ge%20%272015%2 f05 %2 f21 %27; hits=3 ">

Recupero lezioni di Intelligenza Artificiale</A>

<BR>Dott. Federico Bergenti </TD></TR>...</TABLE >

</DIV>

19

Page 21: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.1 Pagine di CampusNet Fonti Dati Utilizzate

Le informazioni relative agli avvisi e alle news, sono racchiuse in una se-zione della pagina web, separate dal resto delle aree della pagina, pertantoè risultato molto semplice focalizzarsi su questa porzione di codice in quan-to caratterizzata dai tag <DIV> . . .</DIV>. Lo scopo dei DIV è quellodi fungere da semplici contenitori il cui aspetto, dimensione, posizione efunzione sono definiti, dal designer della pagina web. Gli avvisi vengonostrutturati all’interno di una tabella, infatti ogni avviso/news è racchiuso daltag <TR>. . .</TR> il quale identifica ogni singola riga della tabella. Nel<DIV> in questione è assegnato un attributo classe, questo ha permesso diaccedere alle informazioni della sezione. Il metodo usato per l’estrapolazionedei dati verrà descritto nel capitolo seguente. Le informazioni raccolte peridentificare ogni singolo avviso/news sono:

• Titolo: posto sempre nel tag <A>. . .</A> infatti nell’avviso in que-stione possiamo rilevare il titolo dalla seguente riga: <A Recuperolezioni di Intelligenza Artificiale</A>;

• Link: posto sempre come attributo HREF del tag <A HREF=link>;

• Autore: posto tra il tag <BR> e </TD>.

20

Page 22: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.1 Pagine di CampusNet Fonti Dati Utilizzate

2.1.2 DocentiNella sezione docenti della piattaforma è possibile ottenere la lista di tuttii docenti che fanno parte del corso di laurea di informatica. Cliccando suognuno di essi è possibile avere ulteriori precisazioni come: nome, indiriz-zo, contatti, ruolo, orario di ricevimento studenti e interessi. La figura 2.2ripropone la pagina in descrizione.

Figura 2.2: Elenco dei docenti

21

Page 23: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.1 Pagine di CampusNet Fonti Dati Utilizzate

Analizzando il sorgente della pagina in figura 2.2, è possibile notare chela lista dei docenti è strutturata in una tabella, ogni riga a sua volta ècaratterizzata da: un’immagine, il nome completo del docente e la mail.<DIV ID=" searchFromTo " CLASS=SEARCH-FROMTO ><H3>Da 1 a 17

di 17</H3></DIV><TABLE CLASS=DOCENTI-FORMAT-DEFAULT BORDER=0

CELLSPACING=2 CELLPADDING=2 WIDHT= "100">...

<TR><TD>

<A HREF="/ cgi-bin / campusnet / docenti.pl /Show?_id=bergenti;sort=DEFAULT;search=;hits=17 "style= " color: #000000; text-decoration:none; ">

<B> Bergenti Dott. Federico </B></A>

</TD></TR>

...</TABLE >

</DIV>

Questa porzione di codice mostra una singola riga della tabella, notiamo ap-punto che il tutto è contenuto in un <DIV>, dove all’interno viene stanziatala tabella contenente tutti i docenti del corso di laurea. La tabella ha comeattributo CLASS=DOCENTI-FORMAT-DEFAULT, questo ha permesso alparse di focalizzarsi solamente sulle informazioni contenute tra i tag <TA-BLE> . . .</TABLE>.I dati utili per identificare ogni singolo docente sono:

• Nome: posto sempre nel tag <B>. . .</B>;

• Link: posto sempre come attributo HREF del tag <A HREF=link>.

22

Page 24: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.1 Pagine di CampusNet Fonti Dati Utilizzate

2.1.3 CorsiNella sezione corsi di CampusNet vengono gestiti tutti i dati relativi ai corsidi insegnamento disponibili per il corso di laurea di informatica. Per ogniinsegnamento è possibile visualizzare: nome, tipologia, crediti, obiettivi for-mativi, programma, testi consigliati, ecc. La figura 2.3 riporta i primi trecorsi disponibili.

Figura 2.3: Elenco di alcuni corsi di CampusNet

Analizzando il sorgente della pagina in figura 2.3, è possibile notare chela lista dei corsi è strutturata in una tabella, ogni riga a sua volta è ca-ratterizzata da un’ulteriore tabella che specifica il singolo corso e contiene:un’immagine, il nome completo del corso, anno accademico, classe del corsodi studi e docente.<DIV ID=" searchFromTo " CLASS=SEARCH-FROMTO ><H3>Da 1 a 26

di 26</H3></DIV><TABLE CLASS=CORSI-FORMAT-DEFAULT BORDER=0

CELLSPACING=0 CELLPADDING=1 width= "100%"><TR><TD CLASS=CORSI-FORMAT-DEFAULT WIDTH= "99%"

VALIGN=TOP ><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1 width= "

100%"><TR><TD CLASS=CORSI-FORMAT-DEFAULT >

<A HREF="/ cgi-bin / campusnet / corsi.pl /Show?_id=ead6;sort=DEFAULT;search= %20%7 baa %7d%20%3d%3d %20%222014%2 d2015 %22%20; hits=26 ">

<B> Algebra e Geometria </B></A> </TD></TR><TR><TD CLASS=CORSI-FORMAT-DEFAULT >Anno accademico:

2014/2015 </TD></TR><TR><TD CLASS=CORSI-FORMAT-DEFAULT >Corso di studi

in: L31 Informatica </TD></TR>

23

Page 25: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.1 Pagine di CampusNet Fonti Dati Utilizzate

<TR><TD CLASS=CORSI-FORMAT-DEFAULT > Docente:<A HREF="/ cgi-bin / campusnet / docenti.pl /Show?

_id=alessandrini " onmouseover= " ShowContactInfo(’ alessandrini ’)" onmouseout= "UnTip ()">Prof.Lucia Alessandrini </A>

</TABLE >...

</TABLE ></DIV>

Anche in questo caso i dati sono ben strutturati secondo una tabella princi-pale contenente tante sotto tabelle quante il numero di corsi disponibili sullapagina. Nell’esempio in questione possiamo notare la tabella principale aven-te come attributo CLASS=CORSI-FORMAT-DEFAULT e una sotto tabellacomposta da quattro righe, formate da:

• Nome del corso: contenuto nella prima riga posto tra i tag <B>. . .</B>;

• Anno accademico: seconda riga, quindi tra i tag <TR> . . .</TR>che identificano la creazione di una nuova riga;

• Corso di appartenenza: anch’esso posto tra i tag <TR> . . .</TR>come terza riga;

• Docente: come ultima riga della tabella posto tra i tag<A> . . .</A>.

Quindi presi in sequenza queste informazioni, poiché fisse per ogni singolocorso, si è riusciti a creare un oggetto con appunto quattro attributi percontenere i singoli dati per ogni corso.

24

Page 26: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.2 Pagine di ESSE3 Fonti Dati Utilizzate

2.2 Pagine di ESSE3

2.2.1 Bacheca Appelli d’esameLa bacheca appelli d’esame su ESSE3 consente di accedere in sola consul-tazione alle informazioni sugli appelli d’esame disponibili per tutte i corsidi studio dell’Università di Parma, infatti prima di avviare la ricerca è in-dispensabile impostare il dipartimento e il corso di studio di appartenenza.La figura 2.4 mostra alcuni degli appelli del dipartimento di matematica einformatica per il corso di studio di informatica.

Figura 2.4: Elenco di alcuni appelli di ESSE3

Le informazioni risultanti dalla ricerca sono:

• Nome appello;

• Periodo iscrizioni;

• Data e ora della prova;

• Tipo appello che può essere scritto o orale;

• Tipo prova poiché una prova può essere finale o parziale;

• Docenti che fanno parte della commissione;

• Numero iscritti all’appello.

Esaminando il sorgente della pagina Web in figura 2.4 possiamo notare lastruttura scelta dalla piattaforma per organizzare i tali dati.

25

Page 27: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.2 Pagine di ESSE3 Fonti Dati Utilizzate

<TD ID="" WIDTH= "" VALIGN= "TOP" COLSPAN= "" STYLE= ""ROWSPAN= "" CLASS= " DETAIL_TABLE ">

[06149] INTELLIGENZA ARTIFICIALE </TD><TD ID="" WIDTH= "" VALIGN= "TOP" COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

02/06/2015 - 14/06/2015 </TD><TD ID="" WIDTH= "" VALIGN= "TOP" COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

<A CLASS= " DETAIL_TABLE " TITLE= "" HREF="DETTAGLIOTURNOOFFERTA.DO ">

17/06/2015 - 09:00 </A></TD><TD ID="" WIDTH= "" VALIGN= "TOP" COLSPAN= "" STYLE= ""

ROWSPAN= "" CLASS= " DETAIL_TABLE ">SCRITTO </TD>

<TD ID="" WIDTH= "" VALIGN= "" COLSPAN= "" STYLE= ""ROWSPAN= "" CLASS= " DETAIL_TABLE ">

PROVA FINALE </TD><TD ID="" WIDTH= "" VALIGN= "" COLSPAN= "" STYLE= ""

ROWSPAN= "" CLASS= " DETAIL_TABLE "><TABLE BORDER= "0" CELLSPACING= "0" CELLPADDING= "0">

<TR CLASS= " DETAIL_TABLE "><TD VALIGN= "TOP">

BERGENTI FEDERICO </TD></TR><TR CLASS= " DETAIL_TABLE "><TD VALIGN= "TOP">

DAL PALU ’ ALESSANDRO </TD></TR>

</TABLE ></TD><TD ID="" WIDTH= "" VALIGN= "TOP" COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

0</TD></TR>

Si può notare dal frammento di codice la diversità della composizione scel-ta da ESSE3 rispetto le altre piattaforme, per esempio CampusNet mettea disposizione la singola struttura che per la maggior parte delle volte èuna tabella contenuta in un <DIV> separatore, con un singolo attributoCLASS per identificare un gruppo particolare di elementi. Mentre ESSE3

26

Page 28: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.2 Pagine di ESSE3 Fonti Dati Utilizzate

contiene tutti gli appelli disponibili in una singola tabella dove per ogni rigavengono incolonnate le informazioni precedentemente descritte riguardanteil singolo appello. Infatti possiamo notare i dati importanti posti tra i tag<TD> . . .</TD> tutti avente un attributo CLASS=DETAIL_TABLE perspecificare il gruppo e le proprietà che gli elementi devono avere. Grazie al-l’attributo CLASS siamo riusciti ad ottenere l’insieme delle informazioni perogni singola riga che identifica il singolo appello, prendendo come esempio laparte di codice descritta precedentemente, le informazioni chiave sono:

• Nome appello posto come prima colonna quindi tra i tag <TD>. . .</TD>;

• Periodo iscrizione posto in seconda colonna tra i tag<TD> . . .</TD>;

• Data e ora posto come terza colonna tra i tag <A> . . .</A>;

• Tipo appello posto come quarta colonna tra i tag <TD> . . .</TD>;

• Tipo prova posto come quinta colonna tra i tag <TD> . . .</TD>;

• Docenti posto nella sotto tabella tra i tag <TD>. . .</TD>;

• Numero iscritti posto come ultima colonna tra i tag<TD> . . .</TD>della tabella principale.

Presi questi dati in sequenza si è riusciti a costruire un oggetto appello perpoterlo utilizzare poi nell’applicazione in modo da costruire lo stesso elencodegli appelli.

27

Page 29: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.2 Pagine di ESSE3 Fonti Dati Utilizzate

2.2.2 Carriera universitariaTramite la piattaforma ESSE3 è possibile visualizzare la propria carrierauniversitaria, l’elenco completo degli esami sostenuti che sono stati registratiin segreteria, con il voto, la data e i CFU acquisiti, ma questo solo dopoaver fatto l’accesso utilizzando le proprie credenziali di ateneo. La figura 2.5mostra alcuni dei miei esami sostenuti.

Figura 2.5: Elenco di alcuni esami di ESSE3

Esaminando la figura, si può notare che la lista degli esami sostenuti ècostituita da una tabella, dove a ogni riga corrisponde un singolo esame edè caratterizzata da:

• Anno di corso;

• Codice e nome dell’insegnamento;

• Peso in CFU;

• Stato dell’esame (frequentato o sostenuto);

• Anno di frequenza;

• Voto e data di verbalizzazione.

La parte di codice che verrà riportata identifica la riga dell’esame di analisimatematica, questo per poter studiare la struttura scelta dalla piattaformaper la esposizione dei dati. Come si può notare segue le stesse line guida dellapagina bacheca degli appelli d’esame descritta nella sezione 2.2.1 di questocapitolo. Infatti la disposizione è identica, una singola tabella contenente lalista degli esami sostenuti, in ogni riga viene descritto un singolo esame conle caratteristiche appena descritte.

28

Page 30: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

2.2 Pagine di ESSE3 Fonti Dati Utilizzate

<TR><TD ID="" WIDTH= "" VALIGN= " CENTER " COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

1</TD><TD ID="" WIDTH= "" VALIGN= " CENTER " COLSPAN= "" STYLE= "

BORDER-RIGHT: 0PX NONE TRASPARENT; " ROWSPAN= ""CLASS= " DETAIL_TABLE_MIDDLE ">

<A HREF="AUTH/ STUDENTE / LIBRETTO / LIBRETTOADSCELTA.DO ?ADSCE_ID=7160219 & AMP;LREG_ID= ">

00013 - ANALISI MATEMATICA </A></TD><TD ID="" WIDTH= "" VALIGN= " CENTER " COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

9</TD><TD ID="" WIDTH= "" VALIGN= " CENTER " COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

2011/2012 </TD><TD ID="" WIDTH= "" VALIGN= " CENTER " COLSPAN= "" STYLE= "

TEXT-ALIGN:CENTER; " ROWSPAN= "" CLASS= " DETAIL_TABLE">

28& NBSP;- & NBSP;23 /07/2013 </TD></TR>

Il codice riportato mostra il contenuto della riga che identifica l’esamedi analisi matematica all’interno della tabella, infatti possiamo notare le ca-ratteristiche poste tra i tag <TD> . . .</TD>. Seguendo il codice in modosequenziale troviamo: l’anno del corso, nome dell’insegnamento, CFU dell’e-same, l’anno di frequenza e il voto e la data di verbalizzazione. Avendo questastruttura fissa è risultato molto semplice estrapolare e salvare queste infor-mazioni dalla pagina per poi poterle utilizzare nell’applicazione sviluppatadescritta nel capitolo seguente.

29

Page 31: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Capitolo 3

Implementazione eFunzionamento

In questo capitolo verranno descritti tutti i processi per lo sviluppo di ognisingola sezione dell’applicazione partendo dagli strumenti e le librerie utiliz-zate.

3.1 Strumenti utilizzatiPrima di entrare nei dettagli implementativi è bene mostrare i componentinecessari per lo sviluppo dell’applicazione.

3.1.1 Android SDKAndroid SDK (Software Development Kit) è un pacchetto di sviluppo perapplicazioni che contiene un set completo di API (Application ProgrammingInterface), librerie e strumenti di sviluppo utili a compilare, testare e debug-gare applicazioni per Android. I linguaggi di programmazione alla base dellamaggior parte delle applicazioni studiate per Android sono Java e C/C++.Con l’SDK, scaricabile dal sito ufficiale https://developer.android.com/sdk/index.html, sarà quindi possibile disporre sul proprio PC di un’inter-faccia in grado di lanciare e modificare le applicazioni Android. É anche pos-sibile ottenere i driver necessari per interfacciare il nostro dispositivo al pc,per poter compilare ed eseguire l’applicazione direttamente sullo smartphonesenza dover usare l’emulatore dell’SDK.

30

Page 32: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.1 Strumenti utilizzati Implementazione e Funzionamento

3.1.2 Android StudioAndroid Studio è l’ambiente di sviluppo integrato ufficiale firmato Google,basato su IntelliJ IDEA https://www.jetbrains.com/idea/, per sviluppa-re su piattaforma Android, liberamente disponibile per Windows, Mac OSX e Linux, sotto licenza Apache 2.0 al sito https://developer.android.com/sdk/index.html. Un editor intelligente capace di offrire: completamen-to avanzato del codice, refactoring, e analisi; grazie a queste caratteristicherendono lo sviluppatore più produttivo e veloce nel completamento dell’ap-plicazione. La figura 3.1 mostra la schermata di progettazione di AndroidStudio.

Figura 3.1: Schermata di sviluppo di Android Studio

Una delle caratteristiche principali è la possibilità di avviare nuovi pro-getti utilizzando template messi a disposizione da Android Studio. Inoltreè possibile configurarlo con GitHub https://github.com/ in modo da im-portare codice dal canale di Google oppure esportare e rendere pubblico ilproprio progetto. Con Android Studio risulta molto semplice sviluppare ap-plicazioni multi-schermo (smartphone Android, tablet, Android Wear, TVAndroid, Android Auto e Google Glass) poiché è integrato un modulo capa-ce di facilitare la gestione delle risorse e delle risoluzioni come si può notaredalla figura 3.2. Infatti ad ogni esecuzione/debug dell’applicazione è possibilescegliere il profilo del dispositivo Android da emulare tra quelli più comuni.

31

Page 33: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.1 Strumenti utilizzati Implementazione e Funzionamento

Figura 3.2: Multi-schermo Android Studio

Uno dei punti di forza di Android Studio è la possibilità di creare APKmultipli dell’applicazione con caratteristiche magari differenti specificate nelfile build.gradle del progetto. Entrando nel dettaglio Gradle è un soft-ware per l’automazione dello sviluppo fondato sulle idee di Apache Ante Apache Maven, che introduce un Domain-Specific Language (DSL) ba-sato su Groovy, al posto della più tradizionale modalità XML usata perdichiarare la configurazione del progetto. Gradle https://gradle.org/getting-started-android/ è stato progettato per sviluppi multi-progettoche possono crescere fino a divenire abbastanza grandi e supporta sviluppiincrementali determinando in modo intelligente quali parti del build tree sonoaggiornate (up-to-date), in modo che tutti i processi che dipendono solo daquelle parti non avranno bisogno di essere ri-eseguiti; così facendo, il softwareriduce significativamente il tempo di costruzione del progetto, in quanto, du-rante il nuovo tentativo di costruzione, verranno eseguite solo le attività ilcui codice è effettivamente stato alterato a partire dall’ultima costruzionecompletata. Gradle supporta anche la costruzione del progetto per processiconcorrenti, il che consente di svolgere alcuni compiti durante la costruzione(ad esempio, i test automatizzati attraverso gli unit test), eseguiti in parallelosu più core della medesima CPU, su più CPU o su più computer.

32

Page 34: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

3.2 Libreria Jsoup

3.2.1 IntroduzioneJsoup http://jsoup.org/ è una potente libreria Java di parsing HTM-L/XML le cui API consentono di estrarre dati e manipolare in manieraestremamente semplice documenti sfruttando le potenzialità di DOM, CSSe metodi di accesso simili a quelli offerti da JQuery. Jsoup è un progettoopen source sviluppato da Jonathan Hedley e distribuito sotto liberale licen-za MIT.La libreria attualmente è in grado di fornire tali servizi:

• Caricare pagine HTML da un URL, un file o una stringa;

• Trovare ed estrarre i dati utilizzando un attraversamento DOM o deiselettori CSS;

• Manipolare elementi HTML come attributi e testo;

• Ricevere l’output con una struttura ben ordinata;

• Organizzare i dati in una white-list sicura, per prevenire attacchi XSS.

Jsoup è stato progettato per analizzare tutte le varianti di HTML presentinella rete, poiché l’analizzatore crea per ogni pagina un albero di analisisensibile.

3.2.2 Caricare documentiJsoup come già menzionato permette di effettuare facilmente il parsing diuna pagina HTML fornita come stringa, da file o direttamente come URL.In Jsoup un documento XML è rappresentato dalla classe Document, i nodidel documento da istanze della classe Node e i tag da istanze della classeElement.Volendo effettuare il parsing a partire da una stringa, si utilizza il seguentemetodo statico:

String html = "<html><head><title>First parse</title></head>"+ "<body><p>Parsed HTML into a doc.</p></body></html>";

Document doc = Jsoup.parse(html, "http://example.com/");

33

Page 35: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

Il metodo parse(String html, String baseUri) crea un nuovo Document conil codice HTML di ingresso. L’argomento baseUri viene utilizzato per ri-solvere URL relativi in URL assoluti, e deve essere impostato con l’URLin cui il documento è stato prelevato. É possibile utilizzare il metodo dibase parse(String html) quando si conosce il codice HTML. Una volta chesi è ottenuto un Document, è possibile estrarre i dati utilizzando i metodiappropriati della classe Document e delle sue super classi Element e Node.

Se invece si desidera ottenere il documento HTML direttamente dall’URLsi utilizza il metodo connect della classe Jsoup:

Document doc = Jsoup.connect("http://example.com/").get();

Il metodo connect(String url) crea una nuova connessione e get() recupera eanalizza la pagina HTML. Se dovesse verificarsi un errore durante il recupero,viene lanciata un’eccezione della classe IOException, il quale può essere ge-stita. L’interfaccia di collegamento è stata progettata per poter concatenaree costruire specifiche richieste, come ad esempio:

Documento doc = Jsoup.connect ("http://example.com").data ("query", "Java").userAgent ("Mozilla").cookie ("auth", "token").timeout (3000).post ();

Per lo sviluppo dell’applicazione è stato utilizzato principalmente questo me-todo poiché per la piattaforma ESSE3 le richieste erano di tipo POST, adifferenza delle richieste GET di CampusNet.

L’ultimo modo possibile per ottenere il documento è la lettura del codiceHTML contenuto in un file attraverso il metodo statico della classe Jsoup:

File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

Il metodo parse(file in, String charsetName, String baseUri) carica e analizzaun file contenente codice HTML. Se si verifica un errore durante il carica-mento del file, esso genera un IOException, che si dovrebbe gestire in modoappropriato.

34

Page 36: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

3.2.3 Estrazione e manipolazione datiPrima di procedere a spiegare i metodi della classe Document è opportunoripetere alcuni concetti fondamentali. L’oggetto Document contiene tutti glielementi della pagina Web, disposti in un albero mantenendone la strutturagerarchica originaria. Il contenuto delle pagine Web consiste in un documentoHTML contenente una struttura ad albero annidato di elementi, definiti damarcatori detti tag, un esempio di struttura HTML è rappresentata in figura3.3.

Figura 3.3: Esempio di struttura documento HTML

Il documento HTML contiene un tag di apertura, uno o più attributi ditale elemento con i rispettivi valori (che possono definirne colore, stile, po-sizione, etc), il contenuto informativo (che può essere una stringa di testo ouna struttura di altri elementi) e infine un tag di chiusura. Un documentocomincia con la definizione del tipo di pagina, la quale segnala al browser lespecifiche HTML utilizzate, che permettono l’identificazione delle regole diinterpretazione per visualizzare correttamente la pagina. Segue poi la strut-tura degli elementi che compongono la pagina, compresa tra i tag <HTML>. . .</HTML>, suddivisa in due sezioni principali:

• Header è l’intestazione contenente alcune informazioni di controllosolitamente non visualizzabili.

• Body è il corpo del documento che contiene la parte informativa, cioèla vera e propria pagina che sarà visualizzata dal browser.

35

Page 37: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

Una volta caricato il Document è possibile stanziare l’oggetto di tipo Element,il fulcro centrale della libreria, poiché grazie ad esso è possibile rappresentareun elemento (tag) ben specifico della pagina HTML con relativa sottostrut-tura. Quindi a partire da esso è possibile estrarre dati ed attraversare il grafodei nodi. Document è sottoclasse di Element con alcuni metodi specifici perla radice di una pagina HTML, tra cui un metodo per ottenere il titolo e duemetodi per ottenere l’Element di header o del body della pagina. Ricordandoche un Document altro non è che l’Element radice di tutto l’albero.Il codice che viene riportato utilizza il metodo di attraversamento DOM:

File input = new File ("/tmp/input.html");Document doc = Jsoup.parse (input,"UTF-8","http://example.com/");

Element content = doc.getElementById("content");Elements links = content.getElementsByTag("a");for( Element link : links ){

String linkHref = link.attr("href");String linkText = link.text();

}

Il tipo Elements fornisce un range di metodi tipo DOM per cercare elementie estrae e manipola i loro dati. I metodi get sono contestuali, chiamati su unnodo genitore Document cerca gli elementi corrispondenti in quel documento;mentre chiamate su un nodo figlio cerca gli elementi a partire da quel nodo.In questo modo è possibile cercare i dati che si vogliono utilizzare, vediamoora i metodi applicabili su un oggetto Element per cercare i dati:

• getElementById(String id) individua l’elemento con l’id indicato.L’id è un semplice attributo che deve però assumere per ogni elementoun valore univoco in tutto il documento HTML.

• getElementsByTag(String tag) restituisce gli elementi di un certotipo, ovvero quelli con il tag di apertura coincidente a quello da noipassato nella stringa tag.

• getElementsByClass(String className) restituisce gli elementicon l’attributo class che assume il valore specificato.

• getElementsByAttribute(String key) restituisce gli elementi checontengono un attributo così denominato. Esistono inoltre metodi as-sociati che permettono di trovare elementi con attributi che iniziano,

36

Page 38: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

terminano o contengono la stringa desiderata; similmente esistono me-todi che permettono di individuare elementi con attributi che assumonoun valore desiderato (o soddisfano una certa espressione).

I metodi forniti dalla libreria per attraversare la struttura, sono:

• siblingElements() restituisce tutti i nodi dell’elemento allo stessolivello dell’albero;

• firstElementSibling() restituisce il primo figlio del nodo;

• lastElementSibling() restituisce l’ultimo figlio del nodo;

• nextElementSibling() restituisce il prossimo figlio;

• previousElementSibling() restituisce il figlio precedente;

• parent() restituisce il nodo genitore;

• parents() restituisce il nodo genitore e tutti gli ascendenti fino allaradice del documento compresi;

• children() restituisce tutti i nodi figli;

• child(int index) restituisce il nodo figlio con l’indice indicato dalparametro index.

Un metodo alternativo più potente per trovare elementi consiste nell’usodei selettori. I selettori permettono di selezionare e manipolare gli elementiHTML. Gli elementi possono essere identificati attraverso l’id, la classe, gliattributi, i valori degli attributi e altro ancora. In Jsoup la sintassi deiselettori è quella utilizzata da CSS e jQuery. La porzione di codice proponela ricerca con i selettori:

File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

Elements links = doc.select("a[href]");Element masthead = doc.select("div.masthead").first();Elements resultLinks = doc.select("h3.r > a");

I selettori possono essere chiamati su oggetti di tipo: Document, Elemento Elements. Pertanto sono contestuali, quindi è possibile filtrare scegliendoun elemento specifico oppure una catena di selettori; la selezione restituisce

37

Page 39: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

un elenco contenuto nell’oggetto chiamante Elements, il quale fornisce unaserie di metodi per estrarre e manipolare i risultati.I selettori principali sono:

• tagname trova gli elementi per tag;

• #id trova gli elementi per id;

• .class trova gli elementi per classe;

• [attr] elementi con nome dell’attributo coincidente;

• [∧ attr] elementi con nome dell’attributo con tale prefisso;

• [attr=value] elementi con attributo che assume il valore dato;

• [attr∧ = value], [attr$ = value], [attr*= value] elementi con valoredell’attributo che inizia per, finisce o contiene la stringa data;

I selettori possono essere combinati tra di loro, ad esempio:

• el# id elementi con ID, esempio div# logo;

• el.class elementi con classe class, esempio div.masthead;

• el[attr] elementi con attributo attr, esempio a[href];

• ancestor child trova gli elementi child discendenti dall’elemento an-cestor;

• parent > child elementi child con genitore diretto parent;

• siblingA + siblingB trova gli elementi siblingB con fratello imme-diatamente precedente siblingA;

• siblingA ∼ siblingX cerca gli elementi siblingX precedente a siblingA,esempio h1 ∼ p;

• el, el, el gruppo multiplo di selettori, cerca un unico elemento equiva-lente con i risultati di tutti i selettori, esempio div.logo.

Tutti i selettori possono essere combinati tra loro, da qui la loro potenza ri-spetto ai singoli metodi visti precedentemente, vediamo ora alcuni esempi sucodice HTML posto nel capitolo precedente. Per ottenere gli avvisi dalla pa-gina http://informatica.unipr.it/cgi-bin/campusnet/avvisi.pl, si èusato la combinazione di più selettori, ovvero: td.AVVISI-FORMAT-3 a

38

Page 40: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

poiché le informazioni che si vogliono ottenere sono poste tra i tag <A>. . .</A> nelle colonne della tabella (<TD> . . .</TD>) di classe=.AVVISI-FORMAT-3.

Esistono infine alcuni pseudo selettori che permettono di trovare elementiche contengono o non contengono elementi che soddisfano un certo selettore,o che corrispondono ad una espressione regolare:

• :lt(n) cerca gli elementi figli il cui indice è inferiore rispetto a n (cioèla sua posizione nell’albero DOM rispetto al suo genitore);

• :gt(n) cerca gli elementi figli il cui indice è maggiore rispetto a n;

• :eq(n) cerca gli elementi figli il cui indice è uguale a n;

• :has(seletor) cerca gli elementi che contengono elementi corrispon-denti del selettore, esempio div:has(p);

• :not(selector) cerca gli elementi che non coincidono con il selettore;

• :contains(text) cerca gli elementi che contengono il testo dato;

• :containsOwn(text) cerca gli elementi che contengono direttamenteil testo dato;

• :matches(regex) cerca gli elementi il cui testo corrisponde all’espres-sione regolare specificata;

• :matchesOwn(regex) cerca gli elementi il cui testo proprio corrispon-de all’espressione regolare specificata.

I selettori si applicano utilizzando il metodo select(String cssQuery) dellaclasse Element. Il metodo, come tutti gli altri metodi visti inizialmente,restituisce la lista di elementi come un oggetto di tipo Elements, implemen-tazione dell’interfaccia List di Java. Per estrarre dati da un oggetto Elementsi utilizzano i seguenti metodi principali:

• text() restituisce il testo puro contenuto tra tag di apertura e tag dichiusura;

• attr(String name) restituisce il valore dell’attributo name;

• html() restituisce il codice HTML racchiuso tra tag di apertura echiusura;

• outerHtml() restituisce il codice HTML esterno di definizione dell’e-lemento;

39

Page 41: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.2 Libreria Jsoup Implementazione e Funzionamento

Esistono infine metodi che consentono di aggiungere, modificare ed eliminareattributi dell’elemento e metodi che permettono di modificare l’albero stesso,aggiungere o rimuovendo elementi secondo la parentela desiderata. Questoconsente, se desiderato, di usare Jsoup per modificare o persino creare dazero un documento HTML in modo procedurale con una chiara gerarchia.

É possibile testare direttamente la libreria, semplicemente collegandosi alsito http://try.jsoup.org/ e incollare il codice HTML della pagina che sivuole effettuare il parse, oppure inserendo il link, a questo punto si possonoapplicare le diverse combinazioni di più selettori per ottenere le informazioniricercate.

40

Page 42: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

3.3 Architettura dell’applicazioneCome già accennato, l’obiettivo è stato quello di progettare e realizzare unApplicazione per gli studenti del corso di Informatica capace di offrire infor-mazioni importanti in tempo reale: avvisi, news, docenti, corsi, appelli e lapropria carriera. Prima di passare alla parte implementativa sarebbe megliochiarire l’architettura che si è scelto di utilizzare per poter realizzare taleprogetto.

Il pattern architetturale usato è il Model-View-Controller (MVC) uno deipiù diffusi nella programmazione object oriented e nello sviluppo di interfaccegrafiche in quanto rappresenta uno dei concetti fondamentali della program-mazione ad oggetti e permette di strutturare l’applicazione in maniera moltoefficiente. Aumenta la coesione del nostro sistema software, in quanto ognisingolo oggetto può ricoprire solo uno dei seguenti ruoli: modello, vista o con-trollore. Infatti ogni classe del progetto viene mirata a compiti ben specifici,inoltre questi ruoli rappresentano una sorta di classificazione dell’oggetto chestiamo utilizzando che risultano dunque essere elementi logicamente separatiai quali però è consentita, ovviamente, una stretta comunicazione. Il graficoin figura 3.4 illustra lo schema del design pattern utilizzato.

Figura 3.4: Schema design pattern MVC

Il pattern non solo stabilisce che ruolo deve avere un determinato oggettoall’interno dell’applicazione, ma anche il modo in cui gli oggetti comunicanotra di loro. Analizzando la struttura in figura 3.4 andiamo ad approfondirei tipi di oggetti che il pattern definisce:

• Model: contiene i dati specifici dell’applicazione e si occupa di definiretutte le varie procedure che effettuano la manipolazione dei dati stessi,in lettura e scrittura. Il modello non può avere connessione diretta conun oggetto di tipo view, in quanto ha il compito di gestire i dati chenon devono essere legati ad un particolare tipo di visualizzazione.

41

Page 43: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

• View: il ruolo della vista è quello di presentare all’utente i dati conte-nuti all’interno di un modello. Concettualmente il modello è un oggettonon concreto, mentre la vista è un oggetto concreto e con il quale l’u-tente può interagire. La vista è dunque una realizzazione di un oggettonon concreto e mette a disposizione un’interfaccia per la modifica deidati contenuti nel modello. L’oggetto di tipo vista non deve avere unriferimento esplicito ad un oggetto di tipo modello e quindi a questopunto viene usato l’oggetto controllore.

• Controller: svolge la funzione di intermediario tra oggetti di tipo vistaed oggetti di tipo modello. Un singolo controllore può avere un numerodi relazioni arbitrarie tra oggetti di tipo modello e vista, che possonoessere relazioni uno ad uno o molti a molti. Il controllore si occupa diinizializzare la vista con i dati contenenti nel modello e informare allavista le modifiche dei dati subite dall’utente.

3.3.1 ViewL’interfaccia utente è stata progetta-

Figura 3.5: Schermata principale

ta seguendo un semplice layout che ren-de intuitivo l’utilizzo, il menu principalepermette la navigazione all’interno del-l’applicazione. Utilizzando il GridLayoutcome impaginazione della vista, è statopossibile disporre bottoni e i relativi testial centro della pagina, in una griglia for-mata da quattro righe e tre colonne. Infigura 3.5 viene mostrata l’activity prin-cipale che si accede all’apertura dell’ap-plicazione; composta da una griglia di seibottoni allineati, uno per ogni funziona-lità implementata, che sono: news, avvi-si, docenti, corsi, appelli e carriera. L’u-tente toccando l’icona relativa alla sezio-ne nella quale desidera accedere, entre-rà in una vista secondaria contenente leinformazioni desiderate.

42

Page 44: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

L’implementazione del layout di questa activity è avvenuta tramite codiceXML, specificando gli attributi per ottenere tale struttura.

<GridLayoutxmlns:android="http://schemas.android.com/apk/res/android">

<ImageButtonandroid:id="@+id/btnNews"android:layout_column="0"android:layout_row="0"android:background="@drawable/news"android:layout_width="wrap_content"android:layout_height="wrap_content" />

<TextViewandroid:layout_column="0"android:layout_row="1"android:text="News"android:textAlignment="center"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_gravity="center_horizontal"android:textStyle="bold" />

...</GridLayout>

Dalla porzione di codice appena mostrata si può osservare la struttura e ladisposizione di ogni oggetto nel punto della griglia, ovvero grazie agli at-tributi android:layout_column e android:layout_row si specifica la posizionein cui si vuole mettere l’oggetto, possiamo notare che il bottone btnNews ènella posizione layout_column=0 layout_row=0 ovvero la prima cella dellatabella, mentre il testo News è posizionato in layout_column=0 layout_-row=1. Possiamo immaginare quindi la disposizione dei restanti componentiseguendo tale struttura.

Per gestire le azioni che l’utente può svolgere dalla schermata è statascritta la classe HomeActivity la quale estende la classe Activity, per ognibottone viene descritta la procedura che l’applicazione deve svolgere. La por-zione di codice mostra l’implementazione e le funzioni chiamate per realizzareil bottone News.

43

Page 45: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

public class HomeActivity extends Activity {private ImageButton btnNews;...@Override

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_homepage);

btnNews = (ImageButton) findViewById(R.id.btnNews);....

btnNews.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {

Intent i;

i = new Intent(getApplicationContext(),FragmentManagerActivity.class);

i.putExtra("fragment", 0);startActivity(i);

}});

Il metodo setContentView(R.layout.activity_homepage), non è altro un rife-rimento alla risorsa che si vuole prelevare, ossia il layout che si è descrittoprecedentemente. Una volta caricata la risorsa è stato possibile stanziarel’oggetto btnNews di tipo ImageButton e inizializzarlo con il metodo find-ViewById(R.id.btnNews) il quale cerca l’elemento all’interno del layout conattributo id specificato tra parentesi. Volendo gestire il click sul bottone,si è usato il metodo OnClickListener() e si è ridefinito l’istanza del metodoOnClick(). In questo metodo è stato inserito il codice relativo al comporta-mento voluto quando il listener cattura l’evento a cui è associato. Data lapresenza di due activity all’interno dell’applicazione è stato necessario for-nire una funzionalità di navigazione tra di esse e per fare questo si è fattouso degli Intent. Viene dichiarato un oggetto esplicito di tipo Intent e vieneistanziato fornendo come parametri il contesto dell’activity e l’activity versala quale è rivolto l’intent. Inoltre viene spedito un messaggio generalmentechiamato Extras e può essere di varie tipologie, sia appartenenti a classi piùcomuni che ad altre purché serializzabili. Il metodo i.putExtra(fragment, 0)manda l’extra etichettato con una chiave fragment e il valore 0 che verrà poi

44

Page 46: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

gestito nell’activity secondaria. Infine il metodo startActivity(i) dimostral’azione che si vuole attivare con questo Intent. Verrà spiegato in seguitoil motivo del messaggio che si è voluto mandare verso l’activity secondariaFragmentManagerActivity.

News/Avvisi

Toccando l’icona relativi agli avvisi,

Figura 3.6: Schermata avvisi

viene aperta una seconda activity istan-ziando un fragment contenente una listaordinata degli avvisi di CampusNet, ca-ratterizzati da un titolo in grassetto dicolore blu e dall’autore presentato in cor-sivo di colore grigio, come noto in figu-ra 3.6. Si è scelto di utilizzare i frag-ment per poter creare una sola activitysecondaria che svolge il ruolo di conteni-tore, ecco il motivo dell’invio del messag-gio extra contenente la chiave fragment eun valore intero, mediante il quale vieneistanziato il fragment con indice ugualeal valore ricevuto. Identica è la sceltautilizzata per mostrare le news. Il com-ponente di Android utilizzato per crearela lista è ListView, un gruppo che mo-stra un elenco di elementi scorrevoli. Levoci di elenco vengono inserite automa-ticamente utilizzando un adattatore cheinietta i contenuti da una fonte, nel no-stro caso dal database e converte ogni voce in una vista che verrà poi inseritanella lista. Il layout per rappresentare la ListView è dato dal seguente codiceXML:

<ListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/listaAvvisi"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:footerDividersEnabled="true" />

45

Page 47: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

I dati da mostrare e il layout di una singola cella vengono definiti da unListAdapter, infatti una ListView ha sempre associato un ListAdapter; èuna interfaccia Java implementata a secondo del contesto, nel nostro caso siè scelta la classe ArrayAdapter poichè gestisce una lista di oggetti di tipoAvviso. I valori sono stati inseriti con il metodo setText() nelle TextViewdefinite all’interno del layout layout_row_avvisi. Possiamo immaginare lastruttura del layout contenente due TextView, una per il titolo e l’altra perl’autore dell’avviso. La porzione di codice implementa l’adattatore, il qualenel metodo getView gestisce la lista di avvisi e la rende adattabile a unaqualsiasi ListView. Per ogni oggetto avviso vengono chiamati i metodi get-Titolo() e getData(), poiché sono le informazioni che si vogliono visualizzareall’interno della lista.

public class ArrayAdapterAvvisi extends ArrayAdapter<Avviso> {

private final Context context;private final Avviso[] values;

public ArrayAdapterAvvisi(Context context, Avviso[] values) {super(context, R.layout.layout_row_avvisi, values);this.context = context;this.values = values;

}

@Overridepublic View getView(int position, View convertView, ViewGroup

parent) {

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View rowView = inflater.inflate(R.layout.layout_row_avvisi,parent, false);

TextView titolo = (TextView)rowView.findViewById(R.id.titolo);

TextView data = (TextView) rowView.findViewById(R.id.data);titolo.setText(values[position].getTitolo());data.setText(values[position].getData());

return rowView;}

}

46

Page 48: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Una volta creato l’adattatore basta semplicemente creare e poi istanziareArrayAdapterAvvisi(getActivity(), arrayAvvisi) passandogli come parametrol’activity e l’array di oggetti da visualizzare nella lista. Possiamo notare dalframmento di codice che una volta presi gli avvisi dalla base di dati vengonopoi inseriti all’interno di un array di tipo avvisi e adattati alla lista. Se ildatabase non contiene avvisi verrà mostrato un testo all’interno della scher-mata che indica la non presenza di avvisi. É stato utilizzato tale metodo perla visualizzazione delle altre sezioni disponibili nell’applicazione, effettuandoopportune modifiche.

public class AvvisiFragment extends Fragment {

private ListView listView;...@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup

container,Bundle savedInstanceState) {

...databaseManager = new DatabaseManager(getActivity());databaseManager.open();avvisi = databaseManager.fetchAllAvvisi();databaseManager.close();

if(avvisi.size() > 0) {Avviso[] arrayAvvisi = new Avviso[avvisi.size()];

int i = 0;for (Avviso a : avvisi) {

arrayAvvisi[i] = a;i++;

}

ArrayAdapterAvvisi adapter = newArrayAdapterAvvisi(getActivity(), arrayAvvisi);

listView.setAdapter(adapter);}else {

textAssenza.setText("Non ci sono avvisi.");}

...}

47

Page 49: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Docenti

Toccando l’icona relativi ai docenti,

Figura 3.7: Schermata docenti

viene aperta la seconda activity istan-ziando un fragment contenente una listaordinata dei docenti presenti sulla piat-taforma CampusNet, come noto in figura3.7. La tecnica è praticamente la stes-sa usata per tutte le schermate aventeal loro interno una lista; le voci di elencovengono inserite automaticamente utiliz-zando in questo caso un adattatore pre-definito layout.simple_list_item_1, cheinietta i contenuti da una fonte, nel no-stro caso dal database e converte ognivoce in una vista che verrà poi inseritanella lista. In questo caso l’informazio-ne visualizzata per ogni riga è il nomecompleto del docente. Volendo otteneremaggiori dettagli, per esempio: indiriz-zo, contatto, ruolo, orario di ricevimentostudenti e interessi, basterà cliccare sul-la riga del docente di interesse. Il codicepropone la richiesta al database per ot-

tenere l’elenco dei docenti e l’inserimento all’interno di un array di stringheper adattarli alla lista.

databaseManager.open();docenti = databaseManager.fetchAllDocenti();databaseManager.close();String[] nome = new String[docenti.size()];

int i = 0;for(Docente a: docenti){

nome[i] = a.getNome();i++;

}ArrayAdapter<String> adapter = new

ArrayAdapter<String>(rootView.getContext(),android.R.layout.simple_list_item_1 ,nome);

listaDocenti.setAdapter(adapter);

48

Page 50: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Corsi

Toccando l’icona relativi ai corsi, vie-

Figura 3.8: Schermata corsi

ne aperta la seconda activity istanziandoun fragment contenente una lista ordi-nata dei corsi presenti sulla piattaformaCampusNet, come è possibile notare infigura 3.8. La struttura della lista è pra-ticamente identica a quella degli avvisi.Poiché le informazioni da visualizzare perogni riga sono due: il nome del corso e ildocente che lo tiene. Infatti l’adattatoreutilizzato in questo caso è simile a quelloprecedentemente proposto; deve gestireanche in questo caso due TextView, unaper il nome del corso e l’altra per il do-cente, infatti le informazioni visualizzateper ogni riga sono due come si può notaredalla figura 3.8. Volendo ottenere mag-giori dettagli come: tipologia del corso,crediti, obiettivi formativi, programma otesti consigliati basterà cliccare sulla rigadel corso di interesse. Il codice ripropo-ne la richiesta al database per ottenerel’elenco dei corsi e l’inserimento all’interno di un array di tipo Corsi peradattarli alla lista.

databaseManager = new DatabaseManager(getActivity());databaseManager.open();corsi = databaseManager.fetchAllCorsi();databaseManager.close();Corso[] arrayCorso = new Corso[corsi.size()];

int i = 0;for(Corso a: corsi){

arrayCorso[i] = a;i++;

}ArrayAdapterCorsi adapter = new ArrayAdapterCorsi(getActivity(),

arrayCorso);listCorsi.setAdapter(adapter);

49

Page 51: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Appelli

Toccando l’icona relativi agli appel-

Figura 3.9: Schermata appelli

li, viene aperta la seconda activity istan-ziando un fragment contenente uno spin-ner e una lista inizialmente vuota. Lospinner fornisce un modo rapido per se-lezionare un valore da un elenco. Nellostato di default, viene mostrato selezionail corso di laurea. Toccando su di esso sivisualizza un menu a discesa con tutti glialtri corsi di studio disponibili: [1101] in-formatica, [3027] informatica, [0314] in-formatica, [0275] matematica e informa-tica. L’utente può selezionare il propriocorso di studio e visualizzare dinamica-mente gli appelli disponibili ordinati inbase alla data. Le informazioni che ven-gono visualizzate per ogni riga sono: ilcorso (colore blu), il periodo di iscrizione(colore grigio) e la data dell’appello (co-lore rosso). Il layout di tale schermata èstato strutturato attraverso tale porzio-ne di codice XML.

<Spinnerandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/spinnerCorsi"android:layout_gravity="center_horizontal"android:clickable="true"android:entries="@array/corso_di_studio"/>

<ListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/listAppelli"android:layout_gravity="center_horizontal" />

z

50

Page 52: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Le informazioni sono state prese dalla piattaforma ESSE3 all’url https://unipr.esse3.cineca.it/ListaAppelliOfferta.do con richieste di tipoPOST, restringendo il campo di ricerca solo per i corsi di studio di informa-tica. In questo caso i dati non risiedono nella base di dati poiché sono incontinuo aggiornamento. Quindi la scelta è stata di far gestire al controllorei vari scaricamenti delle informazioni ogni volta che si effettua la scelta delcorso di studio. L’adattatore in questo caso gestisce l’oggetto di tipo Ap-pello con il layout di riga stabilito, infatti viene creato un oggetto di tipoView e instanziato con il layout layout_row_appelli. Dalla porzione codiceè possibile osservare quanto detto.

private final Context context;private final Appello[] values;

public ArrayAdapterAppelli(Context context, Appello[] values) {super(context, R.layout.layout_row_appelli, values);this.context = context;this.values = values;

}@Overridepublic View getView(int position, View convertView, ViewGroup

parent) {

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View rowView = inflater.inflate(R.layout.layout_row_appelli,parent, false);

TextView titolo = (TextView) rowView.findViewById(R.id.titolo);TextView periodo = (TextView) rowView.findViewById(R.id.periodo);TextView data = (TextView) rowView.findViewById(R.id.dataEora);

titolo.setText(values[position].getTitolo());periodo.setText(values[position].getPeriodoIscrizione());data.setText(values[position].getDataOraEsame());

return rowView;}

51

Page 53: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Carriera

Toccando l’ultima icona relativa al-

Figura 3.10: Schermata login

la carriera, viene aperta la seconda acti-vity istanziando un fragment contenenteun WebViewClient e una ListView ini-zialmente non visibile data la presenzadella WebView. Una WebView è un ti-po di View che permette di visualizza-re pagine Web. La sua utilità principaleè quella di permettere di integrare conuna Web application o più in generaleun sito Web nella propria applicazione.Il motore del WebView risiede nella li-breria WebKit già inclusa all’interno diAndroid per questo possiamo parlare diquesto componente come di un browservero e proprio in grado di eseguire Ja-vascript e mostrare layout nella manierapiù completa possibile. La figura 3.10mostra il primo accesso a questa sezione,viene visualizzata la pagina di autentica-zione poiché i dati che si vogliono recu-perare sono accessibili solo dopo essersi

autenticati alla piattaforma ESSE3. Per ottenere questo risultato si è creatoun layout come il seguente.

<WebViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/webView"android:layout_alignParentEnd="true"android:layout_alignParentStart="true" />

<ListViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/listView"android:layout_alignParentStart="true"android:layout_below="@+id/space" />

52

Page 54: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Una volta che l’utente ha immesso la

Figura 3.11: Schermata carriera

propria mail e password dell’ateneo, laWebViewClient viene resa invisibile e sivisualizza la lista degli esami verbalizza-ti con il rispettivo voto e la media pon-derata dei voti nella barra delle azioni,come in figura 3.11. Anche in questo ca-so i dati vengono presi direttamente dal-la piattaforma ESSE3. Per poter ricava-re l’HTML di tale pagina si è fatto usodi una strategia che tante applicazioni algiorno d’oggi adottano, ovvero una vol-ta istanziato l’oggetto di tipo WebViewviene fatto Overraide del metodo onPa-geFinished() ciò vuol dire riuscire a gesti-re il fine del caricamento di ogni paginaWeb. Infatti nella porzioni di codice sipuò notare lo statement if con la clauso-la url.equals() la quale una volta finita dicaricare la pagina del libretto universita-rio su ESSE3 la WebView viene settatain modalità invisibile. La strategia uti-lizzata per poter ottenere i dati verrà poi descritta in maniera più accuratanella prossima sezione di questo capitolo.

webView.setWebViewClient(new WebViewClient(){@Overridepublic void onPageFinished(WebView view, String url) {if(url.equals("https://unipr.esse3.cineca.it/auth/"

+"studente/Libretto/LibrettoHome.do")){view.setVisibility(View.GONE);

...

53

Page 55: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

3.3.2 ModelDatabase

I dati vengono organizzati in una base dati, questa scelta è stata pensata perpoter permettere agli utenti di accedere alle informazioni anche in assenza disegnale internet (3G) ovvero la cosiddetta modalità offline.

SQLite è un leggerissimo database engine transazionale che occupa po-co spazio in memoria e sul disco (da circa 4KiB a circa 350KiB, a secondadel target della piattaforma), pertanto è la tecnologia perfetta per creare egestire database in un ambiente come quello degli applicativi mobile, do-ve le risorse sono molto limitate e dunque è molto importante ottimizzarnel’utilizzo. A differenza della maggior parte degli altri database SQL, SQ-Lite non ha un processo server separato ma legge e scrive direttamente sufile ordinari sul disco: possiede praticamente tutti gli strumenti principa-li che caratterizzato i più importanti database SQL (tabelle, viste, indici,trigger) ed il codice è distribuito gratuitamente sia per scopi commercialiche privati. SQLite è più diffuso di quanto ci si aspetterebbe, infatti vieneutilizzato in moltissimi applicativi e device che utilizziamo quotidianamen-te, come: iPhone, Mozilla Firefox, negli smartphone Symbian, in Skype,in diversi applicativi PHP o Adobe AIR, e in molti altri progetti. Un da-tabase SQLite è, nella pratica, un file: possiamo spostarlo, copiarlo in unaltro sistema (ad esempio dallo smartphone al nostro pc) e continuerà afunzionare tutto regolarmente. Android fa uso di SQLite, considerato ap-punto il motore di database più diffuso al mondo. Rispetta tutti i requisitidi efficienza e disponibilità di cui si è detto. Si tratta, in realtà, di unalibreria software che permette di gestire in un unico file un database rela-zionale. Oltretutto è un progetto in continua espansione che mette a dispo-sizione molti aspetti dei moderni DBMS: View, Trigger, transazioni, indicioltre al comunissimo e comodissimo interfacciamento con linguaggio SQL.Android memorizza i file seguendo uno schema preciso; il file SQLite del da-tabase dell’applicazione viene memorizzato in una directory il cui percorsoè: /data/data/it.unipr.informatica.bartolomeo.appcampusnet/databases do-ve it.unipr.informatica.bartolomeo.appcampusnet è il nome del package del-l’applicativo. Per accedere al file del database dalla nostra app abbiamoovviamente a disposizione gli statements SQL. Grazie alle classi che vedremoe che permettono di implementare helper e adapter. Il database implementa-to per questa applicazione è molto semplice e intuitivo poiché tutte le tabellecontenute nella struttura sono indipendenti, ciò vuol dire non avere relazionilogiche tra le entità. I dati che si sono scelti di tenere in modalità offlinesono: le news, gli avvisi, i docenti e i corsi. Infatti il codice propone l’im-

54

Page 56: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

plementazione della classe helper che permette di creare il database con lerispettive tabelle.

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "database.db";

private static final String DATABASE_CREATE_AVVISI ="CREATE TABLE AVVISI(" +"TITOLO TEXT PRIMARY KEY," +"LINK TEXT NOT NULL," +"DATA TEXT NOT NULL)";

private static final String DATABASE_CREATE_NEWS ="CREATE TABLE NEWS(" +"TITOLO TEXT PRIMARY KEY," +"LINK TEXT NOT NULL," +"DATA TEXT NOT NULL)";

private static final String DATABASE_CREATE_DOCENTI ="CREATE TABLE DOCENTI(" +"NOME TEXT PRIMARY KEY," +"LINK TEXT NOT NULL)";

private static final String DATABASE_CREATE_CORSI ="CREATE TABLE CORSI(" +"NOME TEXT PRIMARY KEY," +"LINK TEXT NOT NULL," +"DOCENTE TEXT NOT NULL)";

public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Overridepublic void onCreate(SQLiteDatabase database) {

database.execSQL(DATABASE_CREATE_AVVISI);database.execSQL(DATABASE_CREATE_NEWS);database.execSQL(DATABASE_CREATE_DOCENTI);database.execSQL(DATABASE_CREATE_CORSI);

}}

55

Page 57: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Dal codice proposto è possibile notare l’override del metodo onCreate, questoviene invocato nel momento in cui non si trova nello spazio dell’applicazioneun database con nome indicato nel costruttore. Il metodo verrà invocatouna sola volta, ovvero quando il database non esiste ancora. Il parametropassato in input è un riferimento all’oggetto che astrae il database. La classeSQLiteDatabase è importantissima in quanto per suo tramite invieremo icomandi di gestione dei dati. Il metodo onCreate contiene la query SQL cheserve a creare il contenuto del database.

Una volta creato il database si è scelto di affidare la gestione del data-base alla classe che prende il nome di DatabaseManager, l’obiettivo di taleclasse è avere metodi che eseguono query SQL sulla base di dati per estrarree manipolare dati da questa. La classe DatabaseManager fornisce per l’ap-punto l’interfaccia diretta per manipolare il database. Un Manager è, nellapratica, un livello di astrazione: fornisce tutta una serie di metodi che, unavolta testati opportunamente, permettono la creazione, la cancellazione, lamodifica o la manipolazione di record nel database.

Inizialmente vengono definite alcune proprietà e alcune costanti che ver-ranno utilizzate massicciamente all’interno della classe: la prima costantedefinisce il nome della tabella mentre le altre definiscono il nome di ognicolonna della stessa. Da questo momento in poi per l’implementazione delmanager verranno utilizzate queste costanti nelle query SQL, in modo dapoterne modificare il nome in caso di necessità senza dover riscrivere tuttele query. Il codice riportato mostra soltanto i metodi implementati per latabella avvisi poiché sono logicamente equivalenti alle altre.

public class DatabaseManager {private static final String DATABASE_TABLE_AVVISI = "AVVISI";...public static final String KEY_TITOLO = "TITOLO";public static final String KEY_LINK = "LINK";public static final String KEY_DATA = "DATA";...public DatabaseManager open() throws SQLException {

dbHelper = new DatabaseHelper(context);database = dbHelper.getWritableDatabase();return this;

}

public void close() {dbHelper.close();

}

56

Page 58: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

private ContentValues createContentValues(String titolo, Stringlink, String data) {

ContentValues values = new ContentValues();values.put( KEY_TITOLO, titolo );values.put( KEY_LINK, link );values.put( KEY_DATA, data);

return values;}public long createAvviso(String titolo, String link, String data){

ContentValues initialValues =createContentValues(titolo,link,data);

return database.insertOrThrow(DATABASE_TABLE_AVVISI, null,initialValues);

}

public int deleteAvvisi() {return database.delete(DATABASE_TABLE_AVVISI, null, null);

}

public List<Avviso> fetchAllAvvisi() {Cursor cursor;List<Avviso> avvisoList = new LinkedList<Avviso>();cursor = database.query(DATABASE_TABLE_AVVISI,

new String[] {KEY_TITOLO, KEY_LINK, KEY_DATA},null, null, null, null, null);

while(cursor.moveToNext()){String titolo = cursor.getString(cursor

.getColumnIndex(DatabaseManager.KEY_TITOLO));String link = cursor.getString(cursor

.getColumnIndex(DatabaseManager.KEY_LINK));String data = cursor.getString(cursor

.getColumnIndex(DatabaseManager.KEY_DATA));avvisoList.add(new Avviso(titolo, link, data));

}cursor.close();return avvisoList;

}

I metodi open() e close(), sono metodi che verranno usati ogni volta che sidovrà comunicare con il database: sarà intatti sufficiente chiamare questi

57

Page 59: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

metodi per poter lavorare con il database. All’interno viene stanziato un og-getto di tipo DatabaseHelper che, come abbiamo visto, fornisce l’interfacciadi creazione/aggiornamento/gestione del database. Dopodiché viene invoca-to il metodo getWritetableDatabase() definito in SQLiteOpenHelper, il qualerestituisce un oggetto database in modalità lettura/scrittura attivo fino aquando non viene richiamato il metodo close(). La prima volta che vienechiamato getWritableDatabase() il database viene aperto e vengono automa-ticamente richiamato il metodo onCreate() e se necessario anche il metodoonOpen(). Il metodo close() invece non fa altro che richiamare il metodoclose() della classe SQLiteOpenHelper, il quale chiude ogni oggetto databaseaperto.

Un metodo molto importante è quello che implementa l’operazione dicreazione di un nuovo avviso. createAvviso() richiede 3 parametri in ingres-so: titolo, link e data, i parametri utili per identificare un nuovo avviso. Dopoaver richiamato createContentValues(), il metodo utilizza l’istanza SQLite-Databse database correttamente impostata nel metodo open() per richiamarela funzione insertOrThrow(): questa permette di inserire un record nel da-tabase e prende come parametri in input il nome della tabella in cui inserirela riga in questo caso DATABASE_TABLE_AVVISI, un valore che indicacome comportarsi nel caso in cui i valori iniziali siano vuoti ed infine i valorida inserire. Il secondo parametro stabilisce il comportamento della insertnel caso in cui initialValues sia vuoto: se non impostato a null, il parametroindica in quali colonne vogliamo che sia inserito un null lì dove initialValuesè vuoto.

Il metodo deleteAvvisi() è molto più semplice ed intuitivo, poiché va acancellare l’intera tabella contenente gli avvisi. É stato utile in quanto adogni avvio dell’applicazione viene richiamato tale metodo per semplificare lasincronizzazione, ovvero cancellare e aggiornare con i nuovi avvisi disponibilisu CampusNet.

L’ultimo metodo è fetchAllAvvisi() ovvero è un metodo che permette direcuperare tutti gli avvisi presenti nel nostro database. Si utilizza un istan-za della classe SQLiteDatabase per richiamare la funzione specifica messaa disposizione dalla piattaforma Android, in questo caso a noi interessa lafunzione query(). Questa funzione, in base ai parametri passati, genera lequery necessarie per interrogare il database e recuperare i dati che ci inte-ressano. La funzione query() restituisce un oggetto di tipo Cursor: questooggetto fornisce l’accesso in modalità di lettura-scrittura al result set resti-tuito dalla query. Il metodo moveToNext() utilizzato nella clausola del while,muove il cursore alla riga successiva, dalla quale possiamo ricavare il valoreche ci interessa attraverso il metodo getColumnIndex(), che restituisce l’in-dice della colonna richiesta, e il metodo getString(), che invece ritorna come

58

Page 60: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

stringa il valore della colonna richiesta. Ad ogni ciclo quindi vengono presigli avvisi dalla base di dati e vengono aggiunti alla lista avvisoList di ti-po List<Avviso>, infatti all’interno dell’applicativo le informazioni vengonocondivise da tali liste una per ogni tipo di oggetto: News, Avviso, Docenti eCorsi. Alla fine dell’estrazione delle informazioni viene chiuso il cursore conil metodo close(), che rilascia tutte le risorse invalidandolo completamente.

Modello dei dati

La manipolazione dei dati è avvenuta grazie alla presenza di classi modello,la base della programmazione orientata agli oggetti. Il modello comprendeattributi e metodi che verranno condivisi da tutti gli oggetti creati a partiredalla classe. Un oggetto infatti è l’istanza di una classe. Una classe è identi-ficabile come un tipo di dato astratto che può rappresentare l’astrazione diun concetto. Fondamentalmente, vengono definiti al proprio interno lo stato,i cui dati sono memorizzati nelle cosiddette variabili membro o attributi, e ilcomportamento dell’entità di cui è rappresentazione, descritto da blocchi dicodice riutilizzabili chiamati metodi.

Quando il parser ricava le informazioni dalla rete deve istanziare dei nuovioggetti di tipo: news/avviso, docenti, corsi, appello e esame. Queste classicontengono degli attributi, ovvero le proprietà che ogni oggetto deve avere.Ad esempio nel caso degli avvisi, come abbiamo appena visto, nel databasevengono salvate tre informazioni per ogni entità: il titolo, il link e la datadi emissione. Quindi ogni avviso predispone di attributi, infatti è stata co-struita una classe avente delle proprietà che il singolo oggetto avviso devecontenere. Si sono implementate cinque classi diverse una per ogni sezionedell’applicativo, poiché le informazioni da ricavare sono totalmente differentitra di loro, a parte per le news che hanno la stessa forma degli avvisi.

La classe Avviso/News:

private String titolo;private String link;private String data;

La classe Docente:

private String nome;private String link;

59

Page 61: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

La classe Corso:

private String nome;private String link;private String docente;

La classe Appello contiene tali attributi:

private String titolo;private String periodoIscrizione;private String dataOraEsame;private String tipo;private String tipoProva;private String docente;private String numIscritti;

La classe Esame per la manipolazione dei dati della sezione carriera haqueste proprietà:

private String annoCorso;private String nome;private String crediti;private String aaFreq;private String voto;private String data;

Tutte le classi appena descritte contengono i metodi getter e setter per ogniattributo, generalmente le classi definiscono metodi getter che fornisconoaccesso in lettura e metodi setter che forniscono accesso in scrittura a unadata proprietà.

Il discorso può sembrare assurdo ma un oggetto non è altro che un ele-mento dotato di attributi e metodi o in parole povere di variabili e funzioni, lacosa importante da dire è che tali attributi sono nascosti, o meglio incapsulatinei metodi, in modo tale da nascondere agli utenti le proprie caratteristichele quali sono accessibili solo mediante le funzioni. Un metodo getter nonaccetta parametri e restituisce sempre un valore, mentre un metodo setteraccetta sempre un parametro e non restituisce mai valori.

60

Page 62: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Parse pagine CampusNet

Per ricavare le informazioni dalle varie piattaforme si è fatto uso della li-breria Jsoup, descritta precedentemente. Verranno mostrare le varie classiche permettono di effettuare il parse delle pagine Web, mostrando le varieconfigurazioni di selettori CSS. Per implementare ed eseguire il parse si èfatto uso della classe AsyncTask. La classe AsyncTask di Android consentedi effettuare delle elaborazioni in background e quindi gestire i risultati daltread principale. Solitamente viene utilizzata per eseguire operazioni di brevedurata. Ogni elaborazione asincrona si compone di circa 4 passi che Androidesegue consecutivamente e sono onPreExecute, doInBackground, onProgres-sUpdate and onPostExecute. Infatti le operazioni vengono svolte nel metododoInBackground ovvero le azioni che il task deve svolgere in background.

public class ParseAvvisiNews extendsAsyncTask<String,Void,List<Avviso>>{

private List<Avviso> avvisi;

@Overrideprotected List<Avviso> doInBackground(String... strings) {

avvisi = new LinkedList<>();try {Document doc = Jsoup.connect(strings[0]).get();Elements topicList = doc.select(strings[1]);Avviso avviso;ParseData p = new ParseData();

for(Element topic : topicList){String titolo = topic.text();String link = topic.attr("href");String data = p.doInBackground(link).toString();

avviso = new Avviso(titolo, link, data);avvisi.add(avviso);

}} catch (Throwable t) {t.printStackTrace();}

return avvisi;}

}

61

Page 63: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

La porzione di codice proposta implementa la classe per effettuare il parsedegli avvisi/news, passando come parametri l’url e il selettore. Il metodoconnect(String url) crea una nuova connessione e get() recupera e analizza lapagina HTML. Una volta che si è ottenuto il Document, è possibile estrarre idati utilizzando i metodi appropriati della classe Document e delle sue superclassi Element e Node. A questo punto è possibile stanziare l’oggetto di tipoElement, il fulcro centrale della libreria, poiché grazie ad esso è possibile rap-presentare un elemento (tag) ben specifico della pagina HTML con relativasottostruttura. Quindi a partire da esso è possibile estrarre dati ed attraver-sare il grafo dei nodi. Infatti scorrendo la lista topicList per ogni Element sicatturano i dati: titolo, link e data. Il tutto viene poi impacchettato in unoggetto di tipo Avviso e si aggiunge alla lista di avvisi.

All’apertura dell’applicativo viene invocata una funzione che popola ildatabase, infatti viene istanziato un oggetto di tipo ParseAvvisiNews e vie-ne invocato il metodo che effettua appunto il parse della pagina http://informatica.unipr.it/cgi-bin/campusnet/home.pl.

try {avvisi = parseAvvisiNews.execute(new String[]{

"http://informatica.unipr.it/cgi-bin/campusnet/avvisi.pl","td.AVVISI-FORMAT-3 a"}).get();

news = parseURLnews.execute(new String[]{"http://informatica.unipr.it/cgi-bin/campusnet/avvisi.pl",

"td.AVVISI-FORMAT-4 a"}).get();

}catch (Exception e) {...

}if(!avvisi.isEmpty()) {

databaseManager.deleteAvvisi();for (Avviso avviso : avvisi) {

String titolo = avviso.getTitolo();String link = avviso.getLink();String data = avviso.getData();

databaseManager.createAvviso(titolo, link, data);}

}

62

Page 64: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Per ottenere gli avvisi dalla pagina di CampusNet, si è usato la combina-zione di più selettori, come è possibile notare dalla porzione di codice, ov-vero: td.AVVISI-FORMAT-3 a poiché le informazioni che si vogliono otte-nere sono poste tra i tag <A> . . .</A> nelle colonne della tabella (<TD>. . .</TD>) di classe=.AVVISI-FORMAT-3.

Parse pagine ESSE3

Le classi che effettuano parsing delle pagine contenente informazioni sui do-centi e i corsi sono logicamente equivalenti poiché sono pagine della stessapiattaforma CampusNet, mentre è doveroso descrivere la tecnica utilizzataper ricavare i dati dal Learning Management System ESSE3, strutturata inmaniera diversa rispetto questa. La piattaforma ESSE3 comunica medianterichieste POST, la libreria Jsoup permette questo metodo di connessione,infatti possiamo notare dalla porzione di codice che viene invocato un me-todo durante l’inizializzazione della connect passando come parametro unacostante Connection.Method.POST.

@Overrideprotected List<Appello> doInBackground(String... strings) {

private List<Appello> appelloList;appelloList = new LinkedList<>();try {

Connection.Response res = Jsoup.connect(strings[0]).data("TIPO_FORM","1","fac_id","10024","cds_id",strings[1],"ad_id","","docente_id","","data","","btnSubmit","Avvia+Ricerca")

.method(Connection.Method.POST)

.execute();Document doc = res.parse();Elements topicList = doc.select(strings[2]);Appello appello = new Appello();

for(Element topic : topicList) {...appelloList.add(appello);appello = new Appello();

}}return appelloList;

}

63

Page 65: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Con il metodo data() è possibile aggiungere parametri di richiesta di dati, taliparametri vengono inviati nel corpo della richiesta. Questo poiché alla paginahttps://unipr.esse3.cineca.it/ListaAppelliOfferta.do prima di av-viare la ricerca degli appelli, è doveroso impostare il dipartimento e il corsodi studio; grazie al metodo data() è possibile inviare tali parametri utili allaricerca che identificano gli appelli del corso di informatica.

La tecnica che si è scelta di usare per ricavare il sorgente HTML per lasezione della carriera è molto interessante, in quanto dopo svariati tentatividi approccio con il protocollo che gestisce la parte di login CAS non è risulta-to semplice. Non è stato possibile creare una connessione neanche con Jsoup,in quanto la libreria non supporta tale protocollo usato dall’università di Par-ma. Questo perché la piattaforma ESSE3 usa un servizio per l’autenticazioneSingle Sign-On (SSO) di una comunità Web, in questo caso l’università diParma. I componenti sono: il CAS server, che gestisce l’identità della comu-nità (Identity Provider) e i Service Providers, che forniscono le applicazioniche richiedono accesso autenticato. Utilizza un proprio protocollo basato suHTTP e sulla redirezione dell’url.

Figura 3.12: Autenticazione CAS

Quindi per ovviare questo problema di scambi e redirezione dei pacchetti,l’idea è stata quella di effettuare il login attraverso una WebView, cosicchéla gestione dei pacchetti è lasciata direttamente al componente. Una volta

64

Page 66: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

effettuato il login, viene nascosta la WebView e viene chiamata una fun-zione JavaScript per la cattura e l’esportazione su file del sorgente HTMLdella pagina contenente la tabella dei voti, https://unipr.esse3.cineca.it/auth/studente/Libretto/LibrettoHome.do. Questo metodo è risulta-to più veloce ed efficiente per accedere al sorgente HTML. Viene mostratola porzione di codice che identifica, una volta resa la WebView invisibile, lachiamata showHTML mediante interfaccia JavaScript.

webView.setWebViewClient(new WebViewClient(){@Overridepublic void onPageFinished(WebView view, String url) {if(url.equals("https://unipr.esse3.cineca.it/auth/"

+"studente/Libretto/LibrettoHome.do")){view.setVisibility(View.GONE);view.loadUrl("javascript:window.HtmlViewer.showHTML"+

"(’<html>’+document.getElementsByTagName(’html’)[0].innerHTML+’</html>’);");

...}

}}

La classe con il metodo showHTML è definita come @JavascriptInterfa-ce, ovvero una procedura JavaScript, infatti viene invocata nella query ja-vascript:window.HtmlViewer.showHTML, l’output della funzione restituisceuna stringa contenente l’HTML completo della pagina.

class MyJavaScriptInterface {private Context ctx;

MyJavaScriptInterface(Context ctx) {this.ctx = rootView.getContext();

}@JavascriptInterfacepublic void showHTML(String html) {

write(html);}...

}

65

Page 67: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

Una volta ottenuto l’HTML viene passato alla funzione write() che presauna stringa, crea un file di contenuto html nella memoria del dispositivo.Dopodiché viene fatto partire il parse caricando tale file contente l’HTML.La porzione di codice mostra il caricamento del file è l’istanza dell’alberoElements con il selettore .detail_table td.

File input = new File("/storage/emulated/0/html.txt");Document doc = null;

try {doc = Jsoup.parse(input, "UTF-8", "");

} catch (IOException e) {e.printStackTrace();

}

Elements topicList = doc.select(".detail_table td");

A questo punto è bastato scorrere la lista di Element e settare le proprietàper ogni oggetto esame creato, ovvero: anno di corso, codice e nome del-l’insegnamento, CFU, stato dell’esame, anno di frequenza, voto e data diverbalizzazione. Nella lista si è scelto di far visualizzare solamente il nome eil voto come noto in figura 3.11, le informazioni più importanti che uno stu-dente vorrebbe visualizzare. Inoltre prendendo tutti i voti e i rispettivi cfu si ècalcolato il voto base di laure, visualizzabile nella ActionBar dell’applicativo.

3.3.3 ControllerIl Controller, come descritto in precedenza è tutto quello che riguarda lalogica che avviene dopo l’interazione con l’utente e va a modificare lo statodel model e delle view. Nell’applicativo esiste solo una classe che fa par-te delle categoria controllore, con il ruolo di notificare la presenza di nuoviavvisi sulla piattaforma CampusNet. Per poter implementare dei task chelavorano a lunga durata o addirittura indeterminata, si è fatto uso di uncomponente Android, i Service. Esistono diversi tipi di Service, ma per latipologia di lavoro che deve svolgere all’interno dell’applicativo, si sono usatii service Started. La loro particolarità è di essere eseguiti in backgroundindefinitamente anche se la componente che li ha avviati viene terminata.Generalmente non offrono interazione con il chiamante e proseguono finchénon vengono interrotti. Inoltre i Service Started sono da prediligere per ope-razioni con una loro finalità indipendente dallo stato delle altre applicazioni,infatti si occuperà di scaricare gli avvisi dalla pagina Web e confrontarli con

66

Page 68: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

quelli contenuti nella base dati, notificherà con un pop-up l’avviso che non èpresente nel database. Il servizio viene avviato alla prima esecuzione dell’ap-plicazione in background. La porzione di codice mostra l’implementazionedella procedura appena descritta.

private void startService() {timer.scheduleAtFixedRate(new mainTask(), 60000*15, 60000*15);

}private class mainTask extends TimerTask {

public void run() {

boolean nuovo;parseAvvisiNews = new ParseAvvisiNews();

try{avvisiOnline = parseAvvisiNews.execute(new String[]{

"http://informatica.unipr.it/cgi-bin/"+ "campusnet/avvisi.pl","td.AVVISI-FORMAT-3 a"}).get();

if(!avvisiOnline.isEmpty()) {for(Avviso avviso : avvisiOnline) {

nuovo = true;for (Avviso avviso1 : avvisiLocali) {

if (avviso.getTitolo().equals(avviso1.getTitolo())) {nuovo = false;

}}if(nuovo){

showNotification();}

}}

}catch (Exception e) {...

}}

}

Come è possibile notare dal codice si è fatto uso della classe TimerTask,tramite questa è possibile schedulare un’azione, infatti la sincronizzazione di

67

Page 69: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

3.3 Architettura dell’applicazione Implementazione e Funzionamento

nuovi avvisi e il controllo viene avviata ogni quindici minuti attraverso il me-todo scheduleAtFixedRate(). Quando viene invocato il metodo startService(),non viene controllata subito la presenza di nuovi avvisi ma lo scheduler parti-rà dopo quindici minuti al primo avvio e continuerà a controllare ogni quartod’ora finché non verrà terminato il servizio. Gli avvisi vengono confronta-ti dal titolo infatti notiamo la clausola del costrutto if mediante il metodoequals() fra due stringhe: if(avviso.getTitolo().equals(avviso1.getTitolo())),se il risultato della valutazione è falso viene impostata una variabile boo-leana per poter entrare in un secondo costrutto if dove verrà invocata lafunzione showNotification() che creerà il pop-up visualizzabile sul displaydello smartphone.

68

Page 70: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Conclusioni

Come conclusioni di questa tesi è possibile affermare di aver raggiunto gliobiettivi proposti, ovvero la possibilità di realizzare un’applicazione Androidin grado di accedere ad alcune informazioni contenute in LMS. Dopo averstudiato la struttura di ogni singola piattaforma, si sono implementati com-ponenti ad hoc in grado di ricavare informazioni dalle piattaforme scelte egestirle nel miglior modo possibile. Le sezioni che si sono sviluppate e reseaccessibili dall’applicativo sono: avvisi, news, docenti, corsi, appelli e la pro-pria carriera universitaria. Le fonti di dati sono state acquisite dall’unionedei due LMS che il corso di informatica fa riferimento: CampusNet e ESSE3.Gli sviluppi futuri possibili su questa tesi sono:

• Possibilità di condividere le informazioni visibili dall’applicativo suGoogle+ o Facebook;

• Possibilità di iscriversi ad un appello d’esame attraverso l’applicativo;

• Funzionalità per cui una volta avvenuta l’iscrizione ad un appello d’e-same, viene sincronizzato sul calendario Google e il giorno precedenteavvisa con una notifica pop-up;

• Cercare di integrare perfettamente l’applicazione con le funzionalità diESSE3, usando il protocollo di autenticazione CAS;

• Sviluppare un eventuale porting per iOS.

69

Page 71: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Bibliografia

[1] Learning Management Systemhttp://it.wikipedia.org/wiki/Learning_Management_System

[2] CampusNetCaratteristiche, Tecnologia, Documentazione, Modulihttp://www.campusnet.it/index.html

[3] EasyStaff - Optimization Solvers - Gruppo ZUCCHETTI S.p.A.EasyCourse, Guidahttp://www.easystaff.it/it/content/easycourse

[4] ESSE3 by KION a CINECA CompanyDocumentazione, Servizi di segreteria, FAQhttp://www.kion.it/it/soluzioni/esse3-servizi-segreteria-studenti

[5] Google - Android StudioProject and File Structure, Android Build System, Debug and Performancehttps://developer.android.com/sdk/index.html

[6] Jonathan HedleyJava HTML Parser, API Reference, Cookbookhttp://jsoup.org

[7] Matteo PetrioliParadigma di programmazione MVChttp://www.html.it/pag/32833/paradigma-di-programmazione-mvc/

[8] Marco LecceDatabase e SQLite in Androidhttp://www.html.it/articoli/la-gestione-dei-database-in-android-2/

70

Page 72: ProgettazioneeRealizzazione diunaApplicazioneAndroid perl ...€¦ · 1.2 CampusNet Learning Management System 1.2 CampusNet 1.2.1 Introduzione CampusNet è una piattaforma informatica

Ringraziamenti

Arrivato a questo punto molto importante della mia carriera sento il desiderodi ringraziare tutti coloro che mi hanno aiutato e sostenuto durante questopercorso.Un primo ringraziamento va ai miei genitori per avermi concesso l’opportu-nità di rimanere a Parma e continuare a studiare in questa città magnificaanche dopo il loro trasferimento.Inoltre, ringrazio sentitamente il Prof. Federico Bergenti, sempre disponibilea dirimere i miei dubbi durante tutto il periodo di stesura di questo lavoro.Grazie a Gianluca Lutero per i numerosi consigli di carattere informaticodurante il periodo di ricerca.Grazie a Filippo Soncini per aver contribuito con le sue doti grafiche dise-gnando le icone e progettando il Design dell’applicazione.Ho desiderio di ringraziare con affetto anche tutti i miei compagni di corsoe in generale tutti gli amici conosciuti durante questo periodo per avermipermesso di condividere un’esperienza indimenticabile.

71