Class ReportCommand

java.lang.Object
it.rol.bean.ItemBean
it.rol.command.ReportCommand
All Implemented Interfaces:
Command, Constants, Serializable, Comparable<ItemBean>

public class ReportCommand extends ItemBean implements Command, Constants

ReportCommand.java
Implementa la logica per la generazione di informazioni aggregate inerenti la mappatura dei rischi corruttivi cui possono essere esposti i processi organizzativi (ROL).

Author:
Giovanroberto Torre
See Also:
  • Field Details

    • LOG

      protected static Logger LOG
      Log per debug in produzione
  • Constructor Details

    • ReportCommand

      public ReportCommand()
      Crea una nuova istanza di questa Command
  • Method Details

    • init

      public void init(ItemBean voceMenu) throws CommandException

      Raccoglie i valori dell'oggetto ItemBean e li passa a questa classe command.

      Specified by:
      init in interface Command
      Parameters:
      voceMenu - la VoceMenuBean pari alla Command presente.
      Throws:
      CommandException - se l'attributo paginaJsp di questa command non e' stato valorizzato.
    • execute

      public void execute(javax.servlet.http.HttpServletRequest req) throws CommandException

      Gestisce il flusso principale.

      Prepara i bean.

      Passa nella Request i valori che verranno utilizzati dall'applicazione.

      Specified by:
      execute in interface Command
      Parameters:
      req - la HttpServletRequest contenente la richiesta del client
      Throws:
      CommandException - se si verifica un problema, tipicamente nell'accesso a campi non accessibili o in qualche altro tipo di puntamento
    • retrieveIndicators

      public static ArrayList<ProcessBean> retrieveIndicators(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, int muffler, DBWrapper db) throws CommandException

      Seleziona da database i valori degli indicatori di rischio tramite una estrazione dati.

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi trovati in base a una rilevazione il cui identificativo viene accettato come argomento, ma i cui figli non contengono i valori degli indicatori di rischio totalizzati, restituisce una ArrayList di macroprocessi dove ogni macroprocesso contiene internamente i suoi processi e questi gli indicatori di rischio i cui valori vengono recuperati da database, ove sono stati memorizzati in base a un pre-calcolo (caching).

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di indicatori di rischio
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      muffler - un intero da sottrarre ai valori effettivi degli indicatori (per non alterare i valori, impostare questo parametro pari a 0)
      db - WebStorage per l'accesso ai dati
      Returns:
      ArrayList<ProcessBean> - lista di macroprocessi contenenti i relativi figli e, questi, gli indicatori di rischio
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • computeIndicators

      public static ArrayList<ProcessBean> computeIndicators(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Calcola a runtime i valori degli indicatori di rischio tramite l'invocazione di un metodo che a sua volta richiama una serie di altri metodi, ciascuno implementate l'algoritmo di un diverso indicatore di rischio .

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti dall'anticorruzione trovati in base a una rilevazione il cui identificativo viene accettato come argomento, ma i cui figli non contengono i valori degli indicatori di rischio totalizzati, restituisce una ArrayList di macroprocessi dove ogni macroprocesso contiene internamente i suoi processi e questi gli indicatori di rischio, i cui valori vengono calcolati a runtime.

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di indicatori di rischio
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      ArrayList<ProcessBean> - lista di macroprocessi contenenti i loro processi figli e, questi, i valori degli indicatori di rischio
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • retrieveStructures

      public static HashMap<Integer,ArrayList<DepartmentBean>> retrieveStructures(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi nel contesto di una rilevazione, i cui figli non contengono al proprio interno le fasi (e tantomeno, queste, le strutture che le erogano), restituisce una mappa di strutture associate a ciascun processo tramite le sue fasi, indicizzata per identificativo di processo, incapsulato in un Wrapper di tipo primitivo.

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di strutture associate
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      HashMap<Integer, ArrayList<DepartmentBean>> - lista di strutture collegate al processo_at il cui identificativo e' incapsulato in chiave
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • retrieveSubjects

      public static HashMap<Integer,ArrayList<DepartmentBean>> retrieveSubjects(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi nel contesto di una rilevazione, i cui figli non contengono al proprio interno le fasi (e tantomeno, queste, i soggetti contingenti che le sovrintendono), restituisce una mappa di soggetti associati a ciascun processo figlio (quindi processo di livello 2, no macro no sub) tramite le sue fasi; la mappa (Dictionary) è indicizzata per identificativo di processo at, incapsulato in un Wrapper di tipo primitivo.

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di strutture associate
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      HashMap<Integer, ArrayList<DepartmentBean>> - lista di soggetti collegati al processo_at il cui identificativo e' incapsulato in chiave
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • retrieveRisks

      public static HashMap<Integer,ArrayList<RiskBean>> retrieveRisks(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi trovati in base a una rilevazione il cui identificativo viene accettato come argomento, ma i cui figli non contengono al proprio interno i rischi, restituisce una mappa di rischi associati a ciascun processo, indicizzata per identificativo di processo, incapsulato in un Wrapper di tipo primitivo.

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di strutture associate
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      HashMap<Integer, ArrayList<DepartmentBean>> - lista di strutture collegate al processo_at il cui identificativo e' incapsulato in chiave
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • retrieveRisksByProcess

      public static LinkedHashMap<ProcessBean,ArrayList<RiskBean>> retrieveRisksByProcess(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi trovati in base a una rilevazione il cui identificativo viene accettato come argomento, ma i cui figli non contengono al proprio interno i rischi, restituisce una mappa di rischi associati a ciascun processo, indicizzata per il processo stesso.

      Attenzione: nel momento dell'implementazione di questo metodo, non risultano processi con nomi duplicati, però in realtà i processi potrebbero avere nomi uguali persino all'interno della stessa rilevazione (non c'è nessun vincolo sull'unicità del nome del processo nella relativa tabella del db), per cui si è ritenuto opportuno gestire questa potenziale collisione effettuando l'override dei metodi di comparazione nel bean del processo e poi utilizzare direttamente il processo stesso come chiave. Si può valutare, in seguito, di sostituire completamente con il presente metodo con l'altro analogo, che imposta come chiave l'identificativo del processo (quello sí certamente univoco).

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di strutture associate
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      HashMap<ProcessBean, ArrayList<RiskBean>> - lista di rischi collegati al processo_at incapsulato in chiave
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • retrieveMitigatedRisksByProcess

      public static LinkedHashMap<ProcessBean,ArrayList<RiskBean>> retrieveMitigatedRisksByProcess(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi trovati in base a una rilevazione il cui identificativo viene accettato come argomento, ma i cui figli non contengono al proprio interno i rischi, restituisce una mappa di rischi associati a ciascun processo, indicizzata per il processo stesso, e in cui il valore del PxI del processo, idealmente estensibile a tutti i rischi del processo stesso, viene mitigato, per ogni rischio, tramite la verifica dell'esistenza di misure di mitigazione previste per la mitigazione del rischio stesso.

      Attenzione: il ProcessBean viene utilizzato qui come chiave grazie all'override, nella classe stessa, dei metodi di comparazione nel bean del processo (che mi sono dovuto scrivere).

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di rischi associati
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      HashMap<ProcessBean, ArrayList<RiskBean>> - lista di rischi, con PxI mitigato in funzione delle misure previste, collegati al processo_at incapsulato in chiave
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • retrieveMonitoratedRisksByProcess

      public static LinkedHashMap<ProcessBean,ArrayList<RiskBean>> retrieveMonitoratedRisksByProcess(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti a fini anticorruttivi trovati in base a una rilevazione il cui identificativo viene accettato come argomento, ma i cui figli non contengono al proprio interno i rischi, restituisce una mappa di rischi associati a ciascun processo, indicizzata per il processo stesso, e in cui il valore del PxI del processo, idealmente estensibile a tutti i rischi del processo stesso, viene mitigato, per ogni rischio, tramite la verifica dell'esistenza di misure di mitigazione applicate al rischio stesso.

      Nel ProcessBean ho implementato i metodi che permettono di utilizzarlo come chiave nelle mappe.

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - privi di rischi associati
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Returns:
      HashMap<ProcessBean, ArrayList<RiskBean>> - lista di rischi, con PxI mitigato in funzione delle misure applicate, collegati al processo_at incapsulato in chiave
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento
    • refreshIndicators

      public static void refreshIndicators(ArrayList<ProcessBean> mats, PersonBean user, String codeSurvey, DBWrapper db) throws CommandException

      Ricevuta una ArrayList (albero, vista gerarchica) di tutti macroprocessi censiti dall'anticorruzione trovati in base a una rilevazione il cui identificativo viene accettato come argomento ed i cui figli già contengono i valori degli indicatori di rischio calcolati, cancella tutti i valori degli indicatori di rischio relativi a tutti i processi censiti dall'anticorruzione eventualmente presenti nella tabella dei risultati e inserisce nella stessa tabella i nuovi valori ricevuti tramite il parametro.

      Se si verifica un problema nell'inserimento, il risultato sarà una cancellazione, perché le due operazioni di scrittura non sono in transazione; ciò è voluto in quanto, anche se si eliminano i valori e non se ne inseriscono di nuovi, si stanno solo eliminando valori di caching pre-calcolati e, by default, il software non effettua questa operazione di ricalcolo, ma mostra i valori calcolati in precedenza.
      Eventualmente, in futuro si potrebbe valutare di rendere atomiche la cancellazione e il successivo inserimento; ciò può essere fatto in diversi modi:

      1. effettuare prima un test sul buon esito dell'inserimento tramite un accodamento delle nuove tuple e poi di effettuare la cancellazione totale e, infine, il nuovo inserimento;
      2. procedere tramite un aggiornamento delle righe modificate piuttosto che tramite una cancellazione non parametrica (la DELETE non parametrica, usata attualmente nel metodo di eliminazione, va sulla tabella, non sulla riga);
      3. mettere nella stessa transazione (nel DBWrapper) prima la cancellazione e poi l'inserimento
      Probabilmente la soluzione più efficiente e semplice è l'ultima.

      Parameters:
      mats - struttura contenente tutti i macroprocessi - e relativi processi figli - corredati di indicatori di rischio valorizzati
      user - utente loggato; viene passato ai metodi del DBWrapper per controllare che abbia i diritti di fare quello che vuol fare
      codeSurvey - il codice della rilevazione
      db - WebStorage per l'accesso ai dati
      Throws:
      CommandException - se si verifica un problema nell'estrazione dei dati, o in qualche tipo di puntamento