Converter.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.core.monitor.rs.server.api.impl.utils;

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

  25. import org.apache.commons.lang.StringUtils;
  26. import org.joda.time.DateTime;
  27. import org.joda.time.LocalDate;
  28. import org.openspcoop2.core.eventi.constants.TipoSeverita;
  29. import org.openspcoop2.core.eventi.utils.SeveritaConverter;
  30. import org.openspcoop2.core.id.IDServizio;
  31. import org.openspcoop2.core.id.IDServizioApplicativo;
  32. import org.openspcoop2.core.monitor.rs.server.config.ServerProperties;
  33. import org.openspcoop2.core.monitor.rs.server.config.SoggettiConfig;
  34. import org.openspcoop2.core.monitor.rs.server.model.BaseTracingPDND;
  35. import org.openspcoop2.core.monitor.rs.server.model.DetailTransazione;
  36. import org.openspcoop2.core.monitor.rs.server.model.DetailsTracingPDND;
  37. import org.openspcoop2.core.monitor.rs.server.model.Evento;
  38. import org.openspcoop2.core.monitor.rs.server.model.InfoImplementazioneApi;
  39. import org.openspcoop2.core.monitor.rs.server.model.ItemTracingPDND;
  40. import org.openspcoop2.core.monitor.rs.server.model.ItemTransazione;
  41. import org.openspcoop2.core.monitor.rs.server.model.ListaTracingPDND;
  42. import org.openspcoop2.core.monitor.rs.server.model.MethodTracingPDND;
  43. import org.openspcoop2.core.monitor.rs.server.model.PDNDOrganizationExternalId;
  44. import org.openspcoop2.core.monitor.rs.server.model.PDNDOrganizationInfo;
  45. import org.openspcoop2.core.monitor.rs.server.model.PDNDOrganizationInfoItemTransazione;
  46. import org.openspcoop2.core.monitor.rs.server.model.Riepilogo;
  47. import org.openspcoop2.core.monitor.rs.server.model.RiepilogoApiItem;
  48. import org.openspcoop2.core.monitor.rs.server.model.StatoTracing;
  49. import org.openspcoop2.core.monitor.rs.server.model.StatoTracingPDND;
  50. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  51. import org.openspcoop2.core.statistiche.constants.PdndMethods;
  52. import org.openspcoop2.core.statistiche.constants.PossibiliStatiPdnd;
  53. import org.openspcoop2.core.statistiche.constants.PossibiliStatiRichieste;
  54. import org.openspcoop2.core.transazioni.CredenzialeMittente;
  55. import org.openspcoop2.core.transazioni.DumpMessaggio;
  56. import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
  57. import org.openspcoop2.core.transazioni.utils.CredenzialiMittente;
  58. import org.openspcoop2.core.transazioni.utils.credenziali.CredenzialeTokenClient;
  59. import org.openspcoop2.generic_project.expression.SortOrder;
  60. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  61. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  62. import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
  63. import org.openspcoop2.protocol.sdk.diagnostica.DriverMsgDiagnosticiNotFoundException;
  64. import org.openspcoop2.protocol.sdk.diagnostica.FiltroRicercaDiagnosticiConPaginazione;
  65. import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
  66. import org.openspcoop2.protocol.sdk.tracciamento.DriverTracciamentoNotFoundException;
  67. import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
  68. import org.openspcoop2.utils.UtilsException;
  69. import org.openspcoop2.utils.beans.BlackListElement;
  70. import org.openspcoop2.utils.service.beans.DiagnosticoSeveritaEnum;
  71. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  72. import org.openspcoop2.utils.service.beans.TransazioneExt;
  73. import org.openspcoop2.utils.service.beans.TransazioneRuoloEnum;
  74. import org.openspcoop2.utils.service.beans.utils.ListaUtils;
  75. import org.openspcoop2.utils.service.beans.utils.ProfiloUtils;
  76. import org.openspcoop2.utils.service.context.IContext;
  77. import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
  78. import org.openspcoop2.web.monitor.core.core.PddMonitorProperties;
  79. import org.openspcoop2.web.monitor.eventi.bean.EventoBean;
  80. import org.openspcoop2.web.monitor.statistiche.bean.ConfigurazioneGenerale;
  81. import org.openspcoop2.web.monitor.statistiche.bean.StatistichePdndTracingBean;
  82. import org.openspcoop2.web.monitor.statistiche.constants.CostantiConfigurazioni;
  83. import org.openspcoop2.web.monitor.transazioni.bean.TransazioneBean;
  84. import org.openspcoop2.web.monitor.transazioni.dao.TransazioniService;
  85. import org.openspcoop2.web.monitor.transazioni.datamodel.TransazioniDM;
  86. import org.slf4j.Logger;

  87. /**
  88.  * Converter
  89.  *
  90.  * @author $Author$
  91.  * @version $Rev$, $Date$
  92.  *
  93.  */
  94. public class Converter {

  95.     public static String toProtocollo(ProfiloEnum profilo) throws UtilsException {
  96.         if(profilo==null) {
  97.             return ServerProperties.getInstance().getProtocolloDefault();
  98.         }
  99.         return ProfiloUtils.toProtocollo(profilo);
  100.     }
  101.    
  102.     public static Integer toOffset(Integer offset) {
  103.         return offset!=null ? offset : 0;
  104.     }
  105.     public static Integer toLimit(Integer limit) {
  106.         return limit!=null ? limit : 25;
  107.     }
  108.     public static SortOrder toSortOrder(String sort) {
  109.         if(StringUtils.isNotEmpty(sort)) {
  110.             if(sort.startsWith("+")) {
  111.                 return SortOrder.ASC;
  112.             }
  113.             else if(sort.startsWith("-")) {
  114.                 return SortOrder.DESC;
  115.             }
  116.         }
  117.         return SortOrder.DESC;
  118.     }
  119.     public static String toSortField(String sort) {
  120.         if(StringUtils.isNotEmpty(sort)) {
  121.             String sortParam = sort;
  122.             if(sort.startsWith("+") || sort.startsWith("-")) {
  123.                 sortParam = sort.substring(1);
  124.             }
  125.             if(TransazioniDM.COL_DATA_LATENZA_TOTALE.equals(sortParam)){
  126.                 return sortParam;
  127.             } else if(TransazioniDM.COL_DATA_LATENZA_SERVIZIO.equals(sortParam)){
  128.                 return sortParam;
  129.             } else if(TransazioniDM.COL_DATA_INGRESSO_RICHIESTA.equals(sortParam)){
  130.                 return sortParam;
  131.             }
  132.             else {
  133.                 FaultCode.RICHIESTA_NON_VALIDA.throwException("Sort parameter '"+sort+"' non valido");
  134.             }
  135.         }
  136.         return TransazioniDM.COL_DATA_INGRESSO_RICHIESTA;
  137.     }
  138.    
  139.     public static DetailTransazione toTransazioneExt(TransazioneBean transazioneDB, TransazioniService transazioniService,
  140.             Connection con, ServiceManagerProperties smp,
  141.             Logger log) throws Exception {
  142.         org.openspcoop2.pdd.logger.traccia.Converter converter = new org.openspcoop2.pdd.logger.traccia.Converter(log);
  143.        
  144.         PddMonitorProperties govwayMonitorProperties = PddMonitorProperties.getInstance(log);
  145.        
  146.         Traccia tracciaRichiesta = null;
  147.         try {
  148.             tracciaRichiesta = govwayMonitorProperties.getDriverTracciamento(con,smp).getTraccia(transazioneDB.getIdTransazione(), RuoloMessaggio.RICHIESTA);
  149.         }catch(DriverTracciamentoNotFoundException notFound) {}
  150.        
  151.         Traccia tracciaRisposta = null;
  152.         try {
  153.             tracciaRisposta = govwayMonitorProperties.getDriverTracciamento(con,smp).getTraccia(transazioneDB.getIdTransazione(), RuoloMessaggio.RISPOSTA);
  154.         }catch(DriverTracciamentoNotFoundException notFound) {}
  155.        
  156.         FiltroRicercaDiagnosticiConPaginazione filter = new FiltroRicercaDiagnosticiConPaginazione();
  157.         filter.setIdTransazione(transazioneDB.getIdTransazione());
  158.         List<MsgDiagnostico> messaggiDiagnostici = null;
  159.         try {
  160.             messaggiDiagnostici = govwayMonitorProperties.getDriverMsgDiagnostici(con,smp).getMessaggiDiagnostici(filter);
  161.         }catch(DriverMsgDiagnosticiNotFoundException notFound) {}

  162.         CredenzialiMittente credenzialiMittente = Converter.convertToCredenzialiMittente(transazioneDB);        
  163.        
  164.         if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO)) {
  165.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO);
  166.             if(dumpMessaggio!=null) {
  167.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  168.             }
  169.         }
  170.         else if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_INGRESSO)) {
  171.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_INGRESSO);
  172.             if(dumpMessaggio!=null) {
  173.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  174.             }
  175.         }
  176.        
  177.         if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO)) {
  178.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO);
  179.             if(dumpMessaggio!=null) {
  180.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  181.             }
  182.         }
  183.         else if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_USCITA)) {
  184.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RICHIESTA_USCITA);
  185.             if(dumpMessaggio!=null) {
  186.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  187.             }
  188.         }
  189.        
  190.         if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO)) {
  191.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO);
  192.             if(dumpMessaggio!=null) {
  193.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  194.             }
  195.         }
  196.         else if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_INGRESSO)) {
  197.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_INGRESSO);
  198.             if(dumpMessaggio!=null) {
  199.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  200.             }
  201.         }
  202.        
  203.         if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO)) {
  204.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO);
  205.             if(dumpMessaggio!=null) {
  206.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  207.             }
  208.         }
  209.         else if(transazioniService.hasInfoDumpAvailable(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_USCITA)) {
  210.             DumpMessaggio dumpMessaggio = transazioniService.getDumpMessaggio(transazioneDB.getIdTransazione(), null, null, TipoMessaggio.RISPOSTA_USCITA);
  211.             if(dumpMessaggio!=null) {
  212.                 transazioneDB.addDumpMessaggio(dumpMessaggio);
  213.             }
  214.         }
  215.        
  216.         TransazioneExt transazioneExt = converter.toTransazioneExt(transazioneDB, credenzialiMittente, tracciaRichiesta, tracciaRisposta, messaggiDiagnostici);
  217.        
  218.         // aggiunto campi supplementari
  219.        
  220.         DetailTransazione detail = new DetailTransazione();
  221.        
  222.         if(transazioneExt.getRichiesta()!=null) {
  223.             detail.setData(transazioneExt.getRichiesta().getDataRicezione());
  224.         }
  225.         if(transazioneExt.getRichiesta()!=null && transazioneExt.getRichiesta().getDataConsegna()!=null &&
  226.                 transazioneExt.getRisposta()!=null && transazioneExt.getRisposta().getDataAccettazione()!=null) {
  227.             long dataRisposta = transazioneExt.getRisposta().getDataAccettazione().getMillis();
  228.             long dataRichiesta = transazioneExt.getRichiesta().getDataConsegna().getMillis();
  229.             detail.setLatenzaServizio(dataRisposta-dataRichiesta);
  230.         }
  231.         if(transazioneExt.getRichiesta()!=null && transazioneExt.getRichiesta().getDataAccettazione()!=null &&
  232.                 transazioneExt.getRisposta()!=null && transazioneExt.getRisposta().getDataConsegna()!=null) {
  233.             long dataRisposta = transazioneExt.getRisposta().getDataConsegna().getMillis();
  234.             long dataRichiesta = transazioneExt.getRichiesta().getDataAccettazione().getMillis();
  235.             detail.setLatenzaTotale(dataRisposta-dataRichiesta);
  236.         }
  237.        
  238.         String pdndOrganizationName = transazioneDB.getPdndOrganizationName();
  239.         String pdndOrganizationCategory = transazioneDB.getPdndOrganizationCategory();
  240.         String pdndExternalId = transazioneDB.getPdndOrganizationExternalId();
  241.         String pdndConsumerId = transazioneDB.getPdndOrganizationConsumerId();
  242.         if(StringUtils.isNotEmpty(pdndOrganizationName) || StringUtils.isNotEmpty(pdndOrganizationCategory) || StringUtils.isNotEmpty(pdndExternalId)) {
  243.             PDNDOrganizationInfo pdndOrganizationInfo = new PDNDOrganizationInfo();
  244.             pdndOrganizationInfo.setNome(pdndOrganizationName);
  245.             pdndOrganizationInfo.setCategoria(pdndOrganizationCategory);
  246.             if(StringUtils.isNotEmpty(pdndExternalId) && pdndExternalId.contains(" ")) {
  247.                 try {
  248.                     int indexOf = pdndExternalId.indexOf(" ");
  249.                     String origin = pdndExternalId.substring(0, indexOf);
  250.                     String code = pdndExternalId.replaceFirst(origin+" ","");
  251.                     PDNDOrganizationExternalId extId = new PDNDOrganizationExternalId();
  252.                     extId.setOrigine(origin);
  253.                     extId.setCodice(code);
  254.                     pdndOrganizationInfo.setExternalId(extId);
  255.                 }
  256.                 catch(Exception e) {
  257.                     // ignore
  258.                 }
  259.             }
  260.             pdndOrganizationInfo.setConsumerId(pdndConsumerId);
  261.             detail.setPdndOrganization(pdndOrganizationInfo);
  262.         }
  263.        
  264.         String richiedente = transazioneDB.getLabelRichiedenteConFruitore();
  265.         if(StringUtils.isNotEmpty(richiedente)) {
  266.             detail.setRichiedente(richiedente);
  267.         }
  268.         String dettaglioErrore = transazioneDB.getDettaglioErrore(messaggiDiagnostici);
  269.         if(StringUtils.isNotEmpty(dettaglioErrore)) {
  270.             detail.setDettaglioErrore(dettaglioErrore);
  271.         }
  272.                
  273.         List<BlackListElement> metodiEsclusi = new ArrayList<>();
  274.         metodiEsclusi.add(new BlackListElement("setData", DateTime.class));
  275.         metodiEsclusi.add(new BlackListElement("setLatenzaServizio", Long.class));
  276.         metodiEsclusi.add(new BlackListElement("setLatenzaTotale", Long.class));
  277.         metodiEsclusi.add(new BlackListElement("setPdndOrganization", PDNDOrganizationInfo.class));
  278.         metodiEsclusi.add(new BlackListElement("setRichiedente", String.class));
  279.         metodiEsclusi.add(new BlackListElement("setDettaglioErrore", String.class));
  280.         org.openspcoop2.utils.beans.BeanUtils.copy(log, detail, transazioneExt, metodiEsclusi, true);
  281.        
  282.         // Se presenti, finiscono come informazione del token in detail.getMittente().getInformazioniToken()
  283.         /*
  284.         if(detail.getMittente()!=null) {
  285.             detail.getMittente().setUtente(null);
  286.             detail.getMittente().setClient(null);
  287.         }
  288.         */
  289.        
  290.         return detail;
  291.     }
  292.    
  293.     public static ItemTransazione toItemTransazione(TransazioneBean transazioneDB, Logger log)  throws Exception {
  294.    
  295.         CredenzialiMittente credenzialiMittente = Converter.convertToCredenzialiMittente(transazioneDB);        
  296.        
  297.         org.openspcoop2.pdd.logger.traccia.Converter converter = new org.openspcoop2.pdd.logger.traccia.Converter(log);
  298.         if(transazioneDB.getGruppiLabel()!=null && !"".equals(transazioneDB.getGruppiLabel())) {
  299.             // converto voce originale
  300.             transazioneDB.setGruppi(transazioneDB.getGruppiLabel());
  301.         }
  302.         if(transazioneDB.getSocketClientAddress()==null && transazioneDB.getSocketClientAddressLabel()!=null) {
  303.             // converto voce originale
  304.             transazioneDB.setSocketClientAddress(transazioneDB.getSocketClientAddressLabel());
  305.         }
  306.         if(transazioneDB.getTransportClientAddress()==null && transazioneDB.getTransportClientAddressLabel()!=null) {
  307.             // converto voce originale
  308.             transazioneDB.setTransportClientAddress(transazioneDB.getTransportClientAddressLabel());
  309.         }
  310.         TransazioneExt transazione = converter.toTransazioneExt(transazioneDB, credenzialiMittente, null, null, null);
  311.    
  312.         // elimino i campi non previsti in un ItemTransazione
  313.         if(transazione.getRichiesta()!=null) {
  314.             transazione.getRichiesta().setContenutiIngresso(null);
  315.             transazione.getRichiesta().setContenutiUscita(null);
  316.             transazione.getRichiesta().setDuplicatiMessaggio(null);
  317.             transazione.getRichiesta().setTraccia(null);
  318.             transazione.getRichiesta().setDataRicezioneAcquisita(null);
  319.             transazione.getRichiesta().setDataConsegnaEffettuata(null);
  320.         }
  321.         if(transazione.getRisposta()!=null) {
  322.             transazione.getRisposta().setContenutiIngresso(null);
  323.             transazione.getRisposta().setContenutiUscita(null);
  324.             transazione.getRisposta().setDuplicatiMessaggio(null);
  325.             transazione.getRisposta().setTraccia(null);
  326.             transazione.getRisposta().setFaultConsegna(null);
  327.             transazione.getRisposta().setFaultConsegnaFormato(null);
  328.             transazione.getRisposta().setFaultRicezione(null);
  329.             transazione.getRisposta().setFaultRicezioneFormato(null);
  330.             transazione.getRisposta().setDettagliErrore(null);
  331.             transazione.getRisposta().setDataRicezioneAcquisita(null);
  332.             if(transazione.getRisposta().getDataConsegnaEffettuata()!=null) { // inverto
  333.                 transazione.getRisposta().setDataConsegna(transazione.getRisposta().getDataConsegnaEffettuata());
  334.             }
  335.             transazione.getRisposta().setDataConsegnaEffettuata(null);
  336.         }
  337.         if(transazione.getApi()!=null) {
  338.             transazione.getApi().setProfiloCollaborazione(null);
  339.             transazione.getApi().setIdAsincrono(null);
  340.         }
  341.         if(transazione.getMittente()!=null) {
  342.             transazione.getMittente().setCredenziali(null);
  343.             transazione.getMittente().setToken(null);
  344.             transazione.getMittente().setInformazioniToken(null);
  345.         }
  346.        
  347.         // aggiunto campi supplementari
  348.         ItemTransazione item = new ItemTransazione();
  349.         if(transazione.getRichiesta()!=null) {
  350.             item.setData(transazione.getRichiesta().getDataRicezione());
  351.         }
  352.         if(transazione.getRichiesta()!=null && transazione.getRichiesta().getDataConsegna()!=null &&
  353.                 transazione.getRisposta()!=null && transazione.getRisposta().getDataAccettazione()!=null) {
  354.             long dataRisposta = transazione.getRisposta().getDataAccettazione().getMillis();
  355.             long dataRichiesta = transazione.getRichiesta().getDataConsegna().getMillis();
  356.             item.setLatenzaServizio(dataRisposta-dataRichiesta);
  357.         }
  358.         if(transazione.getRichiesta()!=null && transazione.getRichiesta().getDataAccettazione()!=null &&
  359.                 transazione.getRisposta()!=null && transazione.getRisposta().getDataConsegna()!=null) {
  360.             long dataRisposta = transazione.getRisposta().getDataConsegna().getMillis();
  361.             long dataRichiesta = transazione.getRichiesta().getDataAccettazione().getMillis();
  362.             item.setLatenzaTotale(dataRisposta-dataRichiesta);
  363.         }
  364.        
  365.         String pdndOrganizationName = transazioneDB.getPdndOrganizationName();
  366.         if(StringUtils.isNotEmpty(pdndOrganizationName)) {
  367.             PDNDOrganizationInfoItemTransazione pdndOrganizationInfo = new PDNDOrganizationInfoItemTransazione();
  368.             pdndOrganizationInfo.setNome(pdndOrganizationName);
  369.             item.setPdndOrganization(pdndOrganizationInfo);
  370.         }
  371.        
  372.         String richiedente = transazioneDB.getLabelRichiedenteConFruitore();
  373.         if(StringUtils.isNotEmpty(richiedente)) {
  374.             item.setRichiedente(richiedente);
  375.         }
  376.        
  377.         List<BlackListElement> metodiEsclusi = new ArrayList<>();
  378.         metodiEsclusi.add(new BlackListElement("setData", DateTime.class));
  379.         metodiEsclusi.add(new BlackListElement("setLatenzaServizio", Long.class));
  380.         metodiEsclusi.add(new BlackListElement("setLatenzaTotale", Long.class));
  381.         metodiEsclusi.add(new BlackListElement("setPdndOrganization", PDNDOrganizationInfoItemTransazione.class));
  382.         metodiEsclusi.add(new BlackListElement("setRichiedente", String.class));
  383.         org.openspcoop2.utils.beans.BeanUtils.copy(log, item, transazione, metodiEsclusi, true );
  384.                
  385.         return item;
  386.     }
  387.    
  388.     private static CredenzialiMittente convertToCredenzialiMittente(TransazioneBean transazioneDB) {
  389.         CredenzialiMittente credenzialiMittente = new CredenzialiMittente();
  390.         if(transazioneDB.getTrasportoMittenteLabel()!=null) {
  391.             CredenzialeMittente credenziale = new CredenzialeMittente();
  392.             credenziale.setCredenziale(transazioneDB.getTrasportoMittenteLabel());
  393.             credenzialiMittente.setTrasporto(credenziale);
  394.         }
  395.         if(transazioneDB.getTokenSubjectLabel()!=null) {
  396.             CredenzialeMittente credenziale = new CredenzialeMittente();
  397.             credenziale.setCredenziale(transazioneDB.getTokenSubjectLabel());
  398.             credenzialiMittente.setTokenSubject(credenziale);
  399.         }
  400.         if(transazioneDB.getTokenIssuerLabel()!=null) {
  401.             CredenzialeMittente credenziale = new CredenzialeMittente();
  402.             credenziale.setCredenziale(transazioneDB.getTokenIssuerLabel());
  403.             credenzialiMittente.setTokenIssuer(credenziale);
  404.         }
  405.         if(transazioneDB.getTokenClientIdLabel()!=null) {
  406.             CredenzialeMittente credenziale = new CredenzialeMittente();
  407.             String clientId = transazioneDB.getTokenClientIdLabel();
  408.             IDServizioApplicativo idSA = transazioneDB.getTokenClient();
  409.             if(idSA!=null) {
  410.                 CredenzialeTokenClient credToken = new CredenzialeTokenClient(clientId, idSA);
  411.                 try {
  412.                     credenziale.setCredenziale(credToken.getCredenziale());
  413.                 }catch(Throwable t) {
  414.                     credenziale.setCredenziale(clientId);
  415.                 }
  416.             }
  417.             else {
  418.                 credenziale.setCredenziale(clientId);
  419.             }
  420.             credenzialiMittente.setTokenClientId(credenziale);
  421.         }
  422.         if(transazioneDB.getTokenUsernameLabel()!=null) {
  423.             CredenzialeMittente credenziale = new CredenzialeMittente();
  424.             credenziale.setCredenziale(transazioneDB.getTokenUsernameLabel());
  425.             credenzialiMittente.setTokenUsername(credenziale);
  426.         }
  427.         if(transazioneDB.getTokenMailLabel()!=null) {
  428.             CredenzialeMittente credenziale = new CredenzialeMittente();
  429.             credenziale.setCredenziale(transazioneDB.getTokenMailLabel());
  430.             credenzialiMittente.setTokenEMail(credenziale);
  431.         }
  432.         return credenzialiMittente;
  433.     }
  434.    
  435.     public static Evento toEvento(EventoBean eventoDB, Logger log) throws Exception {
  436.         Evento evento = new Evento();
  437.        
  438.         if(eventoDB.getSeverita()>=0) {
  439.             TipoSeverita tipo = SeveritaConverter.toSeverita(eventoDB.getSeverita());
  440.             evento.setSeverita(Enums.toDiagnosticoSeverita.get(tipo));
  441.         }
  442.         evento.setOrigine(eventoDB.getIdConfigurazione());
  443.         if(eventoDB.getOraRegistrazione()!=null) {
  444.             evento.setOraRegistrazione(new DateTime(eventoDB.getOraRegistrazione().getTime()));
  445.         }
  446.        
  447.         List<BlackListElement> metodiEsclusi = new ArrayList<>();
  448.         metodiEsclusi.add(new BlackListElement("setSeverita", DiagnosticoSeveritaEnum.class));
  449.         metodiEsclusi.add(new BlackListElement("setOrigine", String.class));
  450.         metodiEsclusi.add(new BlackListElement("setOraRegistrazione", DateTime.class));
  451.         org.openspcoop2.utils.beans.BeanUtils.copy(log, evento, eventoDB, metodiEsclusi, true);
  452.         return evento;
  453.     }
  454.    
  455.     public static RiepilogoApiItem toRiepilogoApiItem(ConfigurazioneGenerale configurazioneDB, Logger log) throws Exception {
  456.         RiepilogoApiItem riepilogo = new RiepilogoApiItem();
  457.         riepilogo.setErogatore(configurazioneDB.getErogatore());
  458.         riepilogo.setFruitore(configurazioneDB.getFruitore());
  459.        
  460.         String nomeAPI = configurazioneDB.getServizio();
  461.         if(nomeAPI!=null) {
  462.             String [] tmp = nomeAPI.split(" v");
  463.             String tipoNome = tmp[0];
  464.             if(tipoNome.contains("/")) {
  465.                 riepilogo.setTipo(tipoNome.split("/")[0]);
  466.                 riepilogo.setNome(tipoNome.split("/")[1]);
  467.             }
  468.             else {
  469.                 riepilogo.setNome(tipoNome);
  470.             }
  471.             String versione = tmp[1];
  472.             riepilogo.setVersione(Integer.parseInt(versione));
  473.         }
  474.        
  475.         return riepilogo;
  476.     }
  477.    
  478.     public static Riepilogo toRiepilogo(List<ConfigurazioneGenerale> listDB_infoGenerali_right, List<ConfigurazioneGenerale> listDB_infoServizi_left ,
  479.             ConfigurazioneGenerale soggettiOperativi, Logger log) throws Exception {
  480.         Riepilogo riepilogo = new Riepilogo();
  481.        
  482.         if(listDB_infoGenerali_right!=null && !listDB_infoGenerali_right.isEmpty()) {
  483.             for (ConfigurazioneGenerale configurazioneGenerale : listDB_infoGenerali_right) {
  484.                 if(CostantiConfigurazioni.CONF_SOGGETTI_ESTERNI_LABEL.equals(configurazioneGenerale.getLabel())) {
  485.                     riepilogo.setSoggettiDominioEsterno(Integer.valueOf(configurazioneGenerale.getValue()));
  486.                 }
  487.                 else if(CostantiConfigurazioni.CONF_SOGGETTI_OPERATIVI_LABEL.equals(configurazioneGenerale.getLabel())) {
  488.                     riepilogo.setSoggettiDominioInterno(Integer.valueOf(configurazioneGenerale.getValue()));
  489.                 }
  490.                 else if(CostantiConfigurazioni.CONF_SERVIZI_APPLICATIVI_LABEL.equals(configurazioneGenerale.getLabel())) {
  491.                     riepilogo.setApplicativi(Integer.valueOf(configurazioneGenerale.getValue()));
  492.                 }
  493.             }
  494.         }
  495.        
  496.         if(listDB_infoServizi_left!=null && !listDB_infoServizi_left.isEmpty()) {
  497.             for (ConfigurazioneGenerale configurazioneGenerale : listDB_infoServizi_left) {
  498.                 if(CostantiConfigurazioni.CONF_ASPC_LABEL.equals(configurazioneGenerale.getLabel())) {
  499.                     riepilogo.setApi(Integer.valueOf(configurazioneGenerale.getValue()));
  500.                 }
  501.                 else if(CostantiConfigurazioni.CONF_ASPS_LABEL.equals(configurazioneGenerale.getLabel())) {
  502.                     riepilogo.setErogazioni(Integer.valueOf(configurazioneGenerale.getValue()));
  503.                 }
  504.                 else if(CostantiConfigurazioni.CONF_FRUIZIONI_SERVIZIO_LABEL.equals(configurazioneGenerale.getLabel())) {
  505.                     riepilogo.setFruizioni(Integer.valueOf(configurazioneGenerale.getValue()));
  506.                 }
  507.             }
  508.         }
  509.        
  510.         if(riepilogo.getSoggettiDominioInterno()==null) {
  511.             // mutitenant disabilitato
  512.             if(soggettiOperativi!=null) {
  513.                 riepilogo.setSoggettiDominioInterno(Integer.valueOf(soggettiOperativi.getValue()));
  514.             }
  515.         }
  516.        
  517.         return riepilogo;
  518.     }
  519.    
  520.     public static InfoImplementazioneApi toInfoImplementazioneApi(List<ConfigurazioneGenerale> listDB_infoServizi_left , Logger log) throws Exception {
  521.         InfoImplementazioneApi info = new InfoImplementazioneApi();
  522.        
  523.         if(listDB_infoServizi_left!=null && !listDB_infoServizi_left.isEmpty()) {
  524.             for (ConfigurazioneGenerale configurazioneGenerale : listDB_infoServizi_left) {
  525.                 if(CostantiConfigurazioni.CONF_ASPS_LABEL.equals(configurazioneGenerale.getLabel())) {
  526.                     info.setErogazioni(Integer.valueOf(configurazioneGenerale.getValue()));
  527.                 }
  528.                 else if(CostantiConfigurazioni.CONF_FRUIZIONI_SERVIZIO_LABEL.equals(configurazioneGenerale.getLabel())) {
  529.                     info.setFruizioni(Integer.valueOf(configurazioneGenerale.getValue()));
  530.                 }
  531.                 else if(CostantiConfigurazioni.CONF_AZIONI_LABEL.equals(configurazioneGenerale.getLabel())) {
  532.                     info.setAzioni(Integer.valueOf(configurazioneGenerale.getValue()));
  533.                 }
  534.             }
  535.         }
  536.        
  537.         return info;
  538.     }
  539.    
  540.     public static IDServizio toIDServizio(TransazioneRuoloEnum tipo, ProfiloEnum profilo, String soggetto,
  541.             String soggettoRemoto, String nomeServizio, String tipoServizio, Integer versioneServizio) throws Exception {
  542.         String protocollo = Converter.toProtocollo(profilo);
  543.         ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  544.         String tipoSoggetto = protocolFactoryManager.getDefaultOrganizationTypes().get(protocollo);
  545.         String tipoServizioEffettivo = tipoServizio !=null ? tipoServizio : protocolFactoryManager._getServiceTypes().get(protocollo).get(0);
  546.         String nomeSoggettoLocale = soggetto;
  547.         if(nomeSoggettoLocale==null) {
  548.             ServerProperties serverProperties = ServerProperties.getInstance();
  549.             if(serverProperties.useSoggettoDefault()) {
  550.                 nomeSoggettoLocale = serverProperties.getSoggettoDefaultIfEnabled(protocollo);
  551.             }
  552.             else {
  553.                 throw FaultCode.RICHIESTA_NON_VALIDA.toException("Soggetto locale non indicato; parametro obbligatorio");
  554.             }
  555.         }
  556.         if(!SoggettiConfig.existsIdentificativoPorta(tipoSoggetto, nomeSoggettoLocale)) {
  557.             throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il soggetto locale indicato non esiste");
  558.         }
  559.         String nomeSoggettoErogatore = null;
  560.         switch (tipo) {
  561.         case EROGAZIONE:
  562.             nomeSoggettoErogatore = nomeSoggettoLocale;
  563.             break;
  564.         case FRUIZIONE:
  565.             if(StringUtils.isNotBlank(soggettoRemoto)) {
  566.                 nomeSoggettoErogatore = soggettoRemoto;
  567.             }
  568.             else {
  569.                 FaultCode.RICHIESTA_NON_VALIDA.throwException("Parametro 'soggettoRemoto' รจ obbligatorio per il dettaglio di una fruizione");
  570.             }
  571.             break;
  572.         default:
  573.             break;
  574.         }
  575.         IDServizio idServizio =
  576.                 IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizioEffettivo, nomeServizio, tipoSoggetto, nomeSoggettoErogatore,
  577.                         versioneServizio==null ? 1 : versioneServizio);
  578.         return idServizio;
  579.     }
  580.    
  581.    
  582.     private static void fillBaseTracingPDND(BaseTracingPDND out, StatistichePdndTracingBean bean) {
  583.         out.tentativiPubblicazione(bean.getTentativiPubblicazione())
  584.                 .statoPdnd(toStatoTracingPDND(bean.getStatoPdnd()))
  585.                 .stato(toStatoTracing(bean.getStato()))
  586.                 .dataRegistrazione(new DateTime(bean.getDataRegistrazione().getTime()))
  587.                 .dataTracciamento(new LocalDate(bean.getDataTracciamento().getTime()))
  588.                 .id(bean.getId());
  589.         if (bean.getTracingId() != null)
  590.             out.setTracingId(UUID.fromString(bean.getTracingId()));
  591.     }
  592.    
  593.     private static void fillDetailsTracingPDND(DetailsTracingPDND out, StatistichePdndTracingBean bean) {
  594.         fillBaseTracingPDND(out, bean);
  595.        
  596.         out.dettagliErrore(bean.getErrorDetails())
  597.             .metodo(toMethodTracingPDND(bean.getMethod()))
  598.             .dataPubblicazione(new DateTime(bean.getDataRegistrazione().getTime()));
  599.        
  600.         if (bean.isForcePublish())
  601.             out.setForcePublish(true);
  602.     }
  603.    
  604.     public static ListaTracingPDND toListaTracingPDND(IContext context, List<StatistichePdndTracingBean> listDB, int offset, int limit, int totalCount) throws InstantiationException, IllegalAccessException {
  605.         ListaTracingPDND list = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
  606.                 Converter.toOffset(offset), Converter.toLimit(limit), totalCount,
  607.                 ListaTracingPDND.class);
  608.        
  609.         List<ItemTracingPDND> items = new ArrayList<>();
  610.         for (StatistichePdndTracingBean bean : listDB) {
  611.             ItemTracingPDND item = new ItemTracingPDND();
  612.             fillBaseTracingPDND(item, bean);
  613.            
  614.             items.add(item);
  615.         }
  616.         list.setItems(items);
  617.        
  618.         return list;
  619.     }
  620.    
  621.     public static DetailsTracingPDND toDetailsTracingPDND(StatistichePdndTracingBean bean){
  622.         DetailsTracingPDND details = new DetailsTracingPDND();
  623.         fillDetailsTracingPDND(details, bean);
  624.         return details;
  625.     }
  626.    
  627.     public static StatoTracingPDND toStatoTracingPDND(PossibiliStatiPdnd state) {
  628.         if (state == null)
  629.             return null;
  630.         switch (state) {
  631.         case ERROR: return StatoTracingPDND.ERRORE;
  632.         case OK: return StatoTracingPDND.OK;
  633.         case PENDING: return StatoTracingPDND.ATTESA;
  634.         case WAITING: return StatoTracingPDND.ATTESA;
  635.         default: return null;
  636.         }
  637.     }
  638.    
  639.     public static StatoTracing toStatoTracing(PossibiliStatiRichieste state) {
  640.         if (state == null)
  641.             return null;
  642.         switch (state) {
  643.         case FAILED: return StatoTracing.FALLITA;
  644.         case PUBLISHED: return StatoTracing.PUBBLICATA;
  645.         default: return null;
  646.         }
  647.     }
  648.    
  649.     public static PossibiliStatiPdnd toStatoTracingPDND(StatoTracingPDND state) {
  650.         if (state == null)
  651.             return null;
  652.         switch (state) {
  653.         case ERRORE: return PossibiliStatiPdnd.ERROR;
  654.         case OK: return PossibiliStatiPdnd.OK;
  655.         case ATTESA: return PossibiliStatiPdnd.PENDING;
  656.         default: return null;
  657.         }
  658.     }
  659.    
  660.     public static PossibiliStatiRichieste toStatoTracing(StatoTracing state) {
  661.         if (state == null)
  662.             return null;
  663.         switch (state) {
  664.         case FALLITA: return PossibiliStatiRichieste.FAILED;
  665.         case PUBBLICATA: return PossibiliStatiRichieste.PUBLISHED;
  666.         default: return null;
  667.         }
  668.        
  669.     }
  670.    
  671.     public static MethodTracingPDND toMethodTracingPDND(PdndMethods method) {
  672.         if (method == null)
  673.             return null;
  674.         switch (method) {
  675.         case RECOVER: return MethodTracingPDND.RECOVER;
  676.         case REPLACE: return MethodTracingPDND.REPLACE;
  677.         case SUBMIT: return MethodTracingPDND.SUBMIT;
  678.         default: return null;
  679.         }
  680.     }
  681. }