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

  79. /**
  80.  * ReportisticaApiServiceImpl
  81.  *
  82.  * @author $Author$
  83.  * @version $Rev$, $Date$
  84.  */
  85. public class ReportisticaApiServiceImpl extends BaseImpl implements ReportisticaApi {

  86.     public ReportisticaApiServiceImpl() {
  87.         super(org.slf4j.LoggerFactory.getLogger(ReportisticaApiServiceImpl.class));
  88.     }

  89.     private AuthorizationConfig getAuthorizationConfig() throws Exception {
  90.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  91.     }

  92.     /**
  93.      * Recupera la configurazione di un servizio
  94.      *
  95.      * Consente di recuperare la configurazione di un servizio esportandola in
  96.      * formato csv
  97.      *
  98.      */
  99.     @Override
  100.     public byte[] exportConfigurazioneApiByFullSearch(RicercaConfigurazioneApi body, ProfiloEnum profilo,
  101.             String soggetto) {
  102.         IContext context = this.getContext();
  103.         try {
  104.             context.getLogger().info("Invocazione in corso ...");

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

  107.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  108.             byte[] ret = ReportisticaHelper.exportConfigurazioneApi(body, env);
  109.             context.getLogger().info("Invocazione completata con successo");
  110.             return ret;

  111.         } catch (javax.ws.rs.WebApplicationException e) {
  112.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  113.             throw e;
  114.         } catch (Throwable e) {
  115.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  116.             throw FaultCode.ERRORE_INTERNO.toException(e);
  117.         }
  118.     }

  119.     /**
  120.      * Recupera la configurazione di un servizio
  121.      *
  122.      * Consente di recuperare la configurazione di un servizio esportandola in
  123.      * formato csv
  124.      *
  125.      */
  126.     @Override
  127.     public byte[] exportConfigurazioneApiBySimpleSearch(TransazioneRuoloEnum tipo, ProfiloEnum profilo, String soggetto,
  128.             String soggettoRemoto, String nomeServizio, String tipoServizio, Integer versioneServizio, FormatoReportConfigEnum formatoReport) {
  129.         IContext context = this.getContext();
  130.         try {
  131.             context.getLogger().info("Invocazione in corso ...");

  132.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  133.             context.getLogger().debug("Autorizzazione completata con successo");
  134.            
  135.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  136.                        
  137.             RicercaConfigurazioneApi ricerca = new RicercaConfigurazioneApi();
  138.             ricerca.setTipo(tipo);
  139.             ricerca.setFormato(formatoReport);
  140.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,
  141.                     env, null));
  142.                        
  143.             byte[] ret = ReportisticaHelper.exportConfigurazioneApi(ricerca, env);
  144.             context.getLogger().info("Invocazione completata con successo");
  145.             return ret;        

  146.         } catch (javax.ws.rs.WebApplicationException e) {
  147.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  148.             throw e;
  149.         } catch (Throwable e) {
  150.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  151.             throw FaultCode.ERRORE_INTERNO.toException(e);
  152.         }
  153.     }

  154.     /**
  155.      * Consente di recuperare l'elenco delle erogazioni o fruizioni che coinvolgono
  156.      * il soggetto scelto
  157.      *
  158.      * Ricerca le erogazioni e fruizioni registrate sul sistema filtrandole per
  159.      * tipologia servizio
  160.      *
  161.      */
  162.     @Override
  163.     public ListaRiepilogoApi getConfigurazioneApi(TransazioneRuoloEnum tipo, ProfiloEnum profilo, String soggetto,
  164.             Integer offset, Integer limit) {
  165.         IContext context = this.getContext();
  166.         try {
  167.             context.getLogger().info("Invocazione in corso ...");

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

  170.             DBManager dbManager = DBManager.getInstance();
  171.             Connection connection = null;
  172.             try {
  173.                 connection = dbManager.getConnectionConfig();
  174.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  175.                 ConfigurazioniGeneraliService configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp,
  176.                         LoggerProperties.getLoggerDAO());

  177.                 ServerProperties serverProperties = ServerProperties.getInstance();
  178.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  179.                 ConfigurazioniGeneraliSearchForm search = searchFormUtilities.getConfigurazioniGeneraliSearchForm(context,
  180.                         profilo, soggetto, tipo);
  181.                 configurazioniService.setSearch(search);
  182.                 List<ConfigurazioneGenerale> listDB = configurazioniService.findAll(Converter.toOffset(offset),
  183.                         Converter.toLimit(limit));
  184.        
  185.                 ListaRiepilogoApi ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  186.                         Converter.toOffset(offset), Converter.toLimit(limit), configurazioniService.totalCount(),
  187.                         ListaRiepilogoApi.class);

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

  190.                 if (listDB != null && !listDB.isEmpty()) {
  191.                     listDB.forEach(configurazioneDB -> {
  192.                         try {
  193.                             ret.addItemsItem(Converter.toRiepilogoApiItem(configurazioneDB, this.log));
  194.                         } catch (Exception e) {
  195.                             throw new RuntimeException(e.getMessage(), e);
  196.                         }
  197.                     });
  198.                 }

  199.                 context.getLogger().info("Invocazione completata con successo");
  200.                 return ret;
  201.             } finally {
  202.                 dbManager.releaseConnectionConfig(connection);
  203.             }

  204.         } catch (javax.ws.rs.WebApplicationException e) {
  205.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  206.             throw e;
  207.         } catch (Throwable e) {
  208.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  209.             throw FaultCode.ERRORE_INTERNO.toException(e);
  210.         }
  211.     }

  212.     /**
  213.      * Genera per mezzo di una ricerca articolata, un report statistico raggruppato
  214.      * per servizi
  215.      *
  216.      * Questa operazione consente di generare un report statistico raggrupato per
  217.      * servizi esportandolo nei formati più comuni
  218.      *
  219.      */
  220.     @Override
  221.     public byte[] getReportDistribuzioneApiByFullSearch(RicercaStatisticaDistribuzioneApi body, ProfiloEnum profilo,
  222.             String soggetto) {
  223.         IContext context = this.getContext();
  224.         try {
  225.             context.getLogger().info("Invocazione in corso ...");

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

  228.             BaseHelper.throwIfNull(body);
  229.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  230.             byte[] ret = ReportisticaHelper.getReportDistribuzioneApi(body, env);

  231.             context.getLogger().info("Invocazione completata con successo");
  232.             return ret;
  233.         } catch (javax.ws.rs.WebApplicationException e) {
  234.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  235.             throw e;
  236.         } catch (Throwable e) {
  237.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  238.             throw FaultCode.ERRORE_INTERNO.toException(e);
  239.         }
  240.     }

  241.     /**
  242.      * Genera un report statistico organizzato per API utilizzando una ricerca
  243.      * semplice
  244.      *
  245.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  246.      * report statistico organizzato per API esportandolo nei formati più comuni
  247.      *
  248.      */
  249.     @Override
  250.         public byte[] getReportDistribuzioneApiBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  251.                 ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String tag, Boolean distinguiApiImplementata,
  252.                 EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  253.                 DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  254.         IContext context = this.getContext();
  255.         try {
  256.             context.getLogger().info("Invocazione in corso ...");

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

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

  260.             RicercaStatisticaDistribuzioneApi ricerca = new RicercaStatisticaDistribuzioneApi();
  261.            
  262.             BaseOggettoWithSimpleName soggettoRemotoBase = null;
  263.             if(soggettoRemoto!=null) {
  264.                 soggettoRemotoBase = new BaseOggettoWithSimpleName();
  265.                 soggettoRemotoBase.setNome(soggettoRemoto);
  266.             }
  267.             ricerca.setSoggettoErogatore(soggettoRemotoBase);

  268.             FiltroTemporale intervallo = new FiltroTemporale();
  269.             intervallo.setDataInizio(dataInizio);
  270.             intervallo.setDataFine(dataFine);

  271.             ricerca.setIntervalloTemporale(intervallo);
  272.             ricerca.setUnitaTempo(unitaTempo);
  273.             ricerca.setTipo(tipo);
  274.             ricerca.setIdCluster(idCluster);

  275.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  276.             opzioni.setFormato(formatoReport);
  277.             opzioni.setTipo(tipoReport);
  278.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  279.             ricerca.setReport(opzioni);

  280.             ricerca.setTag(tag);
  281.             ricerca.setDistinguiApiImplementata(distinguiApiImplementata);
  282.            
  283.             if (esito != null || escludiScartate!=null) {
  284.                 FiltroEsito filtroEsito = new FiltroEsito();
  285.                 if(esito!=null) {
  286.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  287.                 }
  288.                 else {
  289.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  290.                 }
  291.                 if(escludiScartate!=null) {
  292.                     filtroEsito.setEscludiScartate(escludiScartate);
  293.                 }
  294.                 ricerca.setEsito(filtroEsito);
  295.             }

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

  298.             return ret;
  299.         } catch (javax.ws.rs.WebApplicationException e) {
  300.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  301.             throw e;
  302.         } catch (Throwable e) {
  303.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  304.             throw FaultCode.ERRORE_INTERNO.toException(e);
  305.         }
  306.     }

  307.     /**
  308.      * Genera un report statistico per applicativo utilizzando una ricerca
  309.      * articolata
  310.      *
  311.      * Questa operazione consente di generare un report statistico raggruppato per
  312.      * applicativo ed esportandolo nei formati più comuni
  313.      *
  314.      */
  315.     @Override
  316.     public byte[] getReportDistribuzioneApplicativoByFullSearch(RicercaStatisticaDistribuzioneApplicativoRegistrato body,
  317.             ProfiloEnum profilo, String soggetto) {
  318.         IContext context = this.getContext();
  319.         try {
  320.             context.getLogger().info("Invocazione in corso ...");

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

  323.             BaseHelper.throwIfNull(body);
  324.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  325.             byte[] ret = ReportisticaHelper.getReportDistribuzioneApplicativo(body, env);

  326.             context.getLogger().info("Invocazione completata con successo");
  327.             return ret;
  328.         } catch (javax.ws.rs.WebApplicationException e) {
  329.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  330.             throw e;
  331.         } catch (Throwable e) {
  332.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  333.             throw FaultCode.ERRORE_INTERNO.toException(e);
  334.         }
  335.     }

  336.     /**
  337.      * Genera un report statistico organizzato per Applicativi utilizzando una
  338.      * ricerca semplice
  339.      *
  340.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  341.      * report statistico per applicativo esportandolo nei formati più comuni
  342.      *
  343.      */
  344.     @Override
  345.     public byte[] getReportDistribuzioneApplicativoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  346.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore,String soggettoMittente, String tag, String uriApiImplementata,
  347.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, TipoIdentificazioneApplicativoEnum tipoIdentificazione, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  348.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  349.         IContext context = this.getContext();
  350.         try {
  351.             context.getLogger().info("Invocazione in corso ...");

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

  354.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  355.             RicercaStatisticaDistribuzioneApplicativoRegistrato ricerca = new RicercaStatisticaDistribuzioneApplicativoRegistrato();
  356.             ricerca.setTipo(tipo);      
  357.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  358.                     env, uriApiImplementata));
  359.             ricerca.setSoggettoMittente(soggettoMittente);
  360.             ricerca.setAzione(azione);

  361.             FiltroTemporale intervallo = new FiltroTemporale();
  362.             intervallo.setDataInizio(dataInizio);
  363.             intervallo.setDataFine(dataFine);

  364.             ricerca.setIntervalloTemporale(intervallo);
  365.             ricerca.setUnitaTempo(unitaTempo);
  366.             ricerca.setTipo(tipo);
  367.             ricerca.setIdCluster(idCluster);

  368.             ricerca.setTipoIdentificazioneApplicativo(tipoIdentificazione);
  369.            
  370.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  371.             opzioni.setFormato(formatoReport);
  372.             opzioni.setTipo(tipoReport);
  373.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  374.             ricerca.setReport(opzioni);

  375.             ricerca.setTag(tag);
  376.            
  377.             if (esito != null || escludiScartate!=null) {
  378.                 FiltroEsito filtroEsito = new FiltroEsito();
  379.                 if(esito!=null) {
  380.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  381.                 }
  382.                 else {
  383.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  384.                 }
  385.                 if(escludiScartate!=null) {
  386.                     filtroEsito.setEscludiScartate(escludiScartate);
  387.                 }
  388.                 ricerca.setEsito(filtroEsito);
  389.             }

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

  392.             return ret;
  393.         } catch (javax.ws.rs.WebApplicationException e) {
  394.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  395.             throw e;
  396.         } catch (Throwable e) {
  397.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  398.             throw FaultCode.ERRORE_INTERNO.toException(e);
  399.         }
  400.     }

  401.     /**
  402.      * Genera un report statistico distribuito per azione utilizzando una ricerca
  403.      * articolata
  404.      *
  405.      * Questa operazione consente di generare un report statistico raggruppato
  406.      * distribuito per azione ed esportandolo nei formati più comuni
  407.      *
  408.      */
  409.     @Override
  410.     public byte[] getReportDistribuzioneAzioneByFullSearch(RicercaStatisticaDistribuzioneAzione body, ProfiloEnum profilo,
  411.             String soggetto) {
  412.         IContext context = this.getContext();
  413.         try {
  414.             context.getLogger().info("Invocazione in corso ...");

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

  417.             BaseHelper.throwIfNull(body);
  418.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  419.             byte[] ret = ReportisticaHelper.getReportDistribuzioneAzione(body, env);

  420.             context.getLogger().info("Invocazione completata con successo");
  421.             return ret;
  422.         } catch (javax.ws.rs.WebApplicationException e) {
  423.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  424.             throw e;
  425.         } catch (Throwable e) {
  426.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  427.             throw FaultCode.ERRORE_INTERNO.toException(e);
  428.         }
  429.     }

  430.     /**
  431.      * Genera un report statistico organizzato per Azioni utilizzando una ricerca
  432.      * semplice
  433.      *
  434.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  435.      * report statistico per azione esportandolo nei formati più comuni
  436.      *
  437.      */
  438.     @Override
  439.     public byte[] getReportDistribuzioneAzioneBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  440.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  441.             String nomeServizio, String tipoServizio, Integer versioneServizio, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  442.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  443.         IContext context = this.getContext();
  444.         try {
  445.             context.getLogger().info("Invocazione in corso ...");

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

  448.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  449.             RicercaStatisticaDistribuzioneAzione ricerca = new RicercaStatisticaDistribuzioneAzione();
  450.             ricerca.setTipo(tipo);
  451.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  452.                     env, uriApiImplementata));
  453.             FiltroTemporale intervallo = new FiltroTemporale();
  454.             intervallo.setDataInizio(dataInizio);
  455.             intervallo.setDataFine(dataFine);

  456.             ricerca.setIntervalloTemporale(intervallo);
  457.             ricerca.setUnitaTempo(unitaTempo);
  458.             ricerca.setTipo(tipo);
  459.             ricerca.setIdCluster(idCluster);

  460.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  461.             opzioni.setFormato(formatoReport);
  462.             opzioni.setTipo(tipoReport);
  463.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  464.             ricerca.setReport(opzioni);

  465.             ricerca.setTag(tag);
  466.            
  467.             if (esito != null || escludiScartate!=null) {
  468.                 FiltroEsito filtroEsito = new FiltroEsito();
  469.                 if(esito!=null) {
  470.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  471.                 }
  472.                 else {
  473.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  474.                 }
  475.                 if(escludiScartate!=null) {
  476.                     filtroEsito.setEscludiScartate(escludiScartate);
  477.                 }
  478.                 ricerca.setEsito(filtroEsito);
  479.             }

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

  482.             return ret;
  483.         } catch (javax.ws.rs.WebApplicationException e) {
  484.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  485.             throw e;
  486.         } catch (Throwable e) {
  487.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  488.             throw FaultCode.ERRORE_INTERNO.toException(e);
  489.         }
  490.     }

  491.    
  492.     /**
  493.      * Genera un report statistico distribuito per esiti di errore utilizzando una ricerca articolata
  494.      *
  495.      * Questa operazione consente di generare un report statistico raggruppato distribuito per esiti di errore ed esportandolo nei formati più comuni
  496.      *
  497.      */
  498.     @Override
  499.     public byte[] getReportDistribuzioneErroriByFullSearch(RicercaStatisticaDistribuzioneErrori body, ProfiloEnum profilo, String soggetto) {
  500.         IContext context = this.getContext();
  501.         try {
  502.             context.getLogger().info("Invocazione in corso ...");    

  503.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  504.             context.getLogger().debug("Autorizzazione completata con successo");    
  505.                        
  506.             BaseHelper.throwIfNull(body);
  507.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  508.             byte[] ret = ReportisticaHelper.getReportDistribuzioneErrori(body, env);
  509.        
  510.             context.getLogger().info("Invocazione completata con successo");
  511.             return ret;
  512.      
  513.         }
  514.         catch(javax.ws.rs.WebApplicationException e) {
  515.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  516.             throw e;
  517.         }
  518.         catch(Throwable e) {
  519.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  520.             throw FaultCode.ERRORE_INTERNO.toException(e);
  521.         }
  522.     }
  523.    
  524.     /**
  525.      * Genera un report statistico organizzato per esiti di errore utilizzando una ricerca semplice
  526.      *
  527.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un report statistico per esiti di errore esportandolo nei formati più comuni
  528.      *
  529.      */
  530.     @Override
  531.     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,
  532.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {
  533.         IContext context = this.getContext();
  534.         try {
  535.             context.getLogger().info("Invocazione in corso ...");    

  536.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  537.             context.getLogger().debug("Autorizzazione completata con successo");    
  538.                        
  539.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  540.             RicercaStatisticaDistribuzioneErrori ricerca = new RicercaStatisticaDistribuzioneErrori();
  541.             ricerca.setTipo(tipo);
  542.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  543.                     env, uriApiImplementata));
  544.             ricerca.setAzione(azione);
  545.            
  546.             FiltroTemporale intervallo = new FiltroTemporale();
  547.             intervallo.setDataInizio(dataInizio);
  548.             intervallo.setDataFine(dataFine);

  549.             ricerca.setIntervalloTemporale(intervallo);
  550.             ricerca.setUnitaTempo(unitaTempo);
  551.             ricerca.setTipo(tipo);
  552.             ricerca.setIdCluster(idCluster);

  553.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  554.             opzioni.setFormato(formatoReport);
  555.             opzioni.setTipo(tipoReport);
  556.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  557.             ricerca.setReport(opzioni);

  558.             ricerca.setTag(tag);
  559.            
  560.             if (esito != null || escludiScartate!=null) {
  561.                 FiltroEsito filtroEsito = new FiltroEsito();
  562.                 if(esito!=null) {
  563.                     EsitoTransazioneFullSearchEnum esitoT = EsitoTransazioneFullSearchEnum.valueOf(esito.name());
  564.                     filtroEsito.setTipo(esitoT);
  565.                 }
  566.                 else {
  567.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.FALLITE_E_FAULT);
  568.                 }
  569.                 if(escludiScartate!=null) {
  570.                     filtroEsito.setEscludiScartate(escludiScartate);
  571.                 }
  572.                 ricerca.setEsito(filtroEsito);
  573.             }

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

  576.             return ret;
  577.      
  578.         }
  579.         catch(javax.ws.rs.WebApplicationException e) {
  580.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  581.             throw e;
  582.         }
  583.         catch(Throwable e) {
  584.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  585.             throw FaultCode.ERRORE_INTERNO.toException(e);
  586.         }
  587.     }
  588.    

  589.     /**
  590.      * Genera un report statistico per andamento esiti per mezzo di una ricerca
  591.      * articolata
  592.      *
  593.      * Questa operazione consente di generare un report statistico per andamento
  594.      * esiti esportandolo nei formati più comuni
  595.      *
  596.      */
  597.     @Override
  598.     public byte[] getReportDistribuzioneEsitiByFullSearch(RicercaStatisticaDistribuzioneEsiti body, ProfiloEnum profilo,
  599.             String soggetto) {
  600.         IContext context = this.getContext();
  601.         try {
  602.             context.getLogger().info("Invocazione in corso ...");

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

  605.             BaseHelper.throwIfNull(body);
  606.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  607.             byte[] ret = ReportisticaHelper.getReportDistribuzioneEsiti(body, env);

  608.             context.getLogger().info("Invocazione completata con successo");
  609.             return ret;

  610.         } catch (javax.ws.rs.WebApplicationException e) {
  611.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  612.             throw e;
  613.         } catch (Throwable e) {
  614.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  615.             throw FaultCode.ERRORE_INTERNO.toException(e);
  616.         }
  617.     }

  618.     /**
  619.      * Genera un report statistico per andamento esiti per mezzo di una ricerca
  620.      * semplice
  621.      *
  622.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  623.      * report statistico per andamento esiti esportandolo nei formati più comuni
  624.      *
  625.      */
  626.     @Override
  627.     public byte[] getReportDistribuzioneEsitiBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  628.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  629.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport) {

  630.         IContext context = this.getContext();
  631.         try {
  632.             context.getLogger().info("Invocazione in corso ...");

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

  635.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  636.             RicercaStatisticaDistribuzioneEsiti ricerca = new RicercaStatisticaDistribuzioneEsiti();
  637.             ricerca.setTipo(tipo);
  638.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  639.                     env, uriApiImplementata));
  640.             ricerca.setAzione(azione);

  641.             FiltroTemporale intervallo = new FiltroTemporale();
  642.             intervallo.setDataInizio(dataInizio);
  643.             intervallo.setDataFine(dataFine);

  644.             ricerca.setIntervalloTemporale(intervallo);
  645.             ricerca.setUnitaTempo(unitaTempo);
  646.             ricerca.setTipo(tipo);
  647.             ricerca.setIdCluster(idCluster);

  648.             OpzioniGenerazioneReport opzioni = new OpzioniGenerazioneReport();
  649.             opzioni.setFormato(formatoReport);
  650.             opzioni.setTipo(tipoReport);
  651.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, null, null);      
  652.             ricerca.setReport(opzioni);

  653.             ricerca.setTag(tag);
  654.            
  655.             byte[] ret = ReportisticaHelper.getReportDistribuzioneEsiti(ricerca, env);
  656.             context.getLogger().info("Invocazione completata con successo");

  657.             return ret;
  658.         } catch (javax.ws.rs.WebApplicationException e) {
  659.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  660.             throw e;
  661.         } catch (Throwable e) {
  662.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  663.             throw FaultCode.ERRORE_INTERNO.toException(e);
  664.         }
  665.     }

  666.     /**
  667.      * Genera un report statistico per identificativo autenticato utilizzando una
  668.      * ricerca articolata
  669.      *
  670.      * Questa operazione consente di generare un report statistico raggruppato per
  671.      * identificativo autenticato ed esportandolo nei formati più comuni
  672.      *
  673.      */
  674.     @Override
  675.     public byte[] getReportDistribuzioneIdAutenticatoByFullSearch(RicercaStatisticaDistribuzioneApplicativo body,
  676.             ProfiloEnum profilo, String soggetto) {
  677.         IContext context = this.getContext();
  678.         try {
  679.             context.getLogger().info("Invocazione in corso ...");

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

  682.             BaseHelper.throwIfNull(body);
  683.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  684.             byte[] ret = ReportisticaHelper.getReportDistribuzioneIdAutenticato(body, env);

  685.             context.getLogger().info("Invocazione completata con successo");
  686.             return ret;
  687.         } catch (javax.ws.rs.WebApplicationException e) {
  688.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  689.             throw e;
  690.         } catch (Throwable e) {
  691.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  692.             throw FaultCode.ERRORE_INTERNO.toException(e);
  693.         }
  694.     }

  695.     /**
  696.      * Genera un report statistico organizzato per Identificativo Autenticato
  697.      * utilizzando una ricerca semplice
  698.      *
  699.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  700.      * report statistico per identificativo autenticato esportandolo nei formati più
  701.      * comuni
  702.      *
  703.      */
  704.     @Override
  705.     public byte[] getReportDistribuzioneIdAutenticatoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  706.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  707.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  708.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  709.         IContext context = this.getContext();
  710.         try {
  711.             context.getLogger().info("Invocazione in corso ...");

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

  714.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  715.             RicercaStatisticaDistribuzioneApplicativo ricerca = new RicercaStatisticaDistribuzioneApplicativo();
  716.             ricerca.setTipo(tipo);
  717.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  718.                     env, uriApiImplementata));
  719.             ricerca.setAzione(azione);

  720.             FiltroTemporale intervallo = new FiltroTemporale();
  721.             intervallo.setDataInizio(dataInizio);
  722.             intervallo.setDataFine(dataFine);

  723.             ricerca.setIntervalloTemporale(intervallo);
  724.             ricerca.setUnitaTempo(unitaTempo);
  725.             ricerca.setTipo(tipo);
  726.             ricerca.setIdCluster(idCluster);

  727.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  728.             opzioni.setFormato(formatoReport);
  729.             opzioni.setTipo(tipoReport);
  730.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  731.             ricerca.setReport(opzioni);

  732.             ricerca.setTag(tag);
  733.            
  734.             if (esito != null || escludiScartate!=null) {
  735.                 FiltroEsito filtroEsito = new FiltroEsito();
  736.                 if(esito!=null) {
  737.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  738.                 }
  739.                 else {
  740.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  741.                 }
  742.                 if(escludiScartate!=null) {
  743.                     filtroEsito.setEscludiScartate(escludiScartate);
  744.                 }
  745.                 ricerca.setEsito(filtroEsito);
  746.             }

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

  749.             return ret;

  750.         } catch (javax.ws.rs.WebApplicationException e) {
  751.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  752.             throw e;
  753.         } catch (Throwable e) {
  754.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  755.             throw FaultCode.ERRORE_INTERNO.toException(e);
  756.         }
  757.     }

  758.     /**
  759.      * Genera un report statistico raggruppato per soggetto locale per mezzo di una
  760.      * ricerca articolata
  761.      *
  762.      * Questa operazione consente di generare un report statistico raggruppato per
  763.      * soggetto locale esportandolo nei formati più comuni
  764.      *
  765.      */
  766.     @Override
  767.     public byte[] getReportDistribuzioneSoggettoLocaleByFullSearch(RicercaStatisticaDistribuzioneSoggettoLocale body,
  768.             ProfiloEnum profilo) {
  769.         IContext context = this.getContext();
  770.         try {
  771.             context.getLogger().info("Invocazione in corso ...");


  772.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  773.             context.getLogger().debug("Autorizzazione completata con successo");
  774.             BaseHelper.throwIfNull(body);
  775.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, null, this.log);
  776.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoLocale(body, env);
  777.             context.getLogger().info("Invocazione completata con successo");
  778.             return ret;
  779.         } catch (javax.ws.rs.WebApplicationException e) {
  780.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  781.             throw e;
  782.         } catch (Throwable e) {
  783.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  784.             throw FaultCode.ERRORE_INTERNO.toException(e);
  785.         }
  786.     }

  787.     /**
  788.      * Genera un report statistico per soggetto locale per mezzo di una ricerca
  789.      * semplice
  790.      *
  791.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  792.      * report statistico per soggetto locale esportandolo nei formati più comuni
  793.      *
  794.      */
  795.     @Override
  796.     public byte[] getReportDistribuzioneSoggettoLocaleBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  797.             ProfiloEnum profilo, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  798.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  799.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  800.         IContext context = this.getContext();
  801.         try {
  802.             context.getLogger().info("Invocazione in corso ...");

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

  806.             RicercaStatisticaDistribuzioneSoggettoLocale ricerca = new RicercaStatisticaDistribuzioneSoggettoLocale();
  807.             ricerca.setTipo(tipo);
  808.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto,soggettoErogatore,
  809.                     env, uriApiImplementata));
  810.             FiltroTemporale intervallo = new FiltroTemporale();
  811.             intervallo.setDataInizio(dataInizio);
  812.             intervallo.setDataFine(dataFine);

  813.             ricerca.setIntervalloTemporale(intervallo);
  814.             ricerca.setUnitaTempo(unitaTempo);
  815.             ricerca.setTipo(tipo);
  816.             ricerca.setIdCluster(idCluster);

  817.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  818.             opzioni.setFormato(formatoReport);
  819.             opzioni.setTipo(tipoReport);
  820.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  821.             ricerca.setReport(opzioni);

  822.             ricerca.setTag(tag);
  823.            
  824.             if (esito != null || escludiScartate!=null) {
  825.                 FiltroEsito filtroEsito = new FiltroEsito();
  826.                 if(esito!=null) {
  827.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  828.                 }
  829.                 else {
  830.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  831.                 }
  832.                 if(escludiScartate!=null) {
  833.                     filtroEsito.setEscludiScartate(escludiScartate);
  834.                 }
  835.                 ricerca.setEsito(filtroEsito);
  836.             }

  837.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoLocale(ricerca, env);
  838.             context.getLogger().info("Invocazione completata con successo");
  839.             return ret;
  840.         } catch (javax.ws.rs.WebApplicationException e) {
  841.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  842.             throw e;
  843.         } catch (Throwable e) {
  844.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  845.             throw FaultCode.ERRORE_INTERNO.toException(e);
  846.         }
  847.     }

  848.     /**
  849.      * Genera un report statistico raggruppato per soggetto remoto per mezzo di una
  850.      * ricerca articolata
  851.      *
  852.      * Questa operazione consente di generare un report statistico raggruppato per
  853.      * soggetto remoto esportandolo nei formati più comuni
  854.      *
  855.      */
  856.     @Override
  857.     public byte[] getReportDistribuzioneSoggettoRemotoByFullSearch(RicercaStatisticaDistribuzioneSoggettoRemoto body,
  858.             ProfiloEnum profilo, String soggetto) {
  859.         IContext context = this.getContext();
  860.         try {
  861.             context.getLogger().info("Invocazione in corso ...");

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

  864.             BaseHelper.throwIfNull(body);
  865.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  866.             byte[] ret = ReportisticaHelper.getReportDistribuzioneSoggettoRemoto(body, env);

  867.             context.getLogger().info("Invocazione completata con successo");
  868.             return ret;
  869.         } catch (javax.ws.rs.WebApplicationException e) {
  870.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  871.             throw e;
  872.         } catch (Throwable e) {
  873.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  874.             throw FaultCode.ERRORE_INTERNO.toException(e);
  875.         }
  876.     }

  877.     /**
  878.      * Genera un report statistico per soggetto remoto per mezzo di una ricerca
  879.      * semplice
  880.      *
  881.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  882.      * report statistico per soggetto remoto esportandolo nei formati più comuni
  883.      *
  884.      */
  885.     @Override
  886.     public byte[] getReportDistribuzioneSoggettoRemotoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  887.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoErogatore, String tag, String uriApiImplementata,
  888.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  889.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  890.         IContext context = this.getContext();
  891.         try {
  892.             context.getLogger().info("Invocazione in corso ...");

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

  895.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  896.             RicercaStatisticaDistribuzioneSoggettoRemoto ricerca = new RicercaStatisticaDistribuzioneSoggettoRemoto();
  897.             ricerca.setTipo(tipo);
  898.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoErogatore, null,
  899.                     env, uriApiImplementata));
  900.             ricerca.setAzione(azione);

  901.             FiltroTemporale intervallo = new FiltroTemporale();
  902.             intervallo.setDataInizio(dataInizio);
  903.             intervallo.setDataFine(dataFine);

  904.             ricerca.setIntervalloTemporale(intervallo);
  905.             ricerca.setUnitaTempo(unitaTempo);
  906.             ricerca.setTipo(tipo);
  907.             ricerca.setIdCluster(idCluster);

  908.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  909.             opzioni.setFormato(formatoReport);
  910.             opzioni.setTipo(tipoReport);
  911.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  912.             ricerca.setReport(opzioni);

  913.             ricerca.setTag(tag);
  914.            
  915.             if (esito != null || escludiScartate!=null) {
  916.                 FiltroEsito filtroEsito = new FiltroEsito();
  917.                 if(esito!=null) {
  918.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  919.                 }
  920.                 else {
  921.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  922.                 }
  923.                 if(escludiScartate!=null) {
  924.                     filtroEsito.setEscludiScartate(escludiScartate);
  925.                 }
  926.                 ricerca.setEsito(filtroEsito);
  927.             }

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

  930.             return ret;

  931.         } catch (javax.ws.rs.WebApplicationException e) {
  932.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  933.             throw e;
  934.         } catch (Throwable e) {
  935.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  936.             throw FaultCode.ERRORE_INTERNO.toException(e);
  937.         }
  938.     }

  939.     /**
  940.      * Genera un report statistico per andamento temporale per mezzo di una ricerca
  941.      * articolata
  942.      *
  943.      * Questa operazione consente di generare un report statistico per andamento
  944.      * temporale esportandolo nei formati più comuni
  945.      *
  946.      */
  947.     @Override
  948.     public byte[] getReportDistribuzioneTemporaleByFullSearch(RicercaStatisticaAndamentoTemporale body,
  949.             ProfiloEnum profilo, String soggetto) {
  950.         IContext context = this.getContext();
  951.         try {
  952.             context.getLogger().info("Invocazione in corso ...");

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

  955.             BaseHelper.throwIfNull(body);
  956.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  957.             byte[] ret = ReportisticaHelper.getReportDistribuzioneTemporale(body, env);

  958.             context.getLogger().info("Invocazione completata con successo");
  959.             return ret;
  960.         } catch (javax.ws.rs.WebApplicationException e) {
  961.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  962.             throw e;
  963.         } catch (Throwable e) {
  964.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  965.             throw FaultCode.ERRORE_INTERNO.toException(e);
  966.         }
  967.     }

  968.     /**
  969.      * Genera un report statistico per andamento temporale per mezzo di una ricerca
  970.      * semplice
  971.      *
  972.      * Questa operazione consente di generare per mezzo di una ricerca semplice, un
  973.      * report statistico per andamento temporale esportandolo nei formati più comuni
  974.      *
  975.      */
  976.     @Override
  977.     public byte[] getReportDistribuzioneTemporaleBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  978.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  979.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport) {

  980.         IContext context = this.getContext();
  981.         try {
  982.             context.getLogger().info("Invocazione in corso ...");

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

  985.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  986.             RicercaStatisticaAndamentoTemporale ricerca = new RicercaStatisticaAndamentoTemporale();
  987.             ricerca.setTipo(tipo);
  988.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  989.                     env, uriApiImplementata));
  990.             ricerca.setAzione(azione);

  991.             FiltroTemporale intervallo = new FiltroTemporale();
  992.             intervallo.setDataInizio(dataInizio);
  993.             intervallo.setDataFine(dataFine);

  994.             ricerca.setIntervalloTemporale(intervallo);
  995.             ricerca.setUnitaTempo(unitaTempo);
  996.             ricerca.setTipo(tipo);
  997.             ricerca.setIdCluster(idCluster);

  998.             OpzioniGenerazioneReportMultiLine opzioni = new OpzioniGenerazioneReportMultiLine();
  999.             opzioni.setFormato(formatoReport);
  1000.             opzioni.setTipo(tipoReport);
  1001.             ReportisticaHelper.setTipoInformazioneReportMultiLine(opzioni, tipoInformazioneReport);    
  1002.             ricerca.setReport(opzioni);

  1003.             ricerca.setTag(tag);
  1004.            
  1005.             if (esito != null || escludiScartate!=null) {
  1006.                 FiltroEsito filtroEsito = new FiltroEsito();
  1007.                 if(esito!=null) {
  1008.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  1009.                 }
  1010.                 else {
  1011.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  1012.                 }
  1013.                 if(escludiScartate!=null) {
  1014.                     filtroEsito.setEscludiScartate(escludiScartate);
  1015.                 }
  1016.                 ricerca.setEsito(filtroEsito);
  1017.             }

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

  1020.             return ret;

  1021.         } catch (javax.ws.rs.WebApplicationException e) {
  1022.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1023.             throw e;
  1024.         } catch (Throwable e) {
  1025.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1026.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1027.         }
  1028.     }

  1029.     /**
  1030.      * Genera un report statistico organizzato per Token Info
  1031.      *
  1032.      * Consente di generare un report raggruppato secondo un claim del token
  1033.      *
  1034.      */
  1035.     @Override
  1036.     public byte[] getReportDistribuzioneTokenInfoByFullSearch(RicercaStatisticaDistribuzioneTokenInfo body,
  1037.             ProfiloEnum profilo, String soggetto) {
  1038.         IContext context = this.getContext();
  1039.         try {
  1040.             context.getLogger().info("Invocazione in corso ...");

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

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

  1045.             byte[] ret = ReportisticaHelper.getReportDistribuzioneTokenInfo(body, env);
  1046.             context.getLogger().info("Invocazione completata con successo");
  1047.             return ret;
  1048.         } catch (javax.ws.rs.WebApplicationException e) {
  1049.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1050.             throw e;
  1051.         } catch (Throwable e) {
  1052.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1053.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1054.         }
  1055.     }

  1056.     /**
  1057.      * Genera un report statistico organizzato organizzato per Token Info
  1058.      * utilizzando una ricerca semplice
  1059.      *
  1060.      * Consente di generare un report raggruppato secondo un claim del token per
  1061.      * mezzo di una ricerca semplice
  1062.      *
  1063.      */
  1064.     @Override
  1065.     public byte[] getReportDistribuzioneTokenInfoBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  1066.             TokenClaimDistribuzioneStatisticaEnum claim, ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  1067.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  1068.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  1069.         IContext context = this.getContext();
  1070.         try {
  1071.             context.getLogger().info("Invocazione in corso ...");

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

  1074.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  1075.             RicercaStatisticaDistribuzioneTokenInfo ricerca = new RicercaStatisticaDistribuzioneTokenInfo();
  1076.             ricerca.setTipo(tipo);
  1077.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  1078.                     env, uriApiImplementata));
  1079.             ricerca.setAzione(azione);

  1080.             FiltroTemporale intervallo = new FiltroTemporale();
  1081.             intervallo.setDataInizio(dataInizio);
  1082.             intervallo.setDataFine(dataFine);

  1083.             ricerca.setIntervalloTemporale(intervallo);
  1084.             ricerca.setUnitaTempo(unitaTempo);
  1085.             ricerca.setTipo(tipo);
  1086.             ricerca.setIdCluster(idCluster);

  1087.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  1088.             opzioni.setFormato(formatoReport);
  1089.             opzioni.setTipo(tipoReport);
  1090.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  1091.             ricerca.setReport(opzioni);

  1092.             ricerca.setTag(tag);
  1093.            
  1094.             if (esito != null || escludiScartate!=null) {
  1095.                 FiltroEsito filtroEsito = new FiltroEsito();
  1096.                 if(esito!=null) {
  1097.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  1098.                 }
  1099.                 else {
  1100.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  1101.                 }
  1102.                 if(escludiScartate!=null) {
  1103.                     filtroEsito.setEscludiScartate(escludiScartate);
  1104.                 }
  1105.                 ricerca.setEsito(filtroEsito);
  1106.             }

  1107.             ricerca.setClaim(claim);

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

  1110.             return ret;
  1111.         } catch (javax.ws.rs.WebApplicationException e) {
  1112.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1113.             throw e;
  1114.         } catch (Throwable e) {
  1115.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1116.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1117.         }
  1118.     }

  1119.    
  1120.      /**
  1121.      * Genera un report statistico organizzato per Indirizzi IP
  1122.      *
  1123.      * Consente di generare un report degli indirizzo IP
  1124.      *
  1125.      */
  1126.     @Override
  1127.     public byte[] getReportDistribuzioneIndirizzoIPByFullSearch(RicercaStatisticaDistribuzioneApplicativo body, ProfiloEnum profilo, String soggetto) {
  1128.         IContext context = this.getContext();
  1129.         try {
  1130.             context.getLogger().info("Invocazione in corso ...");

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

  1133.             BaseHelper.throwIfNull(body);
  1134.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  1135.             byte[] ret = ReportisticaHelper.getReportDistribuzioneIndirizzoIP(body, env);

  1136.             context.getLogger().info("Invocazione completata con successo");
  1137.             return ret;
  1138.         } catch (javax.ws.rs.WebApplicationException e) {
  1139.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1140.             throw e;
  1141.         } catch (Throwable e) {
  1142.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1143.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1144.         }
  1145.     }

  1146.     /**
  1147.      * Genera un report statistico organizzato organizzato per Indirizzo IP utilizzando una ricerca semplice
  1148.      *
  1149.      * Consente di generare un report degli indirizzo IP per mezzo di una ricerca semplice
  1150.      *
  1151.      */
  1152.     @Override
  1153.     public byte[] getReportDistribuzioneIndirizzoIPBySimpleSearch(DateTime dataInizio, DateTime dataFine, FiltroRicercaRuoloTransazioneEnum tipo, FormatoReportEnum formatoReport,
  1154.             ProfiloEnum profilo, String soggetto, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  1155.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate, UnitaTempoReportEnum unitaTempo, TipoReportEnum tipoReport, TipoInformazioneReportEnum tipoInformazioneReport,
  1156.             DimensioniReportEnum dimensioniReport, DimensioniReportCustomEnum dimensioniReportCustomInfo) {

  1157.         IContext context = this.getContext();
  1158.         try {
  1159.             context.getLogger().info("Invocazione in corso ...");

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

  1162.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  1163.             RicercaStatisticaDistribuzioneApplicativo ricerca = new RicercaStatisticaDistribuzioneApplicativo();
  1164.             ricerca.setTipo(tipo);
  1165.             ricerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  1166.                     env, uriApiImplementata));
  1167.             ricerca.setAzione(azione);

  1168.             FiltroTemporale intervallo = new FiltroTemporale();
  1169.             intervallo.setDataInizio(dataInizio);
  1170.             intervallo.setDataFine(dataFine);

  1171.             ricerca.setIntervalloTemporale(intervallo);
  1172.             ricerca.setUnitaTempo(unitaTempo);
  1173.             ricerca.setTipo(tipo);
  1174.             ricerca.setIdCluster(idCluster);

  1175.             OpzioniGenerazioneReportDimensioni opzioni = new OpzioniGenerazioneReportDimensioni();
  1176.             opzioni.setFormato(formatoReport);
  1177.             opzioni.setTipo(tipoReport);
  1178.             ReportisticaHelper.setTipoInformazioneReport(opzioni, tipoInformazioneReport, dimensioniReport, dimensioniReportCustomInfo);        
  1179.             ricerca.setReport(opzioni);

  1180.             ricerca.setTag(tag);
  1181.            
  1182.             if (esito != null || escludiScartate!=null) {
  1183.                 FiltroEsito filtroEsito = new FiltroEsito();
  1184.                 if(esito!=null) {
  1185.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  1186.                 }
  1187.                 else {
  1188.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  1189.                 }
  1190.                 if(escludiScartate!=null) {
  1191.                     filtroEsito.setEscludiScartate(escludiScartate);
  1192.                 }
  1193.                 ricerca.setEsito(filtroEsito);
  1194.             }

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

  1197.             return ret;

  1198.         } catch (javax.ws.rs.WebApplicationException e) {
  1199.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1200.             throw e;
  1201.         } catch (Throwable e) {
  1202.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1203.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1204.         }
  1205.     }

  1206.    
  1207.    
  1208.     /**
  1209.      * Ottieni le informazioni generali sulle implementazioni di un Api
  1210.      *
  1211.      * Recupera le informazioni generali di una Api, come il nome e il numero di
  1212.      * erogazioni e fruizioni registrate per esso
  1213.      *
  1214.      */
  1215.     @Override
  1216.     public InfoImplementazioneApi getRiepilogoApi(TransazioneRuoloEnum tipo, String nomeServizio, ProfiloEnum profilo,
  1217.             String soggetto, String soggettoRemoto, String tipoServizio, Integer versioneServizio) {
  1218.         IContext context = this.getContext();
  1219.         try {
  1220.             context.getLogger().info("Invocazione in corso ...");

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

  1223.             DBManager dbManager = DBManager.getInstance();
  1224.             Connection connection = null;
  1225.             try {
  1226.                 connection = dbManager.getConnectionConfig();
  1227.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1228.                 ConfigurazioniGeneraliService configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp,
  1229.                         LoggerProperties.getLoggerDAO());

  1230.                 ServerProperties serverProperties = ServerProperties.getInstance();
  1231.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  1232.                 ConfigurazioniGeneraliSearchForm search = searchFormUtilities.getConfigurazioniGeneraliSearchForm(context,
  1233.                         profilo, soggetto, tipo);
  1234.                 IDServizio idServizio = Converter.toIDServizio(tipo, profilo, soggetto, soggettoRemoto, nomeServizio,
  1235.                         tipoServizio, versioneServizio);
  1236.                 if (idServizio != null && idServizio.getNome() != null && !"".equals(idServizio.getNome())) {
  1237.                     search.setNomeServizio(ParseUtility.convertToServizioSoggetto(idServizio));
  1238.                 }
  1239.                 configurazioniService.setSearch(search);

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

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

  1244.                 context.getLogger().info("Invocazione completata con successo");
  1245.                 return info;
  1246.             } finally {
  1247.                 dbManager.releaseConnectionConfig(connection);
  1248.             }

  1249.         } catch (javax.ws.rs.WebApplicationException e) {
  1250.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1251.             throw e;
  1252.         } catch (Throwable e) {
  1253.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1254.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1255.         }
  1256.     }

  1257.     /**
  1258.      * Ottieni le informazioni generali sulle api e servizi di un soggetto
  1259.      *
  1260.      * Restituisce il numero e tipo di api che coinvolgono il soggetto, e un
  1261.      * riepilogo del registro circa i soggetti e gli applicativi registrati.
  1262.      *
  1263.      */
  1264.     @Override
  1265.     public Riepilogo getRiepologoConfigurazioni(ProfiloEnum profilo, String soggetto) {
  1266.         IContext context = this.getContext();
  1267.         try {
  1268.             context.getLogger().info("Invocazione in corso ...");

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

  1271.             DBManager dbManager = DBManager.getInstance();
  1272.             Connection connection = null;
  1273.             try {
  1274.                 connection = dbManager.getConnectionConfig();
  1275.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesConfig();
  1276.                 ConfigurazioniGeneraliService configurazioniService = new ConfigurazioniGeneraliService(connection, true, smp,
  1277.                         LoggerProperties.getLoggerDAO());

  1278.                 ServerProperties serverProperties = ServerProperties.getInstance();
  1279.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();

  1280.                 ConfigurazioniGeneraliSearchForm search = searchFormUtilities.getConfigurazioniGeneraliSearchForm(context,
  1281.                         profilo, soggetto, null);
  1282.                 configurazioniService.setSearch(search);

  1283.                 List<ConfigurazioneGenerale> listDB_infoGenerali_right = configurazioniService.findAllInformazioniGenerali();
  1284.                 List<ConfigurazioneGenerale> listDB_infoServizi_left = configurazioniService.findAllInformazioniServizi();
  1285.                 ConfigurazioneGenerale soggettiOperativi = configurazioniService.getSoggettiOperativi();
  1286.                 if (serverProperties.isFindall404()
  1287.                         && (listDB_infoGenerali_right == null || listDB_infoGenerali_right.isEmpty())
  1288.                         && (listDB_infoServizi_left == null || listDB_infoServizi_left.isEmpty()))
  1289.                     throw FaultCode.NOT_FOUND.toException("Nessuna configurazione trovata corrispondente ai criteri di ricerca");

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

  1291.                 context.getLogger().info("Invocazione completata con successo");
  1292.                 return riepilogo;
  1293.             } finally {
  1294.                 dbManager.releaseConnectionConfig(connection);
  1295.             }

  1296.         } catch (javax.ws.rs.WebApplicationException e) {
  1297.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  1298.             throw e;
  1299.         } catch (Throwable e) {
  1300.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  1301.             throw FaultCode.ERRORE_INTERNO.toException(e);
  1302.         }
  1303.     }

  1304. }