Guigen - overview

Introduzione

versione: 3.3.0

GUIGEN è un generatore model-driven di front-end applicativi. Permette la generazione di applicazioni a partire da un modello dichiarativo dell'applicazione e con l'aggiunta manuale di codice custom a completamento della logica di business (principalmente per la realizzazione dell'interazione con il backend, con servizi esterni o con risorse quali DBMS).

Il modello che descrive l'applicazione è:

Il modello cosè definito ricopre vari aspetti di una applicazione:

Il metamodello secondo il quale occorre modellare l'applicazione è indipendente da una particolare modalità/tecnologia di realizzazione dell'applicazione, utilizzando concetti generali (es. widget, event-handler, panels) e non technology-specific (es. submit, JTree, ...): di conseguenza il generatore GUIGEN può in linea teorica generare un'applicazione modellata secondo tale metamodello utilizzando differenti tecnologie di implementazione.

Attualmente il target di generazione è rappresentato da una web-application J2EE compliant con l'attuale framework applicativo basato su tecnologie Servlet/JSP e framework struts2/spring. Dalla versione 2.4.0 è possibile generare:

  1. un EAR deployabile in application server JBoss (4.3, EAP 6.4.x) o Weblogic9.2

Per approfondimenti circa il mapping tram modello GUIGEN e piattaforma specifica (ovvero per comprendere meglio le regole di generazione del codice a fronte del metamodello, è possibile consultare la sezione design rationale.

Browser supportati

Allo stato attuale è garantito il supporto per i seguenti browser internet:

browserversionelivello di supporto
internet explorer7 e 8
  • Tutte le funzionalità di base sono supportate
  • Tutte le funzionalità ricche sono supportate
mozilla firefox3.6.x
  • Tutte le funzionalità di base sono supportate
  • Tutte le funzionalità ricche sono supportate

Per i seguenti browser, invece è previsto un supporto parziale (con qualche limitazione di funzionalità e con la possibilità di alcuni malfunzionamenti di carattere "cosmetico")

browserversionelivello di supporto
internet explorer6
  • Tutte le funzionalità di base sono supportate
  • Potrebbero essere presenti alcune imperfezioni grafiche minori
  • Tutte le funzionalità ricche sono supportate ma la velocità di composiziobe della pagina arricchita è minore rispetto ai browser più moderni: questo crea un effetto di "composizone progressiva" della schermata (della durata complessiva proporzionale alla complessità della pagina e dell'ordine comunque di frazioni di secondo)
  • Esistono alcune particolari situazioni (non riconducibili all'operatività)in cui potrebbero verificarsi malfunzonamenti della visualizzazione.

Poichè l'evoluzione delle tecnologie di navigazione internet è molto rapida e sovente non è facile limitare la varietà di browser utilizzati dall'utente finale (specie in caso di utenza di tipo internet, è previsto un costante piano di verifica e, se necessario, adeguamento degli strumenti in modo da garantire il più vasto possibile bacino di utenza.

Occorre però tenere conto che tale adeguamento non è immediato e di questa inevitabile latenza devono tenere conto i progetti.

Funzionalità

Di seguito sono elencate le principali funzionalità messe a disposizione dal generatore GUIGEN.

Definizione della struttura della User Interface dell'applicativo

La U.I dell'applicazione è organizzata in alcune aree prinicpali:
  1. un header e un footer che contengono informazioni statiche non gestite da applicativo (che in genere sono determinate dalla collocazione di un applicativo in un particolare contesto (es. sito web) e che non varia da applicazione ad applicazione
  2. una area applicativa ApplicationArea che dipende dalla particolare applicazione. A sua volta questa area applicativa � strutturata in:
Ciascuna schermata contiene Widget di vario genere strutturati in pannelli (Panel) che possono essere dei seguenti tipi: Ciascun singolo pannello prevede uno schema di layout (selezionabile in un insieme di possibilità) secondo cui i sottopannelli e i widget vengono disposti: I widget disponibili condividono alcuni comportamenti comuni: Maggiori dettagli riguardo alle modalità di strutturazioen della user interface sono disponibili qui.
Strutturazione modulare della GUI
E'possibile utilizzare per la strutturazione della User Interface un approccio componentizzato: è infatti possibile:
Funzionalità di Rich user experience (stile web2.0 - funzionalità sperimentale)

Se abilitate, sono disponibili alcune funzionalità di arricchimento della user-experience. Attualmente le funzioni previste sono le seguenti:

Securizzazione dell'applicativo

E' possibile modellare la maggior parte delle caratteristiche di sicurezza dell'applicazione:

Lo sviluppatore ha inoltre a disposizione nella business logic le info relative all'utente corrente, nell'ApplicationData denominato "currentUser".

(@since 3.1.0) L'interazione con il servizio PEP (PolicyEnforcementPoint di IRIDE2) può avvenire con il protocollo RMI oppure con il protocollo WS. La scelta avviene tramite una property da impostare nel file di proprietà di build specifiche di un determinato ambiente, in modo da permettere l'utilizzo di protocolli differneti su ambienti differenti. La properietà da impostare è iride2.pep.pd.protocol e può valere EJB (default) o WS. E' poi necessario impostare i parametri di collegamento per i due protocolli, tramite le due proprietà iride2.pep.provider.url e iride2.pep.wsfad.url.

Nel caso in cui fosse necessario implementare meccanismi di autenticazione e/o autorizzazione specifici, è possibile seguire l'apposita guida.

Definizione del model gestito nell'applicativo

Lo strato di model nell'applicativo è costituito da:

La logica di business è nettamente separata dalla logica di U.I e deve essere codificata manualmente:

Definizione del comportamento dinamico dell'applicativo

Il comportamento dinamico dell'applicativo si concretizza nella possibilit� di associare una serie di comandi agli eventi di user interaction che avvengono sull'applicativo. In particolare sono disponibili le seguenti possibilit�/comandi:

La struttura di comandi che devono essere eseguiti a fronte di un evento di U.I su un particolare widget sono modellati e sono implementati automaticamente dal codice generato, ad esclusione dell'ExecCommand. In quest'ultimo caso, infatti, sebbene il codice generato provveda a richiamare automaticamente un metodo di business fornendogli il contesto applicativo e modificando il contesto applicativo con i risultati dell'esecuzione di tale metodo, il metodo di business deve essere codificato manualmente nel linguaggio target (java). Al momento questo rappresenta l'unico punto di intervento manuale post-generazione sul codice.

I possibili punti di aggancio di un comando sono: