DatiCollezionati.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.core.controllo_traffico.beans;

  21. import java.io.Serializable;
  22. import java.text.SimpleDateFormat;
  23. import java.util.ArrayList;
  24. import java.util.Date;
  25. import java.util.List;

  26. import org.openspcoop2.core.commons.CoreException;
  27. import org.openspcoop2.core.constants.TipoPdD;
  28. import org.openspcoop2.core.controllo_traffico.constants.TipoBanda;
  29. import org.openspcoop2.core.controllo_traffico.constants.TipoControlloPeriodo;
  30. import org.openspcoop2.core.controllo_traffico.constants.TipoFinestra;
  31. import org.openspcoop2.core.controllo_traffico.constants.TipoLatenza;
  32. import org.openspcoop2.core.controllo_traffico.constants.TipoRisorsa;
  33. import org.openspcoop2.core.controllo_traffico.driver.PolicyException;
  34. import org.openspcoop2.utils.Map;
  35. import org.openspcoop2.utils.MapKey;
  36. import org.openspcoop2.utils.date.DateManager;
  37. import org.openspcoop2.utils.date.DateUtils;
  38. import org.openspcoop2.utils.date.UnitaTemporale;
  39. import org.slf4j.Logger;

  40. /**
  41.  * DatiCollezionati
  42.  *
  43.  * @author Andrea Poli (poli@link.it)
  44.  * @author $Author$
  45.  * @version $Rev$, $Date$
  46.  */
  47. public class DatiCollezionati implements Serializable {

  48.     /**
  49.      *
  50.      */
  51.     private static final long serialVersionUID = 1L;
  52.    
  53.     public DatiCollezionati(Date updatePolicyDate, Date gestorePolicyConfigDate) {
  54.         this.updatePolicyDate = updatePolicyDate;
  55.         this.gestorePolicyConfigDate = gestorePolicyConfigDate;
  56.     }

  57.     // data di lettura delle informazioni
  58.     private Date cloneDate = null; // non deve essere gestita. Viene solamente inizializzata ad ogni clone
  59.    
  60.     // tipo di risorsa
  61.     protected TipoRisorsa tipoRisorsa = null;
  62.    
  63.     // threads
  64.     protected Long activeRequestCounter = null; // tiene traccia del numero di richieste attive sempre. Utile in jmx
  65.    
  66.     // data di creazione
  67.     protected Date creationDate = null;
  68.     // data di registrazione/aggiornamento policy
  69.     private Date updatePolicyDate = null;
  70.     // dati impostazione gestore della policy
  71.     protected Date gestorePolicyConfigDate = null;
  72.    
  73.     // dati di attuazione manuale di un reset dei contatori
  74.     private Long manuallyResetPolicyTimeMillis = null;

  75.     private static final MapKey<String> START_PROCESS_REQUEST_TIME_MS = Map.newMapKey("START_PROCESS_REQUEST_TIME_MS");
  76.    
  77.     // dati iniziali
  78.     private UnitaTemporale policyDateTypeInterval = null;
  79.     private Integer policyDateInterval = null;
  80.     private Boolean policyDateCurrentInterval  = null;
  81.     private TipoFinestra policyDateWindowInterval = null;
  82.     protected Boolean policyRealtime  = null;
  83.     // dati dinamici
  84.     protected Date policyDate = null;
  85.     protected Long policyRequestCounter = null;
  86.     protected Long policyCounter = null; // utilizzato per tempi o banda
  87.     protected Long policyDenyRequestCounter = null;
  88.     private Date oldPolicyDate = null;
  89.     private Long oldPolicyRequestCounter = null;
  90.     private Long oldPolicyCounter = null; // utilizzato per tempi o banda
  91.    
  92.     // dati iniziali degrado prestazionale
  93.     private UnitaTemporale policyDegradoPrestazionaleDateTypeInterval = null;
  94.     private Integer policyDegradoPrestazionaleDateInterval  = null;
  95.     private Boolean policyDegradoPrestazionaleDateCurrentInterval = null;
  96.     private TipoFinestra policyDegradoPrestazionaleDateWindowInterval = null;
  97.     protected  Boolean policyDegradoPrestazionaleRealtime  = null;
  98.     // dati dinamici degrado prestazionale
  99.     protected Date policyDegradoPrestazionaleDate = null;
  100.     protected Long policyDegradoPrestazionaleRequestCounter = null;
  101.     protected Long policyDegradoPrestazionaleCounter= null;
  102.     private Date oldPolicyDegradoPrestazionaleDate = null;
  103.     private Long oldPolicyDegradoPrestazionaleRequestCounter = null;
  104.     private Long oldPolicyDegradoPrestazionaleCounter = null; // utilizzato per tempi o banda
  105.    
  106.        

  107.     public void initDatiIniziali(ActivePolicy activePolicy){
  108.        
  109.         // tipo di risorsa
  110.         this.tipoRisorsa = activePolicy.getTipoRisorsaPolicy();
  111.        
  112.         // threads
  113.         this.activeRequestCounter = 0l;
  114.        
  115.         // data di creazione
  116.         this.creationDate = DateManager.getDate();
  117.         // data di registrazione policy
  118.         this.updatePolicyDate = activePolicy.getInstanceConfiguration().getUpdateTime();
  119.        
  120.         // Policy
  121.        
  122.         if(!activePolicy.getConfigurazionePolicy().isSimultanee()
  123.                 &&
  124.                 TipoControlloPeriodo.REALTIME.equals(activePolicy.getConfigurazionePolicy().getModalitaControllo())){
  125.            
  126.             this.policyDateCurrentInterval = true; // cablato
  127.            
  128.             this.policyDateWindowInterval = activePolicy.getConfigurazionePolicy().getFinestraOsservazione();
  129.            
  130.             switch (activePolicy.getConfigurazionePolicy().getTipoIntervalloOsservazioneRealtime()) {
  131.             case SECONDI:
  132.                 this.policyDateTypeInterval = UnitaTemporale.SECONDI;
  133.                 break;
  134.             case MINUTI:
  135.                 this.policyDateTypeInterval = UnitaTemporale.MINUTI;
  136.                 break;
  137.             case ORARIO:
  138.                 this.policyDateTypeInterval = UnitaTemporale.ORARIO;
  139.                 break;
  140.             case GIORNALIERO:
  141.                 this.policyDateTypeInterval = UnitaTemporale.GIORNALIERO;
  142.                 break;
  143.             }
  144.            
  145.             this.policyDateInterval = activePolicy.getConfigurazionePolicy().getIntervalloOsservazione();
  146.            
  147.             this.policyRealtime = true;
  148.            
  149.         }
  150.         else if(TipoControlloPeriodo.STATISTIC.equals(activePolicy.getConfigurazionePolicy().getModalitaControllo())){
  151.            
  152.             this.policyDateWindowInterval = activePolicy.getConfigurazionePolicy().getFinestraOsservazione();
  153.            
  154.             if(TipoFinestra.SCORREVOLE.equals(activePolicy.getConfigurazionePolicy().getFinestraOsservazione())){
  155.                 this.policyDateCurrentInterval = activePolicy.getConfigurazioneControlloTraffico().isElaborazioneStatistica_finestraScorrevole_gestioneIntervalloCorrente();
  156.                 this.policyDateTypeInterval = UnitaTemporale.ORARIO; // USARE SEMPRE L'INTERVALLO PIU' STRETTO. Se si introdurranno i minuti si dovrà utilizzare i minuti.
  157.                
  158.                 // E' però necessaria la conversione in ore.
  159.                 switch (activePolicy.getConfigurazionePolicy().getTipoIntervalloOsservazioneStatistico()) {
  160.                 case ORARIO:
  161.                     this.policyDateInterval = activePolicy.getConfigurazionePolicy().getIntervalloOsservazione();
  162.                     break;
  163.                 case GIORNALIERO:
  164.                     this.policyDateInterval = activePolicy.getConfigurazionePolicy().getIntervalloOsservazione() * 24;
  165.                     break;
  166.                 case SETTIMANALE:
  167.                     this.policyDateInterval = activePolicy.getConfigurazionePolicy().getIntervalloOsservazione() * 24 * 7;
  168.                     break;
  169.                 case MENSILE:
  170.                     this.policyDateInterval = activePolicy.getConfigurazionePolicy().getIntervalloOsservazione() * 24 * 30; // (utilizzo 30 come giorni medi di un mese)
  171.                     break;
  172.                 }
  173.             }
  174.             else{
  175.                 this.policyDateCurrentInterval = true; // cablato
  176.                
  177.                 switch (activePolicy.getConfigurazionePolicy().getTipoIntervalloOsservazioneStatistico()) {
  178.                 case ORARIO:
  179.                     this.policyDateTypeInterval = UnitaTemporale.ORARIO;
  180.                     break;
  181.                 case GIORNALIERO:
  182.                     this.policyDateTypeInterval = UnitaTemporale.GIORNALIERO;
  183.                     break;
  184.                 case SETTIMANALE:
  185.                     this.policyDateTypeInterval = UnitaTemporale.SETTIMANALE;
  186.                     break;
  187.                 case MENSILE:
  188.                     this.policyDateTypeInterval = UnitaTemporale.MENSILE;
  189.                     break;
  190.                 }
  191.                
  192.                 this.policyDateInterval = activePolicy.getConfigurazionePolicy().getIntervalloOsservazione();
  193.             }
  194.            
  195.             this.policyRealtime = false;
  196.            
  197.         }
  198.        
  199.        
  200.         // DegradoPrestazionale
  201.        
  202.         if(activePolicy.getConfigurazionePolicy().isApplicabilitaDegradoPrestazionale()){
  203.        
  204.             if(TipoControlloPeriodo.REALTIME.equals(activePolicy.getConfigurazionePolicy().getDegradoAvgTimeModalitaControllo())){
  205.                
  206.                 this.policyDegradoPrestazionaleDateCurrentInterval = true; // cablato
  207.                
  208.                 this.policyDegradoPrestazionaleDateWindowInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeFinestraOsservazione();
  209.                
  210.                 switch (activePolicy.getConfigurazionePolicy().getDegradoAvgTimeTipoIntervalloOsservazioneRealtime()) {
  211.                 case SECONDI:
  212.                     this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.SECONDI;
  213.                     break;
  214.                 case MINUTI:
  215.                     this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.MINUTI;
  216.                     break;
  217.                 case ORARIO:
  218.                     this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.ORARIO;
  219.                     break;
  220.                 case GIORNALIERO:
  221.                     this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.GIORNALIERO;
  222.                     break;
  223.                 }
  224.                
  225.                 this.policyDegradoPrestazionaleDateInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeIntervalloOsservazione();
  226.                
  227.                 this.policyDegradoPrestazionaleRealtime = true;
  228.                
  229.             }
  230.             else if(TipoControlloPeriodo.STATISTIC.equals(activePolicy.getConfigurazionePolicy().getDegradoAvgTimeModalitaControllo())){
  231.                
  232.                 this.policyDegradoPrestazionaleDateWindowInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeFinestraOsservazione();
  233.                
  234.                 if(TipoFinestra.SCORREVOLE.equals(activePolicy.getConfigurazionePolicy().getDegradoAvgTimeFinestraOsservazione())){
  235.                     this.policyDegradoPrestazionaleDateCurrentInterval = activePolicy.getConfigurazioneControlloTraffico().isElaborazioneStatistica_finestraScorrevole_gestioneIntervalloCorrente();
  236.                     this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.ORARIO; // USARE SEMPRE L'INTERVALLO PIU' STRETTO. Se si introdurranno i minuti si dovrà utilizzare i minuti.
  237.                    
  238.                     // E' però necessaria la conversione in ore.
  239.                     switch (activePolicy.getConfigurazionePolicy().getDegradoAvgTimeTipoIntervalloOsservazioneStatistico()) {
  240.                     case ORARIO:
  241.                         this.policyDegradoPrestazionaleDateInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeIntervalloOsservazione();
  242.                         break;
  243.                     case GIORNALIERO:
  244.                         this.policyDegradoPrestazionaleDateInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeIntervalloOsservazione() * 24;
  245.                         break;
  246.                     case SETTIMANALE:
  247.                         this.policyDegradoPrestazionaleDateInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeIntervalloOsservazione() * 24 * 7;
  248.                         break;
  249.                     case MENSILE:
  250.                         this.policyDegradoPrestazionaleDateInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeIntervalloOsservazione() * 24 * 30; // (utilizzo 30 come giorni medi di un mese)
  251.                         break;
  252.                     }
  253.                 }
  254.                 else{
  255.                     this.policyDegradoPrestazionaleDateCurrentInterval = true; // cablato
  256.                    
  257.                     switch (activePolicy.getConfigurazionePolicy().getDegradoAvgTimeTipoIntervalloOsservazioneStatistico()) {
  258.                     case ORARIO:
  259.                         this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.ORARIO;
  260.                         break;
  261.                     case GIORNALIERO:
  262.                         this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.GIORNALIERO;
  263.                         break;
  264.                     case SETTIMANALE:
  265.                         this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.SETTIMANALE;
  266.                         break;
  267.                     case MENSILE:
  268.                         this.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.MENSILE;
  269.                         break;
  270.                     }
  271.                    
  272.                     this.policyDegradoPrestazionaleDateInterval = activePolicy.getConfigurazionePolicy().getDegradoAvgTimeIntervalloOsservazione();
  273.                 }
  274.                
  275.                 this.policyDegradoPrestazionaleRealtime = false;
  276.                
  277.             }
  278.            
  279.         }
  280.     }
  281.    
  282.     public DatiCollezionati newInstance() {
  283.         return internalNewInstance(false); // se servisse avere una immagine con i dati remoti, usare la clone con il boolean.
  284.     }
  285.     public DatiCollezionati newInstance(boolean readRemoteInfo) {
  286.         return internalNewInstance(readRemoteInfo);
  287.     }
  288.     private DatiCollezionati internalNewInstance(boolean readRemoteInfo) {
  289.         Date updatePolicyDateCheck = new Date(this.updatePolicyDate.getTime());
  290.         Date gestorePolicyConfigDateCheck = null;
  291.         if(this.gestorePolicyConfigDate!=null) {
  292.             gestorePolicyConfigDateCheck = new Date(this.gestorePolicyConfigDate.getTime());
  293.         }
  294.        
  295.         DatiCollezionati dati = new DatiCollezionati(updatePolicyDateCheck, gestorePolicyConfigDateCheck);
  296.        
  297.         return setValuesIn(dati, readRemoteInfo);
  298.     }

  299.     public DatiCollezionati setValuesIn(DatiCollezionati dati, boolean readRemoteInfo){
  300.        
  301.         // data di registrazione/aggiornamento policy
  302.        
  303.         dati.cloneDate = DateManager.getDate();
  304.        
  305.         // tipo di risorsa
  306.         if(this.tipoRisorsa!=null){
  307.             dati.tipoRisorsa = TipoRisorsa.toEnumConstant(this.tipoRisorsa.getValue());
  308.         }
  309.        
  310.         // threads
  311.         Long getActiveRequestCounter = this.getActiveRequestCounter(readRemoteInfo);
  312.         if(getActiveRequestCounter!=null) {
  313.             dati.activeRequestCounter = Long.valueOf(getActiveRequestCounter.longValue()+"");
  314.         }
  315.        
  316.         // data di creazione
  317.         if(this.creationDate!=null) {
  318.             dati.creationDate = new Date(this.creationDate.getTime());
  319.         }
  320.        
  321.         // dati iniziali
  322.         if(this.policyDateTypeInterval!=null){
  323.             dati.policyDateTypeInterval = UnitaTemporale.toEnumConstant(this.policyDateTypeInterval.getValue());
  324.         }
  325.         if(this.policyDateInterval!=null){
  326.             dati.policyDateInterval = Integer.valueOf(this.policyDateInterval.intValue()+"");
  327.         }
  328.         if(this.policyDateCurrentInterval!=null){
  329.             dati.policyDateCurrentInterval = Boolean.valueOf(this.policyDateCurrentInterval.booleanValue()+"");
  330.         }
  331.         if(this.policyDateWindowInterval!=null){
  332.             dati.policyDateWindowInterval = TipoFinestra.toEnumConstant(this.policyDateWindowInterval.getValue());
  333.         }
  334.         if(this.policyRealtime!=null){
  335.             dati.policyRealtime = Boolean.valueOf(this.policyRealtime+"");
  336.         }
  337.        
  338.         // dati dinamici    
  339.         if(this.policyDate!=null){
  340.             dati.policyDate = new Date(this.policyDate.getTime());
  341.         }  
  342.         Long getPolicyRequestCounter = this.getPolicyRequestCounter(readRemoteInfo);
  343.         if(getPolicyRequestCounter!=null){
  344.             dati.policyRequestCounter = Long.valueOf(getPolicyRequestCounter.longValue()+"");
  345.         }
  346.         Long getPolicyCounter = this.getPolicyCounter(readRemoteInfo);
  347.         if(getPolicyCounter!=null){
  348.             dati.policyCounter = Long.valueOf(getPolicyCounter.longValue()+"");
  349.         }
  350.         Long getPolicyDenyRequestCounter = this.getPolicyDenyRequestCounter(readRemoteInfo);
  351.         if(getPolicyDenyRequestCounter!=null){
  352.             dati.policyDenyRequestCounter = Long.valueOf(getPolicyDenyRequestCounter.longValue()+"");
  353.         }
  354.         if(this.oldPolicyDate!=null){
  355.             dati.oldPolicyDate = new Date(this.oldPolicyDate.getTime());
  356.         }  
  357.         if(this.oldPolicyRequestCounter!=null){
  358.             dati.oldPolicyRequestCounter = Long.valueOf(this.oldPolicyRequestCounter.longValue()+"");
  359.         }
  360.         if(this.oldPolicyCounter!=null){
  361.             dati.oldPolicyCounter = Long.valueOf(this.oldPolicyCounter.longValue()+"");
  362.         }
  363.        
  364.         // dati iniziali degrado prestazionale
  365.         if(this.policyDegradoPrestazionaleDateTypeInterval!=null){
  366.             dati.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.toEnumConstant(this.policyDegradoPrestazionaleDateTypeInterval.getValue());
  367.         }
  368.         if(this.policyDegradoPrestazionaleDateInterval!=null){
  369.             dati.policyDegradoPrestazionaleDateInterval = Integer.valueOf(this.policyDegradoPrestazionaleDateInterval.intValue()+"");
  370.         }
  371.         if(this.policyDegradoPrestazionaleDateCurrentInterval!=null){
  372.             dati.policyDegradoPrestazionaleDateCurrentInterval = Boolean.valueOf(this.policyDegradoPrestazionaleDateCurrentInterval.booleanValue()+"");
  373.         }
  374.         if(this.policyDegradoPrestazionaleDateWindowInterval!=null){
  375.             dati.policyDegradoPrestazionaleDateWindowInterval = TipoFinestra.toEnumConstant(this.policyDegradoPrestazionaleDateWindowInterval.getValue());
  376.         }
  377.         if(this.policyDegradoPrestazionaleRealtime!=null){
  378.             dati.policyDegradoPrestazionaleRealtime = Boolean.valueOf(this.policyDegradoPrestazionaleRealtime.booleanValue()+"");
  379.         }
  380.        
  381.         // dati dinamici degrado prestazionale
  382.         if(this.policyDegradoPrestazionaleDate!=null){
  383.             dati.policyDegradoPrestazionaleDate = new Date(this.policyDegradoPrestazionaleDate.getTime());
  384.         }  
  385.         Long getPolicyDegradoPrestazionaleRequestCounter = this.getPolicyDegradoPrestazionaleRequestCounter(readRemoteInfo);
  386.         if(getPolicyDegradoPrestazionaleRequestCounter!=null){
  387.             dati.policyDegradoPrestazionaleRequestCounter = Long.valueOf(getPolicyDegradoPrestazionaleRequestCounter.longValue()+"");
  388.         }
  389.         Long getPolicyDegradoPrestazionaleCounter = this.getPolicyDegradoPrestazionaleCounter(readRemoteInfo);
  390.         if(getPolicyDegradoPrestazionaleCounter!=null){
  391.             dati.policyDegradoPrestazionaleCounter = Long.valueOf(getPolicyDegradoPrestazionaleCounter.longValue()+"");
  392.         }
  393.         if(this.oldPolicyDegradoPrestazionaleDate!=null){
  394.             dati.oldPolicyDegradoPrestazionaleDate = new Date(this.oldPolicyDegradoPrestazionaleDate.getTime());
  395.         }  
  396.         if(this.oldPolicyDegradoPrestazionaleRequestCounter!=null){
  397.             dati.oldPolicyDegradoPrestazionaleRequestCounter = Long.valueOf(this.oldPolicyDegradoPrestazionaleRequestCounter.longValue()+"");
  398.         }
  399.         if(this.oldPolicyDegradoPrestazionaleCounter!=null){
  400.             dati.oldPolicyDegradoPrestazionaleCounter = Long.valueOf(this.oldPolicyDegradoPrestazionaleCounter.longValue()+"");
  401.         }
  402.        
  403.        
  404.        
  405.         return dati;
  406.     }
  407.    
  408.     private static final String OCCUPAZIONE_BANDA_KB_INFO = " kb (";
  409.     private static final String OCCUPAZIONE_BANDA_BYTES_INFO = " bytes)";
  410.     private static final String TEMPO_COMPLESSIVO_RISPOSTA_SECONDI_INFO = " secondi (";
  411.     private static final String TEMPO_COMPLESSIVO_RISPOSTA_MILLISECONDI_INFO = " ms)";
  412.     private static final String TEMPO_MEDIO_RISPOSTA_MILLISECONDI_INFO = " ms";
  413.        
  414.     @Override
  415.     public String toString(){
  416.        
  417.         SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  418.        
  419.         StringBuilder bf = new StringBuilder();
  420.        
  421.         bf.append("Dati Generali");
  422.        
  423.         // tipo di risorsa
  424.         String nomeRisorsa = null;
  425.         if(this.tipoRisorsa!=null){
  426.             /**bf.append("Risorsa: ");
  427.             bf.append(this.tipoRisorsa.getValue());*/
  428.             nomeRisorsa = this.tipoRisorsa.getValue();
  429.         }
  430.        
  431.         // threads
  432.         if(bf.length()>0){
  433.             bf.append("\n");
  434.         }
  435.         bf.append("\tRichieste Attive: ");
  436.         bf.append(this.getActiveRequestCounter(true));
  437.        
  438.         // data di creazione
  439.         bf.append("\n");
  440.         bf.append("\tData Attivazione Policy: ");
  441.         bf.append(dateformat.format(this.creationDate));
  442.        
  443.         // data di registrazione/aggiornamento policy
  444.         bf.append("\n");
  445.         bf.append("\tData Registrazione/Aggiornamento Policy: ");
  446.         bf.append(dateformat.format(this.updatePolicyDate));
  447.        
  448.         // data di registrazione/aggiornamento policy
  449.         if(this.gestorePolicyConfigDate!=null) {
  450.             bf.append("\n");
  451.             bf.append("\tData Configurazione Gestore Policy: ");
  452.             bf.append(dateformat.format(this.gestorePolicyConfigDate));
  453.         }
  454.        
  455.         // Data now
  456.         Date now = null;
  457.        
  458.         // Policy
  459.        
  460.         Date leftPrecedente = null;
  461.         Date rightPrecedente = null;
  462.        
  463.         if(this.policyDateWindowInterval!=null){
  464.             bf.append("\nDati collezionati per la metrica '"+nomeRisorsa+"'");
  465.            
  466.             if(this.policyRealtime!=null){
  467.                 bf.append("\n");
  468.                 bf.append("\tModalità di Controllo: ");
  469.                 if(this.policyRealtime!=null && this.policyRealtime.booleanValue()){
  470.                     bf.append("realtime");
  471.                 }
  472.                 else{
  473.                     bf.append("statistica");
  474.                 }
  475.             }
  476.            
  477.             bf.append("\n");
  478.             bf.append("\tFinestra Osservazione: ");
  479.             bf.append(this.policyDateWindowInterval.getValue());
  480.            
  481.             // intervallo
  482.            
  483.             Date left = null;
  484.             Date right = null;
  485.             switch (this.policyDateWindowInterval) {
  486.             case CORRENTE:
  487.                 left = this.getLeftDateWindowCurrentInterval();
  488.                 right = this.getRightDateWindowCurrentInterval();
  489.                 break;
  490.             case PRECEDENTE:
  491.                 left = this.getLeftDateWindowCurrentInterval();
  492.                 right = this.getRightDateWindowCurrentInterval();
  493.                
  494.                 leftPrecedente = this.getLeftDateWindowPrecedentInterval();
  495.                 rightPrecedente = this.getRightDateWindowPrecedentInterval();
  496.                 break;
  497.             case SCORREVOLE:
  498.                 if(now==null){
  499.                     now = DateManager.getDate();
  500.                 }
  501.                 left = this.getLeftDateWindowSlidingInterval(now);
  502.                 right = this.getRightDateWindowSlidingInterval(now);
  503.                 break;
  504.             }
  505.            
  506.             bf.append("\n");
  507.            
  508.             if(left!=null && right!=null){
  509.                 bf.append("\tIntervallo [");
  510.                 bf.append(dateformat.format(left));
  511.                 bf.append(" - ");
  512.                 bf.append(dateformat.format(right));
  513.                 bf.append("]");
  514.             }
  515.             else{
  516.                 if(this.policyDate!=null){
  517.                     bf.append("\tData: ");
  518.                     bf.append(dateformat.format(this.policyDate));
  519.                 }
  520.             }
  521.         }
  522.                    
  523.         Long getPolicyRequestCounter = this.getPolicyRequestCounter(true);
  524.         if(getPolicyRequestCounter!=null){
  525.             bf.append("\n");
  526.             bf.append("\tNumero Richieste Conteggiate: ");
  527.             bf.append(getPolicyRequestCounter);
  528.         }
  529.         Long getPolicyCounter = this.getPolicyCounter(true);
  530.         if(getPolicyCounter!=null){
  531.             bf.append("\n");
  532.             bf.append("\tContatore: ");
  533.             if(this.tipoRisorsa!=null){
  534.                 switch (this.tipoRisorsa) {
  535.                 case NUMERO_RICHIESTE:
  536.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  537.                 case NUMERO_RICHIESTE_FALLITE:
  538.                 case NUMERO_FAULT_APPLICATIVI:
  539.                 case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  540.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  541.                 case DIMENSIONE_MASSIMA_MESSAGGIO: // non viene usata
  542.                     bf.append(getPolicyCounter);
  543.                     break;
  544.                 case OCCUPAZIONE_BANDA:
  545.                     bf.append(DatiCollezionati.translateToKb(getPolicyCounter));
  546.                     bf.append(OCCUPAZIONE_BANDA_KB_INFO);
  547.                     bf.append(getPolicyCounter);
  548.                     bf.append(OCCUPAZIONE_BANDA_BYTES_INFO);
  549.                     break;
  550.                 case TEMPO_COMPLESSIVO_RISPOSTA:
  551.                     bf.append(DatiCollezionati.translateToSeconds(getPolicyCounter));
  552.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_SECONDI_INFO);
  553.                     bf.append(getPolicyCounter);
  554.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_MILLISECONDI_INFO);
  555.                     break;
  556.                 case TEMPO_MEDIO_RISPOSTA:
  557.                     bf.append(getPolicyCounter);
  558.                     bf.append(TEMPO_MEDIO_RISPOSTA_MILLISECONDI_INFO);
  559.                     break;
  560.                 }
  561.             }
  562.             else{
  563.                 bf.append(getPolicyCounter);
  564.             }
  565.         }
  566.         Double avg = this.getPolicyAvgValue(true);
  567.         if(avg!=null){
  568.             bf.append("\n");
  569.             bf.append("\tValore Medio: ");
  570.             if(this.tipoRisorsa!=null){
  571.                 switch (this.tipoRisorsa) {
  572.                 case NUMERO_RICHIESTE:
  573.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  574.                 case NUMERO_RICHIESTE_FALLITE:
  575.                 case NUMERO_FAULT_APPLICATIVI:
  576.                 case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  577.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  578.                 case DIMENSIONE_MASSIMA_MESSAGGIO: // non viene usata
  579.                     bf.append(avg.longValue());
  580.                     break;
  581.                 case OCCUPAZIONE_BANDA:
  582.                     bf.append(DatiCollezionati.translateToKb(avg.longValue()));
  583.                     bf.append(OCCUPAZIONE_BANDA_KB_INFO);
  584.                     bf.append(avg.longValue());
  585.                     bf.append(OCCUPAZIONE_BANDA_BYTES_INFO);
  586.                     break;
  587.                 case TEMPO_COMPLESSIVO_RISPOSTA:
  588.                     bf.append(DatiCollezionati.translateToSeconds(avg.longValue()));
  589.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_SECONDI_INFO);
  590.                     bf.append(avg.longValue());
  591.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_MILLISECONDI_INFO);
  592.                     break;
  593.                 case TEMPO_MEDIO_RISPOSTA:
  594.                     bf.append(avg.longValue());
  595.                     bf.append(TEMPO_MEDIO_RISPOSTA_MILLISECONDI_INFO);
  596.                     break;
  597.                 }
  598.             }
  599.             else{
  600.                 bf.append(avg.longValue());
  601.             }
  602.         }
  603.         Long getPolicyDenyRequestCounter = this.getPolicyDenyRequestCounter(true);
  604.         if(getPolicyDenyRequestCounter!=null){
  605.             bf.append("\n");
  606.             bf.append("\tNumero Richieste Bloccate: ");
  607.             bf.append(getPolicyDenyRequestCounter);
  608.         }
  609.        
  610.         if(leftPrecedente!=null && rightPrecedente!=null){
  611.             bf.append("\n");
  612.             bf.append("\tIntervallo Precedente [");
  613.             bf.append(dateformat.format(leftPrecedente));
  614.             bf.append(" - ");
  615.             bf.append(dateformat.format(rightPrecedente));
  616.             bf.append("]");
  617.         }
  618.        
  619.         boolean oldExists = false;
  620.         if(this.oldPolicyRequestCounter!=null){
  621.             oldExists = true;
  622.             bf.append("\n");
  623.             bf.append("\tIntervallo Precedente - Numero Richieste Conteggiate: ");
  624.             bf.append(this.oldPolicyRequestCounter);
  625.         }
  626.         if(this.oldPolicyCounter!=null){
  627.             oldExists = true;
  628.             bf.append("\n");
  629.             bf.append("\tIntervallo Precedente - Contatore: ");
  630.             if(this.tipoRisorsa!=null){
  631.                 switch (this.tipoRisorsa) {
  632.                 case NUMERO_RICHIESTE:
  633.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  634.                 case NUMERO_RICHIESTE_FALLITE:
  635.                 case NUMERO_FAULT_APPLICATIVI:
  636.                 case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  637.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  638.                 case DIMENSIONE_MASSIMA_MESSAGGIO: // non viene usata
  639.                     bf.append(this.oldPolicyCounter);
  640.                     break;
  641.                 case OCCUPAZIONE_BANDA:
  642.                     bf.append(DatiCollezionati.translateToKb(this.oldPolicyCounter));
  643.                     bf.append(OCCUPAZIONE_BANDA_KB_INFO);
  644.                     bf.append(this.oldPolicyCounter);
  645.                     bf.append(OCCUPAZIONE_BANDA_BYTES_INFO);
  646.                     break;
  647.                 case TEMPO_COMPLESSIVO_RISPOSTA:
  648.                     bf.append(DatiCollezionati.translateToSeconds(this.oldPolicyCounter));
  649.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_SECONDI_INFO);
  650.                     bf.append(this.oldPolicyCounter);
  651.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_MILLISECONDI_INFO);
  652.                     break;
  653.                 case TEMPO_MEDIO_RISPOSTA:
  654.                     bf.append(this.oldPolicyCounter);
  655.                     bf.append(TEMPO_MEDIO_RISPOSTA_MILLISECONDI_INFO);
  656.                     break;
  657.                 }
  658.             }
  659.             else{
  660.                 bf.append(this.oldPolicyCounter);
  661.             }
  662.         }
  663.         Double oldAvg = this.getOldPolicyAvgValue();
  664.         if(oldAvg!=null){
  665.             oldExists = true;
  666.             bf.append("\n");
  667.             bf.append("\tIntervallo Precedente - Valore Medio: ");
  668.             if(this.tipoRisorsa!=null){
  669.                 switch (this.tipoRisorsa) {
  670.                 case NUMERO_RICHIESTE:
  671.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  672.                 case NUMERO_RICHIESTE_FALLITE:
  673.                 case NUMERO_FAULT_APPLICATIVI:
  674.                 case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  675.                 case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  676.                 case DIMENSIONE_MASSIMA_MESSAGGIO: // non viene usata
  677.                     bf.append(oldAvg.longValue());  
  678.                     break;
  679.                 case OCCUPAZIONE_BANDA:
  680.                     bf.append(DatiCollezionati.translateToKb(oldAvg.longValue()));  
  681.                     bf.append(OCCUPAZIONE_BANDA_KB_INFO);
  682.                     bf.append(oldAvg.longValue());
  683.                     bf.append(OCCUPAZIONE_BANDA_BYTES_INFO);
  684.                     break;
  685.                 case TEMPO_COMPLESSIVO_RISPOSTA:
  686.                     bf.append(DatiCollezionati.translateToSeconds(oldAvg.longValue()));
  687.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_SECONDI_INFO);
  688.                     bf.append(oldAvg.longValue());
  689.                     bf.append(TEMPO_COMPLESSIVO_RISPOSTA_MILLISECONDI_INFO);
  690.                     break;
  691.                 case TEMPO_MEDIO_RISPOSTA:
  692.                     bf.append(oldAvg.longValue());  
  693.                     bf.append(TEMPO_MEDIO_RISPOSTA_MILLISECONDI_INFO);
  694.                     break;
  695.                 }
  696.             }
  697.             else{
  698.                 bf.append(oldAvg.longValue());  
  699.             }
  700.         }
  701.        
  702.         if(!oldExists &&
  703.                 this.policyDateWindowInterval!=null &&
  704.                 TipoFinestra.PRECEDENTE.equals(this.policyDateWindowInterval)&&
  705.                 this.policyRealtime!=null && this.policyRealtime.booleanValue()){
  706.             bf.append("\n");
  707.             bf.append("\tIntervallo Precedente - Dati non ancora disponibili");
  708.         }
  709.        
  710.        
  711.         // Degrado
  712.        
  713.         leftPrecedente = null;
  714.         rightPrecedente = null;
  715.        
  716.         if(this.policyDegradoPrestazionaleDateWindowInterval!=null){
  717.             bf.append("\nDati collezionati per Degrado Prestazionale");
  718.                        
  719.             if(this.policyDegradoPrestazionaleRealtime!=null){
  720.                 bf.append("\n");
  721.                 bf.append("\tModalità di Controllo: ");
  722.                 if(this.policyDegradoPrestazionaleRealtime!=null && this.policyDegradoPrestazionaleRealtime.booleanValue()){
  723.                     bf.append("realtime");
  724.                 }
  725.                 else{
  726.                     bf.append("statistica");
  727.                 }
  728.             }
  729.            
  730.             bf.append("\n");
  731.             bf.append("\tFinestra Osservazione: ");
  732.             bf.append(this.policyDegradoPrestazionaleDateWindowInterval.getValue());
  733.            
  734.             // intervallo
  735.            
  736.             Date left = null;
  737.             Date right = null;
  738.             switch (this.policyDegradoPrestazionaleDateWindowInterval) {
  739.             case CORRENTE:
  740.                 left = this.getDegradoPrestazionaleLeftDateWindowCurrentInterval();
  741.                 right = this.getDegradoPrestazionaleRightDateWindowCurrentInterval();
  742.                 break;
  743.             case PRECEDENTE:
  744.                
  745.                 left = this.getDegradoPrestazionaleLeftDateWindowCurrentInterval();
  746.                 right = this.getDegradoPrestazionaleRightDateWindowCurrentInterval();
  747.                
  748.                 leftPrecedente = this.getDegradoPrestazionaleLeftDateWindowPrecedentInterval();
  749.                 rightPrecedente = this.getDegradoPrestazionaleRightDateWindowPrecedentInterval();
  750.                 break;
  751.             case SCORREVOLE:
  752.                 if(now==null){
  753.                     now = DateManager.getDate();
  754.                 }
  755.                 left = this.getDegradoPrestazionaleLeftDateWindowSlidingInterval(now);
  756.                 right = this.getDegradoPrestazionaleRightDateWindowSlidingInterval(now);
  757.                 break;
  758.             }
  759.            
  760.             bf.append("\n");
  761.            
  762.             if(left!=null && right!=null){
  763.                 bf.append("\tIntervallo [");
  764.                 bf.append(dateformat.format(left));
  765.                 bf.append(" - ");
  766.                 bf.append(dateformat.format(right));
  767.                 bf.append("]");
  768.             }
  769.             else{
  770.                 if(this.policyDegradoPrestazionaleDate!=null){
  771.                     bf.append("\tData: ");
  772.                     bf.append(dateformat.format(this.policyDegradoPrestazionaleDate));
  773.                 }
  774.             }
  775.         }
  776.                
  777.         Long getPolicyDegradoPrestazionaleRequestCounter = this.getPolicyDegradoPrestazionaleRequestCounter(true);
  778.         if(getPolicyDegradoPrestazionaleRequestCounter!=null){
  779.             bf.append("\n");
  780.             bf.append("\tNumeroRichieste: ");
  781.             bf.append(getPolicyDegradoPrestazionaleRequestCounter);
  782.         }
  783.         Long getPolicyDegradoPrestazionaleCounter = this.getPolicyDegradoPrestazionaleCounter(true);
  784.         if(getPolicyDegradoPrestazionaleCounter!=null){
  785.             bf.append("\n");
  786.             bf.append("\tContatore: ");
  787.             bf.append(getPolicyDegradoPrestazionaleCounter);
  788.             bf.append(" ms");
  789.         }
  790.         Double avgDegradoPrestazionale = this.getPolicyDegradoPrestazionaleAvgValue(true);
  791.         if(avgDegradoPrestazionale!=null){
  792.             bf.append("\n");
  793.             bf.append("\tValore Medio: ");
  794.             bf.append(avgDegradoPrestazionale.longValue());
  795.             bf.append(" ms");
  796.         }
  797.        
  798.         if(leftPrecedente!=null && rightPrecedente!=null){
  799.             bf.append("\n");
  800.             bf.append("\tIntervallo Precedente [");
  801.             bf.append(dateformat.format(leftPrecedente));
  802.             bf.append(" - ");
  803.             bf.append(dateformat.format(rightPrecedente));
  804.             bf.append("]");
  805.         }
  806.        
  807.         boolean oldDegradoPrestazionaleExists = false;
  808.         if(this.oldPolicyDegradoPrestazionaleRequestCounter!=null){
  809.             oldDegradoPrestazionaleExists = true;
  810.             bf.append("\n");
  811.             bf.append("\tIntervallo Precedente - Numero Richieste: ");
  812.             bf.append(this.oldPolicyDegradoPrestazionaleRequestCounter);
  813.         }
  814.         if(this.oldPolicyDegradoPrestazionaleCounter!=null){
  815.             oldDegradoPrestazionaleExists = true;
  816.             bf.append("\n");
  817.             bf.append("\tIntervallo Precedente - Contatore: ");
  818.             bf.append(this.oldPolicyDegradoPrestazionaleCounter);
  819.             bf.append(" ms");
  820.         }
  821.         Double oldAvgDegradoPrestazionale = this.getOldPolicyDegradoPrestazionaleAvgValue();
  822.         if(oldAvgDegradoPrestazionale!=null){
  823.             oldDegradoPrestazionaleExists = true;
  824.             bf.append("\n");
  825.             bf.append("\tIntervallo Precedente - Valore Medio: ");
  826.             bf.append(oldAvgDegradoPrestazionale.longValue());  
  827.             bf.append(" ms");
  828.         }
  829.        
  830.         if(!oldDegradoPrestazionaleExists &&
  831.                 this.policyDegradoPrestazionaleDateWindowInterval!=null &&
  832.                 TipoFinestra.PRECEDENTE.equals(this.policyDegradoPrestazionaleDateWindowInterval) &&
  833.             this.policyDegradoPrestazionaleRealtime!=null && this.policyDegradoPrestazionaleRealtime.booleanValue()){
  834.             bf.append("\n");
  835.             bf.append("\tIntervallo Precedente - Dati non ancora disponibili");
  836.         }
  837.        

  838.        
  839.         return bf.toString();
  840.     }
  841.    
  842.    

  843.     protected boolean isRisorsaContaNumeroRichieste(TipoRisorsa tipoRisorsa) {
  844.         switch (tipoRisorsa) {
  845.         case NUMERO_RICHIESTE:
  846.         case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  847.         case NUMERO_RICHIESTE_FALLITE:
  848.         case NUMERO_FAULT_APPLICATIVI:
  849.         case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  850.         case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  851.             return true;
  852.         case OCCUPAZIONE_BANDA:
  853.         case TEMPO_COMPLESSIVO_RISPOSTA:
  854.         case TEMPO_MEDIO_RISPOSTA:
  855.         case DIMENSIONE_MASSIMA_MESSAGGIO: // non viene usata
  856.             return false;
  857.         }
  858.         return false;
  859.     }
  860.    
  861.    
  862.     protected boolean isRisorsaContaNumeroRichiesteDipendentiEsito(TipoRisorsa tipoRisorsa) {
  863.         switch (tipoRisorsa) {
  864.         case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  865.         case NUMERO_RICHIESTE_FALLITE:
  866.         case NUMERO_FAULT_APPLICATIVI:
  867.         case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  868.         case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
  869.             return true;
  870.         case NUMERO_RICHIESTE:
  871.         case OCCUPAZIONE_BANDA:
  872.         case TEMPO_COMPLESSIVO_RISPOSTA:
  873.         case TEMPO_MEDIO_RISPOSTA:
  874.         case DIMENSIONE_MASSIMA_MESSAGGIO: // non viene usata
  875.             return false;
  876.         }
  877.         return false;
  878.     }
  879.    

  880.     protected void resetPolicyCounterForDate(Date d) {
  881.         this.policyDate = d;
  882.         if(this.policyRealtime!=null && this.policyRealtime){
  883.             this.policyRequestCounter = 0l;
  884.             this.policyDenyRequestCounter = 0l;
  885.             if(this.tipoRisorsa==null || !isRisorsaContaNumeroRichieste(this.tipoRisorsa)){
  886.                 /**SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  887.                 System.out.println("Resetto policy counter a zero per intervallo d["+dateformat.format(d)+"]");*/
  888.                 this.policyCounter = 0l;
  889.             }
  890.         }
  891.     }
  892.    
  893.    
  894.     protected void resetPolicyCounterForDateDegradoPrestazionale(Date d) {
  895.         this.policyDegradoPrestazionaleDate = d;
  896.         if(this.policyDegradoPrestazionaleRealtime!=null && this.policyDegradoPrestazionaleRealtime){
  897.             this.policyDegradoPrestazionaleRequestCounter = 0l;
  898.             this.policyDegradoPrestazionaleCounter = 0l;
  899.         }
  900.        
  901.     }
  902.    
  903.     protected void logDebug(Logger log, String msg) {
  904.         if(log!=null) {
  905.             log.debug(msg);
  906.         }
  907.     }
  908.    
  909.     protected void checkPolicyCounterForDate(Logger log, ActivePolicy activePolicy){
  910.        
  911.         if(this.policyDate==null){
  912.             // first-init
  913.             resetPolicyCounterForDate(DateUtils.convertToLeftInterval(DateManager.getDate(),this.policyDateTypeInterval));
  914.            
  915.             if(this.policyRealtime!=null && !this.policyRealtime){
  916.                 // statistico. Serve subito anche l'intervallo precedente
  917.                 this.oldPolicyDate = DateUtils.incrementDate(this.policyDate, this.policyDateTypeInterval, this.policyDateInterval*(-1));
  918.             }
  919.            
  920.         }
  921.        
  922.         else{
  923.            
  924.             Date rightInterval = this.getRightDateWindowCurrentInterval();
  925.             Date now = DateManager.getDate();

  926.             boolean after = now.after(rightInterval);
  927.             if(activePolicy.getConfigurazioneControlloTraffico().isDebug()){
  928.                 SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  929.                 logDebug(log,"checkPolicyCounterForDate now["+dateformat.format(now)+"] after policyDate["+dateformat.format(rightInterval)+"]: "+after+"");
  930.             }
  931.             if(after){
  932.                
  933.                 if(TipoFinestra.PRECEDENTE.equals(this.getPolicyDateWindowInterval())){
  934.                     // Salvo old
  935.                     this.oldPolicyDate = this.policyDate;
  936.                     if(this.policyRealtime!=null && this.policyRealtime){
  937.                         this.oldPolicyRequestCounter = this.policyRequestCounter;
  938.                         if(this.tipoRisorsa==null || !isRisorsaContaNumeroRichieste(this.tipoRisorsa)){
  939.                             this.oldPolicyCounter = this.policyCounter;
  940.                         }
  941.                     }
  942.                 }
  943.                
  944.                 // Genero nuova finestra
  945.                 Date d = DateUtils.incrementDate(this.policyDate, this.policyDateTypeInterval, this.policyDateInterval);
  946.                
  947.                 Date dRight = DateUtils.convertToRightInterval(d, this.policyDateTypeInterval);
  948.                 dRight = DatiCollezionati.incrementDate(dRight, this.policyDateTypeInterval, this.policyDateInterval, this.policyDateCurrentInterval);
  949.                 /**Date dRight = DateUtils.incrementDate(d, this.policyDateTypeInterval, this.policyDateInterval);
  950.                 dRight = DateUtils.convertToRightInterval(dRight, this.policyDateTypeInterval);*/
  951.                
  952.                 boolean before = dRight.before(now);
  953.                 if(activePolicy.getConfigurazioneControlloTraffico().isDebug()){
  954.                     SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  955.                     logDebug(log,"checkPolicyCounterForDate Increment d["+dateformat.format(d)+"] dRight["+dateformat.format(dRight)+"] before now["+
  956.                             dateformat.format(now)+"]: "+before);
  957.                 }
  958.                 while(before){
  959.                    
  960.                     // la nuova richiesta non riguarda l'intervallo+1 rispetto al precedente, ma intervalli successivi.
  961.                     // Devo resettare anche i vecchi contatori
  962.                     if(TipoFinestra.PRECEDENTE.equals(this.getPolicyDateWindowInterval())){            
  963.                         // Salvo old
  964.                         this.oldPolicyDate = d;
  965.                         if(this.policyRealtime!=null && this.policyRealtime){
  966.                             this.oldPolicyRequestCounter = 0l;
  967.                             if(this.tipoRisorsa==null || !isRisorsaContaNumeroRichieste(this.tipoRisorsa)){
  968.                                 this.oldPolicyCounter = 0l;
  969.                             }
  970.                         }
  971.                     }
  972.                    
  973.                     d = DateUtils.incrementDate(d, this.policyDateTypeInterval, this.policyDateInterval);
  974.                    
  975.                     dRight = DateUtils.convertToRightInterval(d, this.policyDateTypeInterval);
  976.                     dRight = DatiCollezionati.incrementDate(dRight, this.policyDateTypeInterval, this.policyDateInterval, this.policyDateCurrentInterval);
  977.                     /**dRight = DateUtils.incrementDate(d, this.policyDateTypeInterval, this.policyDateInterval);
  978.                     dRight = DateUtils.convertToRightInterval(dRight, this.policyDateTypeInterval);*/
  979.                    
  980.                     before = dRight.before(now);
  981.                     if(activePolicy.getConfigurazioneControlloTraffico().isDebug()){
  982.                         SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  983.                         logDebug(log,"checkPolicyCounterForDate Increment d["+dateformat.format(d)+"] dRight["+dateformat.format(dRight)+"] before now["+
  984.                                 dateformat.format(now)+"]: "+before);
  985.                     }
  986.                 }
  987.                
  988.                 resetPolicyCounterForDate(d);
  989.                
  990.             }
  991.            
  992.         }
  993.                
  994.     }
  995.    

  996.     protected void checkPolicyCounterForDateDegradoPrestazionale(Logger log, ActivePolicy activePolicy){
  997.        
  998.         if(this.policyDegradoPrestazionaleDate==null){
  999.            
  1000.             // first-init
  1001.             resetPolicyCounterForDateDegradoPrestazionale(DateUtils.convertToLeftInterval(DateManager.getDate(),this.policyDegradoPrestazionaleDateTypeInterval));
  1002.            
  1003.             if(this.policyDegradoPrestazionaleRealtime!=null && !this.policyDegradoPrestazionaleRealtime){
  1004.                 // statistico. Serve subito anche l'intervallo precedente
  1005.                 this.oldPolicyDegradoPrestazionaleDate = DateUtils.incrementDate(this.policyDegradoPrestazionaleDate,
  1006.                         this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval*(-1));
  1007.             }
  1008.            
  1009.         }
  1010.        
  1011.         else{
  1012.            
  1013.             Date rightInterval = this.getDegradoPrestazionaleRightDateWindowCurrentInterval();
  1014.             Date now = DateManager.getDate();

  1015.             boolean after = now.after(rightInterval);
  1016.             if(activePolicy.getConfigurazioneControlloTraffico().isDebug()){
  1017.                 SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  1018.                 logDebug(log,"checkPolicyCounterForDateDegradoPrestazionale now["+dateformat.format(now)+"] after policyDate["+dateformat.format(rightInterval)+"]: "+after+"");
  1019.             }
  1020.             if(after){
  1021.                
  1022.                 if(TipoFinestra.PRECEDENTE.equals(this.getPolicyDegradoPrestazionaleDateWindowInterval())){            
  1023.                     // Salvo old
  1024.                     this.oldPolicyDegradoPrestazionaleDate = this.policyDegradoPrestazionaleDate;
  1025.                     if(this.policyDegradoPrestazionaleRealtime!=null && this.policyDegradoPrestazionaleRealtime){
  1026.                         this.oldPolicyDegradoPrestazionaleRequestCounter = this.policyDegradoPrestazionaleRequestCounter;
  1027.                         this.oldPolicyDegradoPrestazionaleCounter = this.policyDegradoPrestazionaleCounter;
  1028.                     }
  1029.                 }
  1030.                
  1031.                 // Genero nuova finestra
  1032.                 Date d = DateUtils.incrementDate(this.policyDegradoPrestazionaleDate, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval);
  1033.                 Date dRight = DateUtils.incrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval);
  1034.                 dRight = DateUtils.convertToRightInterval(dRight, this.policyDegradoPrestazionaleDateTypeInterval);
  1035.                 boolean before = dRight.before(now);
  1036.                 if(activePolicy.getConfigurazioneControlloTraffico().isDebug()){
  1037.                     SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  1038.                     logDebug(log,"checkPolicyCounterForDateDegradoPrestazionale Increment d["+dateformat.format(d)+"] dRight["+dateformat.format(dRight)+"] before now["+
  1039.                             dateformat.format(now)+"]: "+before);
  1040.                 }
  1041.                 while(before){
  1042.                    
  1043.                     // la nuova richiesta non riguarda l'intervallo+1 rispetto al precedente, ma intervalli successivi.
  1044.                     // Devo resettare anche i vecchi contatori
  1045.                     if(TipoFinestra.PRECEDENTE.equals(this.getPolicyDegradoPrestazionaleDateWindowInterval())){            
  1046.                         // Salvo old
  1047.                         this.oldPolicyDegradoPrestazionaleDate = d;
  1048.                         if(this.policyDegradoPrestazionaleRealtime!=null && this.policyDegradoPrestazionaleRealtime){
  1049.                             this.oldPolicyDegradoPrestazionaleRequestCounter = 0l;
  1050.                             this.oldPolicyDegradoPrestazionaleCounter = 0l;
  1051.                         }
  1052.                     }
  1053.                    
  1054.                     d = DateUtils.incrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval);
  1055.                     dRight = DateUtils.incrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval);
  1056.                     dRight = DateUtils.convertToRightInterval(dRight, this.policyDegradoPrestazionaleDateTypeInterval);
  1057.                     before = dRight.before(now);
  1058.                     if(activePolicy.getConfigurazioneControlloTraffico().isDebug()){
  1059.                         SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  1060.                         logDebug(log,"checkPolicyCounterForDateDegradoPrestazionale Increment d["+dateformat.format(d)+"] dRight["+dateformat.format(dRight)+"] before now["+
  1061.                                 dateformat.format(now)+"]: "+before);
  1062.                     }
  1063.                 }
  1064.                 resetPolicyCounterForDateDegradoPrestazionale(d);
  1065.             }
  1066.            
  1067.         }
  1068.                
  1069.     }
  1070.    
  1071.     // Questo metodo viene chiamato dai metodi 'resetCounters' degli oggetti PolicyGroupByActiveThreads che a sua volta sono invocabili solamente via Jmx/Console
  1072.     public void resetCounters(){
  1073.         this.resetCounters(null);
  1074.        
  1075.         this.manuallyResetPolicyTimeMillis = DateManager.getTimeMillis();
  1076.         /**System.out.println("IMPOSTO RESET MANUALE ("+this.manuallyResetPolicyTimeMillis+") IN ["+this.toString()+"]");*/
  1077.        
  1078.     }
  1079.     // Questo metodo viene invocato quando viene rilevata una modifica ai valori di soglia di una policy e quindi viene aggiornata l'updatePolicyDate
  1080.     // In questo metodo non serve registrare il manuallyResetPolicyTimeMillis poichè il metodo viene invocato sempre prima di una 'registerStartRequest' mentre la funzione del manuallyResetPolicyTimeMillis
  1081.     // serve ad ignorare la gestione successiva ad un reset counter per le transazioni in corso.
  1082.     public void resetCounters(Date updatePolicyDate){
  1083.        
  1084.         if(updatePolicyDate!=null) {
  1085.             this.updatePolicyDate = updatePolicyDate;
  1086.         }
  1087.        
  1088.         if(this.policyRequestCounter!=null){
  1089.             this.policyRequestCounter = 0l;
  1090.         }
  1091.         if(this.policyCounter!=null){
  1092.             this.policyCounter = 0l;
  1093.         }
  1094.         if(this.policyDenyRequestCounter!=null){
  1095.             this.policyDenyRequestCounter = 0l;
  1096.         }
  1097.         this.oldPolicyDate = null;
  1098.         if(this.oldPolicyRequestCounter!=null){
  1099.             this.oldPolicyRequestCounter = 0l;
  1100.         }
  1101.         if(this.oldPolicyCounter!=null){
  1102.             this.oldPolicyCounter = 0l;
  1103.         }
  1104.        
  1105.         if(this.policyDegradoPrestazionaleRequestCounter!=null){
  1106.             this.policyDegradoPrestazionaleRequestCounter = 0l;
  1107.         }
  1108.         if(this.policyDegradoPrestazionaleCounter!=null){
  1109.             this.policyDegradoPrestazionaleCounter = 0l;
  1110.         }
  1111.         this.oldPolicyDegradoPrestazionaleDate = null;
  1112.         if(this.oldPolicyDegradoPrestazionaleRequestCounter!=null){
  1113.             this.oldPolicyDegradoPrestazionaleRequestCounter = 0l;
  1114.         }
  1115.         if(this.oldPolicyDegradoPrestazionaleCounter!=null){
  1116.             this.oldPolicyDegradoPrestazionaleCounter = 0l;
  1117.         }
  1118.        
  1119.     }
  1120.    
  1121.     public void checkDate(Logger log, ActivePolicy activePolicy){
  1122.        
  1123.         if(this.creationDate==null){
  1124.             this.initDatiIniziali(activePolicy);
  1125.         }
  1126.        
  1127.         if(this.getPolicyDateWindowInterval()!=null &&
  1128.                 !TipoFinestra.SCORREVOLE.equals(this.getPolicyDateWindowInterval())){
  1129.            
  1130.             this.checkPolicyCounterForDate(log,activePolicy);
  1131.            
  1132.         }
  1133.        
  1134.         if(this.getPolicyDegradoPrestazionaleDateWindowInterval()!=null &&
  1135.                 !TipoFinestra.SCORREVOLE.equals(this.getPolicyDegradoPrestazionaleDateWindowInterval())){
  1136.            
  1137.             this.checkPolicyCounterForDateDegradoPrestazionale(log,activePolicy);

  1138.         }
  1139.        
  1140.     }
  1141.    
  1142.    
  1143.     private boolean skipBecauseManuallyResetAfterStartRequest(String source, Map<Object> ctx) {
  1144.         if(source!=null) {
  1145.             // nop
  1146.         }
  1147.         if(this.manuallyResetPolicyTimeMillis!=null && ctx!=null) {
  1148.             Object o = ctx.get(START_PROCESS_REQUEST_TIME_MS);
  1149.             if(o==null) {
  1150.                 // transazione gestita precedentemente al reset dei contatori
  1151.                 /**System.out.println("@"+source+" RILEVATO RESET '"+this.manuallyResetPolicyTimeMillis+"', trovato in ctx 'NULL'");*/
  1152.                 return true;
  1153.             }
  1154.             Long l = (Long) o;
  1155.             if(l.longValue() < this.manuallyResetPolicyTimeMillis.longValue()) {
  1156.                 // transazione gestita precedentemente al reset dei contatori
  1157.                 /**System.out.println("@"+source+" RILEVATO RESET '"+this.manuallyResetPolicyTimeMillis+"', trovato in ctx una data minore '"+l+"'");*/
  1158.                 return true;
  1159.             }
  1160.         }
  1161.         return false;
  1162.     }
  1163.    
  1164.    
  1165.    
  1166.     protected void internalRegisterStartRequestIncrementActiveRequestCounter(DatiCollezionati datiCollezionatiPerPolicyVerifier) {
  1167.         this.activeRequestCounter++;
  1168.         if(datiCollezionatiPerPolicyVerifier!=null) {
  1169.             datiCollezionatiPerPolicyVerifier.activeRequestCounter = this.activeRequestCounter;
  1170.         }
  1171.     }
  1172.     public void registerStartRequest(Logger log, ActivePolicy activePolicy, Map<Object> ctx){
  1173.         registerStartRequest(log, activePolicy, ctx, null);
  1174.     }
  1175.     public void registerStartRequest(Logger log, ActivePolicy activePolicy, Map<Object> ctx, DatiCollezionati datiCollezionatiPerPolicyVerifier){
  1176.        
  1177.         if(this.creationDate==null){
  1178.             this.initDatiIniziali(activePolicy);
  1179.         }
  1180.        
  1181.         internalRegisterStartRequestIncrementActiveRequestCounter(datiCollezionatiPerPolicyVerifier);
  1182.        
  1183.         if(this.getPolicyDateWindowInterval()!=null &&
  1184.                 !TipoFinestra.SCORREVOLE.equals(this.getPolicyDateWindowInterval())){
  1185.            
  1186.             this.checkPolicyCounterForDate(log,activePolicy);
  1187.                        
  1188.         }

  1189.         if(this.getPolicyDegradoPrestazionaleDateWindowInterval()!=null &&
  1190.                 !TipoFinestra.SCORREVOLE.equals(this.getPolicyDegradoPrestazionaleDateWindowInterval())){
  1191.            
  1192.             this.checkPolicyCounterForDateDegradoPrestazionale(log,activePolicy);
  1193.            
  1194.             /**if(this.policyDegradoPrestazionaleRealtime){
  1195.             // Essendo il degrado un tempo medio anche il numero di richieste lo devo incrementare quando aggiungo anche la latenza,
  1196.             // senno poi la divisione (per l'avg) rispetto al numero di richieste è falsata
  1197.             // poiche' tengo conto anche delle richieste in corso, nonostante per queste non disponga ancora nella latenza
  1198.             }*/
  1199.         }
  1200.        
  1201.         if(this.manuallyResetPolicyTimeMillis!=null && ctx!=null) {
  1202.             ctx.put(START_PROCESS_REQUEST_TIME_MS, DateManager.getTimeMillis());
  1203.             /**System.out.println("IMPOSTATO IN CONTESTO: '"+DateManager.getTimeMillis()+"'");*/
  1204.         }
  1205.     }
  1206.    
  1207.     protected void internalUpdateDatiStartRequestApplicabileIncrementRequestCounter(DatiCollezionati datiCollezionatiPerPolicyVerifier) {
  1208.         this.policyRequestCounter++;
  1209.         if(datiCollezionatiPerPolicyVerifier!=null) {
  1210.             datiCollezionatiPerPolicyVerifier.policyRequestCounter = this.policyRequestCounter;
  1211.         }
  1212.     }
  1213.     public boolean updateDatiStartRequestApplicabile(Logger log, ActivePolicy activePolicy, Map<Object> ctx){
  1214.         return updateDatiStartRequestApplicabile(log, activePolicy, ctx, null);
  1215.     }
  1216.     public boolean updateDatiStartRequestApplicabile(Logger log, ActivePolicy activePolicy, Map<Object> ctx, DatiCollezionati datiCollezionatiPerPolicyVerifier){
  1217.        
  1218.         if(log!=null) {
  1219.             // nop
  1220.         }
  1221.        
  1222.         if(skipBecauseManuallyResetAfterStartRequest("updateDatiStartRequestApplicabile", ctx)) {
  1223.             return false;
  1224.         }
  1225.        
  1226.         if(this.getPolicyDateWindowInterval()!=null &&
  1227.                 !TipoFinestra.SCORREVOLE.equals(this.getPolicyDateWindowInterval()) &&
  1228.                 (this.policyRealtime!=null && this.policyRealtime.booleanValue() &&
  1229.                 // il contatore delle richieste lo tengo per qualsiasi tipo di risorsa
  1230.                 // Pero' per il tempo medio lo devo incrementare quando aggiungo anche la latenza, senno poi la divisione (per l'avg) rispetto al numero di richieste è falsata
  1231.                 // poiche' tengo conto anche delle richieste in corso, nonostante per queste non disponga ancora nella latenza
  1232.                 // Lo stesso per le richieste che dipendono dall'esito devo incrementarle solo quando conosco l'esito della transazione
  1233.                 ( (!TipoRisorsa.TEMPO_MEDIO_RISPOSTA.equals(activePolicy.getTipoRisorsaPolicy())) &&
  1234.                         !isRisorsaContaNumeroRichiesteDipendentiEsito(activePolicy.getTipoRisorsaPolicy()))
  1235.                 )
  1236.             ){
  1237.             internalUpdateDatiStartRequestApplicabileIncrementRequestCounter(datiCollezionatiPerPolicyVerifier);
  1238.             return true;
  1239.            
  1240.         }
  1241.        
  1242.         return false;

  1243.     }
  1244.    
  1245.     protected void internalRegisterEndRequestDecrementActiveRequestCounter() {
  1246.         this.activeRequestCounter--;
  1247.     }
  1248.     protected void internalRegisterEndRequestIncrementDegradoPrestazionaleRequestCounter() {
  1249.         this.policyDegradoPrestazionaleRequestCounter++;
  1250.     }
  1251.     protected void internalRegisterEndRequestIncrementDegradoPrestazionaleCounter(long latenza) {
  1252.         this.policyDegradoPrestazionaleCounter = this.policyDegradoPrestazionaleCounter + latenza;
  1253.     }
  1254.     public void registerEndRequest(Logger log, ActivePolicy activePolicy, Map<Object> ctx, MisurazioniTransazione dati){
  1255.        
  1256.         if(log!=null) {
  1257.             // nop
  1258.         }
  1259.         if(this.creationDate==null){
  1260.             return; // non inizializzato?
  1261.         }
  1262.        
  1263.         internalRegisterEndRequestDecrementActiveRequestCounter();
  1264.                
  1265.         // Il decrement delle richieste attive deve comunque essere attuato poichè il reset dei contatori non insiste sul numero di richieste attive
  1266.         if(skipBecauseManuallyResetAfterStartRequest("registerEndRequest", ctx)) {
  1267.             return;
  1268.         }
  1269.        
  1270.         if(this.policyDegradoPrestazionaleRealtime!=null && this.policyDegradoPrestazionaleRealtime){
  1271.            
  1272.             long latenza = 0;
  1273.            
  1274.             int [] esitiValidi = null;
  1275.            
  1276.             if(TipoPdD.DELEGATA.equals(dati.getTipoPdD())){
  1277.                 esitiValidi = activePolicy.getConfigurazioneControlloTraffico().getCalcoloLatenzaPortaDelegataEsitiConsiderati().get(dati.getProtocollo());
  1278.             }
  1279.             else{
  1280.                 esitiValidi = activePolicy.getConfigurazioneControlloTraffico().getCalcoloLatenzaPortaApplicativaEsitiConsiderati().get(dati.getProtocollo());
  1281.             }
  1282.             boolean found = false;
  1283.             for (int esitoValido : esitiValidi) {
  1284.                 if(dati.getEsitoTransazione() == esitoValido){
  1285.                     latenza = this.getLatenza(activePolicy.getConfigurazionePolicy().getDegradoAvgTimeTipoLatenza(), dati);
  1286.                     found = true;
  1287.                     break;
  1288.                 }
  1289.             }
  1290.            
  1291.             if(found){
  1292.                 internalRegisterEndRequestIncrementDegradoPrestazionaleRequestCounter();
  1293.                 internalRegisterEndRequestIncrementDegradoPrestazionaleCounter(latenza);
  1294.             }
  1295.            
  1296.         }
  1297.     }
  1298.    
  1299.     protected void internalUpdateDatiEndRequestApplicabileIncrementRequestCounter() {
  1300.         this.policyRequestCounter++;
  1301.     }
  1302.     protected void internalUpdateDatiEndRequestApplicabileDecrementRequestCounter() {
  1303.         this.policyRequestCounter--;
  1304.     }
  1305.     protected void internalUpdateDatiEndRequestApplicabileIncrementDenyRequestCounter() {
  1306.         this.policyDenyRequestCounter++;
  1307.     }
  1308.     protected void internalUpdateDatiEndRequestApplicabileIncrementCounter(long v) {
  1309.         this.policyCounter = this.policyCounter + v;
  1310.     }
  1311.     public void updateDatiEndRequestApplicabile(Logger log, ActivePolicy activePolicy, Map<Object> ctx,
  1312.             MisurazioniTransazione dati,
  1313.             List<Integer> esitiCodeOk, List<Integer> esitiCodeKoSenzaFaultApplicativo, List<Integer> esitiCodeFaultApplicativo,
  1314.             boolean isViolata) throws PolicyException{
  1315.        
  1316.         if(log!=null) {
  1317.             // nop
  1318.         }
  1319.         if(skipBecauseManuallyResetAfterStartRequest("updateDatiEndRequestApplicabile", ctx)) {
  1320.             return;
  1321.         }
  1322.        
  1323.         if(this.policyRealtime!=null && this.policyRealtime){
  1324.        
  1325.             int [] esitiPolicyViolate = activePolicy.getConfigurazioneControlloTraffico().getEsitiPolicyViolate().get(dati.getProtocollo());
  1326.             boolean foundEsitoDeny = false;
  1327.             for (int esitoViolato : esitiPolicyViolate) {
  1328.                 if(dati.getEsitoTransazione() == esitoViolato){
  1329.                     foundEsitoDeny = true;
  1330.                     break;
  1331.                 }
  1332.             }
  1333.            
  1334.             if(foundEsitoDeny){
  1335.                 if( (!TipoRisorsa.TEMPO_MEDIO_RISPOSTA.equals(activePolicy.getTipoRisorsaPolicy())) &&
  1336.                         !isRisorsaContaNumeroRichiesteDipendentiEsito(activePolicy.getTipoRisorsaPolicy())){                
  1337.                     internalUpdateDatiEndRequestApplicabileDecrementRequestCounter(); // l'avevo incrementato nello start
  1338.                 }
  1339.                 if(isViolata) {
  1340.                     // Aumento solamente il contatore della policy la quale ha bloccato la transazione
  1341.                     internalUpdateDatiEndRequestApplicabileIncrementDenyRequestCounter();
  1342.                 }
  1343.                 return; // non incremento alcun contatore.
  1344.             }
  1345.            
  1346.            
  1347.             switch (activePolicy.getTipoRisorsaPolicy()) {
  1348.            
  1349.             case DIMENSIONE_MASSIMA_MESSAGGIO:
  1350.                
  1351.                 // nop
  1352.                
  1353.                 break;          
  1354.            
  1355.             case NUMERO_RICHIESTE:
  1356.                
  1357.                 // nop
  1358.                
  1359.                 break;
  1360.                
  1361.             case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
  1362.             case NUMERO_RICHIESTE_FALLITE:
  1363.             case NUMERO_FAULT_APPLICATIVI:
  1364.             case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
  1365.             case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:              
  1366.                
  1367.                 List<Integer> esitiAppartenentiGruppo = null;
  1368.                 try {
  1369.                     if(TipoRisorsa.NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO.equals(activePolicy.getTipoRisorsaPolicy())) {
  1370.                         /**esitiAppartenentiGruppo = EsitiProperties.getInstance(log).getEsitiCodeOk();*/
  1371.                         esitiAppartenentiGruppo = esitiCodeOk;
  1372.                     }
  1373.                     else if(TipoRisorsa.NUMERO_RICHIESTE_FALLITE.equals(activePolicy.getTipoRisorsaPolicy())) {
  1374.                         /**esitiAppartenentiGruppo = EsitiProperties.getInstance(log).getEsitiCodeKo_senzaFaultApplicativo();*/
  1375.                         esitiAppartenentiGruppo = esitiCodeKoSenzaFaultApplicativo;
  1376.                     }
  1377.                     else if(TipoRisorsa.NUMERO_FAULT_APPLICATIVI.equals(activePolicy.getTipoRisorsaPolicy())) {
  1378.                         /**esitiAppartenentiGruppo = EsitiProperties.getInstance(log).getEsitiCodeFaultApplicativo();*/
  1379.                         esitiAppartenentiGruppo = esitiCodeFaultApplicativo;
  1380.                     }
  1381.                     else if(TipoRisorsa.NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI.equals(activePolicy.getTipoRisorsaPolicy())) {
  1382.                         esitiAppartenentiGruppo = new ArrayList<>();
  1383.                         esitiAppartenentiGruppo.addAll(esitiCodeKoSenzaFaultApplicativo);
  1384.                         esitiAppartenentiGruppo.addAll(esitiCodeFaultApplicativo);
  1385.                     }
  1386.                     else {
  1387.                         // NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI
  1388.                         esitiAppartenentiGruppo = new ArrayList<>();
  1389.                         esitiAppartenentiGruppo.addAll(esitiCodeOk);
  1390.                         esitiAppartenentiGruppo.addAll(esitiCodeFaultApplicativo);
  1391.                     }
  1392.                 }catch(Exception e) {
  1393.                     throw new PolicyException(e.getMessage(),e);
  1394.                 }
  1395.                 for (int esitoAppartenenteGruppo : esitiAppartenentiGruppo) {
  1396.                     if(dati.getEsitoTransazione() == esitoAppartenenteGruppo){
  1397.                         internalUpdateDatiEndRequestApplicabileIncrementRequestCounter();
  1398.                         break;
  1399.                     }
  1400.                 }
  1401.                 break;
  1402.                
  1403.             case OCCUPAZIONE_BANDA:
  1404.                
  1405.                 // viene misurata la banda "generata" dalle applicazioni
  1406.                 /**System.out.println("Incremento banda da "+this.policyCounter);*/
  1407.                 long banda = this.getBanda(activePolicy.getConfigurazionePolicy().getValoreTipoBanda(), dati);
  1408.                 internalUpdateDatiEndRequestApplicabileIncrementCounter(banda);
  1409.                 /**System.out.println("Incremento banda a "+this.policyCounter);*/
  1410.                                
  1411.                 break;
  1412.    
  1413.                
  1414.             case TEMPO_COMPLESSIVO_RISPOSTA:
  1415.             case TEMPO_MEDIO_RISPOSTA:
  1416.                
  1417.                 int [] esitiValidi = null;
  1418.                
  1419.                 if(TipoPdD.DELEGATA.equals(dati.getTipoPdD())){
  1420.                     esitiValidi = activePolicy.getConfigurazioneControlloTraffico().getCalcoloLatenzaPortaDelegataEsitiConsiderati().get(dati.getProtocollo());
  1421.                 }
  1422.                 else{
  1423.                     esitiValidi = activePolicy.getConfigurazioneControlloTraffico().getCalcoloLatenzaPortaApplicativaEsitiConsiderati().get(dati.getProtocollo());
  1424.                 }
  1425.                 boolean found = false;
  1426.                 for (int esitoValido : esitiValidi) {
  1427.                     if(dati.getEsitoTransazione() == esitoValido){
  1428.                         long latenza = this.getLatenza(activePolicy.getConfigurazionePolicy().getValoreTipoLatenza(), dati);
  1429.                         /**System.out.println("Incremento tempo da "+this.policyCounter);*/
  1430.                         internalUpdateDatiEndRequestApplicabileIncrementCounter(latenza);
  1431.                         /**System.out.println("Incremento tempo a "+this.policyCounter);*/
  1432.                         found = true;
  1433.                         break;
  1434.                     }
  1435.                 }
  1436.            
  1437.                 if(found && TipoRisorsa.TEMPO_MEDIO_RISPOSTA.equals(activePolicy.getTipoRisorsaPolicy())){
  1438.                     internalUpdateDatiEndRequestApplicabileIncrementRequestCounter();
  1439.                 }
  1440.                
  1441.                 break;
  1442.             }
  1443.         }
  1444.            
  1445.                    
  1446.     }
  1447.    
  1448.     protected long getLatenza(TipoLatenza tipoLatenza, MisurazioniTransazione dati){
  1449.         long latenza = 0;
  1450.         switch (tipoLatenza) {
  1451.         case TOTALE:
  1452.             if(dati.getDataUscitaRisposta()!=null && dati.getDataIngressoRichiesta()!=null){
  1453.                 latenza = dati.getDataUscitaRisposta().getTime()-dati.getDataIngressoRichiesta().getTime();
  1454.             }
  1455.             break;
  1456.         case SERVIZIO:
  1457.             if(dati.getDataUscitaRichiesta()!=null && dati.getDataIngressoRisposta()!=null){
  1458.                 latenza = dati.getDataIngressoRisposta().getTime()-dati.getDataUscitaRichiesta().getTime();
  1459.             }
  1460.             break;
  1461.         case PORTA:
  1462.             if(dati.getDataUscitaRichiesta()!=null && dati.getDataIngressoRichiesta()!=null){
  1463.                 latenza = dati.getDataUscitaRichiesta().getTime()-dati.getDataIngressoRichiesta().getTime();
  1464.             }
  1465.             if(dati.getDataIngressoRisposta()!=null && dati.getDataUscitaRisposta()!=null){
  1466.                 latenza = latenza + dati.getDataUscitaRisposta().getTime()-dati.getDataIngressoRisposta().getTime();
  1467.             }
  1468.             break;
  1469.         }
  1470.         return latenza;
  1471.     }
  1472.    
  1473.     protected long getBanda(TipoBanda tipoBanda, MisurazioniTransazione dati){
  1474.        
  1475.         long bandaInterna = 0;
  1476.         long bandaEsterna = 0;
  1477.         if(TipoPdD.DELEGATA.equals(dati.getTipoPdD())) {
  1478.             if(dati.getRichiestaIngressoBytes()!=null && dati.getRichiestaIngressoBytes()>0){
  1479.                 bandaInterna = bandaInterna + dati.getRichiestaIngressoBytes().longValue();
  1480.             }
  1481.             if(dati.getRispostaUscitaBytes()!=null && dati.getRispostaUscitaBytes()>0){
  1482.                 bandaInterna = bandaInterna + dati.getRispostaUscitaBytes().longValue();
  1483.             }
  1484.            
  1485.             if(dati.getRichiestaUscitaBytes()!=null && dati.getRichiestaUscitaBytes()>0){
  1486.                 bandaEsterna = bandaEsterna + dati.getRichiestaUscitaBytes().longValue();
  1487.             }
  1488.             if(dati.getRispostaIngressoBytes()!=null && dati.getRispostaIngressoBytes()>0){
  1489.                 bandaEsterna = bandaEsterna + dati.getRispostaIngressoBytes().longValue();
  1490.             }
  1491.         }else{
  1492.             if(dati.getRichiestaIngressoBytes()!=null && dati.getRichiestaIngressoBytes()>0){
  1493.                 bandaEsterna = bandaEsterna + dati.getRichiestaIngressoBytes().longValue();
  1494.             }
  1495.             if(dati.getRispostaUscitaBytes()!=null && dati.getRispostaUscitaBytes()>0){
  1496.                 bandaEsterna = bandaEsterna + dati.getRispostaUscitaBytes().longValue();
  1497.             }
  1498.            
  1499.             if(dati.getRichiestaUscitaBytes()!=null && dati.getRichiestaUscitaBytes()>0){
  1500.                 bandaInterna = bandaInterna + dati.getRichiestaUscitaBytes().longValue();
  1501.             }
  1502.             if(dati.getRispostaIngressoBytes()!=null && dati.getRispostaIngressoBytes()>0){
  1503.                 bandaInterna = bandaInterna + dati.getRispostaIngressoBytes().longValue();
  1504.             }
  1505.         }
  1506.        
  1507.        
  1508.         switch (tipoBanda) {
  1509.         case COMPLESSIVA:
  1510.             return bandaEsterna + bandaInterna;
  1511.         case INTERNA:
  1512.             return bandaInterna;
  1513.         case ESTERNA:
  1514.             return bandaEsterna;
  1515.         }
  1516.         return 0;
  1517.     }
  1518.    
  1519.    

  1520.    
  1521.     // ****** GETTER ******

  1522.     public Date getCloneDate() {
  1523.         return this.cloneDate;
  1524.     }
  1525.    
  1526.     public TipoRisorsa getTipoRisorsa() {
  1527.         return this.tipoRisorsa;
  1528.     }
  1529.    
  1530.     public Long getActiveRequestCounter() {
  1531.         return getActiveRequestCounter(false);
  1532.     }
  1533.     protected Long getActiveRequestCounter(boolean readRemoteInfo) {
  1534.         if(readRemoteInfo) {
  1535.             // nop
  1536.         }
  1537.         return this.activeRequestCounter;
  1538.     }
  1539.     public Date getCreationDate() {
  1540.         return this.creationDate;
  1541.     }
  1542.     public Date getUpdatePolicyDate() {
  1543.         return this.updatePolicyDate;
  1544.     }
  1545.     public Date getGestorePolicyConfigDate() {
  1546.         return this.gestorePolicyConfigDate;
  1547.     }
  1548.    
  1549.     @Deprecated
  1550.     public Long getManuallyResetPolicyTimeMillis() {
  1551.         return this.manuallyResetPolicyTimeMillis;
  1552.     }

  1553.     public Date getPolicyDate() {
  1554.         return this.policyDate;
  1555.     }  
  1556.     public Long getPolicyRequestCounter() {
  1557.         return getPolicyRequestCounter(false);
  1558.     }
  1559.     protected Long getPolicyRequestCounter(boolean readRemoteInfo) {
  1560.         if(readRemoteInfo) {
  1561.             // nop
  1562.         }
  1563.         return this.policyRequestCounter;
  1564.     }
  1565.     public Long getPolicyCounter() {
  1566.         return getPolicyCounter(false);
  1567.     }
  1568.     protected Long getPolicyCounter(boolean readRemoteInfo) {
  1569.         if(readRemoteInfo) {
  1570.             // nop
  1571.         }
  1572.         return this.policyCounter;
  1573.     }
  1574.     @Deprecated
  1575.     public Long getPolicyDenyRequestCounter() {
  1576.         return this.policyDenyRequestCounter;
  1577.     }
  1578.     @Deprecated
  1579.     public Long getPolicyDegradoPrestazionaleRequestCounter() {
  1580.         return this.policyDegradoPrestazionaleRequestCounter;
  1581.     }
  1582.     @Deprecated
  1583.     public Long getPolicyDegradoPrestazionaleCounter() {
  1584.         return this.policyDegradoPrestazionaleCounter;
  1585.     }
  1586.     public Double getPolicyAvgValue(){
  1587.         return getPolicyAvgValue(false);
  1588.     }
  1589.     protected Double getPolicyAvgValue(boolean readRemoteInfo){
  1590.         Double doubleValue = null;
  1591.         Long getPolicyCounter = getPolicyCounter(readRemoteInfo);
  1592.         Long getPolicyRequestCounter = getPolicyRequestCounter(readRemoteInfo);
  1593.         if(getPolicyCounter!=null && getPolicyRequestCounter!=null){
  1594.             double c = getPolicyCounter.doubleValue();
  1595.             double n = getPolicyRequestCounter.doubleValue();
  1596.             doubleValue = c/n;
  1597.         }
  1598.         return doubleValue;
  1599.     }
  1600.     protected Long getPolicyDenyRequestCounter(boolean readRemoteInfo) {
  1601.         if(readRemoteInfo) {
  1602.             // nop
  1603.         }
  1604.         return this.policyDenyRequestCounter;
  1605.     }
  1606.     public Date getLeftDateWindowCurrentInterval() {
  1607.         if(this.policyDate!=null && this.policyDateTypeInterval!=null){
  1608.             return DateUtils.convertToLeftInterval(this.policyDate, this.policyDateTypeInterval);
  1609.         }
  1610.         return null;
  1611.     }
  1612.     public Date getRightDateWindowCurrentInterval() {
  1613.         if(this.policyDate!=null && this.policyDateTypeInterval!=null && this.policyDateInterval!=null && this.policyDateCurrentInterval!=null){
  1614.             Date d = DateUtils.convertToRightInterval(this.policyDate, this.policyDateTypeInterval);
  1615.             return DatiCollezionati.incrementDate(d, this.policyDateTypeInterval, this.policyDateInterval, this.policyDateCurrentInterval);
  1616.         }
  1617.         return null;
  1618.     }  
  1619.    
  1620.     public Date getOldPolicyDate() {
  1621.         return this.oldPolicyDate;
  1622.     }
  1623.     public Long getOldPolicyRequestCounter() {
  1624.         return this.oldPolicyRequestCounter;
  1625.     }
  1626.     public Long getOldPolicyCounter() {
  1627.         return this.oldPolicyCounter;
  1628.     }
  1629.     public Double getOldPolicyAvgValue(){
  1630.         Double doubleValue = null;
  1631.         if(this.oldPolicyCounter!=null && this.oldPolicyRequestCounter!=null){
  1632.             double c = this.oldPolicyCounter.doubleValue();
  1633.             double n = this.oldPolicyRequestCounter.doubleValue();
  1634.             doubleValue = c/n;
  1635.         }
  1636.         return doubleValue;
  1637.     }
  1638.     public Date getLeftDateWindowPrecedentInterval() {
  1639.         if(this.oldPolicyDate!=null && this.policyDateTypeInterval!=null){
  1640.             return DateUtils.convertToLeftInterval(this.oldPolicyDate, this.policyDateTypeInterval);
  1641.         }
  1642.         return null;
  1643.     }
  1644.     public Date getRightDateWindowPrecedentInterval() {
  1645.         if(this.oldPolicyDate!=null && this.policyDateTypeInterval!=null && this.policyDateInterval!=null && this.policyDateCurrentInterval!=null){
  1646.             Date d = DateUtils.convertToRightInterval(this.oldPolicyDate, this.policyDateTypeInterval);
  1647.             return DatiCollezionati.incrementDate(d, this.policyDateTypeInterval, this.policyDateInterval, this.policyDateCurrentInterval);
  1648.         }
  1649.         return null;
  1650.     }  
  1651.        
  1652.    
  1653.     public Integer getPolicyDateInterval() {
  1654.         return this.policyDateInterval;
  1655.     }
  1656.     public Boolean getPolicyDateCurrentInterval() {
  1657.         return this.policyDateCurrentInterval;
  1658.     }
  1659.     public UnitaTemporale getPolicyDateTypeInterval() {
  1660.         return this.policyDateTypeInterval;
  1661.     }
  1662.     public TipoFinestra getPolicyDateWindowInterval() {
  1663.         return this.policyDateWindowInterval;
  1664.     }
  1665.     public Boolean getPolicyRealtime() {
  1666.         return this.policyRealtime;
  1667.     }
  1668.    
  1669.     public Date getLeftDateWindowSlidingInterval(Date now) {
  1670.         if(this.policyDateTypeInterval!=null && this.policyDateInterval!=null && this.policyDateCurrentInterval!=null){
  1671.             Date d = DateUtils.convertToLeftInterval(now, this.policyDateTypeInterval);
  1672.             return DatiCollezionati.decrementDate(d, this.policyDateTypeInterval, this.policyDateInterval, this.policyDateCurrentInterval);
  1673.         }
  1674.         return null;
  1675.     }
  1676.     public Date getRightDateWindowSlidingInterval(Date now) {
  1677.         if(this.policyDateTypeInterval!=null && this.policyDateCurrentInterval!=null){
  1678.             Date d = DateUtils.convertToRightInterval(now, this.policyDateTypeInterval);
  1679.             if(!this.policyDateCurrentInterval.booleanValue()){
  1680.                 d = DateUtils.incrementDate(d, this.policyDateTypeInterval, -1);
  1681.             }
  1682.             return d;
  1683.         }
  1684.         return null;
  1685.     }
  1686.    
  1687.        
  1688.     public Date getPolicyDegradoPrestazionaleDate() {
  1689.         return this.policyDegradoPrestazionaleDate;
  1690.     }
  1691.     protected Long getPolicyDegradoPrestazionaleRequestCounter(boolean readRemoteInfo) {
  1692.         if(readRemoteInfo) {
  1693.             // nop
  1694.         }
  1695.         return this.policyDegradoPrestazionaleRequestCounter;
  1696.     }
  1697.     protected Long getPolicyDegradoPrestazionaleCounter(boolean readRemoteInfo) {
  1698.         if(readRemoteInfo) {
  1699.             // nop
  1700.         }
  1701.         return this.policyDegradoPrestazionaleCounter;
  1702.     }
  1703.     public Double getPolicyDegradoPrestazionaleAvgValue(){
  1704.         return getPolicyDegradoPrestazionaleAvgValue(false);
  1705.     }
  1706.     protected Double getPolicyDegradoPrestazionaleAvgValue(boolean readRemoteInfo){
  1707.         Double doubleValue = null;
  1708.         Long getPolicyDegradoPrestazionaleRequestCounter = getPolicyDegradoPrestazionaleRequestCounter(readRemoteInfo);
  1709.         Long getPolicyDegradoPrestazionaleCounter = getPolicyDegradoPrestazionaleCounter(readRemoteInfo);
  1710.         if(getPolicyDegradoPrestazionaleCounter!=null && getPolicyDegradoPrestazionaleRequestCounter!=null){
  1711.             double c = getPolicyDegradoPrestazionaleCounter.doubleValue();
  1712.             double n = getPolicyDegradoPrestazionaleRequestCounter.doubleValue();
  1713.             doubleValue = c/n;
  1714.         }
  1715.         return doubleValue;
  1716.     }
  1717.     public Date getDegradoPrestazionaleLeftDateWindowCurrentInterval() {
  1718.         if(this.policyDegradoPrestazionaleDate!=null && this.policyDegradoPrestazionaleDateTypeInterval!=null){
  1719.             return DateUtils.convertToLeftInterval(this.policyDegradoPrestazionaleDate, this.policyDegradoPrestazionaleDateTypeInterval);
  1720.         }
  1721.         return null;
  1722.     }
  1723.     public Date getDegradoPrestazionaleRightDateWindowCurrentInterval() {
  1724.         if(this.policyDegradoPrestazionaleDate!=null && this.policyDegradoPrestazionaleDateTypeInterval!=null &&
  1725.                 this.policyDegradoPrestazionaleDateInterval!=null && this.policyDegradoPrestazionaleDateCurrentInterval!=null){
  1726.             Date d = DateUtils.convertToRightInterval(this.policyDegradoPrestazionaleDate, this.policyDegradoPrestazionaleDateTypeInterval);
  1727.             return DatiCollezionati.incrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval, this.policyDegradoPrestazionaleDateCurrentInterval);
  1728.         }
  1729.         return null;
  1730.     }  
  1731.     public Date getOldPolicyDegradoPrestazionaleDate() {
  1732.         return this.oldPolicyDegradoPrestazionaleDate;
  1733.     }
  1734.     public Long getOldPolicyDegradoPrestazionaleRequestCounter() {
  1735.         return this.oldPolicyDegradoPrestazionaleRequestCounter;
  1736.     }
  1737.     public Long getOldPolicyDegradoPrestazionaleCounter() {
  1738.         return this.oldPolicyDegradoPrestazionaleCounter;
  1739.     }
  1740.     public Double getOldPolicyDegradoPrestazionaleAvgValue(){
  1741.         Double doubleValue = null;
  1742.         if(this.oldPolicyDegradoPrestazionaleCounter!=null && this.oldPolicyDegradoPrestazionaleRequestCounter!=null){
  1743.             double c = this.oldPolicyDegradoPrestazionaleCounter.doubleValue();
  1744.             double n = this.oldPolicyDegradoPrestazionaleRequestCounter.doubleValue();
  1745.             doubleValue = c/n;
  1746.         }
  1747.         return doubleValue;
  1748.     }
  1749.     public Date getDegradoPrestazionaleLeftDateWindowPrecedentInterval() {
  1750.         if(this.oldPolicyDegradoPrestazionaleDate!=null && this.policyDegradoPrestazionaleDateTypeInterval!=null){
  1751.             return DateUtils.convertToLeftInterval(this.oldPolicyDegradoPrestazionaleDate, this.policyDegradoPrestazionaleDateTypeInterval);
  1752.         }
  1753.         return null;
  1754.     }
  1755.     public Date getDegradoPrestazionaleRightDateWindowPrecedentInterval() {
  1756.         if(this.oldPolicyDegradoPrestazionaleDate!=null && this.policyDegradoPrestazionaleDateTypeInterval!=null &&
  1757.                 this.policyDegradoPrestazionaleDateInterval!=null && this.policyDegradoPrestazionaleDateCurrentInterval!=null){
  1758.             Date d = DateUtils.convertToRightInterval(this.oldPolicyDegradoPrestazionaleDate, this.policyDegradoPrestazionaleDateTypeInterval);
  1759.             return DatiCollezionati.incrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval, this.policyDegradoPrestazionaleDateCurrentInterval);
  1760.         }
  1761.         return null;
  1762.     }
  1763.        
  1764.     public Integer getPolicyDegradoPrestazionaleDateInterval() {
  1765.         return this.policyDegradoPrestazionaleDateInterval;
  1766.     }
  1767.     public Boolean getPolicyDegradoPrestazionaleDateCurrentInterval() {
  1768.         return this.policyDegradoPrestazionaleDateCurrentInterval;
  1769.     }
  1770.     public UnitaTemporale getPolicyDegradoPrestazionaleDateTypeInterval() {
  1771.         return this.policyDegradoPrestazionaleDateTypeInterval;
  1772.     }
  1773.     public TipoFinestra getPolicyDegradoPrestazionaleDateWindowInterval() {
  1774.         return this.policyDegradoPrestazionaleDateWindowInterval;
  1775.     }
  1776.     public Boolean getPolicyDegradoPrestazionaleRealtime() {
  1777.         return this.policyDegradoPrestazionaleRealtime;
  1778.     }

  1779.    
  1780.     public Date getDegradoPrestazionaleLeftDateWindowSlidingInterval(Date now) {
  1781.         if(this.policyDegradoPrestazionaleDateTypeInterval!=null && this.policyDegradoPrestazionaleDateInterval!=null && this.policyDegradoPrestazionaleDateCurrentInterval!=null){
  1782.             Date d = DateUtils.convertToLeftInterval(now, this.policyDegradoPrestazionaleDateTypeInterval);
  1783.             return DatiCollezionati.decrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, this.policyDegradoPrestazionaleDateInterval, this.policyDegradoPrestazionaleDateCurrentInterval);
  1784.         }
  1785.         return null;
  1786.     }
  1787.     public Date getDegradoPrestazionaleRightDateWindowSlidingInterval(Date now) {
  1788.         if(this.policyDegradoPrestazionaleDateTypeInterval!=null && this.policyDegradoPrestazionaleDateCurrentInterval!=null){
  1789.             Date d = DateUtils.convertToRightInterval(now, this.policyDegradoPrestazionaleDateTypeInterval);
  1790.             if(!this.policyDegradoPrestazionaleDateCurrentInterval.booleanValue()){
  1791.                 d = DateUtils.incrementDate(d, this.policyDegradoPrestazionaleDateTypeInterval, -1);
  1792.             }
  1793.             return d;
  1794.         }
  1795.         return null;
  1796.     }
  1797.    
  1798.    

  1799.    
  1800.    
  1801.     // ****** SETTER DEPRECATI ******

  1802.     @Deprecated
  1803.     public void setTipoRisorsa(TipoRisorsa tipoRisorsa) {
  1804.         this.tipoRisorsa = tipoRisorsa;
  1805.     }

  1806.     public void initActiveRequestCounter() {
  1807.         this.activeRequestCounter = 0l;
  1808.     }
  1809.     @Deprecated
  1810.     public void setActiveRequestCounter(long activeRequestCounter) {
  1811.         this.activeRequestCounter = activeRequestCounter;
  1812.     }
  1813.     public long setAndGetActiveRequestCounter(long activeRequestCounter) {
  1814.         this.activeRequestCounter = activeRequestCounter;
  1815.         return this.activeRequestCounter;
  1816.     }
  1817.     @Deprecated
  1818.     public void setCreationDate(Date creationDate) {
  1819.         this.creationDate = creationDate;
  1820.     }
  1821.     @Deprecated
  1822.     public void setUpdatePolicyDate(Date updatePolicyDate) {
  1823.         this.updatePolicyDate = updatePolicyDate;
  1824.     }

  1825.     @Deprecated
  1826.     public void setPolicyDateInterval(Integer policyDateInterval) {
  1827.         this.policyDateInterval = policyDateInterval;
  1828.     }
  1829.     @Deprecated
  1830.     public void setPolicyDateCurrentInterval(Boolean policyDateCurrentInterval) {
  1831.         this.policyDateCurrentInterval = policyDateCurrentInterval;
  1832.     }
  1833.     @Deprecated
  1834.     public void setPolicyDateTypeInterval(UnitaTemporale policyDateTypeInterval) {
  1835.         this.policyDateTypeInterval = policyDateTypeInterval;
  1836.     }
  1837.     @Deprecated
  1838.     public void setPolicyDateWindowInterval(TipoFinestra policyDateWindowInterval) {
  1839.         this.policyDateWindowInterval = policyDateWindowInterval;
  1840.     }
  1841.     @Deprecated
  1842.     public void setPolicyRealtime(Boolean policyRealtime) {
  1843.         this.policyRealtime = policyRealtime;
  1844.     }
  1845.     @Deprecated
  1846.     public void setPolicyDate(Date policyDate) {
  1847.         this.policyDate = policyDate;
  1848.     }
  1849.     @Deprecated
  1850.     public void setPolicyRequestCounter(Long policyRequestCounter) {
  1851.         this.policyRequestCounter = policyRequestCounter;
  1852.     }
  1853.     public Long setAndGetPolicyRequestCounter(Long policyRequestCounter) {
  1854.         this.policyRequestCounter = policyRequestCounter;
  1855.         return this.policyRequestCounter;
  1856.     }
  1857.     @Deprecated
  1858.     public void setPolicyCounter(Long policyCounter) {
  1859.         this.policyCounter = policyCounter;
  1860.     }
  1861.     @Deprecated
  1862.     public void setPolicyDenyRequestCounter(Long policyDenyRequestCounter) {
  1863.         this.policyDenyRequestCounter = policyDenyRequestCounter;
  1864.     }
  1865.    
  1866.     @Deprecated
  1867.     public void setOldPolicyDate(Date oldPolicyDate) {
  1868.         this.oldPolicyDate = oldPolicyDate;
  1869.     }
  1870.     @Deprecated
  1871.     public void setOldPolicyRequestCounter(Long oldPolicyRequestCounter) {
  1872.         this.oldPolicyRequestCounter = oldPolicyRequestCounter;
  1873.     }
  1874.     @Deprecated
  1875.     public void setOldPolicyCounter(Long oldPolicyCounter) {
  1876.         this.oldPolicyCounter = oldPolicyCounter;
  1877.     }

  1878.     @Deprecated
  1879.     public void setPolicyDegradoPrestazionaleDateInterval(Integer policyDegradoPrestazionaleDateInterval) {
  1880.         this.policyDegradoPrestazionaleDateInterval = policyDegradoPrestazionaleDateInterval;
  1881.     }
  1882.     @Deprecated
  1883.     public void setPolicyDegradoPrestazionaleDateCurrentInterval(Boolean policyDegradoPrestazionaleDateCurrentInterval) {
  1884.         this.policyDegradoPrestazionaleDateCurrentInterval = policyDegradoPrestazionaleDateCurrentInterval;
  1885.     }
  1886.     @Deprecated
  1887.     public void setPolicyDegradoPrestazionaleDateTypeInterval(UnitaTemporale policyDegradoPrestazionaleDateTypeInterval) {
  1888.         this.policyDegradoPrestazionaleDateTypeInterval = policyDegradoPrestazionaleDateTypeInterval;
  1889.     }
  1890.     @Deprecated
  1891.     public void setPolicyDegradoPrestazionaleDateWindowInterval(TipoFinestra policyDegradoPrestazionaleDateWindowInterval) {
  1892.         this.policyDegradoPrestazionaleDateWindowInterval = policyDegradoPrestazionaleDateWindowInterval;
  1893.     }
  1894.     @Deprecated
  1895.     public void setPolicyDegradoPrestazionaleRealtime(Boolean policyDegradoPrestazionaleRealtime) {
  1896.         this.policyDegradoPrestazionaleRealtime = policyDegradoPrestazionaleRealtime;
  1897.     }
  1898.    
  1899.     @Deprecated
  1900.     public void setPolicyDegradoPrestazionaleDate(Date policyDegradoPrestazionaleDate) {
  1901.         this.policyDegradoPrestazionaleDate = policyDegradoPrestazionaleDate;
  1902.     }
  1903.     @Deprecated
  1904.     public void setPolicyDegradoPrestazionaleRequestCounter(Long policyDegradoPrestazionaleRequestCounter) {
  1905.         this.policyDegradoPrestazionaleRequestCounter = policyDegradoPrestazionaleRequestCounter;
  1906.     }
  1907.     @Deprecated
  1908.     public void setPolicyDegradoPrestazionaleCounter(Long policyDegradoPrestazionaleCounter) {
  1909.         this.policyDegradoPrestazionaleCounter = policyDegradoPrestazionaleCounter;
  1910.     }
  1911.     @Deprecated
  1912.     public void setOldPolicyDegradoPrestazionaleDate(Date oldPolicyDegradoPrestazionaleDate) {
  1913.         this.oldPolicyDegradoPrestazionaleDate = oldPolicyDegradoPrestazionaleDate;
  1914.     }
  1915.     @Deprecated
  1916.     public void setOldPolicyDegradoPrestazionaleRequestCounter(Long oldPolicyDegradoPrestazionaleRequestCounter) {
  1917.         this.oldPolicyDegradoPrestazionaleRequestCounter = oldPolicyDegradoPrestazionaleRequestCounter;
  1918.     }
  1919.     @Deprecated
  1920.     public void setOldPolicyDegradoPrestazionaleCounter(Long oldPolicyDegradoPrestazionaleCounter) {
  1921.         this.oldPolicyDegradoPrestazionaleCounter = oldPolicyDegradoPrestazionaleCounter;
  1922.     }


  1923.    



  1924.    
  1925.     // **** UTILITIES ****
  1926.        
  1927.     public static String serialize(DatiCollezionati dati){
  1928.         StringBuilder bf = new StringBuilder();
  1929.        
  1930.         // data di lettura delle informazioni
  1931.         if(dati.cloneDate!=null)
  1932.             bf.append(dati.cloneDate.getTime());
  1933.         else
  1934.             bf.append("-");
  1935.         bf.append("\n");
  1936.        
  1937.        
  1938.         // tipo di risorsa
  1939.         if(dati.tipoRisorsa!=null)
  1940.             bf.append(dati.tipoRisorsa.getValue());
  1941.         else
  1942.             bf.append("-");
  1943.         bf.append("\n");
  1944.        
  1945.        
  1946.         // threads
  1947.         Long getActiveRequestCounter = dati.getActiveRequestCounter(true);
  1948.         if(getActiveRequestCounter != null)
  1949.             bf.append(getActiveRequestCounter);
  1950.         else
  1951.             bf.append("-");
  1952.         bf.append("\n");
  1953.        
  1954.        
  1955.         // data di creazione
  1956.         if(dati.creationDate!=null)
  1957.             bf.append(dati.creationDate.getTime());
  1958.         else
  1959.             bf.append("-");
  1960.         bf.append("\n");
  1961.        
  1962.        
  1963.         // dati iniziali
  1964.         if(dati.policyDateTypeInterval!=null)
  1965.             bf.append(dati.policyDateTypeInterval.getValue());
  1966.         else
  1967.             bf.append("-");
  1968.         bf.append("\n");
  1969.         if(dati.policyDateInterval!=null)
  1970.             bf.append(dati.policyDateInterval);
  1971.         else
  1972.             bf.append("-");
  1973.         bf.append("\n");
  1974.         if(dati.policyDateCurrentInterval!=null)
  1975.             bf.append(dati.policyDateCurrentInterval);
  1976.         else
  1977.             bf.append("-");
  1978.         bf.append("\n");
  1979.         if(dati.policyDateWindowInterval!=null)
  1980.             bf.append(dati.policyDateWindowInterval.getValue());
  1981.         else
  1982.             bf.append("-");
  1983.         bf.append("\n");
  1984.         if(dati.policyRealtime!=null)
  1985.             bf.append(dati.policyRealtime);
  1986.         else
  1987.             bf.append("-");
  1988.         bf.append("\n");


  1989.         // dati dinamici
  1990.         if(dati.policyDate!=null)
  1991.             bf.append(dati.policyDate.getTime());
  1992.         else
  1993.             bf.append("-");
  1994.         bf.append("\n");
  1995.         Long getPolicyRequestCounter = dati.getPolicyRequestCounter(true);
  1996.         if(getPolicyRequestCounter!=null)
  1997.             bf.append(getPolicyRequestCounter);
  1998.         else
  1999.             bf.append("-");
  2000.         bf.append("\n");
  2001.         Long getPolicyCounter = dati.getPolicyCounter(true);
  2002.         if(getPolicyCounter!=null)
  2003.             bf.append(getPolicyCounter);
  2004.         else
  2005.             bf.append("-");
  2006.         bf.append("\n");
  2007.         Long getPolicyDenyRequestCounter = dati.getPolicyDenyRequestCounter(true);
  2008.         if(getPolicyDenyRequestCounter!=null)
  2009.             bf.append(getPolicyDenyRequestCounter);
  2010.         else
  2011.             bf.append("-");
  2012.         bf.append("\n");
  2013.         if(dati.oldPolicyDate!=null)
  2014.             bf.append(dati.oldPolicyDate.getTime());
  2015.         else
  2016.             bf.append("-");
  2017.         bf.append("\n");
  2018.         if(dati.oldPolicyRequestCounter!=null)
  2019.             bf.append(dati.oldPolicyRequestCounter);
  2020.         else
  2021.             bf.append("-");
  2022.         bf.append("\n");
  2023.         if(dati.oldPolicyCounter!=null)
  2024.             bf.append(dati.oldPolicyCounter);
  2025.         else
  2026.             bf.append("-");
  2027.         bf.append("\n");

  2028.        
  2029.         // dati iniziali degrado prestazionale
  2030.         if(dati.policyDegradoPrestazionaleDateTypeInterval!=null)
  2031.             bf.append(dati.policyDegradoPrestazionaleDateTypeInterval.getValue());
  2032.         else
  2033.             bf.append("-");
  2034.         bf.append("\n");
  2035.         if(dati.policyDegradoPrestazionaleDateInterval!=null)
  2036.             bf.append(dati.policyDegradoPrestazionaleDateInterval);
  2037.         else
  2038.             bf.append("-");
  2039.         bf.append("\n");
  2040.         if(dati.policyDegradoPrestazionaleDateCurrentInterval!=null)
  2041.             bf.append(dati.policyDegradoPrestazionaleDateCurrentInterval);
  2042.         else
  2043.             bf.append("-");
  2044.         bf.append("\n");
  2045.         if(dati.policyDegradoPrestazionaleDateWindowInterval!=null)
  2046.             bf.append(dati.policyDegradoPrestazionaleDateWindowInterval.getValue());
  2047.         else
  2048.             bf.append("-");
  2049.         bf.append("\n");
  2050.         if(dati.policyDegradoPrestazionaleRealtime!=null)
  2051.             bf.append(dati.policyDegradoPrestazionaleRealtime);
  2052.         else
  2053.             bf.append("-");
  2054.         bf.append("\n");


  2055.         // dati dinamici degrado prestazionale
  2056.         if(dati.policyDegradoPrestazionaleDate!=null)
  2057.             bf.append(dati.policyDegradoPrestazionaleDate.getTime());
  2058.         else
  2059.             bf.append("-");
  2060.         bf.append("\n");
  2061.         Long getPolicyDegradoPrestazionaleRequestCounter = dati.getPolicyDegradoPrestazionaleRequestCounter(true);
  2062.         if(getPolicyDegradoPrestazionaleRequestCounter!=null)
  2063.             bf.append(getPolicyDegradoPrestazionaleRequestCounter);
  2064.         else
  2065.             bf.append("-");
  2066.         bf.append("\n");
  2067.         Long getPolicyDegradoPrestazionaleCounter = dati.getPolicyDegradoPrestazionaleCounter(true);
  2068.         if(getPolicyDegradoPrestazionaleCounter!=null)
  2069.             bf.append(getPolicyDegradoPrestazionaleCounter);
  2070.         else
  2071.             bf.append("-");
  2072.         bf.append("\n");
  2073.         if(dati.oldPolicyDegradoPrestazionaleDate!=null)
  2074.             bf.append(dati.oldPolicyDegradoPrestazionaleDate.getTime());
  2075.         else
  2076.             bf.append("-");
  2077.         bf.append("\n");
  2078.         if(dati.oldPolicyDegradoPrestazionaleRequestCounter!=null)
  2079.             bf.append(dati.oldPolicyDegradoPrestazionaleRequestCounter);
  2080.         else
  2081.             bf.append("-");
  2082.         bf.append("\n");
  2083.         if(dati.oldPolicyDegradoPrestazionaleCounter!=null)
  2084.             bf.append(dati.oldPolicyDegradoPrestazionaleCounter);
  2085.         else
  2086.             bf.append("-");

  2087.        
  2088.         // data di registrazione/aggiornamento policy
  2089.         bf.append("\n");
  2090.         if(dati.updatePolicyDate!=null)
  2091.             bf.append(dati.updatePolicyDate.getTime());
  2092.         else
  2093.             bf.append("-");
  2094.        
  2095.         // data di configurazione gestore policy
  2096.         bf.append("\n");
  2097.         if(dati.gestorePolicyConfigDate!=null)
  2098.             bf.append(dati.gestorePolicyConfigDate.getTime());
  2099.         else
  2100.             bf.append("-");
  2101.        
  2102.        
  2103.         return bf.toString();
  2104.     }
  2105.    
  2106.     public static DatiCollezionati deserialize(String s) throws CoreException{
  2107.         DatiCollezionati dati = new DatiCollezionati(null, null);
  2108.         String [] tmp = s.split("\n");
  2109.         if(tmp==null){
  2110.             throw new CoreException("Wrong Format");
  2111.         }
  2112.         int oldLength = 27;
  2113.         int dataPolicyLength = oldLength +1;
  2114.         int dataConfigPolicyLength = dataPolicyLength +1;
  2115.         if(tmp.length!=oldLength && tmp.length!=dataPolicyLength && tmp.length!=dataConfigPolicyLength){
  2116.             throw new CoreException("Wrong Format (size: "+tmp.length+")");
  2117.         }
  2118.         for (int i = 0; i < tmp.length; i++) {
  2119.            
  2120.             // data di lettura delle informazioni
  2121.             if(i==0){
  2122.                 String tmpValue = tmp[i].trim();
  2123.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2124.                     dati.cloneDate = new Date(Long.parseLong(tmpValue));
  2125.                 }
  2126.             }
  2127.            
  2128.             // tipo di risorsa
  2129.             else if(i==1){
  2130.                 String tmpValue = tmp[i].trim();
  2131.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2132.                     dati.tipoRisorsa = TipoRisorsa.toEnumConstant(tmpValue);
  2133.                 }
  2134.             }
  2135.            
  2136.             // threads
  2137.             else if(i==2){
  2138.                 String tmpValue = tmp[i].trim();
  2139.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2140.                     dati.activeRequestCounter = Long.parseLong(tmpValue);
  2141.                 }
  2142.             }
  2143.            
  2144.             // data di creazione
  2145.             else if(i==3){
  2146.                 String tmpValue = tmp[i].trim();
  2147.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2148.                     dati.creationDate = new Date(Long.parseLong(tmpValue));
  2149.                 }
  2150.             }
  2151.            
  2152.            
  2153.             // dati iniziali
  2154.             else if(i==4){
  2155.                 String tmpValue = tmp[i].trim();
  2156.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2157.                     dati.policyDateTypeInterval = UnitaTemporale.toEnumConstant(tmpValue);
  2158.                 }
  2159.             }
  2160.             else if(i==5){
  2161.                 String tmpValue = tmp[i].trim();
  2162.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2163.                     dati.policyDateInterval = Integer.parseInt(tmpValue);
  2164.                 }
  2165.             }
  2166.             else if(i==6){
  2167.                 String tmpValue = tmp[i].trim();
  2168.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2169.                     dati.policyDateCurrentInterval = Boolean.parseBoolean(tmpValue);
  2170.                 }
  2171.             }
  2172.             else if(i==7){
  2173.                 String tmpValue = tmp[i].trim();
  2174.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2175.                     dati.policyDateWindowInterval = TipoFinestra.toEnumConstant(tmpValue);
  2176.                 }
  2177.             }
  2178.             else if(i==8){
  2179.                 String tmpValue = tmp[i].trim();
  2180.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2181.                     dati.policyRealtime = Boolean.parseBoolean(tmpValue);
  2182.                 }
  2183.             }
  2184.            
  2185.             // dati dinamici
  2186.             else if(i==9){
  2187.                 String tmpValue = tmp[i].trim();
  2188.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2189.                     dati.policyDate = new Date(Long.parseLong(tmpValue));
  2190.                 }
  2191.             }
  2192.             else if(i==10){
  2193.                 String tmpValue = tmp[i].trim();
  2194.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2195.                     dati.policyRequestCounter = Long.parseLong(tmpValue);
  2196.                 }
  2197.             }
  2198.             else if(i==11){
  2199.                 String tmpValue = tmp[i].trim();
  2200.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2201.                     dati.policyCounter = Long.parseLong(tmpValue);
  2202.                 }
  2203.             }
  2204.             else if(i==12){
  2205.                 String tmpValue = tmp[i].trim();
  2206.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2207.                     dati.policyDenyRequestCounter = Long.parseLong(tmpValue);
  2208.                 }
  2209.             }
  2210.             else if(i==13){
  2211.                 String tmpValue = tmp[i].trim();
  2212.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2213.                     dati.oldPolicyDate = new Date(Long.parseLong(tmpValue));
  2214.                 }
  2215.             }
  2216.             else if(i==14){
  2217.                 String tmpValue = tmp[i].trim();
  2218.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2219.                     dati.oldPolicyRequestCounter = Long.parseLong(tmpValue);
  2220.                 }
  2221.             }
  2222.             else if(i==15){
  2223.                 String tmpValue = tmp[i].trim();
  2224.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2225.                     dati.oldPolicyCounter = Long.parseLong(tmpValue);
  2226.                 }
  2227.             }
  2228.            
  2229.             // dati iniziali degrado prestazionale
  2230.             else if(i==16){
  2231.                 String tmpValue = tmp[i].trim();
  2232.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2233.                     dati.policyDegradoPrestazionaleDateTypeInterval = UnitaTemporale.toEnumConstant(tmpValue);
  2234.                 }
  2235.             }
  2236.             else if(i==17){
  2237.                 String tmpValue = tmp[i].trim();
  2238.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2239.                     dati.policyDegradoPrestazionaleDateInterval = Integer.parseInt(tmpValue);
  2240.                 }
  2241.             }
  2242.             else if(i==18){
  2243.                 String tmpValue = tmp[i].trim();
  2244.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2245.                     dati.policyDegradoPrestazionaleDateCurrentInterval = Boolean.parseBoolean(tmpValue);
  2246.                 }
  2247.             }
  2248.             else if(i==19){
  2249.                 String tmpValue = tmp[i].trim();
  2250.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2251.                     dati.policyDegradoPrestazionaleDateWindowInterval = TipoFinestra.toEnumConstant(tmpValue);
  2252.                 }
  2253.             }
  2254.             else if(i==20){
  2255.                 String tmpValue = tmp[i].trim();
  2256.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2257.                     dati.policyDegradoPrestazionaleRealtime = Boolean.parseBoolean(tmpValue);
  2258.                 }
  2259.             }
  2260.            
  2261.             // dati dinamici degrado prestazionale
  2262.             else if(i==21){
  2263.                 String tmpValue = tmp[i].trim();
  2264.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2265.                     dati.policyDegradoPrestazionaleDate = new Date(Long.parseLong(tmpValue));
  2266.                 }
  2267.             }
  2268.             else if(i==22){
  2269.                 String tmpValue = tmp[i].trim();
  2270.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2271.                     dati.policyDegradoPrestazionaleRequestCounter = Long.parseLong(tmpValue);
  2272.                 }
  2273.             }
  2274.             else if(i==23){
  2275.                 String tmpValue = tmp[i].trim();
  2276.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2277.                     dati.policyDegradoPrestazionaleCounter = Long.parseLong(tmpValue);
  2278.                 }
  2279.             }
  2280.             else if(i==24){
  2281.                 String tmpValue = tmp[i].trim();
  2282.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2283.                     dati.oldPolicyDegradoPrestazionaleDate = new Date(Long.parseLong(tmpValue));
  2284.                 }
  2285.             }
  2286.             else if(i==25){
  2287.                 String tmpValue = tmp[i].trim();
  2288.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2289.                     dati.oldPolicyDegradoPrestazionaleRequestCounter = Long.parseLong(tmpValue);
  2290.                 }
  2291.             }
  2292.             else if(i==26){
  2293.                 String tmpValue = tmp[i].trim();
  2294.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2295.                     dati.oldPolicyDegradoPrestazionaleCounter = Long.parseLong(tmpValue);
  2296.                 }
  2297.             }
  2298.            
  2299.             // data di registrazione/aggiornamento policy
  2300.             else if(i==27){
  2301.                 String tmpValue = tmp[i].trim();
  2302.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2303.                     dati.updatePolicyDate = new Date(Long.parseLong(tmpValue));
  2304.                 }
  2305.             }
  2306.            
  2307.             // data di configurazione gestore policy
  2308.             else if(i==28){
  2309.                 String tmpValue = tmp[i].trim();
  2310.                 if(tmpValue!=null && !"-".equals(tmpValue)){
  2311.                     dati.gestorePolicyConfigDate = new Date(Long.parseLong(tmpValue));
  2312.                 }
  2313.             }
  2314.         }
  2315.        
  2316.         if(dati.updatePolicyDate==null) {
  2317.             dati.updatePolicyDate = dati.creationDate; // per backward compatibility
  2318.         }
  2319.        
  2320.         return dati;
  2321.     }
  2322.    
  2323.     public static Long translateToKb(long counter) {
  2324.         return counter / 1024;
  2325.     }
  2326.     public static Long translateToSeconds(long counter) {
  2327.         return counter / 1000;
  2328.     }
  2329.    
  2330.     private static Date incrementDate(Date date,UnitaTemporale unitaTemporale,
  2331.             int intervallo, boolean consideraIntervalloAttuale) {
  2332.        
  2333.         int increment = 0;
  2334.         if(consideraIntervalloAttuale){
  2335.             if(intervallo>1){ // il fatto di riportare tutto allo ...59.999 vale già un intervallo se si deve considerare l'intervallo attuale.
  2336.                 increment = (intervallo-1);
  2337.             }
  2338.         }
  2339.         else{
  2340.             increment = intervallo;
  2341.         }
  2342.        
  2343.         return DateUtils.incrementDate(date, unitaTemporale, increment);
  2344.     }
  2345.    
  2346.     private static Date decrementDate(Date date, UnitaTemporale unitaTemporale,
  2347.             int intervallo, boolean consideraIntervalloAttuale) {
  2348.        
  2349.         int increment = 0;
  2350.         if(consideraIntervalloAttuale){
  2351.             if(intervallo>1){ // il fatto di riportare tutto allo ...59.999 vale già un intervallo se si deve considerare l'intervallo attuale.
  2352.                 increment = (intervallo-1);
  2353.             }
  2354.         }
  2355.         else{
  2356.             increment = intervallo;
  2357.         }
  2358.         if(increment!=0){
  2359.             increment = increment * (-1);
  2360.         }
  2361.        
  2362.         return DateUtils.incrementDate(date, unitaTemporale, increment);
  2363.     }
  2364. }