User Tools

Site Tools


cn:ccr:aai:doc:godiva:processi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
cn:ccr:aai:doc:godiva:processi [2016/11/15 16:12] – created fserafin@infn.itcn:ccr:aai:doc:godiva:processi [2016/11/16 11:35] (current) fserafin@infn.it
Line 1: Line 1:
 +====== 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 ====
 +<code java>
 +public Anagrafica getAnagraficaById(Integer id) throws Throwable
 +</code>
 +Ritorna l'oggetto Anagrafica a partire dalla primary key //id//
 +
 +----
 +==== salvaAnagrafica ====
 +<code java>
 +public Anagrafica salvaAnagrafica(Anagrafica ao) throws Throwable
 +</code>
 +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 ====
 +<code java>
 +public Vector<AnagraficaDettaglio> getDettaglioByDescEIdAnagrafica(String desc, Integer idAnagrafica) throws Throwable
 +</code>
 +
 +Ritorna tutti i dettagli di un'anagrafica a partire dalla descrizione del dettaglio e l'id dell'anagrafica
 +
 +----
 +==== ritornaTuttiIDettagliPerAnagrafica ====
 +<code java>
 +public Vector<AnagraficaDettaglio> ritornaTuttiIDettagliPerAnagrafica(Anagrafica anagrafica, Integer ordinamento) throws Throwable
 +</code>
 +
 +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 ====
 +<code java>
 +public TipoAnagraficaDettaglio ritornaTipoAnagraficaDettaglioDaDescrizione(String nome) throws Throwable
 +</code>
 +
 +Ritorna il **TipoAnagraficaDettaglio** a partire dalla sua descrizione
 +
 +----
 +==== ritornaTuttiIDettagliPerAnagraficaETipo ====
 +<code java>
 +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
 +</code>
 +
 +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 ====
 +<code java>
 +public void salvaDettaglio(AnagraficaDettaglio anagraficaDettaglio) throws Throwable
 +</code>
 +
 +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 ====
 +<code java>
 +public void rimuoviDettaglio(Vector<AnagraficaDettaglio> anagraficheDettaglio) throws Throwable
 +</code>
 +
 +Elimina dal database i dettagli passati in input.
 +
 +===== GestioneRuoli =====
 +Questo processo si occupa della gestione di oggetti di tipo **RuoloAnagrafica**.
 +
 +----
 +==== getRuoliPerAnagraficaID ====
 +<code java>
 +public Vector<RuoloAnagrafica> getRuoliPerAnagraficaID(Integer anagraficaID) throws Throwable
 +public Vector<RuoloAnagrafica> getRuoliPerAnagraficaID(Integer anagraficaID, Date istante, Ruolo r) throws Throwable
 +</code>
 +
 +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 ====
 +<code java>
 +public Vector<RuoloAnagrafica> getRuoliPerIdAnaEIdRuolo(Integer idAnagrafica, Integer idRuolo) throws Throwable
 +public Vector<RuoloAnagrafica> getRuoliPerIdAnaEIdRuolo(Integer idAnagrafica, Integer idRuolo, Boolean stato) throws Throwable
 +</code>
 +
 +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 ====
 +<code java>
 +public Ruolo getRuoloByDescrizione(String descrizione) throws Throwable
 +</code>
 +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 ====
 +<code java>
 +public NodoDominio ritornaNodoDominioByTipoEID(Integer domainTypeID, Integer nodeID) throws Throwable
 +</code>
 +
 +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 ====
 +<code java>
 +public NodoDominio ritornaNodoDominioDaIdTipoEDescrizione(Integer idTipo, String descrizione) throws Throwable
 +</code>
 +
 +Ritorna l'oggetto **NodoDominio** a partire dal tipo di nodo, specificato tramite //idTipo//, e dalla descrizione del nodo.
 +
 +Esempio <code>ritornaNodoDominioDaIdTipoEDescrizione(1, "INFN");</code> ritorna il nodo dell'INFN.
 +
 +----
 +==== ritornaTipoAlberoByDescrizione ====
 +<code java>
 +public TipoDominio ritornaTipoAlberoByDescrizione(String description) throws Throwable
 +</code>
 +
 +Restituisce l'oggetto che rappresenta il tipo di nodo a partire dalla sua descrizione.
 +
 +----
 +==== ritornaNodoDiLivelloNNelPathDelNodoDominio ====
 +<code java>
 +public NodoDominio ritornaNodoDiLivelloNNelPathDelNodoDominio(NodoDominio nodePathLeaf, Integer requestedLevel) throws Throwable
 +</code>
 +
 +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:
 +<code java>
 +NodoDominio nodoLiv2 = ritornaNodoDiLivelloNNelPathDelNodoDominio(nodo, 2);
 +</code>
 +
 +Al termine della chiamata, la variabile //nodoLiv2// conterrà il nodo "Amministrazione Centrale" perché è al secondo livello del path (il primo è "INFN").

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki