ReportisticaHelper.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.monitor.rs.server.api.impl.utils;

  21. import java.sql.Connection;
  22. import java.text.SimpleDateFormat;
  23. import java.util.ArrayList;
  24. import java.util.List;
  25. import java.util.Optional;

  26. import org.apache.commons.lang3.StringUtils;
  27. import org.openspcoop2.core.id.IDAccordo;
  28. import org.openspcoop2.core.id.IDSoggetto;
  29. import org.openspcoop2.core.monitor.rs.server.config.DBManager;
  30. import org.openspcoop2.core.monitor.rs.server.config.LoggerProperties;
  31. import org.openspcoop2.core.monitor.rs.server.model.BaseOggettoWithSimpleName;
  32. import org.openspcoop2.core.monitor.rs.server.model.DimensioniReportCustomEnum;
  33. import org.openspcoop2.core.monitor.rs.server.model.DimensioniReportEnum;
  34. import org.openspcoop2.core.monitor.rs.server.model.EsitoTransazioneFullSearchEnum;
  35. import org.openspcoop2.core.monitor.rs.server.model.FiltroApiBase;
  36. import org.openspcoop2.core.monitor.rs.server.model.FiltroApiImplementata;
  37. import org.openspcoop2.core.monitor.rs.server.model.FiltroApiSoggetti;
  38. import org.openspcoop2.core.monitor.rs.server.model.FiltroEsito;
  39. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteErogazioneApplicativo;
  40. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteErogazioneSoggetto;
  41. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteFruizioneApplicativo;
  42. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteIdAutenticato;
  43. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteIndirizzoIP;
  44. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteTokenClaim;
  45. import org.openspcoop2.core.monitor.rs.server.model.FiltroMittenteTokenClaimSoggetto;
  46. import org.openspcoop2.core.monitor.rs.server.model.FiltroRicercaRuoloTransazioneEnum;
  47. import org.openspcoop2.core.monitor.rs.server.model.FormatoReportEnum;
  48. import org.openspcoop2.core.monitor.rs.server.model.OccupazioneBandaEnum;
  49. import org.openspcoop2.core.monitor.rs.server.model.OccupazioneBandaTipi;
  50. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReport;
  51. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportBase;
  52. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportDimensioni;
  53. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportMultiLine;
  54. import org.openspcoop2.core.monitor.rs.server.model.RicercaBaseStatistica;
  55. import org.openspcoop2.core.monitor.rs.server.model.RicercaBaseStatisticaSoggetti;
  56. import org.openspcoop2.core.monitor.rs.server.model.RicercaConfigurazioneApi;
  57. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaAndamentoTemporale;
  58. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApi;
  59. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApplicativo;
  60. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApplicativoRegistrato;
  61. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneAzione;
  62. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneErrori;
  63. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneEsiti;
  64. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneSoggettoLocale;
  65. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneSoggettoRemoto;
  66. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneTokenInfo;
  67. import org.openspcoop2.core.monitor.rs.server.model.TempoMedioRispostaEnum;
  68. import org.openspcoop2.core.monitor.rs.server.model.TempoMedioRispostaTipi;
  69. import org.openspcoop2.core.monitor.rs.server.model.TipoFiltroMittenteEnum;
  70. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportEnum;
  71. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportMultiLineNumeroTransazioni;
  72. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportMultiLineOccupazioneBanda;
  73. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportMultiLineTempoMedioRisposta;
  74. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportNumeroTransazioni;
  75. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportOccupazioneBanda;
  76. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportTempoMedioRisposta;
  77. import org.openspcoop2.core.monitor.rs.server.model.UnitaTempoReportEnum;
  78. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  79. import org.openspcoop2.generic_project.exception.NotFoundException;
  80. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  81. import org.openspcoop2.message.constants.ServiceBinding;
  82. import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
  83. import org.openspcoop2.utils.date.DateUtils;
  84. import org.openspcoop2.utils.regexp.RegExpNotFoundException;
  85. import org.openspcoop2.utils.regexp.RegularExpressionEngine;
  86. import org.openspcoop2.utils.service.beans.TransazioneRuoloEnum;
  87. import org.openspcoop2.utils.service.context.IContext;
  88. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  89. import org.openspcoop2.web.monitor.statistiche.constants.CostantiExporter;
  90. import org.openspcoop2.web.monitor.statistiche.dao.ConfigurazioniGeneraliService;
  91. import org.openspcoop2.web.monitor.statistiche.dao.StatisticheGiornaliereService;


  92. /**
  93.  * ReportisticaHelper
  94.  *
  95.  * @author $Author$
  96.  * @version $Rev$, $Date$
  97.  *
  98.  */
  99. public class ReportisticaHelper {

  100.     private static void setEsitoCodice(EsitoTransazioneFullSearchEnum tipo , FiltroEsito filtro, HttpRequestWrapper wrap) {
  101.         if(filtro.getCodice()!=null) {
  102.             wrap.overrideParameter(CostantiExporter.ESITO, filtro.getCodice().toString());
  103.         }
  104.         else if(filtro.getCodici()!=null && !filtro.getCodici().isEmpty()) {
  105.             if(filtro.getCodici().size()==1) {
  106.                 wrap.overrideParameter(CostantiExporter.ESITO, filtro.getCodici().get(0).toString());
  107.             }
  108.             else {
  109.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Con il tipo di esito indicato '"+tipo.toString()+"' può essere indicato solamente un codice");
  110.             }
  111.         }
  112.     }
  113.     public static final void overrideFiltroEsito(FiltroEsito filtro, HttpRequestWrapper wrap, MonitoraggioEnv env) {

  114.         if (filtro != null) {

  115.             EsitoTransazioneFullSearchEnum tipo = CheckNotNull.getEsitoTransazione(filtro);
  116.            
  117.             switch (tipo) {
  118.             case QUALSIASI:
  119.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_OK);
  120.                 setEsitoCodice(tipo, filtro, wrap);
  121.                 if(filtro.isEscludiScartate()!=null) {
  122.                     wrap.overrideParameter(CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE,
  123.                             filtro.isEscludiScartate() ? CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_TRUE : CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_FALSE);
  124.                 }
  125.                 break;
  126.             case OK:
  127.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_OK);
  128.                 setEsitoCodice(tipo, filtro, wrap);
  129.                 break;
  130.             case FAULT:
  131.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_FAULT_APPLICATIVO);
  132.                 setEsitoCodice(tipo, filtro, wrap);
  133.                 break;
  134.             case FALLITE:
  135.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_FALLITE);
  136.                 setEsitoCodice(tipo, filtro, wrap);
  137.                 if(filtro.isEscludiScartate()!=null) {
  138.                     wrap.overrideParameter(CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE,
  139.                             filtro.isEscludiScartate() ? CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_TRUE : CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_FALSE);
  140.                 }
  141.                 break;
  142.             case FALLITE_E_FAULT:
  143.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO,
  144.                         CostantiExporter.ESITO_GRUPPO_FALLITE_E_FAULT_APPLICATIVO);
  145.                 setEsitoCodice(tipo, filtro, wrap);
  146.                 if(filtro.isEscludiScartate()!=null) {
  147.                     wrap.overrideParameter(CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE,
  148.                             filtro.isEscludiScartate() ? CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_TRUE : CostantiExporter.ESCLUDI_RICHIESTE_SCARTATE_FALSE);
  149.                 }
  150.                 break;
  151.             case ERRORI_CONSEGNA:
  152.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_ERRORI_CONSEGNA);
  153.                 setEsitoCodice(tipo, filtro, wrap);
  154.                 break;
  155.             case RICHIESTE_SCARTATE:
  156.                 wrap.overrideParameter(CostantiExporter.ESITO_GRUPPO, CostantiExporter.ESITO_GRUPPO_RICHIESTE_SCARTATE);
  157.                 setEsitoCodice(tipo, filtro, wrap);
  158.                 break;
  159.             case PERSONALIZZATO:
  160.                
  161.                 if(filtro.getCodice()==null && (filtro.getCodici()==null || filtro.getCodici().isEmpty())) {
  162.                     throw FaultCode.RICHIESTA_NON_VALIDA.toException("Con il tipo di esito indicato '"+tipo.toString()+"' deve essere indicato almeno un codice");
  163.                 }
  164.                 List<Integer> dettaglioEsito = filtro.getCodici();
  165.                 if(dettaglioEsito==null || dettaglioEsito.isEmpty()) {
  166.                     dettaglioEsito = new ArrayList<Integer>();
  167.                     dettaglioEsito.add(filtro.getCodice());
  168.                 }
  169.                
  170.                 Iterable<String> esiti = dettaglioEsito.stream()
  171.                         .map(e -> e.toString())::iterator;

  172.                 wrap.overrideParameter(CostantiExporter.ESITO, String.join(",", esiti));
  173.                
  174.                 break;
  175.             }
  176.         }
  177.     }

  178.     public static final void overrideRicercaBaseStatistica(RicercaBaseStatistica body, HttpRequestWrapper wrap,
  179.             MonitoraggioEnv env) {
  180.         if (body == null)
  181.             return;

  182.         // defaults:
  183.         if (body.getUnitaTempo() == null)
  184.             body.setUnitaTempo(UnitaTempoReportEnum.GIORNALIERO);
  185.         // Intervallo Temporale
  186.         SimpleDateFormat sdf = DateUtils.getSimpleDateFormatMs();
  187.         wrap.overrideParameter(CostantiExporter.DATA_INIZIO,
  188.                 sdf.format(body.getIntervalloTemporale().getDataInizio().toDate()));
  189.         wrap.overrideParameter(CostantiExporter.DATA_FINE,
  190.                 sdf.format(body.getIntervalloTemporale().getDataFine().toDate()));
  191.         wrap.overrideParameter(CostantiExporter.TIPO_UNITA_TEMPORALE,
  192.                 Enums.toStatisticType.get(body.getUnitaTempo()).toString());
  193.         wrap.overrideParameter(CostantiExporter.TIPOLOGIA,
  194.                 Enums.toTipologiaFiltroRicercaRuoloTransazioneEnum.get(body.getTipo()).toString());
  195.         if(body.getIdCluster()!=null) {
  196.             wrap.overrideParameter(CostantiExporter.ID_CLUSTER,
  197.                     body.getIdCluster());
  198.         }
  199.         if(body.getTag()!=null) {
  200.             wrap.overrideParameter(CostantiExporter.GRUPPO,
  201.                     body.getTag());
  202.         }
  203.     }

  204.     public static final void overrideFiltroMittenteIdApplicativo(FiltroMittenteIdAutenticato filtro,
  205.             HttpRequestWrapper wrap, MonitoraggioEnv env) {
  206.         if (filtro == null)
  207.             return;
  208.        
  209.         wrap.overrideParameter(CostantiExporter.TIPO_AUTENTICAZIONE,Enums.toTipoAutenticazione.get(filtro.getAutenticazione()).getValue());
  210.         if (filtro.getId() != null) {
  211.             wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, filtro.getId());
  212.         }
  213.         if (filtro.isRicercaEsatta() != null) {
  214.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, filtro.isRicercaEsatta() + "");
  215.         }
  216.         if (filtro.isCaseSensitive() != null) {
  217.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,
  218.                     filtro.isCaseSensitive() + "");
  219.         }
  220.     }
  221.    
  222.     public static final void overrideFiltroMittenteIndirizzoIP(FiltroMittenteIndirizzoIP filtro,
  223.             HttpRequestWrapper wrap, MonitoraggioEnv env) {
  224.         if (filtro == null)
  225.             return;
  226.        
  227.         if(filtro.getTipo()!=null) {
  228.             wrap.overrideParameter(CostantiExporter.TIPO_INDIRIZZO_IP,Enums.toTipoIndirizzzoIP.get(filtro.getTipo()));
  229.         }
  230.         if (filtro.getId() != null) {
  231.             wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, filtro.getId());
  232.         }
  233.         if (filtro.isRicercaEsatta() != null) {
  234.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, filtro.isRicercaEsatta() + "");
  235.         }
  236.         if (filtro.isCaseSensitive() != null) {
  237.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,
  238.                     filtro.isCaseSensitive() + "");
  239.         }
  240.     }
  241.    
  242.     public static final void overrideFiltroMittenteFruizione(TipoFiltroMittenteEnum tipo, Object filtro, boolean isDistribuzioneSoggettoRemoto, HttpRequestWrapper wrap,
  243.             MonitoraggioEnv env) {
  244.         if (filtro == null)
  245.             return;
  246.         if (tipo == null)
  247.             return;

  248.         wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE, Enums.toTipoRicercaMittente(tipo));
  249.        
  250.         switch (tipo) {
  251.        
  252.         case EROGAZIONE_SOGGETTO: {
  253.             throw FaultCode.RICHIESTA_NON_VALIDA
  254.                 .toException("Identificazione '"+tipo.toString()+"' "
  255.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
  256.         }
  257.        
  258.         case FRUIZIONE_APPLICATIVO: {
  259.            
  260.             if(! (filtro instanceof FiltroMittenteFruizioneApplicativo)) {
  261.                 throw FaultCode.RICHIESTA_NON_VALIDA
  262.                 .toException("Identificazione '"+tipo.toString()+"' "
  263.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteFruizioneApplicativo.class.getName()+")");
  264.             }
  265.             FiltroMittenteFruizioneApplicativo fAppl = (FiltroMittenteFruizioneApplicativo) filtro;
  266.             if(fAppl.getTipoIdentificazioneApplicativo()!=null) {
  267.                 switch (fAppl.getTipoIdentificazioneApplicativo()) {
  268.                 case TRASPORTO:
  269.                     wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
  270.                     break;
  271.                 case TOKEN:
  272.                     wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TOKEN);
  273.                     break;
  274.                 }
  275.             }
  276.             else {
  277.                 wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
  278.             }
  279.             wrap.overrideParameter(CostantiExporter.APPLICATIVO, fAppl.getApplicativo());
  280.             break;
  281.         }
  282.        
  283.         case EROGAZIONE_APPLICATIVO: {
  284.             throw FaultCode.RICHIESTA_NON_VALIDA
  285.                 .toException("Identificazione '"+tipo.toString()+"' "
  286.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
  287.         }
  288.        
  289.         case IDENTIFICATIVO_AUTENTICATO: {
  290.            
  291.             if(! (filtro instanceof FiltroMittenteIdAutenticato)) {
  292.                 throw FaultCode.RICHIESTA_NON_VALIDA
  293.                 .toException("Identificazione '"+tipo.toString()+"' "
  294.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIdAutenticato.class.getName()+")");
  295.             }
  296.             FiltroMittenteIdAutenticato fIdAutenticato = (FiltroMittenteIdAutenticato) filtro;
  297.             ReportisticaHelper.overrideFiltroMittenteIdApplicativo(fIdAutenticato, wrap, env);
  298.             break;
  299.         }
  300.        
  301.         case EROGAZIONE_TOKEN_INFO: {
  302.             throw FaultCode.RICHIESTA_NON_VALIDA
  303.                 .toException("Identificazione '"+tipo.toString()+"' "
  304.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
  305.         }
  306.        
  307.         case TOKEN_INFO: {
  308.             if(! (filtro instanceof FiltroMittenteTokenClaim)) {
  309.                 throw FaultCode.RICHIESTA_NON_VALIDA
  310.                 .toException("Identificazione '"+tipo.toString()+"' "
  311.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaim.class.getName()+")");
  312.             }
  313.             FiltroMittenteTokenClaim fClaim = (FiltroMittenteTokenClaim) filtro;
  314.             wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
  315.             wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
  316.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
  317.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,fClaim.isCaseSensitive() + "");
  318.             break;
  319.         }
  320.         case INDIRIZZO_IP: {
  321.            
  322.             if(! (filtro instanceof FiltroMittenteIndirizzoIP)) {
  323.                 throw FaultCode.RICHIESTA_NON_VALIDA
  324.                 .toException("Identificazione '"+tipo.toString()+"' "
  325.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIndirizzoIP.class.getName()+")");
  326.             }
  327.             FiltroMittenteIndirizzoIP indirizzoIP = (FiltroMittenteIndirizzoIP) filtro;
  328.             ReportisticaHelper.overrideFiltroMittenteIndirizzoIP(indirizzoIP, wrap, env);
  329.             break;
  330.         }
  331.         }
  332.     }
  333.    
  334.     public static final void overrideFiltroMittenteErogazione(TipoFiltroMittenteEnum tipo, Object filtro, boolean isDistribuzioneSoggettoRemoto, HttpRequestWrapper wrap,
  335.             MonitoraggioEnv env) {
  336.         if (filtro == null)
  337.             return;
  338.         if (tipo == null)
  339.             return;
  340.        
  341.         wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE, Enums.toTipoRicercaMittente(tipo));
  342.        
  343.         switch (tipo) {
  344.             case EROGAZIONE_SOGGETTO: {
  345.                
  346.                 if(isDistribuzioneSoggettoRemoto) {
  347.                     throw FaultCode.RICHIESTA_NON_VALIDA
  348.                     .toException("Identificazione '"+tipo.toString()+"' "
  349.                             + "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
  350.                 }
  351.                
  352.                 if(! (filtro instanceof FiltroMittenteErogazioneSoggetto)) {
  353.                     throw FaultCode.RICHIESTA_NON_VALIDA
  354.                     .toException("Identificazione '"+tipo.toString()+"' "
  355.                             + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteErogazioneSoggetto.class.getName()+")");
  356.                 }
  357.                 FiltroMittenteErogazioneSoggetto fSogg = (FiltroMittenteErogazioneSoggetto) filtro;
  358.                 wrap.overrideParameter(CostantiExporter.MITTENTE, new IDSoggetto(env.tipoSoggetto, fSogg.getSoggetto()).toString());
  359.                 break;
  360.             }
  361.            
  362.             case FRUIZIONE_APPLICATIVO: {
  363.                 throw FaultCode.RICHIESTA_NON_VALIDA
  364.                 .toException("Identificazione '"+tipo.toString()+"' "
  365.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.toString()+"'");
  366.             }
  367.            
  368.             case EROGAZIONE_APPLICATIVO: {
  369.                
  370.                 if(isDistribuzioneSoggettoRemoto) {
  371.                     throw FaultCode.RICHIESTA_NON_VALIDA
  372.                     .toException("Identificazione '"+tipo.toString()+"' "
  373.                             + "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
  374.                 }
  375.                
  376.                 if(! (filtro instanceof FiltroMittenteErogazioneApplicativo)) {
  377.                     throw FaultCode.RICHIESTA_NON_VALIDA
  378.                     .toException("Identificazione '"+tipo.toString()+"' "
  379.                             + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteErogazioneApplicativo.class.getName()+")");
  380.                 }
  381.                 FiltroMittenteErogazioneApplicativo fAppl = (FiltroMittenteErogazioneApplicativo) filtro;
  382.                 if(fAppl.getTipoIdentificazioneApplicativo()!=null) {
  383.                     switch (fAppl.getTipoIdentificazioneApplicativo()) {
  384.                     case TRASPORTO:
  385.                         wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
  386.                         break;
  387.                     case TOKEN:
  388.                         wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TOKEN);
  389.                         break;
  390.                     }
  391.                 }
  392.                 else {
  393.                     wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
  394.                 }
  395.                 wrap.overrideParameter(CostantiExporter.APPLICATIVO, fAppl.getApplicativo());
  396.                 wrap.overrideParameter(CostantiExporter.MITTENTE,new IDSoggetto(env.tipoSoggetto, fAppl.getSoggetto()).toString());
  397.                 break;
  398.             }
  399.            
  400.             case IDENTIFICATIVO_AUTENTICATO: {
  401.                
  402.                 if(! (filtro instanceof FiltroMittenteIdAutenticato)) {
  403.                     throw FaultCode.RICHIESTA_NON_VALIDA
  404.                     .toException("Identificazione '"+tipo.toString()+"' "
  405.                             + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIdAutenticato.class.getName()+")");
  406.                 }
  407.                 FiltroMittenteIdAutenticato fIdAutenticato = (FiltroMittenteIdAutenticato) filtro;
  408.                 ReportisticaHelper.overrideFiltroMittenteIdApplicativo(fIdAutenticato, wrap, env);
  409.                 break;
  410.             }
  411.            
  412.             case EROGAZIONE_TOKEN_INFO: {
  413.                 if(isDistribuzioneSoggettoRemoto) {
  414.                     throw FaultCode.RICHIESTA_NON_VALIDA
  415.                     .toException("Identificazione '"+tipo.toString()+"' "
  416.                             + "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
  417.                 }
  418.                 else {
  419.                     if(! (filtro instanceof FiltroMittenteTokenClaimSoggetto)) {
  420.                         throw FaultCode.RICHIESTA_NON_VALIDA
  421.                         .toException("Identificazione '"+tipo.toString()+"' "
  422.                                 + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaimSoggetto.class.getName()+")");
  423.                     }
  424.                     FiltroMittenteTokenClaimSoggetto fClaim = (FiltroMittenteTokenClaimSoggetto) filtro;
  425.                     wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
  426.                     wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
  427.                     wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
  428.                     wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE, fClaim.isCaseSensitive() + "");
  429.                     if (fClaim.getSoggetto() != null) {
  430.                         wrap.overrideParameter(CostantiExporter.MITTENTE, new IDSoggetto(env.tipoSoggetto, fClaim.getSoggetto()).toString());
  431.                     }
  432.                     break;
  433.                 }
  434.             }
  435.            
  436.             case TOKEN_INFO: {
  437.                 if(! (filtro instanceof FiltroMittenteTokenClaim)) {
  438.                     throw FaultCode.RICHIESTA_NON_VALIDA
  439.                     .toException("Identificazione '"+tipo.toString()+"' "
  440.                             + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaim.class.getName()+")");
  441.                 }
  442.                 FiltroMittenteTokenClaim fClaim = (FiltroMittenteTokenClaim) filtro;
  443.                 wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
  444.                 wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
  445.                 wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
  446.                 wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE, fClaim.isCaseSensitive() + "");
  447.                 break;
  448.             }
  449.            
  450.             case INDIRIZZO_IP: {
  451.                
  452.                 if(! (filtro instanceof FiltroMittenteIndirizzoIP)) {
  453.                     throw FaultCode.RICHIESTA_NON_VALIDA
  454.                     .toException("Identificazione '"+tipo.toString()+"' "
  455.                             + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIndirizzoIP.class.getName()+")");
  456.                 }
  457.                 FiltroMittenteIndirizzoIP indirizzoIP = (FiltroMittenteIndirizzoIP) filtro;
  458.                 ReportisticaHelper.overrideFiltroMittenteIndirizzoIP(indirizzoIP, wrap, env);
  459.                 break;
  460.             }
  461.         } // switch
  462.        
  463.     }
  464.        

  465.    
  466.    
  467.    
  468.     public static final void overrideFiltroMittenteQualsiasi(TipoFiltroMittenteEnum tipo, Object filtro, boolean isDistribuzioneSoggettoRemoto, HttpRequestWrapper wrap,
  469.             MonitoraggioEnv env) {
  470.         if (filtro == null)
  471.             return;
  472.         if (tipo == null)
  473.             return;

  474.         wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE, Enums.toTipoRicercaMittente(tipo));
  475.        
  476.         switch (tipo) {
  477.        
  478.         case EROGAZIONE_SOGGETTO: {
  479.             throw FaultCode.RICHIESTA_NON_VALIDA
  480.                 .toException("Identificazione '"+tipo.toString()+"' "
  481.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
  482.         }
  483.        
  484.         case FRUIZIONE_APPLICATIVO: {
  485.             throw FaultCode.RICHIESTA_NON_VALIDA
  486.                 .toException("Identificazione '"+tipo.toString()+"' "
  487.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
  488.         }
  489.        
  490.         case EROGAZIONE_APPLICATIVO: {
  491.             throw FaultCode.RICHIESTA_NON_VALIDA
  492.                 .toException("Identificazione '"+tipo.toString()+"' "
  493.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
  494.         }
  495.        
  496.         case IDENTIFICATIVO_AUTENTICATO: {
  497.            
  498.             if(! (filtro instanceof FiltroMittenteIdAutenticato)) {
  499.                 throw FaultCode.RICHIESTA_NON_VALIDA
  500.                 .toException("Identificazione '"+tipo.toString()+"' "
  501.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIdAutenticato.class.getName()+")");
  502.             }
  503.             FiltroMittenteIdAutenticato fIdAutenticato = (FiltroMittenteIdAutenticato) filtro;
  504.             ReportisticaHelper.overrideFiltroMittenteIdApplicativo(fIdAutenticato, wrap, env);
  505.             break;
  506.         }
  507.        
  508.         case EROGAZIONE_TOKEN_INFO: {
  509.             if(isDistribuzioneSoggettoRemoto) {
  510.                 throw FaultCode.RICHIESTA_NON_VALIDA
  511.                 .toException("Identificazione '"+tipo.toString()+"' "
  512.                         + "non utilizzabile nella generazione di un report con distribuzione per soggetto remoto");
  513.             }
  514.             else {
  515.                 throw FaultCode.RICHIESTA_NON_VALIDA
  516.                 .toException("Identificazione '"+tipo.toString()+"' "
  517.                         + "non utilizzabile nella generazione di un report con il criterio 'ruolo transazione' impostato al valore '"+FiltroRicercaRuoloTransazioneEnum.QUALSIASI.toString()+"'");
  518.             }
  519.         }
  520.        
  521.         case TOKEN_INFO: {
  522.             if(! (filtro instanceof FiltroMittenteTokenClaim)) {
  523.                 throw FaultCode.RICHIESTA_NON_VALIDA
  524.                 .toException("Identificazione '"+tipo.toString()+"' "
  525.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteTokenClaim.class.getName()+")");
  526.             }
  527.             FiltroMittenteTokenClaim fClaim = (FiltroMittenteTokenClaim) filtro;
  528.             wrap.overrideParameter(CostantiExporter.RICERCA_MITTENTE_TIPO_CLAIM, Enums.toTokenSearchClaim.get(fClaim.getClaim()));
  529.             wrap.overrideParameter(CostantiExporter.IDENTIFICATIVO_RICERCA_MITTENTE, fClaim.getId());
  530.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_ESATTA, fClaim.isRicercaEsatta() + "");
  531.             wrap.overrideParameter(CostantiExporter.TIPO_RICERCA_MITTENTE_CASE_SENSITIVE,fClaim.isCaseSensitive() + "");
  532.             break;
  533.         }
  534.        
  535.         case INDIRIZZO_IP: {
  536.            
  537.             if(! (filtro instanceof FiltroMittenteIndirizzoIP)) {
  538.                 throw FaultCode.RICHIESTA_NON_VALIDA
  539.                 .toException("Identificazione '"+tipo.toString()+"' "
  540.                         + "non utilizzabile con il tipo di filtro mittente utilizzato '"+filtro.getClass().getName()+"' (atteso: "+FiltroMittenteIndirizzoIP.class.getName()+")");
  541.             }
  542.             FiltroMittenteIndirizzoIP indirizzoIP = (FiltroMittenteIndirizzoIP) filtro;
  543.             ReportisticaHelper.overrideFiltroMittenteIndirizzoIP(indirizzoIP, wrap, env);
  544.             break;
  545.         }
  546.         }
  547.     }

  548.     public static final void overrideOpzioniGenerazioneReportBase(OpzioniGenerazioneReportBase body,
  549.             HttpRequestWrapper wrap, MonitoraggioEnv env) {
  550.         if (body == null)
  551.             return;

  552.         wrap.overrideParameter(CostantiExporter.TIPO_FORMATO, Enums.toTipoFormato.get(body.getFormato()));

  553.         org.openspcoop2.core.statistiche.constants.TipoReport tipoReport = Enums.toTipoReport.get(body.getTipo());
  554.         if (tipoReport == null)
  555.             tipoReport = org.openspcoop2.core.statistiche.constants.TipoReport.TABELLA;

  556.         wrap.overrideParameter(CostantiExporter.TIPO_REPORT, tipoReport.toString());
  557.     }

  558.     public static final void setTipoInformazioneReport(OpzioniGenerazioneReport opzioni, TipoInformazioneReportEnum tipoInformazioneReport,
  559.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {
  560.         TipoInformazioneReportEnum tipoInfo = tipoInformazioneReport!=null ? tipoInformazioneReport : TipoInformazioneReportEnum.NUMERO_TRANSAZIONI;
  561.         switch (tipoInfo) {
  562.         case NUMERO_TRANSAZIONI:
  563.             opzioni.setTipoInformazione(new TipoInformazioneReportNumeroTransazioni());
  564.             ((TipoInformazioneReportNumeroTransazioni)opzioni.getTipoInformazione()).setTipo(tipoInfo);
  565.             break;
  566.         case OCCUPAZIONE_BANDA:
  567.             opzioni.setTipoInformazione(new TipoInformazioneReportOccupazioneBanda());
  568.             ((TipoInformazioneReportOccupazioneBanda)opzioni.getTipoInformazione()).setTipo(tipoInfo);
  569.             break;
  570.         case TEMPO_MEDIO_RISPOSTA:
  571.             opzioni.setTipoInformazione(new TipoInformazioneReportTempoMedioRisposta());
  572.             ((TipoInformazioneReportTempoMedioRisposta)opzioni.getTipoInformazione()).setTipo(tipoInfo);
  573.             break;
  574.         }
  575.        
  576.         if(dimensioniReport!=null && opzioni instanceof OpzioniGenerazioneReportDimensioni) {
  577.             OpzioniGenerazioneReportDimensioni o = (OpzioniGenerazioneReportDimensioni) opzioni;
  578.             o.setDimensioni(dimensioniReport);
  579.             if(dimensioniReportCustomInfo!=null && !DimensioniReportEnum._3DCUSTOM.equals(dimensioniReport)) {
  580.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Solamente con una dimensione '"+DimensioniReportEnum._3DCUSTOM.toString()+"' è possibile indicare una informazione custom da includere nel report");
  581.             }
  582.             o.setCustomInfo(dimensioniReportCustomInfo);
  583.         }
  584.     }
  585.    
  586.     public static final void overrideOpzioniGenerazioneReport(OpzioniGenerazioneReport body, HttpRequestWrapper wrap,
  587.             MonitoraggioEnv env) {
  588.         if (body == null)
  589.             return;

  590.         ReportisticaHelper.overrideOpzioniGenerazioneReportBase(body, wrap, env);

  591.         // defaults
  592.         if (body.getTipoInformazione() == null)
  593.             body.setTipoInformazione(new TipoInformazioneReportNumeroTransazioni());
  594.         if (body.getTipoInformazione().getTipo() == null) {
  595.             if(body.getTipoInformazione() instanceof TipoInformazioneReportNumeroTransazioni) {
  596.                 ((TipoInformazioneReportNumeroTransazioni)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.NUMERO_TRANSAZIONI);
  597.             }
  598.             else if(body.getTipoInformazione() instanceof TipoInformazioneReportOccupazioneBanda) {
  599.                 ((TipoInformazioneReportOccupazioneBanda)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.OCCUPAZIONE_BANDA);
  600.             }
  601.             else if(body.getTipoInformazione() instanceof TipoInformazioneReportTempoMedioRisposta) {
  602.                 ((TipoInformazioneReportTempoMedioRisposta)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.TEMPO_MEDIO_RISPOSTA);
  603.             }
  604.         }

  605.         wrap.overrideParameter(CostantiExporter.TIPO_INFORMAZIONE_VISUALIZZATA, Enums.toTipoVisualizzazione.get(body.getTipoInformazione().getTipo()).toString());
  606.         switch (body.getTipoInformazione().getTipo()) {
  607.         case NUMERO_TRANSAZIONI:
  608.             break;
  609.         case OCCUPAZIONE_BANDA: {
  610.             TipoInformazioneReportOccupazioneBanda ob = (TipoInformazioneReportOccupazioneBanda) body.getTipoInformazione();
  611.             OccupazioneBandaEnum val = ob.getOccupazioneBanda();
  612.             if(val==null) {
  613.                 val = OccupazioneBandaEnum.COMPLESSIVA;
  614.             }
  615.             wrap.overrideParameter(CostantiExporter.TIPO_BANDA_VISUALIZZATA, Enums.toTipoBanda.get(val).toString());
  616.             break;
  617.         }
  618.         case TEMPO_MEDIO_RISPOSTA: {
  619.             TipoInformazioneReportTempoMedioRisposta tm = (TipoInformazioneReportTempoMedioRisposta) body.getTipoInformazione();
  620.             TempoMedioRispostaEnum val = tm.getTempoMedioRisposta();
  621.             if(val==null) {
  622.                 val = TempoMedioRispostaEnum.TOTALE;
  623.             }
  624.             wrap.overrideParameter(CostantiExporter.TIPO_LATENZA_VISUALIZZATA, Enums.toTipoLatenza.get(val).toString());
  625.             break;
  626.         }
  627.         }
  628.        
  629.         if(body instanceof OpzioniGenerazioneReportDimensioni) {
  630.             OpzioniGenerazioneReportDimensioni o = (OpzioniGenerazioneReportDimensioni) body;
  631.             if(o.getDimensioni()!=null) {
  632.                 wrap.overrideParameter(CostantiExporter.DIMENSIONI_VISUALIZZATE, Enums.getNumeroDimensioniMap().get(o.getDimensioni()).getValue());
  633.             }
  634.             if(o.getCustomInfo()!=null) {
  635.                 wrap.overrideParameter(CostantiExporter.DIMENSIONE_INFO_CUSTOM, Enums.getInformazioneDimensioneCustom().get(o.getCustomInfo()).getValue());
  636.             }
  637.         }
  638.     }

  639.     public static final void setTipoInformazioneReportMultiLine(OpzioniGenerazioneReportMultiLine opzioni, TipoInformazioneReportEnum tipoInformazioneReport) {
  640.         TipoInformazioneReportEnum tipoInfo = tipoInformazioneReport!=null ? tipoInformazioneReport : TipoInformazioneReportEnum.NUMERO_TRANSAZIONI;
  641.         switch (tipoInfo) {
  642.         case NUMERO_TRANSAZIONI:
  643.             opzioni.setTipoInformazione(new TipoInformazioneReportMultiLineNumeroTransazioni());
  644.             ((TipoInformazioneReportMultiLineNumeroTransazioni)opzioni.getTipoInformazione()).setTipo(tipoInfo);
  645.             break;
  646.         case OCCUPAZIONE_BANDA:
  647.             opzioni.setTipoInformazione(new TipoInformazioneReportMultiLineOccupazioneBanda());
  648.             ((TipoInformazioneReportMultiLineOccupazioneBanda)opzioni.getTipoInformazione()).setTipo(tipoInfo);
  649.             break;
  650.         case TEMPO_MEDIO_RISPOSTA:
  651.             opzioni.setTipoInformazione(new TipoInformazioneReportMultiLineTempoMedioRisposta());
  652.             ((TipoInformazioneReportMultiLineTempoMedioRisposta)opzioni.getTipoInformazione()).setTipo(tipoInfo);
  653.             break;
  654.         }
  655.     }
  656.    
  657.     public static final void overrideOpzioniGenerazioneReportMultiLine(OpzioniGenerazioneReportMultiLine body,HttpRequestWrapper wrap, MonitoraggioEnv env) {
  658.         if (body == null)
  659.             return;

  660.         ReportisticaHelper.overrideOpzioniGenerazioneReportBase(body, wrap, env);

  661.         // defaults
  662.         if (body.getTipoInformazione() == null)
  663.             body.setTipoInformazione(new TipoInformazioneReportMultiLineNumeroTransazioni());
  664.         if (body.getTipoInformazione().getTipo() == null) {
  665.             if(body.getTipoInformazione() instanceof TipoInformazioneReportMultiLineNumeroTransazioni) {
  666.                 ((TipoInformazioneReportMultiLineNumeroTransazioni)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.NUMERO_TRANSAZIONI);
  667.             }
  668.             else if(body.getTipoInformazione() instanceof TipoInformazioneReportMultiLineOccupazioneBanda) {
  669.                 ((TipoInformazioneReportMultiLineOccupazioneBanda)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.OCCUPAZIONE_BANDA);
  670.             }
  671.             else if(body.getTipoInformazione() instanceof TipoInformazioneReportMultiLineTempoMedioRisposta) {
  672.                 ((TipoInformazioneReportMultiLineTempoMedioRisposta)body.getTipoInformazione()).setTipo(TipoInformazioneReportEnum.TEMPO_MEDIO_RISPOSTA);
  673.             }
  674.         }
  675.        
  676.         wrap.overrideParameter(CostantiExporter.TIPO_INFORMAZIONE_VISUALIZZATA, Enums.toTipoVisualizzazione.get(body.getTipoInformazione().getTipo()).toString());
  677.         switch (body.getTipoInformazione().getTipo()) {
  678.         case NUMERO_TRANSAZIONI:
  679.             break;
  680.         case OCCUPAZIONE_BANDA: {
  681.             TipoInformazioneReportMultiLineOccupazioneBanda ob = (TipoInformazioneReportMultiLineOccupazioneBanda) body.getTipoInformazione();
  682.             OccupazioneBandaTipi val = ob.getOccupazioneBanda();
  683.             if(val==null) {
  684.                 val = new OccupazioneBandaTipi(); // dentro il bean ci sono i default
  685.             }
  686.             ArrayList<String> abilitati = new ArrayList<>();
  687.             if (val.isBandaComplessiva())
  688.                 abilitati.add(Enums.toTipoBanda.get(OccupazioneBandaEnum.COMPLESSIVA).toString());
  689.             if (val.isBandaEsterna())
  690.                 abilitati.add(Enums.toTipoBanda.get(OccupazioneBandaEnum.ESTERNA).toString());
  691.             if (val.isBandaInterna())
  692.                 abilitati.add(Enums.toTipoBanda.get(OccupazioneBandaEnum.INTERNA).toString());

  693.             wrap.overrideParameter(CostantiExporter.TIPO_BANDA_VISUALIZZATA, String.join(",", abilitati));
  694.             break;
  695.         }
  696.         case TEMPO_MEDIO_RISPOSTA: {
  697.             TipoInformazioneReportMultiLineTempoMedioRisposta tm = (TipoInformazioneReportMultiLineTempoMedioRisposta) body.getTipoInformazione();
  698.             TempoMedioRispostaTipi val = tm.getTempoMedioRisposta();
  699.             if(val==null) {
  700.                 val = new TempoMedioRispostaTipi(); // dentro il bean ci sono i default
  701.             }
  702.             ArrayList<String> abilitati = new ArrayList<>();
  703.             if (val.isLatenzaGateway())
  704.                 abilitati.add(Enums.toTipoLatenza.get(TempoMedioRispostaEnum.GATEWAY).toString());
  705.             if (val.isLatenzaServizio())
  706.                 abilitati.add(Enums.toTipoLatenza.get(TempoMedioRispostaEnum.SERVIZIO).toString());
  707.             if (val.isLatenzaTotale())
  708.                 abilitati.add(Enums.toTipoLatenza.get(TempoMedioRispostaEnum.TOTALE).toString());

  709.             wrap.overrideParameter(CostantiExporter.TIPO_LATENZA_VISUALIZZATA, String.join(",", abilitati));
  710.             break;
  711.         }
  712.         }
  713.     }


  714.     public static final void overrideRicercaBaseStatisticaSoggetti(RicercaBaseStatisticaSoggetti body,
  715.             HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
  716.         if (body == null)
  717.             return;

  718.         ReportisticaHelper.overrideRicercaBaseStatistica(body, wrap, env);

  719.         switch (body.getTipo()) {
  720.         case EROGAZIONE:
  721.             ReportisticaHelper.overrideFiltroErogazione(body.getTag(), body.getApi(), wrap, env);
  722.             break;
  723.         case FRUIZIONE:
  724.             ReportisticaHelper.overrideFiltroFruizione(body.getTag(), body.getApi(), wrap, env);
  725.             break;
  726.         case QUALSIASI:
  727.             ReportisticaHelper.overrideFiltroQualsiasi(body.getTag(), body.getApi(), wrap, env);
  728.             break;
  729.         }
  730.     }

  731.     public static final void overrideFiltroFruizione(String tag, FiltroApiSoggetti body, HttpRequestWrapper wrap,
  732.             MonitoraggioEnv env) throws Exception {
  733.         if (body == null) return;
  734.        
  735.         IDSoggetto erogatore = new IDSoggetto(env.tipoSoggetto, body.getErogatore());
  736.         ReportisticaHelper.overrideFiltroApiBase(tag, body, erogatore, wrap, env);
  737.     }

  738.     public static final void overrideFiltroErogazione(String tag, FiltroApiSoggetti body, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
  739.         if (body == null)
  740.             return;
  741.         IDSoggetto idSoggettoLocale = new IDSoggetto(env.tipoSoggetto, env.nomeSoggettoLocale);
  742.         ReportisticaHelper.overrideFiltroApiBase(tag, body, idSoggettoLocale, wrap, env);
  743.     }
  744.    
  745.     public static final void overrideFiltroQualsiasi(String tag, FiltroApiSoggetti body, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
  746.         if (body == null)
  747.             return;
  748.        
  749.         IDSoggetto erogatore = new IDSoggetto(env.tipoSoggetto, body.getErogatore());
  750.         ReportisticaHelper.overrideFiltroApiBase(tag, body, erogatore, wrap, env);
  751.         if (!StringUtils.isEmpty(body.getSoggettoRemoto())) {
  752.             IDSoggetto remoto = new IDSoggetto(env.tipoSoggetto, body.getSoggettoRemoto());
  753.             wrap.overrideParameter(CostantiExporter.TRAFFICO_PER_SOGGETTO, remoto.toString() );
  754.         }
  755.        
  756.     }

  757.     public static final void overrideFiltroApiBase(String tag, FiltroApiBase filtro_api, IDSoggetto erogatore, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
  758.         if(tag!=null) {
  759.             wrap.overrideParameter(CostantiExporter.GRUPPO, tag);
  760.         }
  761.        
  762.         if (filtro_api == null)
  763.             return;
  764.        
  765.         if ( !StringUtils.isEmpty(filtro_api.getNome()) || filtro_api.getVersione() != null || !StringUtils.isEmpty(filtro_api.getTipo())) {
  766.            
  767.             if (StringUtils.isEmpty(filtro_api.getNome())) {
  768.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Filtro Api incompleto. Specificare il nome della API");
  769.             }
  770.                        
  771.             if (erogatore == null || TransazioniHelper.isEmpty(erogatore)) {
  772.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Filtro Api incompleto. Specificare il Soggetto Erogatore (Nelle fruizioni è il soggetto remoto)");
  773.             }
  774.            
  775.             if (filtro_api.getVersione() == null) {
  776.                 filtro_api.setVersione(1);
  777.             }
  778.            
  779.             if (filtro_api.getTipo() == null) {
  780.                 try {
  781.                     IProtocolConfiguration protocolConf = env.protocolFactoryMgr
  782.                             .getProtocolFactoryByName(env.tipo_protocollo).createProtocolConfiguration();
  783.                     ServiceBinding defaultBinding = protocolConf.getDefaultServiceBindingConfiguration(null)
  784.                             .getDefaultBinding();
  785.                     filtro_api.setTipo(protocolConf.getTipoServizioDefault(defaultBinding));
  786.                 } catch (Exception e) {
  787.                     throw FaultCode.ERRORE_INTERNO
  788.                             .toException("Impossibile determinare il tipo del servizio: " + e.getMessage());
  789.                 }

  790.             }
  791.             wrap.overrideParameter(CostantiExporter.SERVIZIO,
  792.                     ReportisticaHelper.buildNomeServizioForOverride(filtro_api.getNome(), filtro_api.getTipo(), filtro_api.getVersione(), Optional.of(erogatore)));
  793.         }
  794.        
  795.         if(filtro_api instanceof FiltroApiSoggetti) {
  796.             FiltroApiSoggetti filtroApiSoggetti = (FiltroApiSoggetti) filtro_api;
  797.             if(filtroApiSoggetti.getApiImplementata()!=null) {
  798.                 wrap.overrideParameter(CostantiExporter.API,
  799.                         ReportisticaHelper.toUriApiImplementata(filtroApiSoggetti.getApiImplementata(), env));
  800.             }
  801.         }
  802.     }

  803.     public static final void overrideRicercaStatisticaDistribuzioneApplicativo(
  804.             RicercaStatisticaDistribuzioneApplicativo body, HttpRequestWrapper wrap, MonitoraggioEnv env) throws Exception {
  805.         if (body == null)
  806.             return;
  807.        
  808.         if (body.getAzione() != null && body.getApi() == null) {
  809.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
  810.         }

  811.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  812.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
  813.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
  814.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  815.     }
  816.    

  817.     public static final byte[] generateReport(HttpRequestWrapper request, IContext context) throws Exception {
  818.         DBManager dbManager = DBManager.getInstance();
  819.         Connection connectionConfig = null;
  820.         Connection connectionStats = null;
  821.         Connection connectionTransazioni = null;
  822.         StatisticheGiornaliereService statisticheService = null;
  823.         ServiceManagerProperties smp = null;
  824.         boolean uniqueConnection = false;
  825.         try {
  826.             connectionStats = dbManager.getConnectionStatistiche();
  827.             smp = dbManager.getServiceManagerPropertiesTracce();
  828.            
  829.             if(dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceTracceName()) &&
  830.                     dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceConfigName())) {
  831.                 // unico datasource
  832.                 uniqueConnection = true;
  833.             }
  834.            
  835.             if(uniqueConnection) {
  836.                 statisticheService = new StatisticheGiornaliereService(connectionStats, true, smp,
  837.                         LoggerProperties.getLoggerDAO());
  838.             }
  839.             else {
  840.                
  841.                 Connection ctracce = connectionStats;
  842.                 if( !dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceTracceName()) ) {
  843.                     connectionTransazioni = dbManager.getConnectionTracce();
  844.                     ctracce = connectionTransazioni;
  845.                 }
  846.                
  847.                 Connection cconfig = connectionStats;
  848.                 if( !dbManager.getDataSourceStatisticheName().equals(dbManager.getDataSourceConfigName()) ) {
  849.                     connectionConfig = dbManager.getConnectionConfig();
  850.                     cconfig = connectionConfig;
  851.                 }
  852.                
  853.                 statisticheService = new StatisticheGiornaliereService(cconfig, connectionStats, ctracce, true, smp,
  854.                         LoggerProperties.getLoggerDAO());
  855.             }

  856.         } catch (Exception e) {
  857.             dbManager.releaseConnectionStatistiche(connectionStats);
  858.             if(!uniqueConnection) {
  859.                 dbManager.releaseConnectionConfig(connectionConfig);
  860.                 dbManager.releaseConnectionTracce(connectionTransazioni);
  861.             }
  862.             throw FaultCode.ERRORE_INTERNO.toException(e);
  863.         }

  864.         try {
  865.             return StatsGenerator.generateReport(request, context, statisticheService);
  866.         } catch (NotFoundException e) {
  867.             throw FaultCode.NOT_FOUND.toException(e);
  868.         } catch (Exception e) {
  869.             throw FaultCode.ERRORE_INTERNO.toException(e);
  870.         } finally {
  871.             dbManager.releaseConnectionStatistiche(connectionStats);
  872.             if(!uniqueConnection) {
  873.                 dbManager.releaseConnectionConfig(connectionConfig);
  874.                 dbManager.releaseConnectionTracce(connectionTransazioni);
  875.             }
  876.         }
  877.     }

  878.     public static final byte[] getReportDistribuzioneApi(RicercaStatisticaDistribuzioneApi body, MonitoraggioEnv env)
  879.             throws Exception {

  880.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  881.         HttpRequestWrapper request = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  882.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.api);

  883.         ReportisticaHelper.overrideRicercaBaseStatistica(body, request, env);
  884.         // Api Implementata
  885.         if(body.isDistinguiApiImplementata()!=null) {
  886.             request.overrideParameter(CostantiExporter.API_DISTINGUI_IMPLEMENTAZIONE,
  887.                     body.isDistinguiApiImplementata() ? CostantiExporter.API_DISTINGUI_IMPLEMENTAZIONE_TRUE : CostantiExporter.API_DISTINGUI_IMPLEMENTAZIONE_FALSE);
  888.         }
  889.         // Mittente
  890.         if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  891.             switch (body.getTipo()) {
  892.             case EROGAZIONE:
  893.                 ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false,
  894.                         request,env);
  895.                 break;
  896.             case FRUIZIONE:
  897.                 ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false,
  898.                         request, env);
  899.                 break;
  900.             case QUALSIASI:
  901.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false,
  902.                         request, env);
  903.                 break;
  904.             }
  905.         }
  906.         // FiltroEsito
  907.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), request, env);
  908.         // Soggetto Erogatore
  909.         if(body.getSoggettoErogatore()!=null) {
  910.             if(!FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.equals(body.getTipo())) {
  911.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di ricerca per soggetto erogatore è indicabile solamente se si genera report relativi a transazioni con ruolo '"+FiltroRicercaRuoloTransazioneEnum.FRUIZIONE.toString()+"'");
  912.             }
  913.             BaseOggettoWithSimpleName base = body.getSoggettoErogatore();
  914.             if(base.getNome()!=null) {
  915.                 request.overrideParameter(CostantiExporter.DESTINATARIO, new IDSoggetto(env.tipoSoggetto,base.getNome()));
  916.             }
  917.         }
  918.         // Opzioni Report
  919.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), request, env);

  920.         return ReportisticaHelper.generateReport(request, env.context);
  921.     }

  922.     public static final byte[] getReportDistribuzioneApplicativo(RicercaStatisticaDistribuzioneApplicativoRegistrato body,
  923.             MonitoraggioEnv env) throws Exception {
  924.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  925.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  926.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.applicativo);
  927.        
  928.         if (body.getAzione() != null && body.getApi() == null) {
  929.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
  930.         }

  931.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  932.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  933.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
  934.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());

  935.         if(body.getTipoIdentificazioneApplicativo()!=null) {
  936.             switch (body.getTipoIdentificazioneApplicativo()) {
  937.             case TRASPORTO:
  938.                 wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
  939.                 break;
  940.             case TOKEN:
  941.                 wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TOKEN);
  942.                 break;
  943.             }
  944.         }
  945.         else {
  946.             wrap.overrideParameter(CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO, CostantiExporter.TIPO_IDENTIFICAZIONE_APPLICATIVO_TRASPORTO);
  947.         }
  948.        
  949.         if(body.getSoggettoMittente()!=null && !StringUtils.isEmpty(body.getSoggettoMittente())) {
  950.             if(body.getTipo()!=null && FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.equals(body.getTipo())) {
  951.                 wrap.overrideParameter(CostantiExporter.MITTENTE,new IDSoggetto(env.tipoSoggetto, body.getSoggettoMittente()).toString());
  952.             }
  953.             else {
  954.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nel caso di ruolo <" + body.getTipo()
  955.                         + ">, non è possibile specificare il soggetto mittente");
  956.             }
  957.         }
  958.        
  959.         return ReportisticaHelper.generateReport(wrap, env.context);
  960.     }

  961.     public static final byte[] getReportDistribuzioneAzione(RicercaStatisticaDistribuzioneAzione body,MonitoraggioEnv env) throws Exception {
  962.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  963.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  964.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.azione);

  965.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  966.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  967.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);

  968.         if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  969.             switch (body.getTipo()) {
  970.             case EROGAZIONE:
  971.                 ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  972.                 break;
  973.             case FRUIZIONE:
  974.                 ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  975.                 break;
  976.             case QUALSIASI:
  977.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  978.                 break;
  979.             }
  980.         }

  981.         return ReportisticaHelper.generateReport(wrap, env.context);
  982.     }
  983.    
  984.     public static final byte[] getReportDistribuzioneErrori(RicercaStatisticaDistribuzioneErrori body,MonitoraggioEnv env) throws Exception {
  985.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  986.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  987.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.errori);

  988.         if(body.getEsito()==null) {
  989.             body.setEsito(new FiltroEsito());
  990.         }
  991.         CheckNotNull.setTipoEsito(body);
  992.        
  993.         if(EsitoTransazioneFullSearchEnum.QUALSIASI.equals(body.getEsito().getTipo())) {
  994.             body.getEsito().setTipo(EsitoTransazioneFullSearchEnum.FALLITE_E_FAULT); // forzo fallite
  995.         }
  996.         else if(EsitoTransazioneFullSearchEnum.OK.equals(body.getEsito().getTipo())) {
  997.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Esito 'OK' non utilizzabile con questo tipo di report");
  998.         }
  999.        
  1000.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  1001.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  1002.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);

  1003.         if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1004.             switch (body.getTipo()) {
  1005.             case EROGAZIONE:
  1006.                 ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1007.                 break;
  1008.             case FRUIZIONE:
  1009.                 ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1010.                 break;
  1011.             case QUALSIASI:
  1012.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1013.                 break;
  1014.             }
  1015.         }
  1016.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());

  1017.         return ReportisticaHelper.generateReport(wrap, env.context);
  1018.     }

  1019.     public static final byte[] getReportDistribuzioneEsiti(RicercaStatisticaDistribuzioneEsiti body,MonitoraggioEnv env) throws Exception {
  1020.        
  1021.         if (body.getAzione() != null && body.getApi() == null) {
  1022.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
  1023.         }
  1024.        
  1025.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1026.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  1027.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.esiti);

  1028.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  1029.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
  1030.         // Mittente
  1031.         if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1032.             switch (body.getTipo()) {
  1033.             case EROGAZIONE:
  1034.                 ReportisticaHelper.overrideFiltroMittenteErogazione( body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1035.                 break;
  1036.             case FRUIZIONE:
  1037.                 ReportisticaHelper.overrideFiltroMittenteFruizione( body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1038.                 break;
  1039.             case QUALSIASI:
  1040.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi( body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1041.                 break;
  1042.             }
  1043.         }
  1044.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());
  1045.         return ReportisticaHelper.generateReport(wrap, env.context);
  1046.     }

  1047.     public static final byte[] getReportDistribuzioneIdAutenticato(RicercaStatisticaDistribuzioneApplicativo body,
  1048.             MonitoraggioEnv env) throws Exception {
  1049.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1050.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  1051.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true,
  1052.                 TipoReport.identificativo_autenticato);

  1053.         ReportisticaHelper.overrideRicercaStatisticaDistribuzioneApplicativo(body, wrap, env);

  1054.         return ReportisticaHelper.generateReport(wrap, env.context);
  1055.     }
  1056.    
  1057.     public static final byte[] getReportDistribuzioneIndirizzoIP(RicercaStatisticaDistribuzioneApplicativo body,
  1058.             MonitoraggioEnv env) throws Exception {
  1059.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1060.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  1061.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true,
  1062.                 TipoReport.indirizzo_ip);

  1063.         ReportisticaHelper.overrideRicercaStatisticaDistribuzioneApplicativo(body, wrap, env);

  1064.         return ReportisticaHelper.generateReport(wrap, env.context);
  1065.     }


  1066.     public static final byte[] getReportDistribuzioneSoggettoRemoto(RicercaStatisticaDistribuzioneSoggettoRemoto body,
  1067.             MonitoraggioEnv env) throws Exception {
  1068.        
  1069.         if (body.getAzione() != null && body.getApi() == null) {
  1070.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
  1071.         }
  1072.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1073.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  1074.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.soggetto_remoto);
  1075.         ReportisticaHelper.overrideRicercaBaseStatistica(body, wrap, env);
  1076.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);
  1077.         switch (body.getTipo()) {
  1078.         case EROGAZIONE:
  1079.             if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1080.                 ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), true, wrap, env);
  1081.             }
  1082.             if(body.getApi()!=null) {
  1083.                 ReportisticaHelper.overrideFiltroErogazione(body.getTag(), body.getApi(), wrap,env);
  1084.             }
  1085.             break;
  1086.         case FRUIZIONE:
  1087.             if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1088.                 ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), true, wrap, env);
  1089.             }
  1090.             if(body.getApi()!=null) {
  1091.                 ReportisticaHelper.overrideFiltroFruizione(body.getTag(), body.getApi(), wrap, env);
  1092.             }
  1093.             break;
  1094.         case QUALSIASI:
  1095.             if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1096.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), true, wrap, env);
  1097.             }
  1098.             if(body.getApi()!=null) {
  1099.                 ReportisticaHelper.overrideFiltroQualsiasi(body.getTag(), body.getApi(), wrap, env);
  1100.             }
  1101.             break;
  1102.         }
  1103.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  1104.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());

  1105.         return ReportisticaHelper.generateReport(wrap, env.context);
  1106.     }

  1107.     public static final byte[] getReportDistribuzioneTemporale(RicercaStatisticaAndamentoTemporale body,MonitoraggioEnv env) throws Exception {
  1108.        
  1109.         if (body.getAzione() != null && body.getApi() == null) {
  1110.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
  1111.         }
  1112.        
  1113.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1114.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  1115.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.temporale);

  1116.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  1117.         ReportisticaHelper.overrideOpzioniGenerazioneReportMultiLine(body.getReport(), wrap, env);
  1118.         if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1119.             switch (body.getTipo()) {
  1120.             case EROGAZIONE:
  1121.                 ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1122.                 break;
  1123.             case FRUIZIONE:
  1124.                 ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1125.                 break;
  1126.             case QUALSIASI:
  1127.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1128.                 break;
  1129.             }
  1130.         }
  1131.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  1132.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());

  1133.         return ReportisticaHelper.generateReport(wrap, env.context);
  1134.     }

  1135.     public static final byte[] getReportDistribuzioneTokenInfo(RicercaStatisticaDistribuzioneTokenInfo body,
  1136.             MonitoraggioEnv env) throws Exception {
  1137.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1138.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo,
  1139.                 env.nomeSoggettoLocale, body.getTipo(), body.getReport().getFormato(), true, TipoReport.token_info);

  1140.         ReportisticaHelper.overrideRicercaStatisticaDistribuzioneApplicativo(body, wrap, env);
  1141.         wrap.overrideParameter(CostantiExporter.CLAIM, Enums.toDistribuzioneTokenClaim.get(body.getClaim()).toString());

  1142.         if(body.getSoggetto()!=null) {
  1143.             if(!FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.equals(body.getTipo())) {
  1144.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il criterio di ricerca per soggetto è indicabile solamente se si genera report relativi a transazioni con ruolo '"+FiltroRicercaRuoloTransazioneEnum.EROGAZIONE.toString()+"'");
  1145.             }
  1146.             BaseOggettoWithSimpleName base = body.getSoggetto();
  1147.             if(base.getNome()!=null) {
  1148.                 wrap.overrideParameter(CostantiExporter.MITTENTE,new IDSoggetto(env.tipoSoggetto, base.getNome()).toString());
  1149.             }
  1150.         }

  1151.         return ReportisticaHelper.generateReport(wrap, env.context);
  1152.     }

  1153.     public static final byte[] getReportDistribuzioneSoggettoLocale(RicercaStatisticaDistribuzioneSoggettoLocale body,
  1154.             MonitoraggioEnv env) throws Exception {
  1155.        
  1156.         if (body.getAzione() != null && body.getApi() == null) {
  1157.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Se viene specificato il filtro 'azione' è necessario specificare anche il filtro Api");
  1158.         }
  1159.        
  1160.         SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  1161.         HttpRequestWrapper wrap = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo, null,
  1162.                 body.getTipo(), body.getReport().getFormato(), true, TipoReport.soggetto_locale);

  1163.         ReportisticaHelper.overrideRicercaBaseStatisticaSoggetti(body, wrap, env);
  1164.         ReportisticaHelper.overrideFiltroEsito(body.getEsito(), wrap, env);
  1165.         ReportisticaHelper.overrideOpzioniGenerazioneReport(body.getReport(), wrap, env);

  1166.         if(body.getMittente()!=null && body.getMittente().getIdentificazione()!=null) {
  1167.             switch (body.getTipo()) {
  1168.             case EROGAZIONE:
  1169.                 ReportisticaHelper.overrideFiltroMittenteErogazione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1170.                 break;
  1171.             case FRUIZIONE:
  1172.                 ReportisticaHelper.overrideFiltroMittenteFruizione(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1173.                 break;
  1174.             case QUALSIASI:
  1175.                 ReportisticaHelper.overrideFiltroMittenteQualsiasi(body.getMittente().getIdentificazione(), body.getMittente(), false, wrap, env);
  1176.                 break;
  1177.             }
  1178.         }

  1179.         wrap.overrideParameter(CostantiExporter.AZIONE, body.getAzione());

  1180.         return ReportisticaHelper.generateReport(wrap, env.context);
  1181.     }

  1182.     public static final String buildNomeServizioForOverride(String nomeServizio, String tipoServizio,
  1183.             Integer versioneServizio, Optional<IDSoggetto> erogatore) {
  1184.         if (nomeServizio == null || tipoServizio == null || versioneServizio == null)
  1185.             return null;

  1186.         StringBuilder uri = new StringBuilder();
  1187.         String nomeAsps = nomeServizio;
  1188.         String tipoAsps = tipoServizio;

  1189.         // Per popolare il campo NomeServizio seguo quanto fatto in
  1190.         // DynamicPdDBeanUtils._getListaSelectItemsElencoServiziErogazione
  1191.         uri.append(tipoAsps).append("/");
  1192.         uri.append(nomeAsps).append(":").append(versioneServizio);
  1193.         if (erogatore.isPresent())
  1194.             uri.append(" (").append(erogatore.get().getTipo()).append("/").append(erogatore.get().getNome())
  1195.                     .append(")");

  1196.         return uri.toString();
  1197.     }

  1198.     public static final String getTipoServizioDefault(MonitoraggioEnv env) {

  1199.         try {
  1200.             IProtocolConfiguration protocolConf = env.protocolFactoryMgr.getProtocolFactoryByName(env.tipo_protocollo)
  1201.                     .createProtocolConfiguration();
  1202.             ServiceBinding defaultBinding = protocolConf.getDefaultServiceBindingConfiguration(null)
  1203.                     .getDefaultBinding();
  1204.             return protocolConf.getTipoServizioDefault(defaultBinding);
  1205.         } catch (Exception e) {
  1206.             throw FaultCode.ERRORE_INTERNO
  1207.                     .toException("Impossibile determinare il tipo del servizio: " + e.getMessage());
  1208.         }
  1209.     }

  1210.     public static final byte[] exportConfigurazioneApi(RicercaConfigurazioneApi body, MonitoraggioEnv env) throws Exception {
  1211.         DBManager dbManager = DBManager.getInstance();
  1212.         Connection connection = null;
  1213.         ConfigurazioniGeneraliService configurazioniService = null;
  1214.         SearchFormUtilities searchFormUtilities = null;
  1215.         HttpRequestWrapper request = null;
  1216.                
  1217.         try {
  1218.             connection = dbManager.getConnectionConfig();
  1219.             ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1220.             configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp, LoggerProperties.getLoggerDAO());
  1221.             searchFormUtilities = new SearchFormUtilities();
  1222.             FormatoReportEnum formatoReport = null;
  1223.             if(body.getFormato()!=null) {
  1224.                 switch (body.getFormato()) {
  1225.                 case CSV:
  1226.                     formatoReport = FormatoReportEnum.CSV;
  1227.                     break;
  1228.                 case XLS:
  1229.                     formatoReport = FormatoReportEnum.XLS;
  1230.                     break;
  1231.                 default:
  1232.                     formatoReport = FormatoReportEnum.CSV;
  1233.                     break;
  1234.                 }
  1235.             }
  1236.             else {
  1237.                 formatoReport = FormatoReportEnum.CSV;
  1238.             }
  1239.             request = searchFormUtilities.getHttpRequestWrapper(env.context, env.profilo, env.nomeSoggettoLocale,
  1240.                     body.getTipo(), formatoReport, false, TipoReport.api);
  1241.         }
  1242.         catch (Exception e) {
  1243.             dbManager.releaseConnectionConfig(connection);
  1244.             throw new RuntimeException(e);
  1245.         }
  1246.        
  1247.         String tag = null;
  1248.         switch (body.getTipo()) {
  1249.             case EROGAZIONE: {          
  1250.                 ReportisticaHelper.overrideFiltroErogazione(tag, body.getApi(), request, env);
  1251.                 break;
  1252.             }
  1253.             case FRUIZIONE:
  1254.                 ReportisticaHelper.overrideFiltroFruizione(tag, body.getApi(), request, env);
  1255.                 break;
  1256.         }

  1257.         try {
  1258.             byte[] report = StatsGenerator.generateReport(request, env.context, configurazioniService);
  1259.             return report;
  1260.         } catch (NotFoundException e) {
  1261.             throw FaultCode.NOT_FOUND.toException(e);
  1262.         } catch (Exception e) {
  1263.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1264.         } finally {
  1265.             dbManager.releaseConnectionConfig(connection);
  1266.         }
  1267.     }
  1268.    
  1269.     public static final FiltroApiImplementata parseUriApiImplementata(String uriApiImplementata, MonitoraggioEnv env) throws Exception {
  1270.         //  tipoSoggettoReferente/nomeSoggettoReferente:nomeAccordo:versione
  1271.         String pattern1 = "^[a-z]{2,20}/[0-9A-Za-z]+:[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
  1272.         String pattern2 = "^[_A-Za-z][\\-\\._A-Za-z0-9]*:\\d$";
  1273.         IDAccordo idAccordo = null;
  1274.         try {
  1275.             if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern1)) {
  1276.                 idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(uriApiImplementata);
  1277.             }
  1278.             else if(RegularExpressionEngine.isMatch(uriApiImplementata, pattern2)) {
  1279.                 String uriCompleto = env.tipoSoggetto+"/"+env.nomeSoggettoLocale+":"+uriApiImplementata;
  1280.                 idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(uriCompleto);
  1281.             }
  1282.             else {
  1283.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"'");
  1284.             }
  1285.         }catch(RegExpNotFoundException e) {
  1286.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("La uri fornita '"+uriApiImplementata+"' non rispetta il formato atteso '"+pattern1+"|"+pattern2+"': "+e.getMessage());
  1287.         }
  1288.         FiltroApiImplementata filtro = new FiltroApiImplementata();
  1289.         filtro.setNome(idAccordo.getNome());
  1290.         filtro.setReferente(idAccordo.getSoggettoReferente().getNome());
  1291.         filtro.setVersione(idAccordo.getVersione());
  1292.         return filtro;
  1293.     }
  1294.    
  1295.     public static final String toUriApiImplementata(FiltroApiImplementata filtroApiImplementata, MonitoraggioEnv env) throws Exception {
  1296.         //  tipoSoggettoReferente/nomeSoggettoReferente:nomeAccordo:versione
  1297.         String tipoSoggetto = env.tipoSoggetto;
  1298.         String nomeSoggetto = filtroApiImplementata.getReferente()!=null ? filtroApiImplementata.getReferente() : env.nomeSoggettoLocale;
  1299.         if(nomeSoggetto==null || "".equals(nomeSoggetto)) {
  1300.             if(!env.supportatoSoggettoReferenteAPI) {
  1301.                 // Recupero Soggetto Default per l'API
  1302.                 if(env.soggettoReferenteAPIDefault!=null) {
  1303.                     nomeSoggetto = env.soggettoReferenteAPIDefault.getNome();
  1304.                 }
  1305.                
  1306.             }
  1307.         }
  1308.         return IDAccordoFactory.getInstance().getUriFromValues(filtroApiImplementata.getNome(), tipoSoggetto, nomeSoggetto, filtroApiImplementata.getVersione());
  1309.     }
  1310.    
  1311.     public static final FiltroApiSoggetti parseFiltroApiMap(FiltroRicercaRuoloTransazioneEnum tipo,
  1312.             String nomeServizio, String tipoServizio, Integer versioneServizio, String soggettoRemoto,
  1313.             String soggettoErogatore,
  1314.             MonitoraggioEnv env, String uriApiImplementata) throws Exception {
  1315.        
  1316.         // In caso di Fruizione, fin'ora si è sempre specificato l'erogatore per mezzo del parametro soggettoRemoto.
  1317.         // Per mantenere i controlli corretti sul filtroApi, nel caso FRUIZIONE se viene specificato il soggettoRemoto
  1318.         // allora si sta specificando un pezzo del filtroAPI, che va specificato per intero.
  1319.         if (tipo == FiltroRicercaRuoloTransazioneEnum.FRUIZIONE) {
  1320.             soggettoErogatore = soggettoRemoto;
  1321.         }

  1322.         if (tipo == FiltroRicercaRuoloTransazioneEnum.EROGAZIONE
  1323.                 && (!StringUtils.isEmpty(soggettoRemoto) || !StringUtils.isEmpty(soggettoErogatore))) {
  1324.            
  1325.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nel caso di ruolo <" + tipo
  1326.                     + ">, non bisogna specificare né soggetto_remoto né soggetto_erogatore");
  1327.         }

  1328.         if (tipo == FiltroRicercaRuoloTransazioneEnum.FRUIZIONE
  1329.                 && !StringUtils.isEmpty(soggettoErogatore)
  1330.                 && !StringUtils.isEmpty(soggettoRemoto)
  1331.                 && !StringUtils.equals(soggettoRemoto, soggettoErogatore)) {
  1332.            
  1333.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Ricerca ambigua. Nel caso di ruolo <"
  1334.                     + tipo
  1335.                     + ">, soggettoErogatore e soggettoRemoto specificano la stessa informazione."
  1336.                     + "Se specificati entrambi allora devono essere uguali");
  1337.         }  

  1338.         // Se specifico un pezzo del filtroAPI, allora devo avere un filtro completo.
  1339.         // (meno i defaults)
  1340.         if (nomeServizio != null || tipoServizio != null || soggettoErogatore != null
  1341.                 // || versioneServizio != null  default value is 1
  1342.                 ) {
  1343.        
  1344.             if (nomeServizio == null) {
  1345.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare il nome_servizio");
  1346.             }

  1347.             if (tipo == FiltroRicercaRuoloTransazioneEnum.FRUIZIONE && (StringUtils.isEmpty(soggettoRemoto) || StringUtils.isEmpty(soggettoErogatore)) ) {
  1348.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificando un filtro API per il ruolo <" + tipo
  1349.                         + ">, è necessario specificare anche il soggetto_remoto (Erogatore in caso di Fruizioni)");
  1350.             }
  1351.            
  1352.             if (tipo == FiltroRicercaRuoloTransazioneEnum.QUALSIASI && StringUtils.isEmpty(soggettoErogatore)) {
  1353.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificando un filtro API per il ruolo <" + tipo
  1354.                         + ">, è necessario specificare anche il soggetto_erogatore");
  1355.             }
  1356.             // TODO: Gli altri due hanno i defaults. (Che dovrei metttere ora?)
  1357.         }

  1358.         return ReportisticaHelper.buildFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  1359.                 env, uriApiImplementata);
  1360.     }
  1361.    
  1362.     public static final FiltroApiSoggetti parseFiltroApiMap(TransazioneRuoloEnum tipo, String nomeServizio,
  1363.             String tipoServizio, Integer versioneServizio, String soggettoRemoto,
  1364.             MonitoraggioEnv env, String uriApiImplementata) throws Exception {
  1365.         // In Questo caso non abbiamo il tipo QUALSIASI, quindi parsiamo il filtro senza il soggettoErogatore (ultimo parametro a null)
  1366.         FiltroRicercaRuoloTransazioneEnum newTipo = tipo == TransazioneRuoloEnum.EROGAZIONE ? FiltroRicercaRuoloTransazioneEnum.EROGAZIONE : FiltroRicercaRuoloTransazioneEnum.FRUIZIONE;
  1367.         return ReportisticaHelper.parseFiltroApiMap(newTipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,null,
  1368.                 env, uriApiImplementata);
  1369.     }
  1370.    
  1371.     private static final FiltroApiSoggetti buildFiltroApiMap(FiltroRicercaRuoloTransazioneEnum tipo, String nomeServizio,
  1372.             String tipoServizio, Integer versioneServizio, String soggettoRemoto, String soggettoErogatore,
  1373.             MonitoraggioEnv env, String uriApiImplementata) throws Exception {

  1374.         FiltroApiImplementata apiImplementata = null;
  1375.         if(uriApiImplementata!=null && !"".equals(uriApiImplementata)) {
  1376.             apiImplementata = ReportisticaHelper.parseUriApiImplementata(uriApiImplementata, env);
  1377.         }
  1378.        
  1379.         // Se non ho specificato nessun pezzo del filtro api, allora per le versioni full è come aver passato un FiltroApi a null.
  1380.         if (StringUtils.isEmpty(nomeServizio) && StringUtils.isEmpty(tipoServizio) && StringUtils.isEmpty(soggettoRemoto) && StringUtils.isEmpty(soggettoErogatore)
  1381.                 //&& versioneServizio == null default value is 1
  1382.                 ) {
  1383.             if(apiImplementata!=null) {
  1384.                 FiltroApiSoggetti filtroApiBase = new FiltroApiSoggetti();
  1385.                 filtroApiBase.setApiImplementata(apiImplementata);
  1386.                 return filtroApiBase;
  1387.             }
  1388.             return null;
  1389.         }
  1390.        
  1391.         FiltroApiSoggetti filtroApiBase = new FiltroApiSoggetti();
  1392.        
  1393.         filtroApiBase.setNome(nomeServizio);
  1394.         filtroApiBase.setTipo(tipoServizio);
  1395.         if(nomeServizio!=null || tipoServizio!=null) {
  1396.             filtroApiBase.setVersione(versioneServizio!=null ? versioneServizio : 1);
  1397.         }
  1398.        
  1399.         switch (tipo) {
  1400.         case EROGAZIONE:
  1401.             break;
  1402.         case FRUIZIONE:
  1403.             if (!StringUtils.isEmpty(soggettoErogatore)) {
  1404.                 soggettoRemoto = soggettoErogatore;
  1405.             }
  1406.             filtroApiBase.setErogatore(soggettoRemoto);
  1407.             break;
  1408.         case QUALSIASI:
  1409.             filtroApiBase.setErogatore(soggettoErogatore);
  1410.             filtroApiBase.setSoggettoRemoto(soggettoRemoto);
  1411.             break;
  1412.         }
  1413.        
  1414.         filtroApiBase.setApiImplementata(apiImplementata);
  1415.        
  1416.         return filtroApiBase;
  1417.     }
  1418.    
  1419. }