ReportisticaApiServiceImpl.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;

  21. import java.sql.Connection;
  22. import java.util.List;
  23. import java.util.Objects;
  24. import java.util.UUID;

  25. import org.joda.time.DateTime;
  26. import org.joda.time.LocalDate;
  27. import org.openspcoop2.core.id.IDServizio;
  28. import org.openspcoop2.core.monitor.rs.server.api.ReportisticaApi;
  29. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.Converter;
  30. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.MonitoraggioEnv;
  31. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.ReportisticaHelper;
  32. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.SearchFormUtilities;
  33. import org.openspcoop2.core.monitor.rs.server.config.DBManager;
  34. import org.openspcoop2.core.monitor.rs.server.config.LoggerProperties;
  35. import org.openspcoop2.core.monitor.rs.server.config.ServerProperties;
  36. import org.openspcoop2.core.monitor.rs.server.model.BaseOggettoWithSimpleName;
  37. import org.openspcoop2.core.monitor.rs.server.model.DetailsTracingPDND;
  38. import org.openspcoop2.core.monitor.rs.server.model.DimensioniReportCustomEnum;
  39. import org.openspcoop2.core.monitor.rs.server.model.DimensioniReportEnum;
  40. import org.openspcoop2.core.monitor.rs.server.model.EsitoTransazioneFullSearchEnum;
  41. import org.openspcoop2.core.monitor.rs.server.model.EsitoTransazioneSimpleSearchEnum;
  42. import org.openspcoop2.core.monitor.rs.server.model.FiltroEsito;
  43. import org.openspcoop2.core.monitor.rs.server.model.FiltroRicercaRuoloTransazioneEnum;
  44. import org.openspcoop2.core.monitor.rs.server.model.FiltroTemporale;
  45. import org.openspcoop2.core.monitor.rs.server.model.ForcePublishBodyTracingPDND;
  46. import org.openspcoop2.core.monitor.rs.server.model.FormatoReportConfigEnum;
  47. import org.openspcoop2.core.monitor.rs.server.model.FormatoReportEnum;
  48. import org.openspcoop2.core.monitor.rs.server.model.InfoImplementazioneApi;
  49. import org.openspcoop2.core.monitor.rs.server.model.ListaRiepilogoApi;
  50. import org.openspcoop2.core.monitor.rs.server.model.ListaTracingPDND;
  51. import org.openspcoop2.core.monitor.rs.server.model.OperationStatus;
  52. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReport;
  53. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportDimensioni;
  54. import org.openspcoop2.core.monitor.rs.server.model.OpzioniGenerazioneReportMultiLine;
  55. import org.openspcoop2.core.monitor.rs.server.model.RicercaConfigurazioneApi;
  56. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaAndamentoTemporale;
  57. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApi;
  58. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApplicativo;
  59. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneApplicativoRegistrato;
  60. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneAzione;
  61. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneErrori;
  62. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneEsiti;
  63. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneSoggettoLocale;
  64. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneSoggettoRemoto;
  65. import org.openspcoop2.core.monitor.rs.server.model.RicercaStatisticaDistribuzioneTokenInfo;
  66. import org.openspcoop2.core.monitor.rs.server.model.Riepilogo;
  67. import org.openspcoop2.core.monitor.rs.server.model.StatoTracing;
  68. import org.openspcoop2.core.monitor.rs.server.model.StatoTracingPDND;
  69. import org.openspcoop2.core.monitor.rs.server.model.TipoIdentificazioneApplicativoEnum;
  70. import org.openspcoop2.core.monitor.rs.server.model.TipoInformazioneReportEnum;
  71. import org.openspcoop2.core.monitor.rs.server.model.TipoReportEnum;
  72. import org.openspcoop2.core.monitor.rs.server.model.TokenClaimDistribuzioneStatisticaEnum;
  73. import org.openspcoop2.core.monitor.rs.server.model.UnitaTempoReportEnum;
  74. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  75. import org.openspcoop2.utils.service.BaseImpl;
  76. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  77. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  78. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  79. import org.openspcoop2.utils.service.beans.TransazioneRuoloEnum;
  80. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  81. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  82. import org.openspcoop2.utils.service.context.IContext;
  83. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  84. import org.openspcoop2.web.monitor.core.utils.ParseUtility;
  85. import org.openspcoop2.web.monitor.statistiche.bean.ConfigurazioneGenerale;
  86. import org.openspcoop2.web.monitor.statistiche.bean.ConfigurazioniGeneraliSearchForm;
  87. import org.openspcoop2.web.monitor.statistiche.bean.StatistichePdndTracingBean;
  88. import org.openspcoop2.web.monitor.statistiche.bean.StatistichePdndTracingSearchForm;
  89. import org.openspcoop2.web.monitor.statistiche.constants.ModalitaRicercaStatistichePdnd;
  90. import org.openspcoop2.web.monitor.statistiche.dao.ConfigurazioniGeneraliService;
  91. import org.openspcoop2.web.monitor.statistiche.dao.StatistichePdndTracingService;


  92. /**
  93.  * ReportisticaApiServiceImpl
  94.  *
  95.  * @author $Author$
  96.  * @version $Rev$, $Date$
  97.  */
  98. public class ReportisticaApiServiceImpl extends BaseImpl implements ReportisticaApi {

  99.     public ReportisticaApiServiceImpl() {
  100.         super(org.slf4j.LoggerFactory.getLogger(ReportisticaApiServiceImpl.class));
  101.     }

  102.     private AuthorizationConfig getAuthorizationConfig() throws Exception {
  103.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  104.     }

  105.     /**
  106.      * Recupera la configurazione di un servizio
  107.      *
  108.      * Consente di recuperare la configurazione di un servizio esportandola in
  109.      * formato csv
  110.      *
  111.      */
  112.     @Override
  113.     public byte[] exportConfigurazioneApiByFullSearch(RicercaConfigurazioneApi body, ProfiloEnum profilo,
  114.             String soggetto) {
  115.         IContext context = this.getContext();
  116.         try {
  117.             context.getLogger().info("Invocazione in corso ...");

  118.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  119.             context.getLogger().debug("Autorizzazione completata con successo");

  120.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  121.             byte[] ret = ReportisticaHelper.exportConfigurazioneApi(body, env);
  122.             context.getLogger().info("Invocazione completata con successo");
  123.             return ret;

  124.         } catch (javax.ws.rs.WebApplicationException e) {
  125.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  126.             throw e;
  127.         } catch (Throwable e) {
  128.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  129.             throw FaultCode.ERRORE_INTERNO.toException(e);
  130.         }
  131.     }

  132.     /**
  133.      * Recupera la configurazione di un servizio
  134.      *
  135.      * Consente di recuperare la configurazione di un servizio esportandola in
  136.      * formato csv
  137.      *
  138.      */
  139.     @Override
  140.     public byte[] exportConfigurazioneApiBySimpleSearch(TransazioneRuoloEnum tipo, ProfiloEnum profilo, String soggetto,
  141.             String soggettoRemoto, String nomeServizio, String tipoServizio, Integer versioneServizio, FormatoReportConfigEnum formatoReport) {
  142.         IContext context = this.getContext();
  143.         try {
  144.             context.getLogger().info("Invocazione in corso ...");

  145.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  146.             context.getLogger().debug("Autorizzazione completata con successo");
  147.            
  148.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  149.                        
  150.             RicercaConfigurazioneApi ricerca = new RicercaConfigurazioneApi();
  151.             ricerca.setTipo(tipo);
  152.             ricerca.setFormato(formatoReport);
  153.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,
  154.                     env, null));
  155.                        
  156.             byte[] ret = ReportisticaHelper.exportConfigurazioneApi(ricerca, env);
  157.             context.getLogger().info("Invocazione completata con successo");
  158.             return ret;        

  159.         } catch (javax.ws.rs.WebApplicationException e) {
  160.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  161.             throw e;
  162.         } catch (Throwable e) {
  163.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  164.             throw FaultCode.ERRORE_INTERNO.toException(e);
  165.         }
  166.     }

  167.     /**
  168.      * Consente di recuperare l'elenco delle erogazioni o fruizioni che coinvolgono
  169.      * il soggetto scelto
  170.      *
  171.      * Ricerca le erogazioni e fruizioni registrate sul sistema filtrandole per
  172.      * tipologia servizio
  173.      *
  174.      */
  175.     @Override
  176.     public ListaRiepilogoApi getConfigurazioneApi(TransazioneRuoloEnum tipo, ProfiloEnum profilo, String soggetto,
  177.             Integer offset, Integer limit) {
  178.         IContext context = this.getContext();
  179.         try {
  180.             context.getLogger().info("Invocazione in corso ...");

  181.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  182.             context.getLogger().debug("Autorizzazione completata con successo");

  183.             DBManager dbManager = DBManager.getInstance();
  184.             Connection connection = null;
  185.             try {
  186.                 connection = dbManager.getConnectionConfig();
  187.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  188.                 ConfigurazioniGeneraliService configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp,
  189.                         LoggerProperties.getLoggerDAO());

  190.                 ServerProperties serverProperties = ServerProperties.getInstance();
  191.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  192.                 ConfigurazioniGeneraliSearchForm search = searchFormUtilities.getConfigurazioniGeneraliSearchForm(context,
  193.                         profilo, soggetto, tipo);
  194.                 configurazioniService.setSearch(search);
  195.                 List<ConfigurazioneGenerale> listDB = configurazioniService.findAll(Converter.toOffset(offset),
  196.                         Converter.toLimit(limit));
  197.        
  198.                 ListaRiepilogoApi ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  199.                         Converter.toOffset(offset), Converter.toLimit(limit), configurazioniService.totalCount(),
  200.                         ListaRiepilogoApi.class);

  201.                 if (serverProperties.isFindall404() && (listDB == null || listDB.isEmpty()))
  202.                     throw FaultCode.NOT_FOUND.toException("Nessuna configurazione trovata corrispondente ai criteri di ricerca");

  203.                 if (listDB != null && !listDB.isEmpty()) {
  204.                     listDB.forEach(configurazioneDB -> {
  205.                         try {
  206.                             ret.addItemsItem(Converter.toRiepilogoApiItem(configurazioneDB, this.log));
  207.                         } catch (Exception e) {
  208.                             throw new RuntimeException(e.getMessage(), e);
  209.                         }
  210.                     });
  211.                 }

  212.                 context.getLogger().info("Invocazione completata con successo");
  213.                 return ret;
  214.             } finally {
  215.                 dbManager.releaseConnectionConfig(connection);
  216.             }

  217.         } catch (javax.ws.rs.WebApplicationException e) {
  218.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  219.             throw e;
  220.         } catch (Throwable e) {
  221.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  222.             throw FaultCode.ERRORE_INTERNO.toException(e);
  223.         }
  224.     }

  225.     /**
  226.      * Genera per mezzo di una ricerca articolata, un report statistico raggruppato
  227.      * per servizi
  228.      *
  229.      * Questa operazione consente di generare un report statistico raggrupato per
  230.      * servizi esportandolo nei formati più comuni
  231.      *
  232.      */
  233.     @Override
  234.     public byte[] getReportDistribuzioneApiByFullSearch(RicercaStatisticaDistribuzioneApi body, ProfiloEnum profilo,
  235.             String soggetto) {
  236.         IContext context = this.getContext();
  237.         try {
  238.             context.getLogger().info("Invocazione in corso ...");

  239.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  240.             context.getLogger().debug("Autorizzazione completata con successo");

  241.             BaseHelper.throwIfNull(body);
  242.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  243.             byte[] ret = ReportisticaHelper.getReportDistribuzioneApi(body, env);

  244.             context.getLogger().info("Invocazione completata con successo");
  245.             return ret;
  246.         } catch (javax.ws.rs.WebApplicationException e) {
  247.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  248.             throw e;
  249.         } catch (Throwable e) {
  250.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  251.             throw FaultCode.ERRORE_INTERNO.toException(e);
  252.         }
  253.     }

  254.     /**
  255.      * Genera un report statistico organizzato per API utilizzando una ricerca
  256.      * semplice
  257.      *
  258.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  259.      * report statistico organizzato per API esportandolo nei formati più comuni
  260.      *
  261.      */
  262.     @Override
  263.         public byte[] getReportDistribuzioneApiBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  264.                 ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String tag, Boolean distinguiApiImplementata,
  265.                 EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  266.                 DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  267.         IContext context = this.getContext();
  268.         try {
  269.             context.getLogger().info("Invocazione in corso ...");

  270.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  271.             context.getLogger().debug("Autorizzazione completata con successo");

  272.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);

  273.             RicercaStatisticaDistribuzioneApi ricerca = new RicercaStatisticaDistribuzioneApi();
  274.            
  275.             BaseOggettoWithSimpleName soggettoRemotoBase = null;
  276.             if(soggettoRemoto!=null) {
  277.                 soggettoRemotoBase = new BaseOggettoWithSimpleName();
  278.                 soggettoRemotoBase.setNome(soggettoRemoto);
  279.             }
  280.             ricerca.setSoggettoErogatore(soggettoRemotoBase);

  281.             FiltroTemporale intervallo = new FiltroTemporale();
  282.             intervallo.setDataInizio(dataInizio);
  283.             intervallo.setDataFine(dataFine);

  284.             ricerca.setIntervalloTemporale(intervallo);
  285.             ricerca.setUnitaTempo(unitaTempo);
  286.             ricerca.setTipo(tipo);
  287.             ricerca.setIdCluster(idCluster);

  288.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  289.             opzioni.setFormato(formatoReport);
  290.             opzioni.setTipo(tipoReport);
  291.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  292.             ricerca.setReport(opzioni);

  293.             ricerca.setTag(tag);
  294.             ricerca.setDistinguiApiImplementata(distinguiApiImplementata);
  295.            
  296.             if (esito != null || escludiScartate!=null) {
  297.                 FiltroEsito filtroEsito = new FiltroEsito();
  298.                 if(esito!=null) {
  299.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  300.                 }
  301.                 else {
  302.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  303.                 }
  304.                 if(escludiScartate!=null) {
  305.                     filtroEsito.setEscludiScartate(escludiScartate);
  306.                 }
  307.                 ricerca.setEsito(filtroEsito);
  308.             }

  309.             byte[] ret = ReportisticaHelper.getReportDistribuzioneApi(ricerca, env);
  310.             context.getLogger().info("Invocazione completata con successo");

  311.             return ret;
  312.         } catch (javax.ws.rs.WebApplicationException e) {
  313.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  314.             throw e;
  315.         } catch (Throwable e) {
  316.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  317.             throw FaultCode.ERRORE_INTERNO.toException(e);
  318.         }
  319.     }

  320.     /**
  321.      * Genera un report statistico per applicativo utilizzando una ricerca
  322.      * articolata
  323.      *
  324.      * Questa operazione consente di generare un report statistico raggruppato per
  325.      * applicativo ed esportandolo nei formati più comuni
  326.      *
  327.      */
  328.     @Override
  329.     public byte[] getReportDistribuzioneApplicativoByFullSearch(RicercaStatisticaDistribuzioneApplicativoRegistrato body,
  330.             ProfiloEnum profilo, String soggetto) {
  331.         IContext context = this.getContext();
  332.         try {
  333.             context.getLogger().info("Invocazione in corso ...");

  334.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  335.             context.getLogger().debug("Autorizzazione completata con successo");

  336.             BaseHelper.throwIfNull(body);
  337.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  338.             byte[] ret = ReportisticaHelper.getReportDistribuzioneApplicativo(body, env);

  339.             context.getLogger().info("Invocazione completata con successo");
  340.             return ret;
  341.         } catch (javax.ws.rs.WebApplicationException e) {
  342.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  343.             throw e;
  344.         } catch (Throwable e) {
  345.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  346.             throw FaultCode.ERRORE_INTERNO.toException(e);
  347.         }
  348.     }

  349.     /**
  350.      * Genera un report statistico organizzato per Applicativi utilizzando una
  351.      * ricerca semplice
  352.      *
  353.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  354.      * report statistico per applicativo esportandolo nei formati più comuni
  355.      *
  356.      */
  357.     @Override
  358.     public byte[] getReportDistribuzioneApplicativoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  359.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore,String soggettoMittente, String tag, String uriApiImplementata,
  360.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, TipoIdentificazioneApplicativoEnum tipoIdentificazione, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  361.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  362.         IContext context = this.getContext();
  363.         try {
  364.             context.getLogger().info("Invocazione in corso ...");

  365.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  366.             context.getLogger().debug("Autorizzazione completata con successo");

  367.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  368.             RicercaStatisticaDistribuzioneApplicativoRegistrato ricerca = new RicercaStatisticaDistribuzioneApplicativoRegistrato();
  369.             ricerca.setTipo(tipo);      
  370.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  371.                     env, uriApiImplementata));
  372.             ricerca.setSoggettoMittente(soggettoMittente);
  373.             ricerca.setAzione(azione);

  374.             FiltroTemporale intervallo = new FiltroTemporale();
  375.             intervallo.setDataInizio(dataInizio);
  376.             intervallo.setDataFine(dataFine);

  377.             ricerca.setIntervalloTemporale(intervallo);
  378.             ricerca.setUnitaTempo(unitaTempo);
  379.             ricerca.setTipo(tipo);
  380.             ricerca.setIdCluster(idCluster);

  381.             ricerca.setTipoIdentificazioneApplicativo(tipoIdentificazione);
  382.            
  383.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  384.             opzioni.setFormato(formatoReport);
  385.             opzioni.setTipo(tipoReport);
  386.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  387.             ricerca.setReport(opzioni);

  388.             ricerca.setTag(tag);
  389.            
  390.             if (esito != null || escludiScartate!=null) {
  391.                 FiltroEsito filtroEsito = new FiltroEsito();
  392.                 if(esito!=null) {
  393.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  394.                 }
  395.                 else {
  396.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  397.                 }
  398.                 if(escludiScartate!=null) {
  399.                     filtroEsito.setEscludiScartate(escludiScartate);
  400.                 }
  401.                 ricerca.setEsito(filtroEsito);
  402.             }

  403.             byte[] ret = ReportisticaHelper.getReportDistribuzioneApplicativo(ricerca, env);
  404.             context.getLogger().info("Invocazione completata con successo");

  405.             return ret;
  406.         } catch (javax.ws.rs.WebApplicationException e) {
  407.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  408.             throw e;
  409.         } catch (Throwable e) {
  410.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  411.             throw FaultCode.ERRORE_INTERNO.toException(e);
  412.         }
  413.     }

  414.     /**
  415.      * Genera un report statistico distribuito per azione utilizzando una ricerca
  416.      * articolata
  417.      *
  418.      * Questa operazione consente di generare un report statistico raggruppato
  419.      * distribuito per azione ed esportandolo nei formati più comuni
  420.      *
  421.      */
  422.     @Override
  423.     public byte[] getReportDistribuzioneAzioneByFullSearch(RicercaStatisticaDistribuzioneAzione body, ProfiloEnum profilo,
  424.             String soggetto) {
  425.         IContext context = this.getContext();
  426.         try {
  427.             context.getLogger().info("Invocazione in corso ...");

  428.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  429.             context.getLogger().debug("Autorizzazione completata con successo");

  430.             BaseHelper.throwIfNull(body);
  431.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  432.             byte[] ret = ReportisticaHelper.getReportDistribuzioneAzione(body, env);

  433.             context.getLogger().info("Invocazione completata con successo");
  434.             return ret;
  435.         } catch (javax.ws.rs.WebApplicationException e) {
  436.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  437.             throw e;
  438.         } catch (Throwable e) {
  439.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  440.             throw FaultCode.ERRORE_INTERNO.toException(e);
  441.         }
  442.     }

  443.     /**
  444.      * Genera un report statistico organizzato per Azioni utilizzando una ricerca
  445.      * semplice
  446.      *
  447.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  448.      * report statistico per azione esportandolo nei formati più comuni
  449.      *
  450.      */
  451.     @Override
  452.     public byte[] getReportDistribuzioneAzioneBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  453.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  454.             String nomeServizio, String tipoServizio, Integer versioneServizio, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  455.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  456.         IContext context = this.getContext();
  457.         try {
  458.             context.getLogger().info("Invocazione in corso ...");

  459.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  460.             context.getLogger().debug("Autorizzazione completata con successo");

  461.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  462.             RicercaStatisticaDistribuzioneAzione ricerca = new RicercaStatisticaDistribuzioneAzione();
  463.             ricerca.setTipo(tipo);
  464.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  465.                     env, uriApiImplementata));
  466.             FiltroTemporale intervallo = new FiltroTemporale();
  467.             intervallo.setDataInizio(dataInizio);
  468.             intervallo.setDataFine(dataFine);

  469.             ricerca.setIntervalloTemporale(intervallo);
  470.             ricerca.setUnitaTempo(unitaTempo);
  471.             ricerca.setTipo(tipo);
  472.             ricerca.setIdCluster(idCluster);

  473.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  474.             opzioni.setFormato(formatoReport);
  475.             opzioni.setTipo(tipoReport);
  476.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  477.             ricerca.setReport(opzioni);

  478.             ricerca.setTag(tag);
  479.            
  480.             if (esito != null || escludiScartate!=null) {
  481.                 FiltroEsito filtroEsito = new FiltroEsito();
  482.                 if(esito!=null) {
  483.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  484.                 }
  485.                 else {
  486.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  487.                 }
  488.                 if(escludiScartate!=null) {
  489.                     filtroEsito.setEscludiScartate(escludiScartate);
  490.                 }
  491.                 ricerca.setEsito(filtroEsito);
  492.             }

  493.             byte[] ret = ReportisticaHelper.getReportDistribuzioneAzione(ricerca, env);
  494.             context.getLogger().info("Invocazione completata con successo");

  495.             return ret;
  496.         } catch (javax.ws.rs.WebApplicationException e) {
  497.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  498.             throw e;
  499.         } catch (Throwable e) {
  500.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  501.             throw FaultCode.ERRORE_INTERNO.toException(e);
  502.         }
  503.     }

  504.    
  505.     /**
  506.      * Genera un report statistico distribuito per esiti di errore utilizzando una ricerca articolata
  507.      *
  508.      * Questa operazione consente di generare un report statistico raggruppato distribuito per esiti di errore ed esportandolo nei formati più comuni
  509.      *
  510.      */
  511.     @Override
  512.     public byte[] getReportDistribuzioneErroriByFullSearch(RicercaStatisticaDistribuzioneErrori body, ProfiloEnum profilo, String soggetto) {
  513.         IContext context = this.getContext();
  514.         try {
  515.             context.getLogger().info("Invocazione in corso ...");    

  516.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  517.             context.getLogger().debug("Autorizzazione completata con successo");    
  518.                        
  519.             BaseHelper.throwIfNull(body);
  520.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  521.             byte[] ret = ReportisticaHelper.getReportDistribuzioneErrori(body, env);
  522.        
  523.             context.getLogger().info("Invocazione completata con successo");
  524.             return ret;
  525.      
  526.         }
  527.         catch(javax.ws.rs.WebApplicationException e) {
  528.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  529.             throw e;
  530.         }
  531.         catch(Throwable e) {
  532.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  533.             throw FaultCode.ERRORE_INTERNO.toException(e);
  534.         }
  535.     }
  536.    
  537.     /**
  538.      * Genera un report statistico organizzato per esiti di errore utilizzando una ricerca semplice
  539.      *
  540.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un report statistico per esiti di errore esportandolo nei formati più comuni
  541.      *
  542.      */
  543.     @Override
  544.     public byte[] getReportDistribuzioneErroriBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport, ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata, String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  545.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {
  546.         IContext context = this.getContext();
  547.         try {
  548.             context.getLogger().info("Invocazione in corso ...");    

  549.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  550.             context.getLogger().debug("Autorizzazione completata con successo");    
  551.                        
  552.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  553.             RicercaStatisticaDistribuzioneErrori ricerca = new RicercaStatisticaDistribuzioneErrori();
  554.             ricerca.setTipo(tipo);
  555.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  556.                     env, uriApiImplementata));
  557.             ricerca.setAzione(azione);
  558.            
  559.             FiltroTemporale intervallo = new FiltroTemporale();
  560.             intervallo.setDataInizio(dataInizio);
  561.             intervallo.setDataFine(dataFine);

  562.             ricerca.setIntervalloTemporale(intervallo);
  563.             ricerca.setUnitaTempo(unitaTempo);
  564.             ricerca.setTipo(tipo);
  565.             ricerca.setIdCluster(idCluster);

  566.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  567.             opzioni.setFormato(formatoReport);
  568.             opzioni.setTipo(tipoReport);
  569.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  570.             ricerca.setReport(opzioni);

  571.             ricerca.setTag(tag);
  572.            
  573.             if (esito != null || escludiScartate!=null) {
  574.                 FiltroEsito filtroEsito = new FiltroEsito();
  575.                 if(esito!=null) {
  576.                     EsitoTransazioneFullSearchEnum esitoT = EsitoTransazioneFullSearchEnum.valueOf(esito.name());
  577.                     filtroEsito.setTipo(esitoT);
  578.                 }
  579.                 else {
  580.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.FALLITE_E_FAULT);
  581.                 }
  582.                 if(escludiScartate!=null) {
  583.                     filtroEsito.setEscludiScartate(escludiScartate);
  584.                 }
  585.                 ricerca.setEsito(filtroEsito);
  586.             }

  587.             byte[] ret = ReportisticaHelper.getReportDistribuzioneErrori(ricerca, env);
  588.             context.getLogger().info("Invocazione completata con successo");

  589.             return ret;
  590.      
  591.         }
  592.         catch(javax.ws.rs.WebApplicationException e) {
  593.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  594.             throw e;
  595.         }
  596.         catch(Throwable e) {
  597.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  598.             throw FaultCode.ERRORE_INTERNO.toException(e);
  599.         }
  600.     }
  601.    

  602.     /**
  603.      * Genera un report statistico per andamento esiti per mezzo di una ricerca
  604.      * articolata
  605.      *
  606.      * Questa operazione consente di generare un report statistico per andamento
  607.      * esiti esportandolo nei formati più comuni
  608.      *
  609.      */
  610.     @Override
  611.     public byte[] getReportDistribuzioneEsitiByFullSearch(RicercaStatisticaDistribuzioneEsiti body, ProfiloEnum profilo,
  612.             String soggetto) {
  613.         IContext context = this.getContext();
  614.         try {
  615.             context.getLogger().info("Invocazione in corso ...");

  616.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  617.             context.getLogger().debug("Autorizzazione completata con successo");

  618.             BaseHelper.throwIfNull(body);
  619.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  620.             byte[] ret = ReportisticaHelper.getReportDistribuzioneEsiti(body, env);

  621.             context.getLogger().info("Invocazione completata con successo");
  622.             return ret;

  623.         } catch (javax.ws.rs.WebApplicationException e) {
  624.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  625.             throw e;
  626.         } catch (Throwable e) {
  627.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  628.             throw FaultCode.ERRORE_INTERNO.toException(e);
  629.         }
  630.     }

  631.     /**
  632.      * Genera un report statistico per andamento esiti per mezzo di una ricerca
  633.      * semplice
  634.      *
  635.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  636.      * report statistico per andamento esiti esportandolo nei formati più comuni
  637.      *
  638.      */
  639.     @Override
  640.     public byte[] getReportDistribuzioneEsitiBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  641.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  642.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport) {

  643.         IContext context = this.getContext();
  644.         try {
  645.             context.getLogger().info("Invocazione in corso ...");

  646.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  647.             context.getLogger().debug("Autorizzazione completata con successo");

  648.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  649.             RicercaStatisticaDistribuzioneEsiti ricerca = new RicercaStatisticaDistribuzioneEsiti();
  650.             ricerca.setTipo(tipo);
  651.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  652.                     env, uriApiImplementata));
  653.             ricerca.setAzione(azione);

  654.             FiltroTemporale intervallo = new FiltroTemporale();
  655.             intervallo.setDataInizio(dataInizio);
  656.             intervallo.setDataFine(dataFine);

  657.             ricerca.setIntervalloTemporale(intervallo);
  658.             ricerca.setUnitaTempo(unitaTempo);
  659.             ricerca.setTipo(tipo);
  660.             ricerca.setIdCluster(idCluster);

  661.             OpzioniGenerazioneReport opzioni = new OpzioniGenerazioneReport();
  662.             opzioni.setFormato(formatoReport);
  663.             opzioni.setTipo(tipoReport);
  664.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, null, null);      
  665.             ricerca.setReport(opzioni);

  666.             ricerca.setTag(tag);
  667.            
  668.             byte[] ret = ReportisticaHelper.getReportDistribuzioneEsiti(ricerca, env);
  669.             context.getLogger().info("Invocazione completata con successo");

  670.             return ret;
  671.         } catch (javax.ws.rs.WebApplicationException e) {
  672.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  673.             throw e;
  674.         } catch (Throwable e) {
  675.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  676.             throw FaultCode.ERRORE_INTERNO.toException(e);
  677.         }
  678.     }

  679.     /**
  680.      * Genera un report statistico per identificativo autenticato utilizzando una
  681.      * ricerca articolata
  682.      *
  683.      * Questa operazione consente di generare un report statistico raggruppato per
  684.      * identificativo autenticato ed esportandolo nei formati più comuni
  685.      *
  686.      */
  687.     @Override
  688.     public byte[] getReportDistribuzioneIdAutenticatoByFullSearch(RicercaStatisticaDistribuzioneApplicativo body,
  689.             ProfiloEnum profilo, String soggetto) {
  690.         IContext context = this.getContext();
  691.         try {
  692.             context.getLogger().info("Invocazione in corso ...");

  693.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  694.             context.getLogger().debug("Autorizzazione completata con successo");

  695.             BaseHelper.throwIfNull(body);
  696.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  697.             byte[] ret = ReportisticaHelper.getReportDistribuzioneIdAutenticato(body, env);

  698.             context.getLogger().info("Invocazione completata con successo");
  699.             return ret;
  700.         } catch (javax.ws.rs.WebApplicationException e) {
  701.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  702.             throw e;
  703.         } catch (Throwable e) {
  704.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  705.             throw FaultCode.ERRORE_INTERNO.toException(e);
  706.         }
  707.     }

  708.     /**
  709.      * Genera un report statistico organizzato per Identificativo Autenticato
  710.      * utilizzando una ricerca semplice
  711.      *
  712.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  713.      * report statistico per identificativo autenticato esportandolo nei formati più
  714.      * comuni
  715.      *
  716.      */
  717.     @Override
  718.     public byte[] getReportDistribuzioneIdAutenticatoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  719.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  720.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  721.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  722.         IContext context = this.getContext();
  723.         try {
  724.             context.getLogger().info("Invocazione in corso ...");

  725.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  726.             context.getLogger().debug("Autorizzazione completata con successo");

  727.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  728.             RicercaStatisticaDistribuzioneApplicativo ricerca = new RicercaStatisticaDistribuzioneApplicativo();
  729.             ricerca.setTipo(tipo);
  730.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  731.                     env, uriApiImplementata));
  732.             ricerca.setAzione(azione);

  733.             FiltroTemporale intervallo = new FiltroTemporale();
  734.             intervallo.setDataInizio(dataInizio);
  735.             intervallo.setDataFine(dataFine);

  736.             ricerca.setIntervalloTemporale(intervallo);
  737.             ricerca.setUnitaTempo(unitaTempo);
  738.             ricerca.setTipo(tipo);
  739.             ricerca.setIdCluster(idCluster);

  740.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  741.             opzioni.setFormato(formatoReport);
  742.             opzioni.setTipo(tipoReport);
  743.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  744.             ricerca.setReport(opzioni);

  745.             ricerca.setTag(tag);
  746.            
  747.             if (esito != null || escludiScartate!=null) {
  748.                 FiltroEsito filtroEsito = new FiltroEsito();
  749.                 if(esito!=null) {
  750.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  751.                 }
  752.                 else {
  753.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  754.                 }
  755.                 if(escludiScartate!=null) {
  756.                     filtroEsito.setEscludiScartate(escludiScartate);
  757.                 }
  758.                 ricerca.setEsito(filtroEsito);
  759.             }

  760.             byte[] ret = ReportisticaHelper.getReportDistribuzioneIdAutenticato(ricerca, env);
  761.             context.getLogger().info("Invocazione completata con successo");

  762.             return ret;

  763.         } catch (javax.ws.rs.WebApplicationException e) {
  764.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  765.             throw e;
  766.         } catch (Throwable e) {
  767.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  768.             throw FaultCode.ERRORE_INTERNO.toException(e);
  769.         }
  770.     }

  771.     /**
  772.      * Genera un report statistico raggruppato per soggetto locale per mezzo di una
  773.      * ricerca articolata
  774.      *
  775.      * Questa operazione consente di generare un report statistico raggruppato per
  776.      * soggetto locale esportandolo nei formati più comuni
  777.      *
  778.      */
  779.     @Override
  780.     public byte[] getReportDistribuzioneSoggettoLocaleByFullSearch(RicercaStatisticaDistribuzioneSoggettoLocale body,
  781.             ProfiloEnum profilo) {
  782.         IContext context = this.getContext();
  783.         try {
  784.             context.getLogger().info("Invocazione in corso ...");


  785.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  786.             context.getLogger().debug("Autorizzazione completata con successo");
  787.             BaseHelper.throwIfNull(body);
  788.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, null, this.log);
  789.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoLocale(body, env);
  790.             context.getLogger().info("Invocazione completata con successo");
  791.             return ret;
  792.         } catch (javax.ws.rs.WebApplicationException e) {
  793.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  794.             throw e;
  795.         } catch (Throwable e) {
  796.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  797.             throw FaultCode.ERRORE_INTERNO.toException(e);
  798.         }
  799.     }

  800.     /**
  801.      * Genera un report statistico per soggetto locale per mezzo di una ricerca
  802.      * semplice
  803.      *
  804.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  805.      * report statistico per soggetto locale esportandolo nei formati più comuni
  806.      *
  807.      */
  808.     @Override
  809.     public byte[] getReportDistribuzioneSoggettoLocaleBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  810.             ProfiloEnum profilo, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  811.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  812.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  813.         IContext context = this.getContext();
  814.         try {
  815.             context.getLogger().info("Invocazione in corso ...");

  816.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  817.             context.getLogger().debug("Autorizzazione completata con successo");
  818.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, null, this.log);

  819.             RicercaStatisticaDistribuzioneSoggettoLocale ricerca = new RicercaStatisticaDistribuzioneSoggettoLocale();
  820.             ricerca.setTipo(tipo);
  821.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  822.                     env, uriApiImplementata));
  823.             FiltroTemporale intervallo = new FiltroTemporale();
  824.             intervallo.setDataInizio(dataInizio);
  825.             intervallo.setDataFine(dataFine);

  826.             ricerca.setIntervalloTemporale(intervallo);
  827.             ricerca.setUnitaTempo(unitaTempo);
  828.             ricerca.setTipo(tipo);
  829.             ricerca.setIdCluster(idCluster);

  830.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  831.             opzioni.setFormato(formatoReport);
  832.             opzioni.setTipo(tipoReport);
  833.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  834.             ricerca.setReport(opzioni);

  835.             ricerca.setTag(tag);
  836.            
  837.             if (esito != null || escludiScartate!=null) {
  838.                 FiltroEsito filtroEsito = new FiltroEsito();
  839.                 if(esito!=null) {
  840.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  841.                 }
  842.                 else {
  843.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  844.                 }
  845.                 if(escludiScartate!=null) {
  846.                     filtroEsito.setEscludiScartate(escludiScartate);
  847.                 }
  848.                 ricerca.setEsito(filtroEsito);
  849.             }

  850.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoLocale(ricerca, env);
  851.             context.getLogger().info("Invocazione completata con successo");
  852.             return ret;
  853.         } catch (javax.ws.rs.WebApplicationException e) {
  854.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  855.             throw e;
  856.         } catch (Throwable e) {
  857.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  858.             throw FaultCode.ERRORE_INTERNO.toException(e);
  859.         }
  860.     }

  861.     /**
  862.      * Genera un report statistico raggruppato per soggetto remoto per mezzo di una
  863.      * ricerca articolata
  864.      *
  865.      * Questa operazione consente di generare un report statistico raggruppato per
  866.      * soggetto remoto esportandolo nei formati più comuni
  867.      *
  868.      */
  869.     @Override
  870.     public byte[] getReportDistribuzioneSoggettoRemotoByFullSearch(RicercaStatisticaDistribuzioneSoggettoRemoto body,
  871.             ProfiloEnum profilo, String soggetto) {
  872.         IContext context = this.getContext();
  873.         try {
  874.             context.getLogger().info("Invocazione in corso ...");

  875.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  876.             context.getLogger().debug("Autorizzazione completata con successo");

  877.             BaseHelper.throwIfNull(body);
  878.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  879.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoRemoto(body, env);

  880.             context.getLogger().info("Invocazione completata con successo");
  881.             return ret;
  882.         } catch (javax.ws.rs.WebApplicationException e) {
  883.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  884.             throw e;
  885.         } catch (Throwable e) {
  886.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  887.             throw FaultCode.ERRORE_INTERNO.toException(e);
  888.         }
  889.     }

  890.     /**
  891.      * Genera un report statistico per soggetto remoto per mezzo di una ricerca
  892.      * semplice
  893.      *
  894.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  895.      * report statistico per soggetto remoto esportandolo nei formati più comuni
  896.      *
  897.      */
  898.     @Override
  899.     public byte[] getReportDistribuzioneSoggettoRemotoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  900.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoErogatore, String tag, String uriApiImplementata,
  901.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  902.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  903.         IContext context = this.getContext();
  904.         try {
  905.             context.getLogger().info("Invocazione in corso ...");

  906.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  907.             context.getLogger().debug("Autorizzazione completata con successo");

  908.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  909.             RicercaStatisticaDistribuzioneSoggettoRemoto ricerca = new RicercaStatisticaDistribuzioneSoggettoRemoto();
  910.             ricerca.setTipo(tipo);
  911.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoErogatore, null,
  912.                     env, uriApiImplementata));
  913.             ricerca.setAzione(azione);

  914.             FiltroTemporale intervallo = new FiltroTemporale();
  915.             intervallo.setDataInizio(dataInizio);
  916.             intervallo.setDataFine(dataFine);

  917.             ricerca.setIntervalloTemporale(intervallo);
  918.             ricerca.setUnitaTempo(unitaTempo);
  919.             ricerca.setTipo(tipo);
  920.             ricerca.setIdCluster(idCluster);

  921.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  922.             opzioni.setFormato(formatoReport);
  923.             opzioni.setTipo(tipoReport);
  924.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  925.             ricerca.setReport(opzioni);

  926.             ricerca.setTag(tag);
  927.            
  928.             if (esito != null || escludiScartate!=null) {
  929.                 FiltroEsito filtroEsito = new FiltroEsito();
  930.                 if(esito!=null) {
  931.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  932.                 }
  933.                 else {
  934.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  935.                 }
  936.                 if(escludiScartate!=null) {
  937.                     filtroEsito.setEscludiScartate(escludiScartate);
  938.                 }
  939.                 ricerca.setEsito(filtroEsito);
  940.             }

  941.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoRemoto(ricerca, env);
  942.             context.getLogger().info("Invocazione completata con successo");

  943.             return ret;

  944.         } catch (javax.ws.rs.WebApplicationException e) {
  945.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  946.             throw e;
  947.         } catch (Throwable e) {
  948.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  949.             throw FaultCode.ERRORE_INTERNO.toException(e);
  950.         }
  951.     }

  952.     /**
  953.      * Genera un report statistico per andamento temporale per mezzo di una ricerca
  954.      * articolata
  955.      *
  956.      * Questa operazione consente di generare un report statistico per andamento
  957.      * temporale esportandolo nei formati più comuni
  958.      *
  959.      */
  960.     @Override
  961.     public byte[] getReportDistribuzioneTemporaleByFullSearch(RicercaStatisticaAndamentoTemporale body,
  962.             ProfiloEnum profilo, String soggetto) {
  963.         IContext context = this.getContext();
  964.         try {
  965.             context.getLogger().info("Invocazione in corso ...");

  966.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  967.             context.getLogger().debug("Autorizzazione completata con successo");

  968.             BaseHelper.throwIfNull(body);
  969.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  970.             byte[] ret = ReportisticaHelper.getReportDistribuzioneTemporale(body, env);

  971.             context.getLogger().info("Invocazione completata con successo");
  972.             return ret;
  973.         } catch (javax.ws.rs.WebApplicationException e) {
  974.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  975.             throw e;
  976.         } catch (Throwable e) {
  977.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  978.             throw FaultCode.ERRORE_INTERNO.toException(e);
  979.         }
  980.     }

  981.     /**
  982.      * Genera un report statistico per andamento temporale per mezzo di una ricerca
  983.      * semplice
  984.      *
  985.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  986.      * report statistico per andamento temporale esportandolo nei formati più comuni
  987.      *
  988.      */
  989.     @Override
  990.     public byte[] getReportDistribuzioneTemporaleBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  991.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  992.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport) {

  993.         IContext context = this.getContext();
  994.         try {
  995.             context.getLogger().info("Invocazione in corso ...");

  996.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  997.             context.getLogger().debug("Autorizzazione completata con successo");

  998.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  999.             RicercaStatisticaAndamentoTemporale ricerca = new RicercaStatisticaAndamentoTemporale();
  1000.             ricerca.setTipo(tipo);
  1001.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  1002.                     env, uriApiImplementata));
  1003.             ricerca.setAzione(azione);

  1004.             FiltroTemporale intervallo = new FiltroTemporale();
  1005.             intervallo.setDataInizio(dataInizio);
  1006.             intervallo.setDataFine(dataFine);

  1007.             ricerca.setIntervalloTemporale(intervallo);
  1008.             ricerca.setUnitaTempo(unitaTempo);
  1009.             ricerca.setTipo(tipo);
  1010.             ricerca.setIdCluster(idCluster);

  1011.             OpzioniGenerazioneReportMultiLine opzioni = new OpzioniGenerazioneReportMultiLine();
  1012.             opzioni.setFormato(formatoReport);
  1013.             opzioni.setTipo(tipoReport);
  1014.             ReportisticaHelper.setTipoInformazioneReportMultiLine(opzioni, tipoInformazioneReport);    
  1015.             ricerca.setReport(opzioni);

  1016.             ricerca.setTag(tag);
  1017.            
  1018.             if (esito != null || escludiScartate!=null) {
  1019.                 FiltroEsito filtroEsito = new FiltroEsito();
  1020.                 if(esito!=null) {
  1021.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  1022.                 }
  1023.                 else {
  1024.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  1025.                 }
  1026.                 if(escludiScartate!=null) {
  1027.                     filtroEsito.setEscludiScartate(escludiScartate);
  1028.                 }
  1029.                 ricerca.setEsito(filtroEsito);
  1030.             }

  1031.             byte[] ret = ReportisticaHelper.getReportDistribuzioneTemporale(ricerca, env);
  1032.             context.getLogger().info("Invocazione completata con successo");

  1033.             return ret;

  1034.         } catch (javax.ws.rs.WebApplicationException e) {
  1035.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1036.             throw e;
  1037.         } catch (Throwable e) {
  1038.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1039.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1040.         }
  1041.     }

  1042.     /**
  1043.      * Genera un report statistico organizzato per Token Info
  1044.      *
  1045.      * Consente di generare un report raggruppato secondo un claim del token
  1046.      *
  1047.      */
  1048.     @Override
  1049.     public byte[] getReportDistribuzioneTokenInfoByFullSearch(RicercaStatisticaDistribuzioneTokenInfo body,
  1050.             ProfiloEnum profilo, String soggetto) {
  1051.         IContext context = this.getContext();
  1052.         try {
  1053.             context.getLogger().info("Invocazione in corso ...");

  1054.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1055.             context.getLogger().debug("Autorizzazione completata con successo");

  1056.             BaseHelper.throwIfNull(body);
  1057.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);

  1058.             byte[] ret = ReportisticaHelper.getReportDistribuzioneTokenInfo(body, env);
  1059.             context.getLogger().info("Invocazione completata con successo");
  1060.             return ret;
  1061.         } catch (javax.ws.rs.WebApplicationException e) {
  1062.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1063.             throw e;
  1064.         } catch (Throwable e) {
  1065.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1066.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1067.         }
  1068.     }

  1069.     /**
  1070.      * Genera un report statistico organizzato organizzato per Token Info
  1071.      * utilizzando una ricerca semplice
  1072.      *
  1073.      * Consente di generare un report raggruppato secondo un claim del token per
  1074.      * mezzo di una ricerca semplice
  1075.      *
  1076.      */
  1077.     @Override
  1078.     public byte[] getReportDistribuzioneTokenInfoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  1079.             TokenClaimDistribuzioneStatisticaEnum claim, ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  1080.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  1081.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  1082.         IContext context = this.getContext();
  1083.         try {
  1084.             context.getLogger().info("Invocazione in corso ...");

  1085.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1086.             context.getLogger().debug("Autorizzazione completata con successo");

  1087.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  1088.             RicercaStatisticaDistribuzioneTokenInfo ricerca = new RicercaStatisticaDistribuzioneTokenInfo();
  1089.             ricerca.setTipo(tipo);
  1090.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  1091.                     env, uriApiImplementata));
  1092.             ricerca.setAzione(azione);

  1093.             FiltroTemporale intervallo = new FiltroTemporale();
  1094.             intervallo.setDataInizio(dataInizio);
  1095.             intervallo.setDataFine(dataFine);

  1096.             ricerca.setIntervalloTemporale(intervallo);
  1097.             ricerca.setUnitaTempo(unitaTempo);
  1098.             ricerca.setTipo(tipo);
  1099.             ricerca.setIdCluster(idCluster);

  1100.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  1101.             opzioni.setFormato(formatoReport);
  1102.             opzioni.setTipo(tipoReport);
  1103.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  1104.             ricerca.setReport(opzioni);

  1105.             ricerca.setTag(tag);
  1106.            
  1107.             if (esito != null || escludiScartate!=null) {
  1108.                 FiltroEsito filtroEsito = new FiltroEsito();
  1109.                 if(esito!=null) {
  1110.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  1111.                 }
  1112.                 else {
  1113.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  1114.                 }
  1115.                 if(escludiScartate!=null) {
  1116.                     filtroEsito.setEscludiScartate(escludiScartate);
  1117.                 }
  1118.                 ricerca.setEsito(filtroEsito);
  1119.             }

  1120.             ricerca.setClaim(claim);

  1121.             byte[] ret = ReportisticaHelper.getReportDistribuzioneTokenInfo(ricerca, env);
  1122.             context.getLogger().info("Invocazione completata con successo");

  1123.             return ret;
  1124.         } catch (javax.ws.rs.WebApplicationException e) {
  1125.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1126.             throw e;
  1127.         } catch (Throwable e) {
  1128.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1129.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1130.         }
  1131.     }

  1132.    
  1133.      /**
  1134.      * Genera un report statistico organizzato per Indirizzi IP
  1135.      *
  1136.      * Consente di generare un report degli indirizzo IP
  1137.      *
  1138.      */
  1139.     @Override
  1140.     public byte[] getReportDistribuzioneIndirizzoIPByFullSearch(RicercaStatisticaDistribuzioneApplicativo body, ProfiloEnum profilo, String soggetto) {
  1141.         IContext context = this.getContext();
  1142.         try {
  1143.             context.getLogger().info("Invocazione in corso ...");

  1144.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1145.             context.getLogger().debug("Autorizzazione completata con successo");

  1146.             BaseHelper.throwIfNull(body);
  1147.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  1148.             byte[] ret = ReportisticaHelper.getReportDistribuzioneIndirizzoIP(body, env);

  1149.             context.getLogger().info("Invocazione completata con successo");
  1150.             return ret;
  1151.         } catch (javax.ws.rs.WebApplicationException e) {
  1152.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1153.             throw e;
  1154.         } catch (Throwable e) {
  1155.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1156.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1157.         }
  1158.     }

  1159.     /**
  1160.      * Genera un report statistico organizzato organizzato per Indirizzo IP utilizzando una ricerca semplice
  1161.      *
  1162.      * Consente di generare un report degli indirizzo IP per mezzo di una ricerca semplice
  1163.      *
  1164.      */
  1165.     @Override
  1166.     public byte[] getReportDistribuzioneIndirizzoIPBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  1167.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  1168.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  1169.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  1170.         IContext context = this.getContext();
  1171.         try {
  1172.             context.getLogger().info("Invocazione in corso ...");

  1173.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1174.             context.getLogger().debug("Autorizzazione completata con successo");

  1175.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  1176.             RicercaStatisticaDistribuzioneApplicativo ricerca = new RicercaStatisticaDistribuzioneApplicativo();
  1177.             ricerca.setTipo(tipo);
  1178.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  1179.                     env, uriApiImplementata));
  1180.             ricerca.setAzione(azione);

  1181.             FiltroTemporale intervallo = new FiltroTemporale();
  1182.             intervallo.setDataInizio(dataInizio);
  1183.             intervallo.setDataFine(dataFine);

  1184.             ricerca.setIntervalloTemporale(intervallo);
  1185.             ricerca.setUnitaTempo(unitaTempo);
  1186.             ricerca.setTipo(tipo);
  1187.             ricerca.setIdCluster(idCluster);

  1188.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  1189.             opzioni.setFormato(formatoReport);
  1190.             opzioni.setTipo(tipoReport);
  1191.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  1192.             ricerca.setReport(opzioni);

  1193.             ricerca.setTag(tag);
  1194.            
  1195.             if (esito != null || escludiScartate!=null) {
  1196.                 FiltroEsito filtroEsito = new FiltroEsito();
  1197.                 if(esito!=null) {
  1198.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  1199.                 }
  1200.                 else {
  1201.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  1202.                 }
  1203.                 if(escludiScartate!=null) {
  1204.                     filtroEsito.setEscludiScartate(escludiScartate);
  1205.                 }
  1206.                 ricerca.setEsito(filtroEsito);
  1207.             }

  1208.             byte[] ret = ReportisticaHelper.getReportDistribuzioneIndirizzoIP(ricerca, env);
  1209.             context.getLogger().info("Invocazione completata con successo");

  1210.             return ret;

  1211.         } catch (javax.ws.rs.WebApplicationException e) {
  1212.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1213.             throw e;
  1214.         } catch (Throwable e) {
  1215.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1216.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1217.         }
  1218.     }

  1219.    
  1220.    
  1221.     /**
  1222.      * Ottieni le informazioni generali sulle implementazioni di un Api
  1223.      *
  1224.      * Recupera le informazioni generali di una Api, come il nome e il numero di
  1225.      * erogazioni e fruizioni registrate per esso
  1226.      *
  1227.      */
  1228.     @Override
  1229.     public InfoImplementazioneApi getRiepilogoApi(TransazioneRuoloEnum tipo, String nomeServizio, ProfiloEnum profilo,
  1230.             String soggetto, String soggettoRemoto, String tipoServizio, Integer versioneServizio) {
  1231.         IContext context = this.getContext();
  1232.         try {
  1233.             context.getLogger().info("Invocazione in corso ...");

  1234.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1235.             context.getLogger().debug("Autorizzazione completata con successo");

  1236.             DBManager dbManager = DBManager.getInstance();
  1237.             Connection connection = null;
  1238.             try {
  1239.                 connection = dbManager.getConnectionConfig();
  1240.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1241.                 ConfigurazioniGeneraliService configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp,
  1242.                         LoggerProperties.getLoggerDAO());

  1243.                 ServerProperties serverProperties = ServerProperties.getInstance();
  1244.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  1245.                 ConfigurazioniGeneraliSearchForm search = searchFormUtilities.getConfigurazioniGeneraliSearchForm(context,
  1246.                         profilo, soggetto, tipo);
  1247.                 IDServizio idServizio = Converter.toIDServizio(tipo, profilo, soggetto, soggettoRemoto, nomeServizio,
  1248.                         tipoServizio, versioneServizio);
  1249.                 if (idServizio != null && idServizio.getNome() != null && !"".equals(idServizio.getNome())) {
  1250.                     search.setNomeServizio(ParseUtility.convertToServizioSoggetto(idServizio));
  1251.                 }
  1252.                 configurazioniService.setSearch(search);

  1253.                 List<ConfigurazioneGenerale> listDB_infoServizi_left = configurazioniService.findAllInformazioniServizi();
  1254.                 if (serverProperties.isFindall404() && (listDB_infoServizi_left == null || listDB_infoServizi_left.isEmpty()))
  1255.                     throw FaultCode.NOT_FOUND.toException("Nessuna configurazione trovata corrispondente ai criteri di ricerca");

  1256.                 InfoImplementazioneApi info = Converter.toInfoImplementazioneApi(listDB_infoServizi_left, this.log);

  1257.                 context.getLogger().info("Invocazione completata con successo");
  1258.                 return info;
  1259.             } finally {
  1260.                 dbManager.releaseConnectionConfig(connection);
  1261.             }

  1262.         } catch (javax.ws.rs.WebApplicationException e) {
  1263.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1264.             throw e;
  1265.         } catch (Throwable e) {
  1266.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1267.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1268.         }
  1269.     }

  1270.     /**
  1271.      * Ottieni le informazioni generali sulle api e servizi di un soggetto
  1272.      *
  1273.      * Restituisce il numero e tipo di api che coinvolgono il soggetto, e un
  1274.      * riepilogo del registro circa i soggetti e gli applicativi registrati.
  1275.      *
  1276.      */
  1277.     @Override
  1278.     public Riepilogo getRiepologoConfigurazioni(ProfiloEnum profilo, String soggetto) {
  1279.         IContext context = this.getContext();
  1280.         try {
  1281.             context.getLogger().info("Invocazione in corso ...");

  1282.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1283.             context.getLogger().debug("Autorizzazione completata con successo");

  1284.             DBManager dbManager = DBManager.getInstance();
  1285.             Connection connection = null;
  1286.             try {
  1287.                 connection = dbManager.getConnectionConfig();
  1288.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1289.                 ConfigurazioniGeneraliService configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp,
  1290.                         LoggerProperties.getLoggerDAO());

  1291.                 ServerProperties serverProperties = ServerProperties.getInstance();
  1292.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  1293.                 ConfigurazioniGeneraliSearchForm search = searchFormUtilities.getConfigurazioniGeneraliSearchForm(context,
  1294.                         profilo, soggetto, null);
  1295.                 configurazioniService.setSearch(search);

  1296.                 List<ConfigurazioneGenerale> listDB_infoGenerali_right = configurazioniService.findAllInformazioniGenerali();
  1297.                 List<ConfigurazioneGenerale> listDB_infoServizi_left = configurazioniService.findAllInformazioniServizi();
  1298.                 ConfigurazioneGenerale soggettiOperativi = configurazioniService.getSoggettiOperativi();
  1299.                 if (serverProperties.isFindall404()
  1300.                         && (listDB_infoGenerali_right == null || listDB_infoGenerali_right.isEmpty())
  1301.                         && (listDB_infoServizi_left == null || listDB_infoServizi_left.isEmpty()))
  1302.                     throw FaultCode.NOT_FOUND.toException("Nessuna configurazione trovata corrispondente ai criteri di ricerca");

  1303.                 Riepilogo riepilogo = Converter.toRiepilogo(listDB_infoGenerali_right, listDB_infoServizi_left, soggettiOperativi, this.log);

  1304.                 context.getLogger().info("Invocazione completata con successo");
  1305.                 return riepilogo;
  1306.             } finally {
  1307.                 dbManager.releaseConnectionConfig(connection);
  1308.             }

  1309.         } catch (javax.ws.rs.WebApplicationException e) {
  1310.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1311.             throw e;
  1312.         } catch (Throwable e) {
  1313.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1314.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1315.         }
  1316.     }
  1317.    
  1318.     /**
  1319.      * Recupera la lista di tracciati della pdnd
  1320.      *
  1321.      * Consente di recuperare la configurazione di un servizio esportandola in formato csv, xls
  1322.      *
  1323.      */
  1324.     @Override
  1325.     public ListaTracingPDND getTracingPdndList(LocalDate dataInizio, LocalDate dataFine, String soggetto, Integer offset, Integer limit, Integer numeroTentativi, StatoTracing stato, StatoTracingPDND statoPdnd, UUID tracingId) {
  1326.         IContext context = this.getContext();
  1327.         try {
  1328.             context.getLogger().info("Invocazione in corso ...");

  1329.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1330.             context.getLogger().debug("Autorizzazione completata con successo");

  1331.             DBManager dbManager = DBManager.getInstance();
  1332.             Connection connection = null;
  1333.             try {
  1334.                 connection = dbManager.getConnectionConfig();
  1335.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1336.                 StatistichePdndTracingService pdndService = new StatistichePdndTracingService(connection, true, smp, LoggerProperties.getLoggerDAO());

  1337.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  1338.                 StatistichePdndTracingSearchForm search = searchFormUtilities.getStatistichePdndTracingSearchForm(context, soggetto);
  1339.                 search.setDataInizio(dataInizio.toDate());
  1340.                 search.setDataFine(dataFine.toDate());
  1341.                 if (stato != null && !StatoTracing.QUALSIASI.equals(stato))
  1342.                     search.setStato(Converter.toStatoTracing(stato).toString());
  1343.                 if (statoPdnd != null && !StatoTracingPDND.QUALSIASI.equals(statoPdnd))
  1344.                     search.setStatoPdnd(Converter.toStatoTracingPDND(statoPdnd).toString());
  1345.                 if (tracingId != null) {
  1346.                     search.setTracingId(tracingId.toString());
  1347.                     search.setModalitaRicerca(ModalitaRicercaStatistichePdnd.TRACING_ID.toString());
  1348.                 }
  1349.                 if (numeroTentativi != null)
  1350.                     search.setTentativiPubblicazione(numeroTentativi);
  1351.                 limit = Objects.requireNonNullElse(limit, 100);
  1352.                
  1353.                 pdndService.setSearch(search);

  1354.                 List<StatistichePdndTracingBean> listDB = pdndService.findAll(offset, limit);
  1355.                 ListaTracingPDND list = Converter.toListaTracingPDND(context, listDB, offset, limit, pdndService.totalCount());
  1356.                
  1357.                 context.getLogger().info("Invocazione completata con successo");
  1358.                
  1359.                 return list;
  1360.             } finally {
  1361.                 dbManager.releaseConnectionConfig(connection);
  1362.             }

  1363.         } catch (javax.ws.rs.WebApplicationException e) {
  1364.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1365.             throw e;
  1366.         } catch (Throwable e) {
  1367.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1368.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1369.         }
  1370.     }

  1371.     /**
  1372.      * mostra i dettagli di un tracciamento
  1373.      *
  1374.      * mostra i dettagli di un tracciamento
  1375.      *
  1376.      */
  1377.     @Override
  1378.     public DetailsTracingPDND getDetailsTracingPdnd(Long id) {
  1379.         IContext context = this.getContext();
  1380.         try {
  1381.             context.getLogger().info("Invocazione in corso ...");

  1382.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1383.             context.getLogger().debug("Autorizzazione completata con successo");

  1384.             DBManager dbManager = DBManager.getInstance();
  1385.             Connection connection = null;
  1386.             try {
  1387.                 connection = dbManager.getConnectionConfig();
  1388.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1389.                 StatistichePdndTracingService pdndService = new StatistichePdndTracingService(connection, true, smp, LoggerProperties.getLoggerDAO());

  1390.                 StatistichePdndTracingBean bean = pdndService.findById(id);
  1391.                 if(bean==null) {
  1392.                     FaultCode.NOT_FOUND.throwException("Traccia con id '"+id+"' non esistente");
  1393.                 }
  1394.                 DetailsTracingPDND details = Converter.toDetailsTracingPDND(bean);
  1395.                
  1396.                 context.getLogger().info("Invocazione completata con successo");
  1397.                
  1398.                 return details;
  1399.             } finally {
  1400.                 dbManager.releaseConnectionConfig(connection);
  1401.             }

  1402.         } catch (javax.ws.rs.WebApplicationException e) {
  1403.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1404.             throw e;
  1405.         } catch (Throwable e) {
  1406.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1407.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1408.         }
  1409.     }
  1410.    
  1411.     /**
  1412.      * esporta il csv inerente al tracciato
  1413.      *
  1414.      * Consente di recuperare il csv del tracciato
  1415.      *
  1416.      */
  1417.     @Override
  1418.     public byte[] exportTracingPdnd(Long id) {
  1419.         IContext context = this.getContext();
  1420.         try {
  1421.             context.getLogger().info("Invocazione in corso ...");

  1422.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1423.             context.getLogger().debug("Autorizzazione completata con successo");

  1424.             DBManager dbManager = DBManager.getInstance();
  1425.             Connection connection = null;
  1426.             try {
  1427.                 connection = dbManager.getConnectionConfig();
  1428.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1429.                 StatistichePdndTracingService pdndService = new StatistichePdndTracingService(connection, true, smp, LoggerProperties.getLoggerDAO());

  1430.                 byte[] csv = null;
  1431.                
  1432.                 StatistichePdndTracingBean bean = pdndService.findById(id);
  1433.                 if(bean==null) {
  1434.                     FaultCode.NOT_FOUND.throwException("Traccia con id '"+id+"' non esistente");
  1435.                 }
  1436.                 else {
  1437.                     context.getLogger().info("Invocazione completata con successo");
  1438.                     csv = bean.getCsv();
  1439.                 }
  1440.                
  1441.                 return csv;
  1442.                
  1443.             } finally {
  1444.                 dbManager.releaseConnectionConfig(connection);
  1445.             }

  1446.         } catch (javax.ws.rs.WebApplicationException e) {
  1447.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1448.             throw e;
  1449.         } catch (Throwable e) {
  1450.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1451.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1452.         }
  1453.     }
  1454.    
  1455.     @Override
  1456.     public OperationStatus tracingPdndForcePubblish(Long id, ForcePublishBodyTracingPDND body) {
  1457.         IContext context = this.getContext();
  1458.         try {
  1459.             context.getLogger().info("Invocazione in corso ...");

  1460.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  1461.             context.getLogger().debug("Autorizzazione completata con successo");

  1462.             DBManager dbManager = DBManager.getInstance();
  1463.             Connection connection = null;
  1464.             try {
  1465.                 connection = dbManager.getConnectionConfig();
  1466.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1467.                 StatistichePdndTracingService pdndService = new StatistichePdndTracingService(connection, true, smp, LoggerProperties.getLoggerDAO());
  1468.                
  1469.                 StatistichePdndTracingBean bean = pdndService.findById(id);
  1470.                 if(bean==null) {
  1471.                     FaultCode.NOT_FOUND.throwException("Traccia con id '"+id+"' non esistente");
  1472.                 }
  1473.                
  1474.                 if (body.isForcePublish())
  1475.                     pdndService.forcePublish(bean);
  1476.                
  1477.                 return new OperationStatus().success(true);
  1478.                
  1479.             } finally {
  1480.                 dbManager.releaseConnectionConfig(connection);
  1481.             }

  1482.         } catch (javax.ws.rs.WebApplicationException e) {
  1483.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1484.             throw e;
  1485.         } catch (Throwable e) {
  1486.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1487.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1488.         }
  1489.     }

  1490. }