Class MeasureCommand

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

public class MeasureCommand extends ItemBean implements Command, Constants

MeasureCommand.java (ms)
Implementa la logica per la gestione delle misure di mitigazione dei rischi corruttivi (ROL).

Created on Tue Mar 5 12:27:01 CET 2024

Author:
Giovanroberto Torre
See Also:
  • Field Details

    • LOG

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

    • MeasureCommand

      public MeasureCommand()
      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
    • loadParams

      public static String loadParams(String part, javax.servlet.http.HttpServletRequest req, HashMap<String,LinkedHashMap<String,String>> formParams) throws CommandException, AttributoNonValorizzatoException
      Valorizza per riferimento una mappa contenente tutti i valori parametrici riscontrati sulla richiesta. Nel caso si stia gestendo i parametri della misura, la Capofila1 Livello1 resta obbligatoria; qualora però la Capofila1 Livello2 sia vuota, l'utente sta comunicando che vuole che la misura di cui ha valorizzato gli estremi venga ricreata per tutte le strutture Livello2 sottostanti alla Capofila1 Livello1 stessa. In tal caso, il metodo restituisce l'id della Capofila1 Livello1 (nel formato thruId.id-codice) in modo che, a valle del richiamo, avvenga l'opportuna duplicazione delle occorrenze delle misure; se invece la misura deve essere associata a una Capofila1 Livello2 specifica (e singola) il metodo restituisce -1.
      Parameters:
      part - la sezione corrente del sito
      req - la HttpServletRequest contenente la richiesta del client
      formParams - mappa da valorizzare per riferimento (ByRef)
      Returns:
      String - il valore dell'ID della Capofila1 Liv1 (se Liv2 e' vuota) oppure -1 se C1 Liv2 e' valorizzata
      Throws:
      CommandException - se si verifica un problema nella gestione degli oggetti data o in qualche tipo di puntamento
      AttributoNonValorizzatoException - se si fa riferimento a un attributo obbligatorio di bean che non viene trovato
    • retrieveMeasure

      public static MeasureBean retrieveMeasure(PersonBean user, String code, CodeBean survey, DBWrapper db) throws WebStorageException, CommandException

      Estrae i dettagli di una misura (compresi i dettagli necessari al monitoraggio) dato il codice e la rilevazione.

      Parameters:
      user - utente loggato
      code - codice della misura cercata
      survey - oggetto rilevazione
      db - databound gia' istanziato
      Returns:
      MeasureBean - misura, da registro, desiderata
      Throws:
      WebStorageException - se si verifica un problema a livello di query o di estrazione
      CommandException - se si verifica un problema nel recupero di valori o in qualche altro tipo di puntamento
    • filter

      public static ArrayList<MeasureBean> filter(ArrayList<MeasureBean> measures)
      Dato un elenco complessivo di misure, restituisce solo quelle che hanno inseriti i dettagli del monitoraggio, ovvero solo le misure monitorate.
      Parameters:
      measures - elenco complessivo di misure di prevenzione
      Returns:
      lista vettoriale ottenuta scartando dall'elenco le misure non monitorate
    • mitigate

      public static InterviewBean mitigate(InterviewBean indicator, ArrayList<MeasureBean> measures) throws CommandException
      Implementa l'algoritmo di mitigazione in funzione delle misure applicate. Ricevuto un indicatore contenente il valore del PxI di un rischio ed una lista di misure applicate al rischio stesso, ricalcola il valore del PxI sottraendo una quantità predefinita per ogni misura trovata, in funzione del carattere della misura stessa. L'operazione è possibile data una funzione di trasformazione che associa ad ogni possibile valore del PxI un numero intero. La differenza tra il valore numerico del PxI trasformato e la somma delle misure può essere sufficiente a determinare un decremento del valore del PxI originario, oppure no. Ciò dipende dal fatto che sia stato raggiunto o meno l'intero inferiore rispetto a quello del PxI originale trasformato in numero. Esempio: se il PxI originale è MEDIO, esso in base alla funzione di trasformazione vale 2; se a seguito dell'applicazione delle misure si ottiene una somma algebrica di 1.5 o 1.0 allora il rischio è stato ridotto, passando a MEDIO a BASSO; altrimenti, se la parte intera non è strettamente minore di 2, il rischio resta MEDIO. Sulla base di questo esempio si evince che l'algoritmo considera sempre la parte intera, mai la parte decimale.
      Parameters:
      indicator - oggetto contenente il valore del PxI assegnato al rischio
      measures - lista di misure applicate al rischio
      Returns:
      InterviewBean - oggetto contenente il valore del PxI del rischio, eventualmente mitigato
      Throws:
      CommandException - se si verifica un problema nel recupero di un attributo del bean o in qualche operazione o puntamento
    • computePIMitigated

      public static InterviewBean computePIMitigated(String PIN, ArrayList<RiskBean> mitigatingRisks) throws CommandException
      Implementa l'algoritmo di ricalcolo del PxI complessivo a partire dai valori dei PxI dei rischi, calmierati e arrotondati. Dato in input un elenco di rischi, ciascuno che deve contenere un valore di PxI del rischio mitigato in funzione delle misure applicate, ottiene un valore unico del PxI per il processo cui i rischi calmierati sono collegati; il metodo può essere applicato alla fase della stima o a quella del monitoraggio, in quanto l'algoritmo di ricalcolo resta il medesimo e il nome del PxI (stima o monitoraggio) viene passato come parametro.
      Parameters:
      PIN - il nome dell'indicatore (PxI stima o PxI effettivo)
      mitigatingRisks - elenco di rischi cui sono state applicate le misure di mitigazione
      Returns:
      InterviewBean - oggetto contenente il livello di rischio dell'indice PxI, calcolato dall'algoritmo in base ai valori dei PxI calmierati ricevuti
      Throws:
      CommandException - se si verifica un problema nel recupero di un attributo di un bean o un puntamento erroneo
    • monitor

      public static ArrayList<MeasureBean> monitor(PersonBean user, CodeBean survey, DBWrapper db, ArrayList<MeasureBean> measures) throws CommandException
      Implementa l'algoritmo di valutazione dell'applicazione delle misure in funzione del monitoraggio. L'algoritmo funziona nel seguente modo:
       Cicla sulle misure
       |_Per ogni misura...
         |_Verifica se la misura ha fasi
           |_Se ha fasi...
             |_Verifica se le fasi hanno indicatori
               |_Se hanno indicatori...
                 |_Verifica che ci sia uno e un solo indicatore master
                   |_Se c'è uno e un solo indicatore master...
                     |_Verifica se ci sono misurazioni associate
                       |_Se ci sono misurazioni associate...
                         |_Considera l'ultima misurazione
                           |_Se l'ultima misurazione ha raggiunto il target dell'indicatore master...
                             |-Allora la misura è applicata
                             |-Altrimenti la misura non è applicata
       
      Regole di business. Per poter valutare l'applicazione della misura:
      1. deve esistere un indicatore master applicato a una fase della misura
      2. non possono esistere piú indicatori master su una sola misura
      3. non può esistere una misura senza un indicatore master
      4. deve esistere almeno una misurazione sull'indicatore master
      Per poter considerare la misura applicata:
      • il valore dell'ultima misurazione deve coincidere con (o superare) il target dell'indicatore master
      Parameters:
      user - utente loggato
      survey - estremi della rilevazione di interesse
      db - istanza di DataBound
      measures - lista di misure applicate al rischio
      Returns:
      ArrayList<MeasureBean> -
      Throws:
      CommandException - se si verifica un problema nel recupero di un attributo del bean o in qualche operazione o puntamento