StatisticsUtils.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.monitor.engine.statistic;

  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Map;

  24. import org.openspcoop2.core.constants.TipoPdD;
  25. import org.openspcoop2.core.id.IDSoggetto;
  26. import org.openspcoop2.core.plugins.utils.FilterUtils;
  27. import org.openspcoop2.core.statistiche.StatisticaContenuti;
  28. import org.openspcoop2.core.transazioni.Transazione;
  29. import org.openspcoop2.core.transazioni.constants.PddRuolo;
  30. import org.openspcoop2.core.transazioni.dao.ITransazioneServiceSearch;
  31. import org.openspcoop2.generic_project.beans.AliasTableComplexField;
  32. import org.openspcoop2.generic_project.beans.ComplexField;
  33. import org.openspcoop2.generic_project.beans.ConstantField;
  34. import org.openspcoop2.generic_project.beans.Function;
  35. import org.openspcoop2.generic_project.beans.FunctionField;
  36. import org.openspcoop2.generic_project.beans.IAliasTableField;
  37. import org.openspcoop2.generic_project.beans.IField;
  38. import org.openspcoop2.generic_project.beans.UnionExpression;
  39. import org.openspcoop2.generic_project.beans.UnixTimestampIntervalField;
  40. import org.openspcoop2.generic_project.exception.ExpressionException;
  41. import org.openspcoop2.generic_project.exception.ExpressionNotImplementedException;
  42. import org.openspcoop2.generic_project.expression.IExpression;
  43. import org.openspcoop2.generic_project.expression.impl.sql.ISQLFieldConverter;
  44. import org.openspcoop2.monitor.engine.constants.Costanti;
  45. import org.openspcoop2.monitor.engine.exceptions.EngineException;
  46. import org.openspcoop2.monitor.engine.transaction.TransactionContentUtils;
  47. import org.openspcoop2.monitor.engine.utils.ContentFormatter;
  48. import org.openspcoop2.monitor.sdk.statistic.StatisticFilterName;
  49. import org.openspcoop2.monitor.sdk.statistic.StatisticResourceFilter;
  50. import org.openspcoop2.utils.date.DateUtils;
  51. import org.openspcoop2.utils.sql.SQLQueryObjectException;

  52. /**
  53.  * StatisticsUtils
  54.  *
  55.  * @author Poli Andrea (apoli@link.it)
  56.  * @author $Author$
  57.  * @version $Rev$, $Date$
  58.  */
  59. public class StatisticsUtils {

  60.    
  61.     public static Long readLongValue(Map<String, Object> row, String alias){
  62.         Object object = row.get(alias);
  63.         if(object!=null){
  64.             if(object instanceof org.apache.commons.lang.ObjectUtils.Null){
  65.                 return null;
  66.             }
  67.             else{
  68.                 return (Long) object;
  69.             }
  70.         }
  71.         return null;
  72.     }
  73.    
  74.     public static void setExpressionNotNullDate(ITransazioneServiceSearch transazioneSearchDAO, IExpression expr, Date data, Date dateNext, TipoPdD tipoPdD, StatisticBean stat,
  75.             ISQLFieldConverter fieldConverter) throws Exception{
  76.         StatisticsUtils.setExpressionEngine(transazioneSearchDAO, expr, data, dateNext, tipoPdD,
  77.                 true, false,
  78.                 stat, fieldConverter,
  79.                 false,
  80.                 null,null);
  81.     }
  82.     public static void setExpressionNullDate(ITransazioneServiceSearch transazioneSearchDAO, IExpression expr, Date data, Date dateNext, TipoPdD tipoPdD, StatisticBean stat,
  83.             ISQLFieldConverter fieldConverter) throws Exception{
  84.         StatisticsUtils.setExpressionEngine(transazioneSearchDAO, expr, data, dateNext, tipoPdD,
  85.                 false, true,
  86.                 stat, fieldConverter,
  87.                 false,
  88.                 null,null);
  89.     }
  90.     public static void setExpression(ITransazioneServiceSearch transazioneSearchDAO, IExpression expr, Date data, Date dateNext, TipoPdD tipoPdD, boolean setNotNullDate, StatisticBean stat,
  91.             ISQLFieldConverter fieldConverter) throws Exception{
  92.         StatisticsUtils.setExpressionEngine(transazioneSearchDAO, expr, data, dateNext, tipoPdD,
  93.                 setNotNullDate, false,
  94.                 stat, fieldConverter,
  95.                 false,
  96.                 null,null);
  97.     }
  98.     public static void setExpressionByStato(ITransazioneServiceSearch transazioneSearchDAO, IExpression expr, Date data, Date dateNext, TipoPdD tipoPdD, boolean setNotNullDate, StatisticBean stat,
  99.             ISQLFieldConverter fieldConverter) throws Exception{
  100.         StatisticsUtils.setExpressionEngine(transazioneSearchDAO, expr, data, dateNext, tipoPdD,
  101.                 setNotNullDate, false,
  102.                 stat, fieldConverter,
  103.                 true,
  104.                 null,null);
  105.     }
  106.     public static void setExpressionStatsPersonalizzate(ITransazioneServiceSearch transazioneSearchDAO, IExpression expr, Date data, Date dateNext, TipoPdD tipoPdD, boolean setNotNullDate, StatisticBean stat,
  107.             ISQLFieldConverter fieldConverter,
  108.             List<AliasFilter> aliases,
  109.             String idRisorsa,
  110.             StatisticResourceFilter ... risorseFiltri) throws Exception{
  111.         StatisticsUtils.setExpressionEngine(transazioneSearchDAO, expr, data, dateNext, tipoPdD,
  112.                 setNotNullDate, false,
  113.                 stat, fieldConverter,
  114.                 false,
  115.                 aliases,idRisorsa,
  116.                 risorseFiltri);
  117.     }
  118.     private static void setExpressionEngine(ITransazioneServiceSearch transazioneSearchDAO, IExpression expr, Date data, Date dateNext, TipoPdD tipoPdD,
  119.             boolean setNotNullDate, boolean setNullDate,
  120.             StatisticBean stat, ISQLFieldConverter fieldConverter,
  121.             boolean groupByStato,
  122.             List<AliasFilter> aliases, String idRisorsa,
  123.             StatisticResourceFilter ... risorseFiltri) throws Exception{
  124.        
  125.         expr.and();
  126.        
  127.         // indice
  128.         //expr.between(Transazione.model().DATA_INGRESSO_RICHIESTA, data , dateNext); between is inclusive!
  129.         expr.between(Transazione.model().DATA_INGRESSO_RICHIESTA, DateUtils.incredementDate1MsIf999(data) , dateNext);
  130.         expr.isNotNull(Transazione.model().DATA_INGRESSO_RICHIESTA);
  131.        
  132.         if(TipoPdD.DELEGATA.equals(tipoPdD)){
  133.             expr.equals(Transazione.model().PDD_RUOLO, PddRuolo.DELEGATA);
  134.         }else{
  135.             expr.equals(Transazione.model().PDD_RUOLO, PddRuolo.APPLICATIVA);
  136.         }
  137.         expr.isNotNull(Transazione.model().PDD_RUOLO);
  138.        
  139.         expr.isNotNull(Transazione.model().ESITO_CONTESTO);
  140.        
  141.         if(stat!=null){
  142.             // condizioni di group by messe anche in equals
  143. //          expr.equals(Transazione.model().PDD_CODICE,stat.getIdPorta());
  144. //          expr.equals(Transazione.model().TIPO_SOGGETTO_FRUITORE, stat.getMittente()!=null ? stat.getMittente().getTipo() : null);
  145. //          expr.equals(Transazione.model().NOME_SOGGETTO_FRUITORE, stat.getMittente()!=null ? stat.getMittente().getNome() : null);
  146. //          expr.equals(Transazione.model().TIPO_SOGGETTO_EROGATORE, stat.getDestinatario()!=null ? stat.getDestinatario().getTipo() : null);
  147. //          expr.equals(Transazione.model().NOME_SOGGETTO_EROGATORE, stat.getDestinatario()!=null ? stat.getDestinatario().getNome() : null);
  148. //          expr.equals(Transazione.model().TIPO_SERVIZIO, stat.getTipoServizio());
  149. //          expr.equals(Transazione.model().NOME_SERVIZIO, stat.getServizio());
  150. //          expr.equals(Transazione.model().AZIONE, stat.getAzione());

  151.             // Gestisco i possibili valori null con '-'.
  152.             // Sono state prese le informazioni anche con null poichè senno non venivano contate nelle statistiche le transazioni che non possedevano info sui servizi. (es porta delegata non trovata)
  153.             String pddCodice = stat.getIdPorta();
  154.             StatisticsUtils.setCondition(expr, pddCodice, Transazione.model().PDD_CODICE);
  155.             String tipoMittente = stat.getMittente()!=null ? stat.getMittente().getTipo() : null;
  156.             StatisticsUtils.setCondition(expr, tipoMittente, Transazione.model().TIPO_SOGGETTO_FRUITORE);
  157.             String nomeMittente = stat.getMittente()!=null ? stat.getMittente().getNome() : null;
  158.             StatisticsUtils.setCondition(expr, nomeMittente, Transazione.model().NOME_SOGGETTO_FRUITORE);
  159.             String tipoDestinatario = stat.getDestinatario()!=null ? stat.getDestinatario().getTipo() : null;
  160.             StatisticsUtils.setCondition(expr, tipoDestinatario, Transazione.model().TIPO_SOGGETTO_EROGATORE);
  161.             String nomeDestinatario = stat.getDestinatario()!=null ? stat.getDestinatario().getNome() : null;
  162.             StatisticsUtils.setCondition(expr, nomeDestinatario, Transazione.model().NOME_SOGGETTO_EROGATORE);
  163.             String tipoServizio = stat.getTipoServizio();
  164.             StatisticsUtils.setCondition(expr, tipoServizio, Transazione.model().TIPO_SERVIZIO);
  165.             String nomeServizio = stat.getServizio();
  166.             StatisticsUtils.setCondition(expr, nomeServizio, Transazione.model().NOME_SERVIZIO);
  167.             Integer versioneServizio = stat.getVersioneServizio();
  168.             StatisticsUtils.setCondition(expr, versioneServizio, Transazione.model().VERSIONE_SERVIZIO);
  169.             String azione = stat.getAzione();
  170.             StatisticsUtils.setCondition(expr, azione, Transazione.model().AZIONE);
  171.            
  172.            
  173. //          if(TipoPdD.DELEGATA.equals(tipoPdD)){
  174.             // Nella consultazione delle statistiche si utilizzano sempre gli applicativi fruitori come informazione fornita.
  175.             if(Costanti.SERVIZIO_APPLICATIVO_ANONIMO.equals(stat.getServizioApplicativo()) || stat.getServizioApplicativo()==null || Costanti.INFORMAZIONE_NON_DISPONIBILE.equals(stat.getServizioApplicativo())){
  176.                 expr.isNull(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE);
  177.             }
  178.             else{
  179.                 expr.equals(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE,stat.getServizioApplicativo());
  180.             }
  181. //          }else{
  182. //              if(Costanti.SERVIZIO_APPLICATIVO_ANONIMO.equals(stat.getServizioApplicativo()) || stat.getServizioApplicativo()==null){
  183. //                  expr.isNull(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE);
  184. //              }
  185. //              else{
  186. //                  expr.equals(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE,stat.getServizioApplicativo());
  187. //              }
  188. //          }
  189.            
  190.             String trasportoMittente = stat.getTrasportoMittente();
  191.             StatisticsUtils.setCondition(expr, trasportoMittente, Transazione.model().TRASPORTO_MITTENTE);
  192.            
  193.             String tokenIssuer = stat.getTokenIssuer();
  194.             StatisticsUtils.setCondition(expr, tokenIssuer, Transazione.model().TOKEN_ISSUER);
  195.             String tokenClientId = stat.getTokenClientId();
  196.             StatisticsUtils.setCondition(expr, tokenClientId, Transazione.model().TOKEN_CLIENT_ID);
  197.             String tokenSubject = stat.getTokenSubject();
  198.             StatisticsUtils.setCondition(expr, tokenSubject, Transazione.model().TOKEN_SUBJECT);
  199.             String tokenUsername = stat.getTokenUsername();
  200.             StatisticsUtils.setCondition(expr, tokenUsername, Transazione.model().TOKEN_USERNAME);
  201.             String tokenMail = stat.getTokenMail();
  202.             StatisticsUtils.setCondition(expr, tokenMail, Transazione.model().TOKEN_MAIL);
  203.            
  204.             String clientAddress = stat.getClientAddress();
  205.             StatisticsUtils.setCondition(expr, clientAddress, Transazione.model().CLIENT_ADDRESS);
  206.            
  207.             String gruppo = stat.getGruppo();
  208.             StatisticsUtils.setCondition(expr, gruppo, Transazione.model().GRUPPI);
  209.            
  210.             String uriApi = stat.getApi();
  211.             StatisticsUtils.setCondition(expr, uriApi, Transazione.model().URI_API);
  212.            
  213.             String clusterId = stat.getClusterId();
  214.             StatisticsUtils.setCondition(expr, clusterId, Transazione.model().CLUSTER_ID);
  215.            
  216.             expr.equals(Transazione.model().ESITO, stat.getEsito()!=null ? stat.getEsito() : -1);
  217.            
  218.             String esitoContesto = stat.getEsitoContesto();
  219.             StatisticsUtils.setCondition(expr, esitoContesto, Transazione.model().ESITO_CONTESTO);
  220.         }
  221.         else{
  222.             // Gestisco i possibili valori null con '-'.
  223.             // Sono state prese le informazioni anche con null poichè senno non venivano contate nelle statistiche le transazioni che non possedevano info sui servizi. (es porta delegata non trovata)
  224. //          expr.isNotNull(Transazione.model().PDD_CODICE);
  225. //          expr.isNotNull(Transazione.model().TIPO_SOGGETTO_FRUITORE);
  226. //          expr.isNotNull(Transazione.model().NOME_SOGGETTO_FRUITORE);
  227. //          expr.isNotNull(Transazione.model().TIPO_SOGGETTO_EROGATORE);
  228. //          expr.isNotNull(Transazione.model().NOME_SOGGETTO_EROGATORE);
  229. //          expr.isNotNull(Transazione.model().TIPO_SERVIZIO);
  230. //          expr.isNotNull(Transazione.model().NOME_SERVIZIO);
  231. //          expr.isNotNull(Transazione.model().VERSIONE_SERVIZIO);
  232.         }
  233.        
  234.         if(setNotNullDate){
  235.             expr.isNotNull(Transazione.model().DATA_USCITA_RICHIESTA);
  236.             expr.isNotNull(Transazione.model().DATA_INGRESSO_RISPOSTA);
  237.             expr.isNotNull(Transazione.model().DATA_USCITA_RISPOSTA);
  238.         }
  239.         else if(setNullDate) {
  240.             IExpression exprNullDate = transazioneSearchDAO.newExpression();
  241.             exprNullDate.isNotNull(Transazione.model().DATA_USCITA_RICHIESTA);
  242.             exprNullDate.isNotNull(Transazione.model().DATA_INGRESSO_RISPOSTA);
  243.             exprNullDate.isNotNull(Transazione.model().DATA_USCITA_RISPOSTA);
  244.             exprNullDate.and();
  245.             expr.not(exprNullDate);
  246.         }

  247.         if(idRisorsa!=null){
  248.             expr.equals(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.NOME,idRisorsa);
  249.         }
  250.         if(risorseFiltri!=null && risorseFiltri.length>0){
  251.             for (int i = 0; i < risorseFiltri.length; i++) {
  252.                 AliasFilter af = new AliasFilter();
  253.                 IAliasTableField atf = new AliasTableComplexField((ComplexField)Transazione.model().DUMP_MESSAGGIO.CONTENUTO.NOME, FilterUtils.getNextAliasStatisticsTable());
  254.                 //System.out.println("FILTRO["+i+"]= ("+af.getAliasTable()+") "+risorseFiltri[i]);
  255.                 af.setNomeFiltro(atf);
  256.                 af.setStatisticFilterName(risorseFiltri[i].getStatisticFilterName());
  257.                 aliases.add(af);
  258.                 expr.equals(atf,risorseFiltri[i].getResourceID());  
  259.             }
  260.         }
  261.        
  262.         // ** GROUP BY **
  263.         expr.addGroupBy(Transazione.model().PDD_RUOLO);
  264.         expr.addGroupBy(Transazione.model().PDD_CODICE);
  265.         expr.addGroupBy(Transazione.model().TIPO_SOGGETTO_FRUITORE);
  266.         expr.addGroupBy(Transazione.model().NOME_SOGGETTO_FRUITORE);
  267.         expr.addGroupBy(Transazione.model().TIPO_SOGGETTO_EROGATORE);
  268.         expr.addGroupBy(Transazione.model().NOME_SOGGETTO_EROGATORE);
  269.         expr.addGroupBy(Transazione.model().TIPO_SERVIZIO);
  270.         expr.addGroupBy(Transazione.model().NOME_SERVIZIO);
  271.         expr.addGroupBy(Transazione.model().VERSIONE_SERVIZIO);
  272.         expr.addGroupBy(Transazione.model().AZIONE);
  273.         // Nella consultazione delle statistiche si utilizzano sempre gli applicativi fruitori come informazione fornita.
  274. //      if(TipoPdD.DELEGATA.equals(tipoPdD)){
  275.         expr.addGroupBy(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE);
  276. //      }else{
  277. //          expr.addGroupBy(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE);
  278. //      }
  279.         expr.addGroupBy(Transazione.model().TRASPORTO_MITTENTE);
  280.         expr.addGroupBy(Transazione.model().TOKEN_ISSUER);
  281.         expr.addGroupBy(Transazione.model().TOKEN_CLIENT_ID);
  282.         expr.addGroupBy(Transazione.model().TOKEN_SUBJECT);
  283.         expr.addGroupBy(Transazione.model().TOKEN_USERNAME);
  284.         expr.addGroupBy(Transazione.model().TOKEN_MAIL);
  285.         expr.addGroupBy(Transazione.model().CLIENT_ADDRESS);
  286.         expr.addGroupBy(Transazione.model().GRUPPI);
  287.         expr.addGroupBy(Transazione.model().URI_API);
  288.         expr.addGroupBy(Transazione.model().CLUSTER_ID);
  289.         expr.addGroupBy(Transazione.model().ESITO);
  290.         expr.addGroupBy(Transazione.model().ESITO_CONTESTO);
  291.         if(groupByStato){
  292.             expr.addGroupBy(Transazione.model().STATO);
  293.         }
  294.         if(idRisorsa!=null){
  295.             expr.addGroupBy(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.NOME);
  296.             expr.addGroupBy(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE);
  297.         }
  298.         if(aliases!=null && aliases.size()>0){
  299.             for (AliasFilter aliasFilter : aliases) {
  300.                 IAliasTableField afName = aliasFilter.getNomeFiltro();
  301.                 expr.addGroupBy(afName);
  302.                
  303.                 String tableAlias = afName.getAliasTable();
  304.                 IAliasTableField afValue = new AliasTableComplexField((ComplexField)Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE, tableAlias);
  305.                 aliasFilter.setValoreFiltro(afValue);
  306.                
  307.                 expr.addGroupBy(afValue);
  308.             }
  309.         }
  310.     }
  311.    
  312.     private static void setCondition(IExpression expr, String value,IField field) throws ExpressionNotImplementedException, ExpressionException{
  313.         if(value==null || "".equals(value) || Costanti.INFORMAZIONE_NON_DISPONIBILE.equals(value)){
  314.             expr.isNull(field);
  315.         }
  316.         else{
  317.             expr.equals(field,value);
  318.         }
  319.     }
  320.    
  321.     private static void setCondition(IExpression expr, Integer value,IField field) throws ExpressionNotImplementedException, ExpressionException{
  322.         if(value==null || value.intValue() == Costanti.INFORMAZIONE_VERSIONE_NON_DISPONIBILE.intValue()){
  323.             expr.equals(field,Costanti.INFORMAZIONE_VERSIONE_NON_DISPONIBILE);
  324.         }
  325.         else{
  326.             expr.equals(field,value);
  327.         }
  328.     }
  329.    
  330.     public static void addSelectUnionField(UnionExpression expr, ISQLFieldConverter fieldConverter) throws Exception {
  331.             addSelectUnionField(expr, fieldConverter,
  332.                     false,
  333.                     null, null);
  334.     }
  335.     public static void addSelectUnionField(UnionExpression expr, ISQLFieldConverter fieldConverter,
  336.             boolean groupByStato,
  337.             List<AliasFilter> aliases, String idRisorsa) throws Exception {
  338.         expr.addSelectField(Transazione.model().PDD_RUOLO, fieldConverter.toColumn(Transazione.model().PDD_RUOLO, false));
  339.         expr.addSelectField(Transazione.model().PDD_CODICE, fieldConverter.toColumn(Transazione.model().PDD_CODICE, false));
  340.         expr.addSelectField(Transazione.model().TIPO_SOGGETTO_FRUITORE, fieldConverter.toColumn(Transazione.model().TIPO_SOGGETTO_FRUITORE, false));
  341.         expr.addSelectField(Transazione.model().NOME_SOGGETTO_FRUITORE, fieldConverter.toColumn(Transazione.model().NOME_SOGGETTO_FRUITORE, false));
  342.         expr.addSelectField(Transazione.model().TIPO_SOGGETTO_EROGATORE, fieldConverter.toColumn(Transazione.model().TIPO_SOGGETTO_EROGATORE, false));
  343.         expr.addSelectField(Transazione.model().NOME_SOGGETTO_EROGATORE, fieldConverter.toColumn(Transazione.model().NOME_SOGGETTO_EROGATORE, false));
  344.         expr.addSelectField(Transazione.model().TIPO_SERVIZIO, fieldConverter.toColumn(Transazione.model().TIPO_SERVIZIO, false));
  345.         expr.addSelectField(Transazione.model().NOME_SERVIZIO, fieldConverter.toColumn(Transazione.model().NOME_SERVIZIO, false));
  346.         expr.addSelectField(Transazione.model().VERSIONE_SERVIZIO, fieldConverter.toColumn(Transazione.model().VERSIONE_SERVIZIO, false));
  347.         expr.addSelectField(Transazione.model().AZIONE, fieldConverter.toColumn(Transazione.model().AZIONE, false));
  348.         // Nella consultazione delle statistiche si utilizzano sempre gli applicativi fruitori come informazione fornita.
  349. //      if(TipoPdD.DELEGATA.equals(tipoPdD)){
  350.         expr.addSelectField(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE, fieldConverter.toColumn(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE, false));
  351. //      }else{
  352. //          expr.addSelectField(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE, fieldConverter.toColumn(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE, false));
  353. //      }
  354.         expr.addSelectField(Transazione.model().TRASPORTO_MITTENTE, fieldConverter.toColumn(Transazione.model().TRASPORTO_MITTENTE, false));
  355.         expr.addSelectField(Transazione.model().TOKEN_ISSUER, fieldConverter.toColumn(Transazione.model().TOKEN_ISSUER, false));
  356.         expr.addSelectField(Transazione.model().TOKEN_CLIENT_ID, fieldConverter.toColumn(Transazione.model().TOKEN_CLIENT_ID, false));
  357.         expr.addSelectField(Transazione.model().TOKEN_SUBJECT, fieldConverter.toColumn(Transazione.model().TOKEN_SUBJECT, false));
  358.         expr.addSelectField(Transazione.model().TOKEN_USERNAME, fieldConverter.toColumn(Transazione.model().TOKEN_USERNAME, false));
  359.         expr.addSelectField(Transazione.model().TOKEN_MAIL, fieldConverter.toColumn(Transazione.model().TOKEN_MAIL, false));
  360.         expr.addSelectField(Transazione.model().CLIENT_ADDRESS, fieldConverter.toColumn(Transazione.model().CLIENT_ADDRESS, false));
  361.         expr.addSelectField(Transazione.model().GRUPPI, fieldConverter.toColumn(Transazione.model().GRUPPI, false));
  362.         expr.addSelectField(Transazione.model().URI_API, fieldConverter.toColumn(Transazione.model().URI_API, false));
  363.         expr.addSelectField(Transazione.model().CLUSTER_ID, fieldConverter.toColumn(Transazione.model().CLUSTER_ID, false));
  364.         expr.addSelectField(Transazione.model().ESITO, fieldConverter.toColumn(Transazione.model().ESITO, false));
  365.         expr.addSelectField(Transazione.model().ESITO_CONTESTO, fieldConverter.toColumn(Transazione.model().ESITO_CONTESTO, false));
  366.         if(groupByStato){
  367.             expr.addSelectField(Transazione.model().STATO, fieldConverter.toColumn(Transazione.model().STATO, false));
  368.         }
  369.         if(idRisorsa!=null){
  370.             expr.addSelectField(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.NOME, fieldConverter.toColumn(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.NOME, false));
  371.             expr.addSelectField(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE, fieldConverter.toColumn(Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE, false));
  372.         }
  373.         if(aliases!=null && aliases.size()>0){
  374.             for (AliasFilter aliasFilter : aliases) {
  375.                 IAliasTableField afName = aliasFilter.getNomeFiltro();
  376.                 expr.addSelectField(afName, afName.getFieldName());
  377.                
  378.                 String tableAlias = afName.getAliasTable();
  379.                 IAliasTableField afValue = new AliasTableComplexField((ComplexField)Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE, tableAlias);
  380.                 aliasFilter.setValoreFiltro(afValue);
  381.                
  382.                 expr.addSelectField(afValue, afValue.getFieldName());
  383.             }
  384.         }
  385.     }
  386.    
  387.     public static void addSelectFieldCountTransaction(List<FunctionField> selectList) throws ExpressionException{
  388.        
  389.         // Numero Transazioni
  390.         FunctionField fCount = new FunctionField(
  391.                 //Transazione.model().ID_TRANSAZIONE,
  392.                 Transazione.model().DATA_INGRESSO_RICHIESTA, // piu' efficiente
  393.                 //Function.COUNT_DISTINCT,
  394.                 Function.COUNT,
  395.                 "richieste");
  396.         selectList.add(fCount);
  397.        
  398.     }
  399.    
  400.     public static void addSelectFieldSizeTransaction(TipoPdD tipoPdD,List<FunctionField> selectList) throws ExpressionException{
  401.        
  402.         // Dimensione Transazioni
  403.         FunctionField fSum1 = null, fSum2= null, fSum3= null, fSum4= null;
  404.        
  405.         fSum1 = new FunctionField(Transazione.model().RICHIESTA_INGRESSO_BYTES, Function.SUM, "message_bytes_in_richiesta");
  406.         fSum2 = new FunctionField(Transazione.model().RICHIESTA_USCITA_BYTES, Function.SUM, "message_bytes_out_richiesta");
  407.         fSum3 = new FunctionField(Transazione.model().RISPOSTA_INGRESSO_BYTES, Function.SUM, "message_bytes_in_risposta");
  408.         fSum4 = new FunctionField(Transazione.model().RISPOSTA_USCITA_BYTES, Function.SUM, "message_bytes_out_risposta");

  409.         selectList.add(fSum1);
  410.         selectList.add(fSum2);
  411.         selectList.add(fSum3);
  412.         selectList.add(fSum4);
  413.     }
  414.    
  415.     public static void addSelectFunctionFieldLatencyTransaction(TipoPdD tipoPdD,ISQLFieldConverter fieldConverter,
  416.             List<FunctionField> selectFunctionList) throws ExpressionException, SQLQueryObjectException{
  417.         _addSelectFieldLatencyTransaction(tipoPdD, fieldConverter, selectFunctionList, null);
  418.     }
  419.     public static void addSelectConstantFieldLatencyTransaction(TipoPdD tipoPdD,ISQLFieldConverter fieldConverter,
  420.             List<ConstantField> selectConstantList) throws ExpressionException, SQLQueryObjectException{
  421.         _addSelectFieldLatencyTransaction(tipoPdD, fieldConverter, null, selectConstantList);
  422.     }
  423.     private static void _addSelectFieldLatencyTransaction(TipoPdD tipoPdD,ISQLFieldConverter fieldConverter,
  424.             List<FunctionField> selectFunctionList,
  425.             List<ConstantField> selectConstantList) throws ExpressionException, SQLQueryObjectException{
  426.        
  427.         if(selectFunctionList!=null) {
  428.        
  429.             // Latenza Totale
  430.             UnixTimestampIntervalField latenzaTotale = new UnixTimestampIntervalField("unix_latenza_totale", fieldConverter, true,
  431.                     Transazione.model().DATA_USCITA_RISPOSTA, Transazione.model().DATA_INGRESSO_RICHIESTA);
  432.             FunctionField fLatenzaTotaleAvg = new FunctionField(latenzaTotale, Function.AVG, "latenza_totale");
  433.             selectFunctionList.add(fLatenzaTotaleAvg);
  434.            
  435.             // Latenza Servizio
  436.             UnixTimestampIntervalField latenzaServizio = new UnixTimestampIntervalField("unix_latenza_servizio", fieldConverter, true,
  437.                     Transazione.model().DATA_INGRESSO_RISPOSTA, Transazione.model().DATA_USCITA_RICHIESTA);
  438.             FunctionField fLatenzaServizioAvg = new FunctionField(latenzaServizio, Function.AVG, "latenza_servizio");
  439.             selectFunctionList.add(fLatenzaServizioAvg);
  440.            
  441.             // Latenza Gateway Richiesta
  442.             UnixTimestampIntervalField latenzaPortaRichiesta = new UnixTimestampIntervalField("unix_latenza_richiesta", fieldConverter, true,
  443.                     Transazione.model().DATA_USCITA_RICHIESTA, Transazione.model().DATA_INGRESSO_RICHIESTA);
  444.             FunctionField fLatenzaPortaRichiestaAvg = new FunctionField(latenzaPortaRichiesta, Function.AVG, "latenza_porta_richiesta");
  445.             selectFunctionList.add(fLatenzaPortaRichiestaAvg);
  446.            
  447.             // Latenza Gateway Risposta
  448.             UnixTimestampIntervalField latenzaPortaRisposta = new UnixTimestampIntervalField("unix_latenza_risposta", fieldConverter, true,
  449.                     Transazione.model().DATA_USCITA_RISPOSTA, Transazione.model().DATA_INGRESSO_RISPOSTA);
  450.             FunctionField fLatenzaPortaRispostaAvg = new FunctionField(latenzaPortaRisposta, Function.AVG, "latenza_porta_risposta");
  451.             selectFunctionList.add(fLatenzaPortaRispostaAvg);
  452.            
  453.         }
  454.         else {
  455.            
  456.             // Latenza Totale
  457.             ConstantField latenzaTotale = new ConstantField("latenza_totale", Costanti.INFORMAZIONE_LATENZA_NON_DISPONIBILE, Long.class);
  458.             selectConstantList.add(latenzaTotale);
  459.            
  460.             // Latenza Servizio
  461.             ConstantField latenzaServizio = new ConstantField("latenza_servizio", Costanti.INFORMAZIONE_LATENZA_NON_DISPONIBILE, Long.class);
  462.             selectConstantList.add(latenzaServizio);
  463.            
  464.             // Latenza Gateway Richiesta
  465.             ConstantField latenzaPortaRichiesta = new ConstantField("latenza_porta_richiesta", Costanti.INFORMAZIONE_LATENZA_NON_DISPONIBILE, Long.class);
  466.             selectConstantList.add(latenzaPortaRichiesta);
  467.            
  468.             // Latenza Gateway Risposta
  469.             ConstantField latenzaPortaRisposta = new ConstantField("latenza_porta_risposta", Costanti.INFORMAZIONE_LATENZA_NON_DISPONIBILE, Long.class);
  470.             selectConstantList.add(latenzaPortaRisposta);
  471.         }
  472.        
  473.     }
  474.    
  475.     public static StatisticBean readStatisticBean(StatisticBean stat,Map<String, Object> row, ISQLFieldConverter fieldConverter, boolean useFieldConverter) throws ExpressionException{
  476.        
  477.         stat.setIdPorta(StatisticsUtils.getValueFromMap(Transazione.model().PDD_CODICE,row,fieldConverter,useFieldConverter));
  478.         String TipoPortaS = StatisticsUtils.getValueFromMap(Transazione.model().PDD_RUOLO,row,fieldConverter,useFieldConverter);
  479.         TipoPdD tipo = TipoPdD.toTipoPdD(TipoPortaS);
  480.         stat.setTipoPorta(tipo);
  481.        
  482.         /*
  483.         String sa= null;
  484.         Object saObject = null;
  485.         // Nella consultazione delle statistiche si utilizzano sempre gli applicativi fruitori come informazione fornita.
  486. //      if(tipo.equals(TipoPdD.DELEGATA)){
  487.         saObject = row.get(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE.getFieldName());
  488. //      }else{
  489. //          saObject = row.get(Transazione.model().SERVIZIO_APPLICATIVO_EROGATORE.getFieldName());
  490. //      }
  491.         if(saObject!=null){
  492.             if(saObject instanceof org.apache.commons.lang.ObjectUtils.Null){
  493.                 sa = null;
  494.             }
  495.             else{
  496.                 sa = (String) saObject;
  497.             }
  498.         }
  499.         stat.setServizioApplicativo(sa != null ? sa : Costanti.SERVIZIO_APPLICATIVO_ANONIMO);
  500.         */
  501.         // Registrare nelle statistiche il valore 'Anonimo' porta ad avere informazioni non corrette nella distribuzione per applicativo sulle erogazioni.
  502.         // L'errore avviene poichè è richiesto il group by sul nomeApplicativo, tipoSoggettoProprietario, nomeSoggettoProprietario
  503.         // poichè un applicativo viene identificato univocamente se si considera sia il nome dell'applicativo che il soggetto proprietario.
  504.         // Il group by sulle fruizioni, se si usa l'informazione anonima, non porta problemi perchè l'entry anonima sarà 1 sempre, essendo il soggetto fruitore uno solo (Soggetto locale impostato).
  505.         // Il group by sulle erogazioni produrrà invece più entry anonime se si hanno più soggetto che la invocano senza un applicativo specifico.
  506.         stat.setServizioApplicativo(StatisticsUtils.getValueFromMap(Transazione.model().SERVIZIO_APPLICATIVO_FRUITORE,row,fieldConverter,useFieldConverter));
  507.                        
  508.         stat.setTrasportoMittente(StatisticsUtils.getValueFromMap(Transazione.model().TRASPORTO_MITTENTE,row,fieldConverter,useFieldConverter));
  509.        
  510.         stat.setTokenIssuer(StatisticsUtils.getValueFromMap(Transazione.model().TOKEN_ISSUER,row,fieldConverter,useFieldConverter));
  511.         stat.setTokenClientId(StatisticsUtils.getValueFromMap(Transazione.model().TOKEN_CLIENT_ID,row,fieldConverter,useFieldConverter));
  512.         stat.setTokenSubject(StatisticsUtils.getValueFromMap(Transazione.model().TOKEN_SUBJECT,row,fieldConverter,useFieldConverter));
  513.         stat.setTokenUsername(StatisticsUtils.getValueFromMap(Transazione.model().TOKEN_USERNAME,row,fieldConverter,useFieldConverter));
  514.         stat.setTokenMail(StatisticsUtils.getValueFromMap(Transazione.model().TOKEN_MAIL,row,fieldConverter,useFieldConverter));
  515.        
  516.         stat.setClientAddress(StatisticsUtils.getValueFromMap(Transazione.model().CLIENT_ADDRESS,row,fieldConverter,useFieldConverter));
  517.        
  518.         stat.setGruppo(StatisticsUtils.getValueFromMap(Transazione.model().GRUPPI,row,fieldConverter,useFieldConverter));
  519.        
  520.         stat.setApi(StatisticsUtils.getValueFromMap(Transazione.model().URI_API,row,fieldConverter,useFieldConverter));
  521.        
  522.         stat.setClusterId(StatisticsUtils.getValueFromMap(Transazione.model().CLUSTER_ID,row,fieldConverter,useFieldConverter));
  523.        
  524. //      stat.setMittente(new IDSoggetto((String)row.get(Transazione.model().TIPO_SOGGETTO_FRUITORE.getFieldName()), (String)row.get(Transazione.model().NOME_SOGGETTO_FRUITORE .getFieldName())));
  525. //      stat.setDestinatario(new IDSoggetto((String)row.get(Transazione.model().TIPO_SOGGETTO_EROGATORE.getFieldName()),(String)row.get(Transazione.model().NOME_SOGGETTO_EROGATORE.getFieldName())));
  526. //      stat.setTipoServizio((String)row.get(Transazione.model().TIPO_SERVIZIO.getFieldName()));
  527. //      stat.setServizio((String)row.get(Transazione.model().NOME_SERVIZIO.getFieldName()));
  528. //      Object azObject = row.get(Transazione.model().AZIONE.getFieldName());
  529. //      String az = null;
  530. //      if(azObject!=null && !(azObject instanceof org.apache.commons.lang.ObjectUtils.Null)){
  531. //          az = (String) azObject;
  532. //      }
  533. //      stat.setAzione(az != null ? az : " ");
  534.        
  535.         // Gestisco i possibili valori null con '-'.
  536.         // Sono state prese le informazioni anche con null poichè senno non venivano contate nelle statistiche le transazioni che non possedevano info sui servizi. (es porta delegata non trovata)
  537.         stat.setMittente(new IDSoggetto(StatisticsUtils.getValueFromMap(Transazione.model().TIPO_SOGGETTO_FRUITORE,row,fieldConverter,useFieldConverter),
  538.                                         StatisticsUtils.getValueFromMap(Transazione.model().NOME_SOGGETTO_FRUITORE,row,fieldConverter,useFieldConverter)));
  539.        
  540.         stat.setDestinatario(new IDSoggetto(StatisticsUtils.getValueFromMap(Transazione.model().TIPO_SOGGETTO_EROGATORE,row,fieldConverter,useFieldConverter),
  541.                                             StatisticsUtils.getValueFromMap(Transazione.model().NOME_SOGGETTO_EROGATORE,row,fieldConverter,useFieldConverter)));
  542.        
  543.         stat.setTipoServizio(StatisticsUtils.getValueFromMap(Transazione.model().TIPO_SERVIZIO,row,fieldConverter,useFieldConverter));
  544.         stat.setServizio(StatisticsUtils.getValueFromMap(Transazione.model().NOME_SERVIZIO,row,fieldConverter,useFieldConverter));
  545.         stat.setVersioneServizio(StatisticsUtils.getIntegerValueFromMap(Transazione.model().VERSIONE_SERVIZIO,row,false,fieldConverter,useFieldConverter));
  546.        
  547.         stat.setAzione(StatisticsUtils.getValueFromMap(Transazione.model().AZIONE,row,fieldConverter,useFieldConverter));
  548.        
  549.         stat.setEsito(StatisticsUtils.getIntegerValueFromMap(Transazione.model().ESITO,row,true,fieldConverter,useFieldConverter));
  550.        
  551.         stat.setEsitoContesto(StatisticsUtils.getValueFromMap(Transazione.model().ESITO_CONTESTO,row,fieldConverter,useFieldConverter));
  552.        
  553.         return stat;
  554.     }
  555.     private static String getValueFromMap(IField field, Map<String, Object> row, ISQLFieldConverter fieldConverter, boolean useFieldConverter) throws ExpressionException{
  556.         String nomeKeyMappa = null;
  557.         if(useFieldConverter) {
  558.             nomeKeyMappa = fieldConverter.toColumn(field, false);
  559.         }
  560.         else {
  561.             nomeKeyMappa = field.getFieldName();
  562.         }
  563.         Object tmpObject = row.get(nomeKeyMappa);
  564.         String tmp = null;
  565.         if(tmpObject!=null && !(tmpObject instanceof org.apache.commons.lang.ObjectUtils.Null)){
  566.             tmp = (String) tmpObject;
  567.         }
  568.         if(tmp!=null && !"".equals(tmp)){
  569.             return tmp;
  570.         }
  571.         else{
  572.             return Costanti.INFORMAZIONE_NON_DISPONIBILE;
  573.         }
  574.     }
  575.     private static Integer getIntegerValueFromMap(IField field, Map<String, Object> row, boolean acceptZeroValue, ISQLFieldConverter fieldConverter, boolean useFieldConverter) throws ExpressionException{
  576.         String nomeKeyMappa = null;
  577.         if(useFieldConverter) {
  578.             nomeKeyMappa = fieldConverter.toColumn(field, false);
  579.         }
  580.         else {
  581.             nomeKeyMappa = field.getFieldName();
  582.         }
  583.         Object tmpObject = row.get(nomeKeyMappa);
  584.         Integer tmp = null;
  585.         if(tmpObject!=null && !(tmpObject instanceof org.apache.commons.lang.ObjectUtils.Null)){
  586.             tmp = (Integer) tmpObject;
  587.         }
  588.         if(tmp!=null && tmp.intValue()>0){
  589.             return tmp;
  590.         }
  591.         else if(tmp!=null && tmp.intValue()==0 && acceptZeroValue) {
  592.             return tmp;
  593.         }
  594.         else{
  595.             return Costanti.INFORMAZIONE_VERSIONE_NON_DISPONIBILE;
  596.         }
  597.     }
  598.    
  599.     public static void updateStatisticBeanCountTransactionInfo(StatisticBean stat,Map<String, Object> row){
  600.        
  601.         Long tmp = StatisticsUtils.readLongValue(row, "richieste");
  602.         if(tmp!=null){
  603.             stat.setRichieste(tmp);
  604.         }

  605.     }
  606.    
  607.     public static void updateStatisticBeanSizeTransactionInfo(StatisticBean stat,Map<String, Object> row){
  608.                
  609.         long messageBytesInRequest = 0;
  610.         Long tmp = StatisticsUtils.readLongValue(row, "message_bytes_in_richiesta");
  611.         if(tmp!=null){
  612.             messageBytesInRequest = tmp.longValue();
  613.         }
  614.         long messageBytesOutRequest = 0;
  615.         tmp = StatisticsUtils.readLongValue(row, "message_bytes_out_richiesta");
  616.         if(tmp!=null){
  617.             messageBytesOutRequest = tmp.longValue();
  618.         }
  619.         long messageBytesInResponse = 0;
  620.         tmp = StatisticsUtils.readLongValue(row, "message_bytes_in_risposta");
  621.         if(tmp!=null){
  622.             messageBytesInResponse = tmp.longValue();
  623.         }
  624.         long messageBytesOutResponse = 0;
  625.         tmp = StatisticsUtils.readLongValue(row, "message_bytes_out_risposta");
  626.         if(tmp!=null){
  627.             messageBytesOutResponse = tmp.longValue();
  628.         }
  629.        
  630.         switch (stat.getTipoPorta()) {
  631.         case DELEGATA:
  632.             stat.setBytesBandaInterna(messageBytesInRequest+messageBytesOutResponse);
  633.             stat.setBytesBandaEsterna(messageBytesOutRequest+messageBytesInResponse);
  634.             break;
  635.         default:
  636.             stat.setBytesBandaInterna(messageBytesOutRequest+messageBytesInResponse);
  637.             stat.setBytesBandaEsterna(messageBytesInRequest+messageBytesOutResponse);
  638.             break;
  639.         }
  640.         stat.setBytesBandaTotale(stat.getBytesBandaInterna()+stat.getBytesBandaEsterna());
  641.        
  642.     }
  643.    
  644.     public static void updateStatisticsBeanLatencyTransactionInfo(StatisticBean stat,Map<String, Object> row){
  645.         // Latenza Totale
  646.         long latenzaTotaleValue = -1;
  647.         Long tmp = StatisticsUtils.readLongValue(row, "latenza_totale");
  648.         if(tmp!=null){
  649.             latenzaTotaleValue = tmp.longValue();
  650.         }
  651.         stat.setLatenzaTotale(latenzaTotaleValue);
  652.        
  653.         // Latenza Servizio
  654.         long latenzaServizioValue = -1;
  655.         tmp = StatisticsUtils.readLongValue(row, "latenza_servizio");
  656.         if(tmp!=null){
  657.             latenzaServizioValue = tmp.longValue();
  658.         }
  659.         stat.setLatenzaServizio(latenzaServizioValue);
  660.        
  661.         // Latenza Gateway
  662.         long latenzaPortaRichiestaValue = -1;
  663.         tmp = StatisticsUtils.readLongValue(row, "latenza_porta_richiesta");
  664.         if(tmp!=null){
  665.             latenzaPortaRichiestaValue = tmp.longValue();
  666.         }
  667.         long latenzaPortaRispostaValue = -1;
  668.         tmp = StatisticsUtils.readLongValue(row, "latenza_porta_risposta");
  669.         if(tmp!=null){
  670.             latenzaPortaRispostaValue = tmp.longValue();
  671.         }
  672.         long latenzaPortaValue = -1;
  673.         if(latenzaPortaRichiestaValue>=0){
  674.             latenzaPortaValue = latenzaPortaRichiestaValue;
  675.             if(latenzaPortaRispostaValue>=0){
  676.                 latenzaPortaValue = latenzaPortaValue + latenzaPortaRispostaValue;
  677.             }
  678.         }
  679.         else{
  680.             if(latenzaPortaRispostaValue>=0){
  681.                 latenzaPortaValue = latenzaPortaRispostaValue;
  682.             }
  683.         }
  684.         stat.setLatenzaPorta(latenzaPortaValue);
  685.     }
  686.    
  687.     public static void fillStatisticsContenutiByStato(String idStatisticaPersonalizzata,StatisticaContenuti statisticaContenuti,Map<String, Object> row) throws EngineException{
  688.         String aliasValore = Transazione.model().STATO.getFieldName();
  689.         Object oValore = row.get(aliasValore);
  690.         String valore = null;
  691.         if(oValore!=null && oValore instanceof String){
  692.             String s = (String) oValore;
  693.             if(!"".equals(s)){
  694.                 valore = s;
  695.             }
  696.             else{
  697.                 valore = org.openspcoop2.monitor.engine.constants.Costanti.TRANSAZIONE_SENZA_STATO;
  698.             }
  699.         }else{
  700.             valore = org.openspcoop2.monitor.engine.constants.Costanti.TRANSAZIONE_SENZA_STATO;
  701.         }
  702.         StatisticsUtils.setRisorsaValore(statisticaContenuti, idStatisticaPersonalizzata, valore);
  703.     }
  704.    
  705.     public static void fillStatisticsContenuti(String idStatisticaPersonalizzata,StatisticaContenuti statisticaContenuti,Map<String, Object> row,
  706.             List<AliasFilter> aliases,RisorsaSemplice risorsaSemplice) throws EngineException{
  707.        
  708.         String risorsaNome = null;
  709.         if(risorsaSemplice.getIdStatistica()!=null){
  710.             risorsaNome = idStatisticaPersonalizzata+"-"+risorsaSemplice.getIdStatistica();
  711.         }
  712.         else{
  713.             risorsaNome = idStatisticaPersonalizzata;
  714.         }
  715.        
  716.         String aliasValore = Transazione.model().DUMP_MESSAGGIO.getBaseField().getFieldName()+"."+
  717.                 Transazione.model().DUMP_MESSAGGIO.CONTENUTO.getBaseField().getFieldName()+"."+
  718.                 Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE.getFieldName();
  719.        
  720.         StatisticsUtils.setRisorsaValore(statisticaContenuti, risorsaNome, (String)row.get(aliasValore));
  721.        
  722.        
  723. //      java.util.Iterator<String> itS = row.keySet().iterator();
  724. //      while (itS.hasNext()) {
  725. //          String key = (String) itS.next();
  726. //          System.out.println("ESEMPIO KEY["+key+"]");
  727. //      }
  728.        
  729.         if(aliases.size()>0){
  730.             for (int i = 0; i < aliases.size(); i++) {
  731.                 AliasFilter af = aliases.get(i);
  732.                 IAliasTableField afName = af.getNomeFiltro();
  733.                 IAliasTableField afValore = af.getValoreFiltro();
  734.                
  735.                 String aliasFiltroNome = afName.getAliasTable()+"."+
  736.                         Transazione.model().DUMP_MESSAGGIO.CONTENUTO.NOME.getFieldName();
  737.                 String aliasFiltroValore = afValore.getAliasTable()+"."+
  738.                         Transazione.model().DUMP_MESSAGGIO.CONTENUTO.VALORE.getFieldName();
  739.                
  740.                 StatisticsUtils.setFiltro(statisticaContenuti,
  741.                         af.getStatisticFilterName(),
  742.                         (String)row.get(aliasFiltroNome),
  743.                         (String)row.get(aliasFiltroValore));
  744.                
  745.             }
  746.         }
  747.        
  748.     }
  749.    
  750.     public static void fillStatisticsContenuti(String idStatistica,StatisticaContenuti statisticaContenuti,RisorsaAggregata risorsaAggregata) throws EngineException{
  751.        
  752.         StatisticsUtils.setRisorsaValore(statisticaContenuti, idStatistica, risorsaAggregata.getValoreRisorsaAggregata());
  753.         if(risorsaAggregata.getFiltri()!=null && risorsaAggregata.getFiltri().size()>0){
  754.             for (int i = 0; i < risorsaAggregata.getFiltri().size(); i++) {
  755.                 String nome = risorsaAggregata.getFiltri().get(i).getResourceID();
  756.                 String valore = ContentFormatter.toString(risorsaAggregata.getFiltri().get(i).getValue());
  757.                
  758.                 StatisticsUtils.setFiltro(statisticaContenuti,
  759.                         risorsaAggregata.getFiltri().get(i).getStatisticFilterName(),
  760.                         nome,
  761.                         valore);
  762.                
  763.             }
  764.         }
  765.     }
  766.    
  767.     private static void setRisorsaValore(StatisticaContenuti statisticaContenuti,String risorsaNome,String valore) throws EngineException{
  768.         if(valore.length()>TransactionContentUtils.SOGLIA_VALUE_TOO_LONG){
  769.             throw new EngineException("Valore fornito per il contenuto statistico ["+risorsaNome
  770.                     +"] è troppo grande (>"+TransactionContentUtils.SOGLIA_VALUE_TOO_LONG+") per essere utilizzato come informazione statistica. Valore fornito: "+valore);
  771.         }
  772.         if(TransactionContentUtils.KEY_COMPRESSED.equals(valore)){
  773.             throw new EngineException("Una risorsa compressa è stata fornita per il contenuto statistico ["+risorsaNome
  774.                     +"]; questo tipo di risorsa non è utilizzabile come informazione statistica");
  775.         }
  776.         if(TransactionContentUtils.KEY_VALUE_TOO_LONG.equals(valore)){
  777.             throw new EngineException("Una risorsa con valore > "+TransactionContentUtils.SOGLIA_VALUE_TOO_LONG+
  778.                     " caratteri è stata fornita per il contenuto statistico ["+risorsaNome
  779.                     +"]; questo tipo di risorsa non è utilizzabile come informazione statistica");
  780.         }
  781.         statisticaContenuti.setRisorsaNome(risorsaNome);
  782.         statisticaContenuti.setRisorsaValore(valore);
  783.     }
  784.    
  785.     private static void setFiltro(StatisticaContenuti statisticaContenuti,StatisticFilterName filterName,
  786.             String nome,String valore) throws EngineException{
  787.        
  788.         if(nome.length()>255){
  789.             throw new EngineException("Nome assegnato a "+filterName.name()+" ("+nome
  790.                     +") è troppo grande (>255)");
  791.         }
  792.         if(valore.length()>TransactionContentUtils.SOGLIA_VALUE_TOO_LONG){
  793.             throw new EngineException("Valore fornito per "+filterName.name()+" ["+nome
  794.                     +"] è troppo grande (>"+TransactionContentUtils.SOGLIA_VALUE_TOO_LONG+") per essere utilizzato come filtro. Valore fornito: "+valore);
  795.         }
  796.         if(TransactionContentUtils.KEY_COMPRESSED.equals(valore)){
  797.             throw new EngineException("Una risorsa compressa è stata fornita per "+filterName.name()+" ["+nome
  798.                     +"]; questo tipo di risorsa non è utilizzabile come valore per un filtro");
  799.         }
  800.         if(TransactionContentUtils.KEY_VALUE_TOO_LONG.equals(valore)){
  801.             throw new EngineException("Una risorsa con valore > "+TransactionContentUtils.SOGLIA_VALUE_TOO_LONG+" caratteri è stata fornita per "+
  802.                     filterName.name()+" ["+nome
  803.                     +"]; questo tipo di risorsa non è utilizzabile come valore per un filtro");
  804.         }
  805.        
  806.         switch (filterName) {
  807.         case FILTER_1:
  808.             statisticaContenuti.setFiltroNome1(nome);
  809.             statisticaContenuti.setFiltroValore1(valore);
  810.             break;
  811.         case FILTER_2:
  812.             statisticaContenuti.setFiltroNome2(nome);
  813.             statisticaContenuti.setFiltroValore2(valore);
  814.             break;
  815.         case FILTER_3:
  816.             statisticaContenuti.setFiltroNome3(nome);
  817.             statisticaContenuti.setFiltroValore3(valore);
  818.             break;
  819.         case FILTER_4:
  820.             statisticaContenuti.setFiltroNome4(nome);
  821.             statisticaContenuti.setFiltroValore4(valore);
  822.             break;
  823.         case FILTER_5:
  824.             statisticaContenuti.setFiltroNome5(nome);
  825.             statisticaContenuti.setFiltroValore5(valore);
  826.             break;
  827.         case FILTER_6:
  828.             statisticaContenuti.setFiltroNome6(nome);
  829.             statisticaContenuti.setFiltroValore6(valore);
  830.             break;
  831.         case FILTER_7:
  832.             statisticaContenuti.setFiltroNome7(nome);
  833.             statisticaContenuti.setFiltroValore7(valore);
  834.             break;
  835.         case FILTER_8:
  836.             statisticaContenuti.setFiltroNome8(nome);
  837.             statisticaContenuti.setFiltroValore8(valore);
  838.             break;
  839.         case FILTER_9:
  840.             statisticaContenuti.setFiltroNome9(nome);
  841.             statisticaContenuti.setFiltroValore9(valore);
  842.             break;
  843.         case FILTER_10:
  844.             statisticaContenuti.setFiltroNome10(nome);
  845.             statisticaContenuti.setFiltroValore10(valore);
  846.             break;
  847.         }
  848.     }
  849.    
  850.     public static String buildKey(StatisticaContenuti statisticaContenuti){
  851.         StringBuilder bf = new StringBuilder();
  852.        
  853.         bf.append(statisticaContenuti.getRisorsaNome());
  854.         bf.append("=");
  855.         bf.append(statisticaContenuti.getRisorsaValore());
  856.        
  857.         if(statisticaContenuti.getFiltroNome1()!=null){
  858.             bf.append(statisticaContenuti.getFiltroNome1());
  859.             bf.append("=");
  860.             bf.append(statisticaContenuti.getFiltroValore1());
  861.         }
  862.        
  863.         if(statisticaContenuti.getFiltroNome2()!=null){
  864.             bf.append(statisticaContenuti.getFiltroNome2());
  865.             bf.append("=");
  866.             bf.append(statisticaContenuti.getFiltroValore2());
  867.         }
  868.        
  869.         if(statisticaContenuti.getFiltroNome3()!=null){
  870.             bf.append(statisticaContenuti.getFiltroNome3());
  871.             bf.append("=");
  872.             bf.append(statisticaContenuti.getFiltroValore3());
  873.         }
  874.        
  875.         if(statisticaContenuti.getFiltroNome4()!=null){
  876.             bf.append(statisticaContenuti.getFiltroNome4());
  877.             bf.append("=");
  878.             bf.append(statisticaContenuti.getFiltroValore4());
  879.         }
  880.        
  881.         if(statisticaContenuti.getFiltroNome5()!=null){
  882.             bf.append(statisticaContenuti.getFiltroNome5());
  883.             bf.append("=");
  884.             bf.append(statisticaContenuti.getFiltroValore5());
  885.         }
  886.        
  887.         if(statisticaContenuti.getFiltroNome6()!=null){
  888.             bf.append(statisticaContenuti.getFiltroNome6());
  889.             bf.append("=");
  890.             bf.append(statisticaContenuti.getFiltroValore6());
  891.         }
  892.        
  893.         if(statisticaContenuti.getFiltroNome7()!=null){
  894.             bf.append(statisticaContenuti.getFiltroNome7());
  895.             bf.append("=");
  896.             bf.append(statisticaContenuti.getFiltroValore7());
  897.         }
  898.        
  899.         if(statisticaContenuti.getFiltroNome8()!=null){
  900.             bf.append(statisticaContenuti.getFiltroNome8());
  901.             bf.append("=");
  902.             bf.append(statisticaContenuti.getFiltroValore8());
  903.         }
  904.        
  905.         if(statisticaContenuti.getFiltroNome9()!=null){
  906.             bf.append(statisticaContenuti.getFiltroNome9());
  907.             bf.append("=");
  908.             bf.append(statisticaContenuti.getFiltroValore9());
  909.         }
  910.        
  911.         if(statisticaContenuti.getFiltroNome10()!=null){
  912.             bf.append(statisticaContenuti.getFiltroNome10());
  913.             bf.append("=");
  914.             bf.append(statisticaContenuti.getFiltroValore10());
  915.         }
  916.        
  917.         return bf.toString();
  918.        
  919.     }
  920. }