MonitoraggioApiServiceImpl.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.UUID;

  24. import org.apache.commons.lang3.BooleanUtils;
  25. import org.joda.time.DateTime;
  26. import org.openspcoop2.core.monitor.rs.server.api.MonitoraggioApi;
  27. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.Converter;
  28. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.Enums;
  29. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.MonitoraggioEnv;
  30. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.ReportisticaHelper;
  31. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.SearchFormUtilities;
  32. import org.openspcoop2.core.monitor.rs.server.api.impl.utils.TransazioniHelper;
  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.DetailTransazione;
  37. import org.openspcoop2.core.monitor.rs.server.model.EsitoTransazioneFullSearchEnum;
  38. import org.openspcoop2.core.monitor.rs.server.model.EsitoTransazioneSimpleSearchEnum;
  39. import org.openspcoop2.core.monitor.rs.server.model.Evento;
  40. import org.openspcoop2.core.monitor.rs.server.model.FiltroEsito;
  41. import org.openspcoop2.core.monitor.rs.server.model.FiltroRicercaRuoloTransazioneEnum;
  42. import org.openspcoop2.core.monitor.rs.server.model.FiltroTemporale;
  43. import org.openspcoop2.core.monitor.rs.server.model.ListaEventi;
  44. import org.openspcoop2.core.monitor.rs.server.model.ListaTransazioni;
  45. import org.openspcoop2.core.monitor.rs.server.model.RicercaIdApplicativo;
  46. import org.openspcoop2.core.monitor.rs.server.model.RicercaIntervalloTemporale;
  47. import org.openspcoop2.core.monitor.rs.server.model.TipoIdApplicativoEnum;
  48. import org.openspcoop2.core.monitor.rs.server.model.TipoMessaggioEnum;
  49. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  50. import org.openspcoop2.utils.service.BaseImpl;
  51. import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
  52. import org.openspcoop2.utils.service.authorization.AuthorizationManager;
  53. import org.openspcoop2.utils.service.beans.DiagnosticoSeveritaEnum;
  54. import org.openspcoop2.utils.service.beans.FiltroRicercaId;
  55. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  56. import org.openspcoop2.utils.service.beans.utils.BaseHelper;
  57. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  58. import org.openspcoop2.utils.service.context.IContext;
  59. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  60. import org.openspcoop2.web.monitor.core.constants.CaseSensitiveMatch;
  61. import org.openspcoop2.web.monitor.core.constants.TipoMatch;
  62. import org.openspcoop2.web.monitor.eventi.bean.EventiSearchForm;
  63. import org.openspcoop2.web.monitor.eventi.bean.EventoBean;
  64. import org.openspcoop2.web.monitor.eventi.dao.EventiService;
  65. import org.openspcoop2.web.monitor.transazioni.bean.TransazioneBean;
  66. import org.openspcoop2.web.monitor.transazioni.bean.TransazioniSearchForm;
  67. import org.openspcoop2.web.monitor.transazioni.dao.TransazioniService;

  68. /**
  69.  * MonitoraggioApiServiceImpl
  70.  *
  71.  * @author $Author$
  72.  * @version $Rev$, $Date$
  73.  */
  74. public class MonitoraggioApiServiceImpl extends BaseImpl implements MonitoraggioApi {

  75.     public MonitoraggioApiServiceImpl(){
  76.         super(org.slf4j.LoggerFactory.getLogger(MonitoraggioApiServiceImpl.class));
  77.     }

  78.     private AuthorizationConfig getAuthorizationConfig() throws Exception{
  79.         return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
  80.     }

  81.     /**
  82.      * Ricerca di Eventi
  83.      *
  84.      * Questa operazione consente di effettuare una ricerca nell&#x27;archivio degli eventi specificando i criteri di filtraggio
  85.      *
  86.      */
  87.     @Override
  88.     public ListaEventi findAllEventi(DateTime dataInizio, DateTime dataFine, Integer offset, Integer limit, DiagnosticoSeveritaEnum severita, String tipo, String codice, String origine, Boolean ricercaEsatta, Boolean caseSensitive) {
  89.         IContext context = this.getContext();
  90.         try {
  91.             context.getLogger().info("Invocazione in corso ...");    

  92.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  93.             context.getLogger().debug("Autorizzazione completata con successo");    
  94.                        
  95.             DBManager dbManager = DBManager.getInstance();
  96.             Connection connection = null;
  97.             try {
  98.                 connection = dbManager.getConnectionTracce();
  99.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesTracce();
  100.                 EventiService eventiService = new EventiService(connection, true, smp, LoggerProperties.getLoggerDAO());
  101.                
  102.                 ServerProperties serverProperties = ServerProperties.getInstance();
  103.                 SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  104.                
  105.                 EventiSearchForm search = searchFormUtilities.getEventiSearchForm(context, dataInizio, dataFine);
  106.                 search.setCodice(codice);
  107.                 search.setTipo(tipo);
  108.                 search.setSeverita(BaseHelper.evalnull( () -> Enums.toTipoSeverita.get(severita).toString()));
  109.                 search.setCaseSensitiveType( (BooleanUtils.isTrue(caseSensitive) ? CaseSensitiveMatch.SENSITIVE : CaseSensitiveMatch.INSENSITIVE).toString() );
  110.                 search.setMatchingType( (BooleanUtils.isTrue(ricercaEsatta) ? TipoMatch.EQUALS : TipoMatch.LIKE ).toString());
  111.                 search.setIdConfigurazione(origine);
  112.            
  113.                 eventiService.setSearch(search);    
  114.                 List<EventoBean> listEventiDB = eventiService.findAll(Converter.toOffset(offset), Converter.toLimit(limit));
  115.                 ListaEventi ret = ListaUtils.costruisciLista(
  116.                         context.getUriInfo(),
  117.                         Converter.toOffset(offset), Converter.toLimit(limit),
  118.                         listEventiDB!=null ? listEventiDB.size() : 0,
  119.                                 ListaEventi.class
  120.                     );
  121.                
  122.                 if ( serverProperties.isFindall404() && (listEventiDB==null || listEventiDB.isEmpty()) )
  123.                     throw FaultCode.NOT_FOUND.toException("Nessun evento trovato corrispondente ai criteri di ricerca");
  124.                
  125.                 if(listEventiDB!=null && !listEventiDB.isEmpty()) {
  126.                     listEventiDB.forEach( eventoDB ->
  127.                         {
  128.                             try {
  129.                                 ret.addItemsItem( Converter.toEvento(eventoDB, this.log) );
  130.                             } catch (Exception e) {
  131.                                 throw new RuntimeException(e.getMessage(),e);
  132.                             }
  133.                         }
  134.                         );
  135.                 }
  136.        
  137.                 context.getLogger().info("Invocazione completata con successo");
  138.                 return ret;
  139.             }
  140.             finally {
  141.                 dbManager.releaseConnectionTracce(connection);
  142.             }
  143.      
  144.         }
  145.         catch(javax.ws.rs.WebApplicationException e) {
  146.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  147.             throw e;
  148.         }
  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.     /**
  156.      * Ricerca delle transazioni in base all&#x27;identificativo dell&#x27;applicativo
  157.      *
  158.      * Permette di recuperare i dettagli delle transazioni, gestite su GovWay, ricercandole in base all&#x27;identificativo dell&#x27;applicativo
  159.      *
  160.      */
  161.     @Override
  162.     public ListaTransazioni findAllTransazioniByIdApplicativo(TipoIdApplicativoEnum tipoIdentificativo, String id, ProfiloEnum profilo, String soggetto, Integer offset, Integer limit, String sort) {
  163.         IContext context = this.getContext();
  164.         try {
  165.             context.getLogger().info("Invocazione in corso ...");    

  166.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  167.             context.getLogger().debug("Autorizzazione completata con successo");    
  168.                        
  169.             SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  170.             TransazioniSearchForm search = searchFormUtilities.getIdApplicativoBaseSearchForm(context, profilo, soggetto);
  171.            
  172.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  173.             search.setIdCorrelazioneApplicativa(id);
  174.             switch (tipoIdentificativo) {
  175.             case RICHIESTA:
  176.                 search.setTipoIdMessaggio(org.openspcoop2.web.monitor.core.constants.TipoMessaggio.Richiesta.name());
  177.                 break;
  178.             case RISPOSTA:
  179.                 search.setTipoIdMessaggio(org.openspcoop2.web.monitor.core.constants.TipoMessaggio.Risposta.name());
  180.                 break;
  181.             }

  182.             ListaTransazioni ret = TransazioniHelper.searchTransazioni(search, offset, limit, sort, env);        
  183.             context.getLogger().info("Invocazione completata con successo");
  184.             return ret;
  185.      
  186.         }
  187.         catch(javax.ws.rs.WebApplicationException e) {
  188.             context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  189.             throw e;
  190.         }
  191.         catch(Throwable e) {
  192.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  193.             throw FaultCode.ERRORE_INTERNO.toException(e);
  194.         }
  195.     }

  196.     /**
  197.      * Ricerca completa delle transazioni per intervallo temporale
  198.      *
  199.      * Permette di recuperare i dettagli delle transazioni, gestite su GovWay, limitando i risultati di ricerca ad un intervallo di date
  200.      *
  201.      */
  202.     @Override
  203.     public ListaTransazioni findAllTransazioniByFullSearch(RicercaIntervalloTemporale body, ProfiloEnum profilo, String soggetto) {
  204.         IContext context = this.getContext();
  205.        
  206.         try {
  207.             context.getLogger().info("Invocazione in corso ...");    
  208.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  209.             context.getLogger().debug("Autorizzazione completata con successo");    

  210.             BaseHelper.throwIfNull(body);
  211.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  212.            
  213.             ListaTransazioni ret = TransazioniHelper.findAllTransazioni(body, env);
  214.             context.getLogger().info("Invocazione completata con successo");
  215.             return ret;
  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.         }
  221.         catch(Throwable e) {
  222.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  223.             throw FaultCode.ERRORE_INTERNO.toException(e);
  224.         }
  225.     }
  226.    
  227.     /**
  228.      * Ricerca completa delle transazioni in base all&#x27;identificativo applicativo
  229.      *
  230.      * Permette di recuperare i dettagli delle transazioni, gestite su GovWay, ricercandole in base all&#x27;identificativo applicativo e i parametri di filtro completi
  231.      *
  232.      */
  233.     @Override
  234.     public ListaTransazioni findAllTransazioniByIdApplicativoFullSearch(RicercaIdApplicativo body, ProfiloEnum profilo, String soggetto) {
  235.         IContext context = this.getContext();
  236.         try {
  237.             context.getLogger().info("Invocazione in corso ...");    
  238.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  239.             context.getLogger().debug("Autorizzazione completata con successo");                            
  240.            
  241.             BaseHelper.throwIfNull(body);
  242.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);            
  243.             ListaTransazioni ret = TransazioniHelper.findAllTransazioniByIdApplicativo(body, env);
  244.             context.getLogger().info("Invocazione completata con successo");
  245.             return ret;
  246.         }
  247.         catch(javax.ws.rs.WebApplicationException e) {
  248.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  249.             throw e;
  250.         }
  251.         catch(Throwable e) {
  252.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  253.             throw FaultCode.ERRORE_INTERNO.toException(e);
  254.         }
  255.     }
  256.    
  257.     /**
  258.      * Ricerca semplificata delle transazioni in base all&#x27;identificativo applicativo
  259.      *
  260.      * Permette di recuperare i dettagli delle transazioni, gestite su GovWay, ricercandole in base all&#x27;identificativo applicativo e i parametri di filtro di uso più comune
  261.      *
  262.      */
  263.     @Override
  264.     public ListaTransazioni findAllTransazioniByIdApplicativoSimpleSearch(DateTime dataInizio, DateTime dataFine,
  265.             FiltroRicercaRuoloTransazioneEnum tipo, String idApplicativo, ProfiloEnum profilo, String soggetto,
  266.             Integer offset, Integer limit, String sort, String idCluster, String soggettoRemoto,
  267.             String soggettoErogatore, String tag, String uriApiImplementata,
  268.             String nomeServizio, String tipoServizio, Integer versioneServizio,
  269.             String azione, EsitoTransazioneSimpleSearchEnum esito, Boolean escludiScartate,
  270.             Boolean ricercaEsatta, Boolean caseSensitive) {
  271.         IContext context = this.getContext();
  272.         try {
  273.             context.getLogger().info("Invocazione in corso ...");    
  274.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  275.             context.getLogger().debug("Autorizzazione completata con successo");    
  276.                        
  277.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  278.            
  279.             RicercaIdApplicativo bodyRicerca = new RicercaIdApplicativo();
  280.             bodyRicerca.setTipo(tipo);
  281.             bodyRicerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio, soggettoRemoto, soggettoErogatore,
  282.                     env, uriApiImplementata));          
  283.             FiltroTemporale iTemporale = new FiltroTemporale();
  284.             iTemporale.setDataInizio(dataInizio);
  285.             iTemporale.setDataFine(dataFine);
  286.             bodyRicerca.setIntervalloTemporale(iTemporale);
  287.             FiltroRicercaId filtroId = new FiltroRicercaId();
  288.             filtroId.setId(idApplicativo);
  289.             filtroId.setCaseSensitive(caseSensitive);
  290.             filtroId.setRicercaEsatta(ricercaEsatta);
  291.             bodyRicerca.setIdApplicativo(filtroId);
  292.             bodyRicerca.setIdCluster(idCluster);
  293.             bodyRicerca.setTag(tag);
  294.             bodyRicerca.setAzione(azione);
  295.            
  296.             bodyRicerca.setLimit(limit);
  297.             bodyRicerca.setOffset(offset);
  298.             bodyRicerca.setSort(sort);
  299.             if (esito != null || escludiScartate!=null) {
  300.                 FiltroEsito filtroEsito = new FiltroEsito();
  301.                 if(esito!=null) {
  302.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  303.                 }
  304.                 else {
  305.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  306.                 }
  307.                 if(escludiScartate!=null) {
  308.                     filtroEsito.setEscludiScartate(escludiScartate);
  309.                 }
  310.                 bodyRicerca.setEsito(filtroEsito);
  311.             }
  312.            
  313.             ListaTransazioni ret = TransazioniHelper.findAllTransazioniByIdApplicativo(bodyRicerca, env);
  314.             context.getLogger().info("Invocazione completata con successo");
  315.             return ret;
  316.         }
  317.         catch(javax.ws.rs.WebApplicationException e) {
  318.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  319.             throw e;
  320.         }
  321.         catch(Throwable e) {
  322.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  323.             throw FaultCode.ERRORE_INTERNO.toException(e);
  324.         }
  325.     }
  326.    
  327.     /**
  328.      * Ricerca semplificata delle transazioni in base all&#x27;identificativo
  329.      * messaggio
  330.      *
  331.      * Permette di recuperare i dettagli delle transazioni, gestite su GovWay,
  332.      * ricercandole in base all&#x27;identificativo messaggio
  333.      *
  334.      */
  335.     @Override
  336.     public ListaTransazioni findAllTransazioniByIdMessaggio(TipoMessaggioEnum tipoMessaggio, String id,
  337.             ProfiloEnum profilo, String soggetto, Integer offset, Integer limit, String sort) {
  338.         IContext context = this.getContext();
  339.         try {
  340.             context.getLogger().info("Invocazione in corso ...");

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

  343.             SearchFormUtilities searchFormUtilities = new SearchFormUtilities();
  344.             TransazioniSearchForm search = searchFormUtilities.getIdMessaggioSearchForm(context, profilo, soggetto);
  345.            
  346.             MonitoraggioEnv env = new MonitoraggioEnv(context, profilo, soggetto, this.log);
  347.             search.setIdEgov(id);
  348.             switch (tipoMessaggio) {
  349.             case RICHIESTA:
  350.                 search.setTipoIdMessaggio(org.openspcoop2.web.monitor.core.constants.TipoMessaggio.Richiesta.name());
  351.                 break;
  352.             case RISPOSTA:
  353.                 search.setTipoIdMessaggio(org.openspcoop2.web.monitor.core.constants.TipoMessaggio.Risposta.name());
  354.                 break;
  355.             case CONVERSAZIONE:
  356.                 search.setTipoIdMessaggio(org.openspcoop2.web.monitor.core.constants.TipoMessaggio.Collaborazione.name());
  357.                 break;
  358.             case RIFERIMENTO_RICHIESTA:
  359.                 search.setTipoIdMessaggio(org.openspcoop2.web.monitor.core.constants.TipoMessaggio.RiferimentoRichiesta.name());
  360.                 break;
  361.             }

  362.             ListaTransazioni ret = TransazioniHelper.searchTransazioni(search, offset, limit, sort, env);
  363.             context.getLogger().info("Invocazione completata con successo");
  364.             return ret;
  365.         } catch (javax.ws.rs.WebApplicationException e) {
  366.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  367.             throw e;
  368.         } catch (Throwable e) {
  369.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  370.             throw FaultCode.ERRORE_INTERNO.toException(e);
  371.         }
  372.     }
  373.    
  374.     /**
  375.      * Ricerca semplificata delle transazioni in base ai parametri di uso più comune
  376.      *
  377.      * Permette di recuperare i dettagli delle transazioni, gestite su GovWay,
  378.      * ricercandole in base a parametri di filtro di uso più comune
  379.      *
  380.      */
  381.     @Override
  382.     public ListaTransazioni findAllTransazioniBySimpleSearch(DateTime dataInizio, DateTime dataFine,
  383.             FiltroRicercaRuoloTransazioneEnum tipo, ProfiloEnum profilo, String soggetto, Integer offset, Integer limit,
  384.             String sort, String idCluster, String soggettoRemoto, String soggettoErogatore, String tag, String uriApiImplementata,
  385.             String nomeServizio, String tipoServizio, Integer versioneServizio, String azione,
  386.             EsitoTransazioneSimpleSearchEnum esito,Boolean escludiScartate) {
  387.         IContext context = this.getContext();
  388.         try {
  389.             context.getLogger().info("Invocazione in corso ...");

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

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

  393.             RicercaIntervalloTemporale bodyRicerca = new RicercaIntervalloTemporale();
  394.             FiltroTemporale intervalloTemporale = new FiltroTemporale();
  395.             intervalloTemporale.setDataFine(dataFine);
  396.             intervalloTemporale.setDataInizio(dataInizio);
  397.             bodyRicerca.setIntervalloTemporale(intervalloTemporale);
  398.             bodyRicerca.setTipo(tipo);
  399.             bodyRicerca.setIdCluster(idCluster);
  400.             bodyRicerca.setTag(tag);
  401.             bodyRicerca.setAzione(azione);

  402.             bodyRicerca.setSort(sort);
  403.             bodyRicerca.setLimit(limit);
  404.             bodyRicerca.setOffset(offset);

  405.             if (esito != null || escludiScartate!=null) {
  406.                 FiltroEsito filtroEsito = new FiltroEsito();
  407.                 if(esito!=null) {
  408.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.valueOf(esito.name()));
  409.                 }
  410.                 else {
  411.                     filtroEsito.setTipo(EsitoTransazioneFullSearchEnum.QUALSIASI);
  412.                 }
  413.                 if(escludiScartate!=null) {
  414.                     filtroEsito.setEscludiScartate(escludiScartate);
  415.                 }
  416.                 bodyRicerca.setEsito(filtroEsito);
  417.             }
  418.            
  419.             bodyRicerca.setApi(ReportisticaHelper.parseFiltroApiMap(tipo, nomeServizio, tipoServizio, versioneServizio,
  420.                     soggettoRemoto,soggettoErogatore,
  421.                     env, uriApiImplementata));

  422.             ListaTransazioni ret = TransazioniHelper.findAllTransazioni(bodyRicerca, env);
  423.             context.getLogger().info("Invocazione completata con successo");
  424.             return ret;
  425.         } catch (javax.ws.rs.WebApplicationException e) {
  426.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
  427.             throw e;
  428.         } catch (Throwable e) {
  429.             context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
  430.             throw FaultCode.ERRORE_INTERNO.toException(e);
  431.         }
  432.     }
  433.    
  434.     /**
  435.      * Dettaglio di un evento
  436.      *
  437.      * Permette di recuperare il dettaglio di un evento in base al suo identificativo
  438.      *
  439.      */
  440.     @Override
  441.     public Evento getEvento(Long id) {
  442.         IContext context = this.getContext();
  443.         try {
  444.             context.getLogger().info("Invocazione in corso ...");    

  445.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  446.             context.getLogger().debug("Autorizzazione completata con successo");    
  447.                
  448.             if(id==null) {
  449.                 FaultCode.RICHIESTA_NON_VALIDA.throwException("Id undefined");
  450.             }
  451.            
  452.             DBManager dbManager = DBManager.getInstance();
  453.             Connection connection = null;
  454.             try {
  455.                 connection = dbManager.getConnectionTracce();
  456.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesTracce();
  457.                 EventiService eventiService = new EventiService(connection, true, smp, LoggerProperties.getLoggerDAO());
  458.                
  459.                 EventoBean eventoDB = eventiService.findById(id);
  460.                 if(eventoDB==null) {
  461.                     FaultCode.NOT_FOUND.throwException("Evento con id '"+id+"' non esistente");
  462.                 }
  463.                 Evento evento = Converter.toEvento(eventoDB, this.log);    
  464.                 context.getLogger().info("Invocazione completata con successo");
  465.                 return evento;
  466.             }
  467.             finally {
  468.                 dbManager.releaseConnectionTracce(connection);
  469.             }
  470.      
  471.         }
  472.         catch(javax.ws.rs.WebApplicationException e) {
  473.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  474.             throw e;
  475.         }
  476.         catch(Throwable e) {
  477.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  478.             throw FaultCode.ERRORE_INTERNO.toException(e);
  479.         }
  480.     }
  481.    
  482.     /**
  483.      * Dettaglio della transazione
  484.      *
  485.      * Questa operazione consente di ottenere il dettaglio di una transazione
  486.      *
  487.      */
  488.     @Override
  489.     public DetailTransazione getTransazione(UUID id) {
  490.         IContext context = this.getContext();
  491.         try {
  492.             context.getLogger().info("Invocazione in corso ...");    

  493.             AuthorizationManager.authorize(context, getAuthorizationConfig());
  494.             context.getLogger().debug("Autorizzazione completata con successo");    
  495.            
  496.             String idSearch = null;
  497.             if(id==null) {
  498.                 FaultCode.RICHIESTA_NON_VALIDA.throwException("Id undefined");
  499.             }
  500.             else {
  501.                 idSearch = id.toString();
  502.             }
  503.            
  504.             DBManager dbManager = DBManager.getInstance();
  505.             Connection connection = null;
  506.             try {
  507.                 connection = dbManager.getConnectionTracce();
  508.                 ServiceManagerProperties smp = dbManager.getServiceManagerPropertiesTracce();
  509.                 TransazioniService transazioniService = new TransazioniService(connection, true, smp, LoggerProperties.getLoggerDAO());
  510.                 TransazioneBean transazioneDB = transazioniService.findByIdTransazione(idSearch);
  511.                 if(transazioneDB==null) {
  512.                     FaultCode.NOT_FOUND.throwException("Traccia con id '"+id+"' non esistente");
  513.                 }
  514.                 DetailTransazione transazione = org.openspcoop2.core.monitor.rs.server.api.impl.utils.Converter.toTransazioneExt(transazioneDB, transazioniService,
  515.                         connection, smp,
  516.                         this.log);
  517.                 context.getLogger().info("Invocazione completata con successo");
  518.                 return transazione;
  519.             }
  520.             finally {
  521.                 dbManager.releaseConnectionTracce(connection);
  522.             }
  523.         }
  524.         catch(javax.ws.rs.WebApplicationException e) {
  525.             context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
  526.             throw e;
  527.         }
  528.         catch(Throwable e) {
  529.             context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
  530.             throw FaultCode.ERRORE_INTERNO.toException(e);
  531.         }
  532.     }
  533.    
  534. }