====== 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:
{{:cn:ccr:aai:doc:godiva:godiva_processo_dataaccess.png?nolink|Schema processi GODiVA}}
====== 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 |
| EMail | 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 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 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 ritornaTuttiIDettagliPerAnagraficaETipo(Anagrafica anagrafica, Vector tipoDettaglio, Integer ordinamento) throws Throwable
public Vector ritornaTuttiIDettagliPerAnagraficaETipo(Anagrafica anagrafica, Vector 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 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 getRuoliPerAnagraficaID(Integer anagraficaID) throws Throwable
public Vector 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 getRuoliPerIdAnaEIdRuolo(Integer idAnagrafica, Integer idRuolo) throws Throwable
public Vector 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").