Table of Contents
I processi di GODiVA
Per l'accesso ai dati del DB, e per la gestione della loro persistenza, GODiVA utilizza una serie di BusinessObject e dei relativi DataAccess. Un BusinessObject è la rappresentazione in classi Java delle tabelle del database e delle relative colonne. Il DataAccess (o DAO - Data Access Object) è l'insieme dei metodi nei quali sono definite le query per l'accesso e la gestione dei dati.
Prima di permettere all'utente di chiamare direttamente i metodi dei DataAccess, è necessario che l'utente ne abbia i dovuti privilegi.
Per gestire in maniera automatica le autorizzazioni, è stato previsto un ulteriore layer logico che in GODiVA è denominato Process (o processo). Il processo può essere visto come uno strato intermedio tra l'utente e il DataAccess, che ha il compito di:
- istanziare un connessione fisica con il database
- controllare le autorizzazioni dell'utente connesso
- eseguire la chiamata verso il metodo del DataAccess desiderato
- (opzionale) lavorare i dati ritornati dal DataAccess
Il suoi metodi sono definiti Action (o azioni).
Le action dei processi possono essere richiamate all'interno degli script groovy di GODiVA.
Ci sono delle azioni che sono in comune con tutti i processi:
- commit - esegue il commit della transazione, rendendo così effettive le eventuali modifiche apportate
- rollback - annulla tutte le modifiche effettuate durante la transazione
Lo schema è il seguente:
Lista dei Processi e delle Azioni di GODiVA
GestioneAnagrafica
Questo processo permette di operare sulle informazioni anagrafiche degli utenti contenuti nel database di GODiVA. Il BusinessObject di riferimento è Anagrafica.
getAnagraficaById
public Anagrafica getAnagraficaById(Integer id) throws Throwable
Ritorna l'oggetto Anagrafica a partire dalla primary key id
salvaAnagrafica
public Anagrafica salvaAnagrafica(Anagrafica ao) throws Throwable
Salva nel database tutti i dati dell'anagrafica passata in input. Se l'oggetto Anagrafica non possiede l'id (primary key), allora viene creata una nuova anagrafica, altrimenti viene aggiornata l'anagrafica presente con quell'id.
GestioneAnagraficaDettaglio
Questo processo permette di recuperare i dettagli relativi ad un'anagrafica di GODiVA. Il BusinessObject di riferimento è AnagraficaDettaglio.
Attualmente i dettagli gestiti da GODiVA sono i seguenti (elenco non completo, ma questi sono quelli effettivamente utilizzati)
Dettaglio | Descrizione |
---|---|
Badge | Numero di badge |
Disciplinare Risorse Informatiche | Indica se l'utente ha firmato il disciplinare per l'utilizzo delle risorse informatiche |
Indirizzo email. Il campo è read-only e viene generato da uno script di GODiVA in base a delle regole | |
Fax | Numero di fax |
Grant Referente | 1 se il referente ha accettato la richiesta di creazione dell'anagrafica dell'utente; 0 altrimenti |
Kerberos Principal | KerberosPrincipal nel formato [username]@INFN.IT oppure [username]@SEDE.INFN.IT |
Level of Assurance | Livello di confidenza raggiunto dall'anagrafica |
Mail Alternate Address | mailAlternateAddress raccolti dai rami locali LDAP |
Mail Referente | Indirizzo email della persona INFN che ha convalidato la creazione dell'anagrafica dell'utente |
Matricola INFN | Numero di matricola |
Telefono | Numero di telefono |
Titolo Di Studio | Titolo di studio |
Username | uid nazionale dell'anagrafica |
getDettaglioByDescEIdAnagrafica
public Vector<AnagraficaDettaglio> getDettaglioByDescEIdAnagrafica(String desc, Integer idAnagrafica) throws Throwable
Ritorna tutti i dettagli di un'anagrafica a partire dalla descrizione del dettaglio e l'id dell'anagrafica
ritornaTuttiIDettagliPerAnagrafica
public Vector<AnagraficaDettaglio> ritornaTuttiIDettagliPerAnagrafica(Anagrafica anagrafica, Integer ordinamento) throws Throwable
Ritorna tutti i dettagli di un'anagrafica indistintamente. Il valore dell'ordinamento può essere
- '1' ordina per valore del dettaglio
- '2' ordina per la descrizione del dettaglio
- '3' ordina per la descrizione del Nodo a cui è riferito il dettaglio
ritornaTipoAnagraficaDettaglioDaDescrizione
public TipoAnagraficaDettaglio ritornaTipoAnagraficaDettaglioDaDescrizione(String nome) throws Throwable
Ritorna il TipoAnagraficaDettaglio a partire dalla sua descrizione
ritornaTuttiIDettagliPerAnagraficaETipo
public Vector<AnagraficaDettaglio> ritornaTuttiIDettagliPerAnagraficaETipo(Anagrafica anagrafica, Vector<TipoAnagraficaDettaglio> tipoDettaglio, Integer ordinamento) throws Throwable public Vector<AnagraficaDettaglio> ritornaTuttiIDettagliPerAnagraficaETipo(Anagrafica anagrafica, Vector<TipoAnagraficaDettaglio> tipoDettaglio, Integer ordinamento, Boolean validita) throws Throwable
Ritorna tutti i dettagli di un anagrafica. Sono passati in input, oltre all'anagrafica, un lista di TipoAnagraficaDettaglio su cui viene fatto il filtro. Il valore dell'ordinamento può essere
- '1' ordina per valore del dettaglio
- '2' ordina per la descrizione del dettaglio
- '3' ordina per la descrizione del Nodo a cui è riferito il dettaglio
Se validita è impostato a true vengono restituiti soltanto i dettagli correntemente attivi.
salvaDettaglio
public void salvaDettaglio(AnagraficaDettaglio anagraficaDettaglio) throws Throwable
Salva sul database l'oggetto AnagraficaDettaglio. Se il dettaglio ha impostato il campo idDettaglio allora modifica l'oggetto esistente, altrimenti ne crea uno nuovo
rimuoviDettaglio
public void rimuoviDettaglio(Vector<AnagraficaDettaglio> anagraficheDettaglio) throws Throwable
Elimina dal database i dettagli passati in input.
GestioneRuoli
Questo processo si occupa della gestione di oggetti di tipo RuoloAnagrafica.
getRuoliPerAnagraficaID
public Vector<RuoloAnagrafica> getRuoliPerAnagraficaID(Integer anagraficaID) throws Throwable public Vector<RuoloAnagrafica> getRuoliPerAnagraficaID(Integer anagraficaID, Date istante, Ruolo r) throws Throwable
Ritorna la lista dei RuoloAnagrafica di un'anagrafica. Se specificato l'istante e il ruolo r, filtra sul tipo di Ruolo e ritorna soltanto i RuoloAnagrafica attivi in un determinato istante.
getRuoliPerIdAnaEIdRuolo
public Vector<RuoloAnagrafica> getRuoliPerIdAnaEIdRuolo(Integer idAnagrafica, Integer idRuolo) throws Throwable public Vector<RuoloAnagrafica> getRuoliPerIdAnaEIdRuolo(Integer idAnagrafica, Integer idRuolo, Boolean stato) throws Throwable
Ritorna la lista dei RuoloAnagrafica di un'anagrafica. Filtra su tipo di Ruolo specificato dal suo idRuolo. Se stato è impostato a true vengono restituiti soltanto RuoloAnagrafica correntemente attivi.
getRuoloByDescrizione
public Ruolo getRuoloByDescrizione(String descrizione) throws Throwable
Ritorna il tipo di Ruolo a partire dalla sua descrizione
GestioneDomini
Questo processo si occupa della gestione di oggetti di tipo NodoDominio, ovvero i nodi che fanno parte della struttura ad albero di GODiVA. Il NodoDominio ha come primaryKey:
- idTipoAlbero
- idNodo
I nodi sono disposti su una struttura ad albero. E' possibile rappresentare tale struttura con un esempio:
INFN ├── Amministrazione Centrale │ │ │ └── Servizio Sistema Informativo │ │ │ └── Ufficio Servizi e Applicativi │ ├── Lecce │ │ │ └── Servizio Calcolo e Reti │ └── Laboratori Nazionali di Frascati │ ├── Divisione Ricerca │ │ │ └── Servizio di Calcolo │ │ │ └── Reparto calcolo scientifico │ └── Divisione Acceleratori
ritornaNodoDominioByTipoEID
public NodoDominio ritornaNodoDominioByTipoEID(Integer domainTypeID, Integer nodeID) throws Throwable
Ritorna l'oggetto NodoDominio a partire dalle sue primaryKey. domainTypeID rappresente il tipo di nodo, mentre nodeId è l'identificativo univoco del nodo per quel tipo.
ritornaNodoDominioDaIdTipoEDescrizione
public NodoDominio ritornaNodoDominioDaIdTipoEDescrizione(Integer idTipo, String descrizione) throws Throwable
Ritorna l'oggetto NodoDominio a partire dal tipo di nodo, specificato tramite idTipo, e dalla descrizione del nodo.
Esempio
ritornaNodoDominioDaIdTipoEDescrizione(1, "INFN");
ritorna il nodo dell'INFN.
ritornaTipoAlberoByDescrizione
public TipoDominio ritornaTipoAlberoByDescrizione(String description) throws Throwable
Restituisce l'oggetto che rappresenta il tipo di nodo a partire dalla sua descrizione.
ritornaNodoDiLivelloNNelPathDelNodoDominio
public NodoDominio ritornaNodoDiLivelloNNelPathDelNodoDominio(NodoDominio nodePathLeaf, Integer requestedLevel) throws Throwable
Come già detto nella sezione GetioneDomini abbiamo un certo numero di nodi disposti su una struttura ad albero.
Questo metodo prende come input un nodo qualsiasi e tale nodo sarà rappresentato in GODiVA da un certo path; il metodo restituisce il nodo di questo path che si trova al livello requestedLevel.
Esempio: supponiamo di avere una variabile nodo che è il dominio dell'"Ufficio Servizi e Applicativi" (come specificato nello schema sopra). Effettuando una chiamata al metodo:
NodoDominio nodoLiv2 = ritornaNodoDiLivelloNNelPathDelNodoDominio(nodo, 2);
Al termine della chiamata, la variabile nodoLiv2 conterrà il nodo "Amministrazione Centrale" perché è al secondo livello del path (il primo è "INFN").