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:
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:
Lo schema è il seguente:
Questo processo permette di operare sulle informazioni anagrafiche degli utenti contenuti nel database di GODiVA. Il BusinessObject di riferimento è Anagrafica.
public Anagrafica getAnagraficaById(Integer id) throws Throwable
Ritorna l'oggetto Anagrafica a partire dalla primary key id
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.
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 |
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
public Vector<AnagraficaDettaglio> ritornaTuttiIDettagliPerAnagrafica(Anagrafica anagrafica, Integer ordinamento) throws Throwable
Ritorna tutti i dettagli di un'anagrafica indistintamente. Il valore dell'ordinamento può essere
public TipoAnagraficaDettaglio ritornaTipoAnagraficaDettaglioDaDescrizione(String nome) throws Throwable
Ritorna il TipoAnagraficaDettaglio a partire dalla sua descrizione
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
Se validita è impostato a true vengono restituiti soltanto i dettagli correntemente attivi.
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
public void rimuoviDettaglio(Vector<AnagraficaDettaglio> anagraficheDettaglio) throws Throwable
Elimina dal database i dettagli passati in input.
Questo processo si occupa della gestione di oggetti di tipo RuoloAnagrafica.
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.
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.
public Ruolo getRuoloByDescrizione(String descrizione) throws Throwable
Ritorna il tipo di Ruolo a partire dalla sua descrizione
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:
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
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.
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.
public TipoDominio ritornaTipoAlberoByDescrizione(String description) throws Throwable
Restituisce l'oggetto che rappresenta il tipo di nodo a partire dalla sua descrizione.
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").