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:

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:

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<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


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

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:

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").