• Non ci sono risultati.

Quest’area `e composta da un terminale hardware che tramite un browser web interagisce con il sistema, quest’ultimo infatti mette a disposizione una serie di interfacce grafiche realizzate tramite la tecnica ajax1. Questa tecnica pre- vede che lo scambio dei dati tra web browser e server avvenga in background (e cio`e in modo asincrono rispetto agli invii di dati effettuati direttamente dall’utente dell’applciazione) in modo da consentire l’aggiornamento dina- mico di una pagina web senza esplicito ricaricamento da parte dell’utente [Wikipedia, 2011a].

Per realizzare queste interfacce `e stato utilizzato il framework open source gwt (Google Web Toolkit, [Google, 2011]) che permette di sviluppare appli- cazioni dotate di front-end Javascript per l’interazione ajax, scrivendo il codice esclusivamente in Java. L’operazione di “trasformare” il codice Java sorgente nel corretto mix di codice html e Javascript sar`a infatti poi compito del compilatore, messo a disposizione nell’ambito del toolkit stesso.

Per la creazione delle interfacce grafiche, il toolkit mette a disposizione un insieme di componenti, detti widget, che implementano e permettono di realizzare tutti gli elementi tipici di una pagina web, come elementi Textbox o elementi Button. Il framework possiede inoltre un potente meccanismo

1

per la comunicazione con la parte server dell’applicativo, chiamato gwt- rpc. Questo sistema permette di passare istanze di oggetti da e verso il server, utilizzando lo standard http e mascherando tutta la complessit`a che si avrebbe, ad esempio, nel caso di utilizzo di pi`u obsolete metodologie di scambio dati, quale la serializzazione degli oggetti. Questo meccanismo pu`o essere utilizzato anche per effettuare in modo asincrono e in maniera del tutto trasparente, delle chiamate a funzioni implementate nelle servlet Java.

Nella creazione del prototipo `e stata utilizzata anche la libreria aggiun- tiva SmartGWT [Isomorphic Software, 2011], che ha permesso di arricchi- re l’insieme dei widget presenti nella versione base del framework GWT. SmartGWT, infatti, mette a disposizione un insieme di componenti grafici pi`u complessi (come ad esempio le griglie di dati), oltre a fornire tutta la logica per gestire con semplicit`a il caricamento dei dati da e verso il server.

4.4.1

Struttura dei Package dell’Interfaccia Grafica

L’interfaccia grafica del prototipo `e composta da una serie di aree che mo- strano tutti i dati relativi all’ambiente operativo. Sono presenti tutte le informazioni statiche sull’area di lavoro come la lista degli access point e dei plant element, oltre alle informazioni dinamiche come la mappa del rischio e l’elenco dei lavoratori e del loro livello di rischio. Le informazioni dina- miche sono aggiornate ogni qualvolta un sensore comunica all’applicativo un cambiamento del parametro che controlla (es. livello di gas nell’aria, o posi- zione di un lavoratore). La composizione dei package costituenti le interfacce grafiche `e mostrata nel diagramma di figura 4.6.

Il package Panel contiene i pannelli che sono mostrati nella pagina prin- cipale dell’applicazione, il package List `e invece composto dall’insieme delle classi che definiscono le liste di elementi da visualizzare. Per generare e ge- stire gli elenchi, ogni lista ha bisogno di un Datasource e cio`e di una classe in grado di recuperare i dati dal server tramite l’utilizzo delle rpc. Que- ste ultime sono dichiarate nel package Service. Il package TO contiene i cosiddetti “Transfer Object” e cio`e quegli oggetti che vengono serializzati e

Fig. 4.6: Diagramma dei Package dell’interfaccia utente

passati da e verso il server contenente i dati da visualizzare, come ad esempio i lavoratori con la loro posizione e il loro livello di rischio. Il package Win- dow, infine, contiene la definizione della finestra che visualizza la strategia da adottare quando il sistema rileva una situazione di rischio. Questa finestra appare al centro dello schermo non appena viene riconosciuta una situazione di pericolo.

4.4.2

Struttura delle Classi dell’Interfaccia Grafica

L’insieme delle principali classi costituenti l’interfaccia grafica e delle loro dipendenze `e mostrato in figura 4.7

Classe MonitorPanel `

E responsabile della creazione del pannello principale costituito dalla mappa del rischio e dall’insieme delle liste delle entit`a presenti nell’area operativa. Per questo motivo `e costituito dall’insieme di oggetti che derivano dalla clas-

Fig. 4.7: Diagramma delle classi dell’interfaccia utente

se AbstractList. La mappa di rischio `e invece visualizzata richiedendo la relativa immagine al server che si occupa di aggiornarla ogni qualvolta questa viene richiesta.

Classe AbstractList

Questa classe rappresenta una lista di entit`a. Esiste una classe specializzata per ogni elenco di entit`a che devono essere visualizzate sul pannello, come ad esempio le persone (gestite attraverso la classe PersonList). Ognuna di queste classi deve avere associato un Datasource che rappresenta il modello di dati della lista.

Classe AbstractDS

Rappresenta il collegamento con il modello dei dati Datasource associato ad una o pi`u AbstractList. Il suo compito `e principalmente quello di aggior- nare i dati della lista ogni volta che avviene un cambiamento al modello delle entit`a. Per caricare i dati utilizza delle chiamate rpc implementate nelle relative classi, come ad esempio la classe EnvironmentService. La classe generica AbstractDS implementa inoltre l’interfaccia Observer che le per- mette di essere “aggiornata” quando i dati di un’entit`a vengono modificati. Quest’ultimo compito `e gestito della classe ServerPush.

Classe ServerPush

Questa classe implementa il design pattern Observer permettendo cos`ı di es- sere informato quando un elemento del modello dei dati viene aggiornato. La classe infatti apre un canale di comunicazione con il server utilizzando il servizio RMSService e il server, come spiegato nei paragrafi precedenti, tra- smette su questo canale i dati delle entit`a che hanno avuto un cambiamento, permettendo cos`ı all’interfaccia grafica di aggiornarsi visualizzando i nuovi dati. Ci`o avviene richiamando gli opportuni Datasource.

Documenti correlati