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.pdd.logger.traccia;

  21. import java.lang.reflect.Field;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. import java.util.Properties;

  25. import org.joda.time.DateTime;
  26. import org.openspcoop2.core.constants.CostantiLabel;
  27. import org.openspcoop2.core.id.IDServizioApplicativo;
  28. import org.openspcoop2.core.id.IDSoggetto;
  29. import org.openspcoop2.core.transazioni.DumpAllegato;
  30. import org.openspcoop2.core.transazioni.DumpContenuto;
  31. import org.openspcoop2.core.transazioni.DumpHeaderAllegato;
  32. import org.openspcoop2.core.transazioni.DumpHeaderTrasporto;
  33. import org.openspcoop2.core.transazioni.DumpMessaggio;
  34. import org.openspcoop2.core.transazioni.DumpMultipartHeader;
  35. import org.openspcoop2.core.transazioni.constants.PddRuolo;
  36. import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
  37. import org.openspcoop2.core.transazioni.utils.CredenzialiMittente;
  38. import org.openspcoop2.core.transazioni.utils.credenziali.CredenzialeTokenClient;
  39. import org.openspcoop2.message.constants.MessageType;
  40. import org.openspcoop2.pdd.logger.LogLevels;
  41. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  42. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  43. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  44. import org.openspcoop2.protocol.sdk.constants.TipoSerializzazione;
  45. import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
  46. import org.openspcoop2.protocol.sdk.tracciamento.ITracciaSerializer;
  47. import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
  48. import org.openspcoop2.protocol.utils.EsitiProperties;
  49. import org.openspcoop2.utils.date.DateManager;
  50. import org.openspcoop2.utils.service.beans.Diagnostico;
  51. import org.openspcoop2.utils.service.beans.DiagnosticoSeveritaEnum;
  52. import org.openspcoop2.utils.service.beans.HttpMethodEnum;
  53. import org.openspcoop2.utils.service.beans.ProfiloCollaborazioneEnum;
  54. import org.openspcoop2.utils.service.beans.ProfiloEnum;
  55. import org.openspcoop2.utils.service.beans.Transazione;
  56. import org.openspcoop2.utils.service.beans.TransazioneBase;
  57. import org.openspcoop2.utils.service.beans.TransazioneContenutoMessaggio;
  58. import org.openspcoop2.utils.service.beans.TransazioneContenutoMessaggioHeader;
  59. import org.openspcoop2.utils.service.beans.TransazioneContestoEnum;
  60. import org.openspcoop2.utils.service.beans.TransazioneDettaglioMessaggio;
  61. import org.openspcoop2.utils.service.beans.TransazioneDettaglioRichiesta;
  62. import org.openspcoop2.utils.service.beans.TransazioneDettaglioRisposta;
  63. import org.openspcoop2.utils.service.beans.TransazioneEsito;
  64. import org.openspcoop2.utils.service.beans.TransazioneExt;
  65. import org.openspcoop2.utils.service.beans.TransazioneExtContenutoMessaggio;
  66. import org.openspcoop2.utils.service.beans.TransazioneExtContenutoMessaggioAllegato;
  67. import org.openspcoop2.utils.service.beans.TransazioneExtContenutoMessaggioBody;
  68. import org.openspcoop2.utils.service.beans.TransazioneExtContenutoMessaggioBodyMultipart;
  69. import org.openspcoop2.utils.service.beans.TransazioneExtContenutoMessaggioPorzioneBody;
  70. import org.openspcoop2.utils.service.beans.TransazioneExtDettaglioRichiesta;
  71. import org.openspcoop2.utils.service.beans.TransazioneExtDettaglioRisposta;
  72. import org.openspcoop2.utils.service.beans.TransazioneExtInformazioniApi;
  73. import org.openspcoop2.utils.service.beans.TransazioneExtInformazioniMittente;
  74. import org.openspcoop2.utils.service.beans.TransazioneExtInformazioniMittenteApplicativoToken;
  75. import org.openspcoop2.utils.service.beans.TransazioneExtInformazioniSoggetto;
  76. import org.openspcoop2.utils.service.beans.TransazioneExtInformazioniToken;
  77. import org.openspcoop2.utils.service.beans.TransazioneInformazioniApi;
  78. import org.openspcoop2.utils.service.beans.TransazioneInformazioniMittente;
  79. import org.openspcoop2.utils.service.beans.TransazioneMessaggioFormatoEnum;
  80. import org.openspcoop2.utils.service.beans.TransazioneRuoloEnum;
  81. import org.slf4j.Logger;

  82. /**
  83.  * ConverterUtils
  84.  *
  85.  * @author Poli Andrea (apoli@link.it)
  86.  * @author $Author$
  87.  * @version $Rev$, $Date$
  88.  */
  89. public class Converter {

  90.     private Logger log;
  91.     private boolean throwInitProtocol= true;
  92.    
  93.     // configurazione
  94.     private boolean emittente = true;
  95.     private boolean dataEmissione = true;
  96.     private boolean id = true;
  97.     private boolean idConversazione = true;
  98.     private boolean ruolo = true;
  99.     private boolean esito = true;
  100.     private boolean messaggi_id = true;
  101.     private boolean messaggi_idApplicativo = true;
  102.     private boolean messaggi_data = true;
  103.     private boolean messaggi_contenuti = true;
  104.     private boolean richiesta_tipo = true;
  105.     private boolean richiesta_urlInvocazione = true;
  106.     private boolean risposta_esito = true;
  107.     private boolean risposta_fault = true;
  108.     private boolean risposta_errori = true;
  109.     private boolean api_erogatore = true;
  110.     private boolean api_nome = true;
  111.     private boolean api_versione = true;
  112.     private boolean api_operazione = true;
  113.     private boolean mittente_fruitore = true;
  114.     private boolean mittente_principal = true;
  115.     private boolean mittente_utente = true;
  116.     private boolean mittente_client = true;
  117.     private boolean mittente_indirizzoClient = true;
  118.     private boolean mittente_indirizzoClientInoltrato = true;
  119.    
  120.     // configurazione ext
  121.     private boolean profilo = true;
  122.     private boolean contesto = true;
  123.     private boolean idCluster = true;
  124.     private boolean emittenteExtraInfo = true;
  125.     private boolean stato = true;
  126.     private boolean messaggi_dimensione = true;
  127.     private boolean messaggi_dataAccettazione = true;
  128.     private boolean messaggi_duplicati = true;
  129.     private boolean messaggi_tracciaProtocollo = true;
  130.     private boolean richiesta_connettore = true;
  131.     private boolean diagnostici = true;
  132.     private boolean api_erogatoreExtraInfo = true;
  133.     private boolean api_tags = true;
  134.     private boolean api_tipo = true;
  135.     private boolean api_idAsincrono = true;
  136.     private boolean api_profiloCollaborazione = true;
  137.     private boolean mittente_fruitoreExtraInfo = true;
  138.     private boolean mittente_applicativo = true;
  139.     private boolean mittente_credenziali = true;
  140.     private boolean mittente_token = true;
  141.     private boolean mittente_tokenClaims = true;
  142.     private boolean mittente_applicativoToken = true;
  143.    
  144.    
  145.    
  146.     public Converter(Logger log) {
  147.         this.log = log;
  148.     }
  149.     public Converter(Logger log, Properties pConf) throws TracciaException {
  150.         this.log = log;
  151.        
  152.         try {
  153.             Field [] fields = Converter.class.getDeclaredFields();
  154.             for (Field field : fields) {
  155.                 String fieldName = field.getName();
  156.                 fieldName = fieldName.replace("_", ".");
  157.                 if(pConf.containsKey(fieldName)) {
  158.                     String value = pConf.getProperty(fieldName);
  159.                     String bCN = boolean.class.getName()+"";
  160.                     if(bCN.equals(field.getType().getName())) {
  161.                         field.set(this, "true".equalsIgnoreCase(value));
  162.                     }else {
  163.                         field.set(this, value);
  164.                     }
  165.                 }
  166.             }
  167.         }catch(Exception e) {
  168.             throw new TracciaException(e.getMessage(),e);
  169.         }
  170.     }
  171.    
  172.    
  173.    
  174.    
  175.     public Transazione toTransazione(org.openspcoop2.core.transazioni.Transazione transazioneDB,
  176.             CredenzialiMittente credenzialiMittente, List<MsgDiagnostico> messaggiDiagnostici) throws Exception {
  177.         return  (Transazione) this._toTransazione(transazioneDB, credenzialiMittente, null, null, messaggiDiagnostici, false);
  178.     }
  179.    
  180.     public TransazioneExt toTransazioneExt(org.openspcoop2.core.transazioni.Transazione transazioneDB,
  181.             CredenzialiMittente credenzialiMittente, Traccia tracciaRichiesta, Traccia tracciaRisposta, List<MsgDiagnostico> messaggiDiagnostici) throws Exception {
  182.         return  (TransazioneExt) this._toTransazione(transazioneDB, credenzialiMittente, tracciaRichiesta, tracciaRisposta, messaggiDiagnostici, true);
  183.     }
  184.    
  185.     private TransazioneBase _toTransazione(org.openspcoop2.core.transazioni.Transazione transazioneDB,
  186.             CredenzialiMittente credenzialiMittente, Traccia tracciaRichiesta, Traccia tracciaRisposta, List<MsgDiagnostico> messaggiDiagnostici,
  187.             boolean extended) throws Exception {

  188.         List<String> errori = new ArrayList<>();
  189.         if((!extended || !this.diagnostici) && messaggiDiagnostici!=null && messaggiDiagnostici.size()>0) {
  190.             for (MsgDiagnostico diag : messaggiDiagnostici) {
  191.                 if(diag.getSeverita() <= LogLevels.SEVERITA_ERROR_INTEGRATION) {
  192.                     errori.add(diag.getMessaggio());
  193.                 }
  194.             }
  195.         }
  196.        
  197.         TransazioneBase transazione = null;
  198.         if(extended) {
  199.             transazione = new TransazioneExt();
  200.         }
  201.         else {
  202.             transazione = new Transazione();
  203.         }
  204.        
  205.         if(this.id) {
  206.             transazione.setIdTraccia(java.util.UUID.fromString(transazioneDB.getIdTransazione()));
  207.         }
  208.         if(this.dataEmissione) {
  209.             transazione.setDataEmissione(new DateTime(DateManager.getTimeMillis()));
  210.         }
  211.         if(this.idConversazione) {
  212.             transazione.setIdConversazione(transazioneDB.getIdCollaborazione());
  213.         }
  214.        
  215.         if(this.esito) {
  216.             TransazioneEsito esito = new TransazioneEsito();
  217.             esito.setCodice(transazioneDB.getEsito()+"");
  218.             try {
  219.                 EsitiProperties esitiProperties = EsitiProperties.getInstanceFromProtocolName(this.log, transazioneDB.getProtocollo());
  220.                 esito.setDescrizione(esitiProperties.getEsitoLabel(transazioneDB.getEsito()));
  221.             }catch(Throwable e) {
  222.                 if(this.throwInitProtocol) {
  223.                     throw e;
  224.                 }
  225.                 else {
  226.                     esito.setDescrizione("ok");
  227.                 }
  228.             }
  229.             transazione.setEsito(esito);
  230.         }
  231.        
  232.         TransazioneRuoloEnum ruoloTraccia = null;
  233.         if(PddRuolo.DELEGATA.equals(transazioneDB.getPddRuolo())){
  234.             ruoloTraccia = TransazioneRuoloEnum.FRUIZIONE;
  235.         }
  236.         else {
  237.             ruoloTraccia = TransazioneRuoloEnum.EROGAZIONE;
  238.         }
  239.        
  240.         IProtocolFactory<?> protocolFactory = null;
  241.         ITracciaSerializer tracciaSerializer = null;
  242.         if(extended) {
  243.             try {
  244.                 protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(transazioneDB.getProtocollo());
  245.                 if(protocolFactory.createProtocolConfiguration().isAbilitataGenerazioneTracce()) {
  246.                     tracciaSerializer = protocolFactory.createTracciaSerializer();
  247.                 }
  248.             }catch(Throwable e) {
  249.                 if(this.throwInitProtocol) {
  250.                     throw e;
  251.                 }
  252.             }
  253.             if(this.ruolo) {
  254.                 ((TransazioneExt)transazione).setRuolo(ruoloTraccia);
  255.             }
  256.             if(this.emittente) {
  257.                 if(transazioneDB.getPddNomeSoggetto()!=null) { // liste con dati dell'indice e basta, non c'è questo campo
  258.                     ((TransazioneExt)transazione).setEmittente(transazioneDB.getPddNomeSoggetto());
  259.                 }
  260.                 else if(PddRuolo.APPLICATIVA.equals(transazioneDB.getPddRuolo()) && transazioneDB.getNomeSoggettoErogatore()!=null) {
  261.                     ((TransazioneExt)transazione).setEmittente(transazioneDB.getNomeSoggettoErogatore());
  262.                 }
  263.                 else if(PddRuolo.DELEGATA.equals(transazioneDB.getPddRuolo()) && transazioneDB.getNomeSoggettoFruitore()!=null) {
  264.                     ((TransazioneExt)transazione).setEmittente(transazioneDB.getNomeSoggettoFruitore());
  265.                 }
  266.                 else {
  267.                     ((TransazioneExt)transazione).setEmittente(transazioneDB.getPddCodice());
  268.                 }
  269.             }
  270.             if(this.profilo) {
  271.                 ProfiloEnum profilo = ProfiloEnum.APIGATEWAY;
  272.                 if(transazioneDB.getProtocollo().equals(CostantiLabel.MODIPA_PROTOCOL_NAME)) {
  273.                     profilo = ProfiloEnum.MODIPA;
  274.                 }
  275.                 else if(transazioneDB.getProtocollo().equals(CostantiLabel.SPCOOP_PROTOCOL_NAME)) {
  276.                     profilo = ProfiloEnum.SPCOOP;
  277.                 }
  278.                 else if(transazioneDB.getProtocollo().equals(CostantiLabel.SDI_PROTOCOL_NAME)) {
  279.                     profilo = ProfiloEnum.FATTURAPA;
  280.                 }
  281.                 else if(transazioneDB.getProtocollo().equals(CostantiLabel.AS4_PROTOCOL_NAME)) {
  282.                     profilo = ProfiloEnum.EDELIVERY;
  283.                 }
  284.                 ((TransazioneExt)transazione).setProfilo(profilo);
  285.             }
  286.             if(this.contesto) {
  287.                 TransazioneContestoEnum contesto = TransazioneContestoEnum.STANDARD;
  288.                 if(transazioneDB.getEsitoContesto()!=null && !TransazioneContestoEnum.STANDARD.name().equalsIgnoreCase(transazioneDB.getEsitoContesto())) {
  289.                     contesto = TransazioneContestoEnum.SONDA;
  290.                 }
  291.                 ((TransazioneExt)transazione).setContesto(contesto);
  292.             }
  293.             if(this.idCluster) {
  294.                 ((TransazioneExt)transazione).setIdCluster(transazioneDB.getClusterId());
  295.             }
  296.             if(this.emittenteExtraInfo) {
  297.                 String tipoEmittente = transazioneDB.getPddTipoSoggetto(); // liste con dati dell'indice e basta, non c'è questo campo
  298.                 if(tipoEmittente==null) {
  299.                     if(PddRuolo.APPLICATIVA.equals(transazioneDB.getPddRuolo()) && transazioneDB.getTipoSoggettoErogatore()!=null) {
  300.                         tipoEmittente = transazioneDB.getTipoSoggettoErogatore();
  301.                     }
  302.                     else if(PddRuolo.DELEGATA.equals(transazioneDB.getPddRuolo()) && transazioneDB.getTipoSoggettoFruitore()!=null) {
  303.                         tipoEmittente = transazioneDB.getTipoSoggettoFruitore();
  304.                     }
  305.                     else {
  306.                         tipoEmittente = protocolFactory.createProtocolConfiguration().getTipoSoggettoDefault();
  307.                     }
  308.                 }
  309.                 ((TransazioneExt)transazione).setInformazioniEmittente(_newTransazioneSoggetto(tipoEmittente, transazioneDB.getPddCodice(), null));
  310.             }
  311.             if(this.stato) {
  312.                 ((TransazioneExt)transazione).setStato(transazioneDB.getStato());
  313.             }
  314.         }
  315.         else {
  316.             if(this.ruolo) {
  317.                 ((Transazione)transazione).setRuolo(ruoloTraccia);
  318.             }
  319.             if(this.emittente) {
  320.                 ((Transazione)transazione).setEmittente(transazioneDB.getPddNomeSoggetto());
  321.             }
  322.         }

  323.         TransazioneDettaglioMessaggio richiesta = null;
  324.         if(extended) {
  325.             richiesta = new TransazioneExtDettaglioRichiesta();
  326.         }
  327.         else {
  328.             richiesta = new TransazioneDettaglioRichiesta();
  329.         }
  330.         if(extended) {
  331.             if(this.messaggi_dimensione) {
  332.                 ((TransazioneExtDettaglioRichiesta)richiesta).setBytesIngresso(transazioneDB.getRichiestaIngressoBytes());
  333.                 ((TransazioneExtDettaglioRichiesta)richiesta).setBytesUscita(transazioneDB.getRichiestaUscitaBytes());
  334.             }
  335.             if(this.messaggi_dataAccettazione && transazioneDB.getDataAccettazioneRichiesta()!=null) {
  336.                 ((TransazioneExtDettaglioRichiesta)richiesta).setDataAccettazione(new DateTime(transazioneDB.getDataAccettazioneRichiesta().getTime()));
  337.             }
  338.         }
  339.         if(this.messaggi_id) {
  340.             richiesta.setId(transazioneDB.getIdMessaggioRichiesta());
  341.         }
  342.         if(this.messaggi_idApplicativo) {
  343.             richiesta.setIdApplicativo(transazioneDB.getIdCorrelazioneApplicativa());
  344.         }
  345.         if(extended) {
  346.             if(this.messaggi_data) {
  347.                 if(transazioneDB.getDataIngressoRichiesta()!=null) {
  348.                     ((TransazioneExtDettaglioRichiesta)richiesta).setDataRicezione(new DateTime(transazioneDB.getDataIngressoRichiesta().getTime()));
  349.                 }
  350.                 if(transazioneDB.getDataIngressoRichiestaStream()!=null) {
  351.                     ((TransazioneExtDettaglioRichiesta)richiesta).setDataRicezioneAcquisita(new DateTime(transazioneDB.getDataIngressoRichiestaStream().getTime()));
  352.                 }
  353.                 if(transazioneDB.getDataUscitaRichiesta()!=null) {
  354.                     ((TransazioneExtDettaglioRichiesta)richiesta).setDataConsegna(new DateTime(transazioneDB.getDataUscitaRichiesta().getTime()));
  355.                 }
  356.                 if(transazioneDB.getDataUscitaRichiestaStream()!=null) {
  357.                     ((TransazioneExtDettaglioRichiesta)richiesta).setDataConsegnaEffettuata(new DateTime(transazioneDB.getDataUscitaRichiestaStream().getTime()));
  358.                 }
  359.             }
  360.             if(this.richiesta_tipo && transazioneDB.getTipoRichiesta()!=null) {
  361.                 HttpMethodEnum methodEnum = HttpMethodEnum.fromValue(transazioneDB.getTipoRichiesta().toUpperCase());
  362.                 ((TransazioneExtDettaglioRichiesta)richiesta).setTipo(methodEnum);
  363.             }
  364.             if(this.richiesta_urlInvocazione) {
  365.                 ((TransazioneExtDettaglioRichiesta)richiesta).setUrlInvocazione(normalizeUrl(transazioneDB.getUrlInvocazione()));
  366.             }
  367.             if(this.richiesta_connettore) {
  368.                 ((TransazioneExtDettaglioRichiesta)richiesta).setConnettore(normalizeUrl(transazioneDB.getLocationConnettore()));
  369.             }
  370.             if(this.messaggi_duplicati) {
  371.                 ((TransazioneExtDettaglioRichiesta)richiesta).setDuplicatiMessaggio(transazioneDB.getDuplicatiRichiesta());
  372.             }
  373.             if(this.messaggi_tracciaProtocollo && tracciaSerializer!=null && tracciaRichiesta!=null) {
  374.                 ((TransazioneExtDettaglioRichiesta)richiesta).setTraccia(tracciaSerializer.toString(tracciaRichiesta, TipoSerializzazione.DEFAULT));
  375.             }
  376.             if(this.messaggi_contenuti) {
  377.                 ((TransazioneExtDettaglioRichiesta)richiesta).setContenutiIngresso(
  378.                         (TransazioneExtContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  379.                                 TipoMessaggio.RICHIESTA_INGRESSO, TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO ,true));
  380.                 ((TransazioneExtDettaglioRichiesta)richiesta).setContenutiUscita(
  381.                         (TransazioneExtContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  382.                                 TipoMessaggio.RICHIESTA_USCITA, TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO ,true));
  383.             }
  384.             ((TransazioneExt)transazione).setRichiesta((TransazioneExtDettaglioRichiesta) richiesta);
  385.         }
  386.         else {
  387.             if(this.messaggi_data) {
  388.                 if(transazioneDB.getDataIngressoRichiesta()!=null) {
  389.                     ((TransazioneDettaglioRichiesta)richiesta).setDataRicezione(new DateTime(transazioneDB.getDataIngressoRichiesta().getTime()));
  390.                 }
  391.                 if(transazioneDB.getDataUscitaRichiesta()!=null) {
  392.                     ((TransazioneDettaglioRichiesta)richiesta).setDataConsegna(new DateTime(transazioneDB.getDataUscitaRichiesta().getTime()));
  393.                 }
  394.             }
  395.             if(this.richiesta_tipo && transazioneDB.getTipoRichiesta()!=null) {
  396.                 HttpMethodEnum methodEnum = HttpMethodEnum.fromValue(transazioneDB.getTipoRichiesta().toUpperCase());
  397.                 ((TransazioneDettaglioRichiesta)richiesta).setTipo(methodEnum);
  398.             }
  399.             if(this.richiesta_urlInvocazione) {
  400.                 if(TransazioneRuoloEnum.FRUIZIONE.equals(ruoloTraccia)){
  401.                     ((TransazioneDettaglioRichiesta)richiesta).setUrlInvocazione(normalizeUrl(transazioneDB.getLocationConnettore()));
  402.                 }
  403.                 else {
  404.                     ((TransazioneDettaglioRichiesta)richiesta).setUrlInvocazione(normalizeUrl(transazioneDB.getUrlInvocazione()));
  405.                 }
  406.             }
  407.             if(this.messaggi_contenuti) {
  408.                 if(TransazioneRuoloEnum.FRUIZIONE.equals(ruoloTraccia)){
  409.                     ((TransazioneDettaglioRichiesta)richiesta).setContenuti(
  410.                             (TransazioneContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  411.                                     TipoMessaggio.RICHIESTA_USCITA, TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO ,false));
  412.                 }
  413.                 else {
  414.                     ((TransazioneDettaglioRichiesta)richiesta).setContenuti(
  415.                             (TransazioneContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  416.                                     TipoMessaggio.RICHIESTA_INGRESSO, TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO ,false));
  417.                 }
  418.             }
  419.             ((Transazione)transazione).setRichiesta((TransazioneDettaglioRichiesta) richiesta);
  420.         }
  421.        
  422.         TransazioneDettaglioMessaggio risposta = null;
  423.         if(extended) {
  424.             risposta = new TransazioneExtDettaglioRisposta();
  425.         }
  426.         else {
  427.             risposta = new TransazioneDettaglioRisposta();
  428.         }
  429.         if(extended) {
  430.             if(this.messaggi_dimensione) {
  431.                 ((TransazioneExtDettaglioRisposta)risposta).setBytesIngresso(transazioneDB.getRispostaIngressoBytes());
  432.                 ((TransazioneExtDettaglioRisposta)risposta).setBytesUscita(transazioneDB.getRispostaUscitaBytes());
  433.             }
  434.             if(this.messaggi_dataAccettazione && transazioneDB.getDataAccettazioneRisposta()!=null) {
  435.                 ((TransazioneExtDettaglioRisposta)risposta).setDataAccettazione(new DateTime(transazioneDB.getDataAccettazioneRisposta().getTime()));
  436.             }
  437.         }
  438.         if(this.messaggi_id) {
  439.             risposta.setId(transazioneDB.getIdMessaggioRisposta());
  440.         }
  441.         if(this.messaggi_idApplicativo) {
  442.             risposta.setIdApplicativo(transazioneDB.getIdCorrelazioneApplicativaRisposta());
  443.         }
  444.         if(extended) {
  445.             if(this.messaggi_data) {
  446.                 if(transazioneDB.getDataIngressoRisposta()!=null) {
  447.                     ((TransazioneExtDettaglioRisposta)risposta).setDataRicezione(new DateTime(transazioneDB.getDataIngressoRisposta().getTime()));
  448.                 }
  449.                 if(transazioneDB.getDataIngressoRispostaStream()!=null) {
  450.                     ((TransazioneExtDettaglioRisposta)risposta).setDataRicezioneAcquisita(new DateTime(transazioneDB.getDataIngressoRispostaStream().getTime()));
  451.                 }
  452.                 // inverto
  453.                 if(transazioneDB.getDataUscitaRisposta()!=null) {
  454.                     ((TransazioneExtDettaglioRisposta)risposta).setDataConsegnaEffettuata(new DateTime(transazioneDB.getDataUscitaRisposta().getTime()));
  455.                 }
  456.                 if(transazioneDB.getDataUscitaRispostaStream()!=null) {
  457.                     ((TransazioneExtDettaglioRisposta)risposta).setDataConsegna(new DateTime(transazioneDB.getDataUscitaRispostaStream().getTime()));
  458.                 }
  459.             }
  460.             if(this.risposta_esito) {
  461.                 ((TransazioneExtDettaglioRisposta)risposta).setEsitoConsegna(transazioneDB.getCodiceRispostaUscita());
  462.                 ((TransazioneExtDettaglioRisposta)risposta).setEsitoRicezione(transazioneDB.getCodiceRispostaIngresso());
  463.             }
  464.             if(this.messaggi_duplicati) {
  465.                 ((TransazioneExtDettaglioRisposta)risposta).setDuplicatiMessaggio(transazioneDB.getDuplicatiRisposta());
  466.             }
  467.             if(this.messaggi_tracciaProtocollo && tracciaSerializer!=null && tracciaRisposta!=null) {
  468.                 ((TransazioneExtDettaglioRisposta)risposta).setTraccia(tracciaSerializer.toString(tracciaRisposta, TipoSerializzazione.DEFAULT));
  469.             }
  470.             if(this.messaggi_contenuti) {
  471.                 ((TransazioneExtDettaglioRisposta)risposta).setContenutiIngresso(
  472.                         (TransazioneExtContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  473.                                 TipoMessaggio.RISPOSTA_INGRESSO, TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO ,true));
  474.                 ((TransazioneExtDettaglioRisposta)risposta).setContenutiUscita(
  475.                         (TransazioneExtContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  476.                                 TipoMessaggio.RISPOSTA_USCITA, TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO ,true));
  477.             }
  478.             if(this.risposta_fault) {
  479.                 if(TransazioneRuoloEnum.FRUIZIONE.equals(ruoloTraccia)){
  480.                     if(transazioneDB.getFaultCooperazione()!=null) {
  481.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultRicezione(transazioneDB.getFaultCooperazione().getBytes());
  482.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultRicezioneFormato(_convert(transazioneDB.getFormatoFaultCooperazione()));
  483.                     }
  484.                     if(transazioneDB.getFaultIntegrazione()!=null) {
  485.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultConsegna(transazioneDB.getFaultIntegrazione().getBytes());
  486.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultConsegnaFormato(_convert(transazioneDB.getFormatoFaultIntegrazione()));
  487.                     }
  488.                 }
  489.                 else {
  490.                     if(transazioneDB.getFaultCooperazione()!=null) {
  491.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultConsegna(transazioneDB.getFaultCooperazione().getBytes());
  492.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultConsegnaFormato(_convert(transazioneDB.getFormatoFaultCooperazione()));
  493.                     }
  494.                     if(transazioneDB.getFaultIntegrazione()!=null) {
  495.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultRicezione(transazioneDB.getFaultIntegrazione().getBytes());
  496.                         ((TransazioneExtDettaglioRisposta)risposta).setFaultRicezioneFormato(_convert(transazioneDB.getFormatoFaultIntegrazione()));
  497.                     }
  498.                 }
  499.             }
  500.             if(this.risposta_errori && !errori.isEmpty()) {
  501.                 ((TransazioneExtDettaglioRisposta)risposta).setDettagliErrore(new ArrayList<>());
  502.                 for (String errore : errori) {
  503.                     ((TransazioneExtDettaglioRisposta)risposta).getDettagliErrore().add(errore);
  504.                 }
  505.             }
  506.             ((TransazioneExt)transazione).setRisposta(((TransazioneExtDettaglioRisposta)risposta));
  507.         }
  508.         else {
  509.             if(this.messaggi_data) {
  510.                 if(transazioneDB.getDataIngressoRisposta()!=null) {
  511.                     ((TransazioneDettaglioRisposta)risposta).setDataRicezione(new DateTime(transazioneDB.getDataIngressoRisposta().getTime()));
  512.                 }
  513.                 if(transazioneDB.getDataUscitaRisposta()!=null) {
  514.                     ((TransazioneDettaglioRisposta)risposta).setDataConsegna(new DateTime(transazioneDB.getDataUscitaRisposta().getTime()));
  515.                 }
  516.             }
  517.             if(this.risposta_esito) {
  518.                 ((TransazioneDettaglioRisposta)risposta).setEsitoConsegna(transazioneDB.getCodiceRispostaUscita());
  519.                 ((TransazioneDettaglioRisposta)risposta).setEsitoRicezione(transazioneDB.getCodiceRispostaIngresso());
  520.             }
  521.             if(this.messaggi_contenuti) {
  522.                 if(TransazioneRuoloEnum.FRUIZIONE.equals(ruoloTraccia)){
  523.                     ((TransazioneDettaglioRisposta)risposta).setContenuti(
  524.                             (TransazioneContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  525.                                     TipoMessaggio.RISPOSTA_INGRESSO, TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO ,false));
  526.                 }
  527.                 else {
  528.                     ((TransazioneDettaglioRisposta)risposta).setContenuti(
  529.                             (TransazioneContenutoMessaggio) newTransazioneContenutoMessaggio(transazioneDB,
  530.                                     TipoMessaggio.RISPOSTA_USCITA, TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO ,false));
  531.                 }
  532.             }
  533.             if(this.risposta_fault) {
  534.                 if(TransazioneRuoloEnum.FRUIZIONE.equals(ruoloTraccia)){
  535.                     if(transazioneDB.getFaultCooperazione()!=null) {
  536.                         ((TransazioneDettaglioRisposta)risposta).setFaultRicezione(transazioneDB.getFaultCooperazione().getBytes());
  537.                     }
  538.                     if(transazioneDB.getFaultIntegrazione()!=null) {
  539.                         ((TransazioneDettaglioRisposta)risposta).setFaultConsegna(transazioneDB.getFaultIntegrazione().getBytes());
  540.                     }
  541.                 }
  542.                 else {
  543.                     if(transazioneDB.getFaultCooperazione()!=null) {
  544.                         ((TransazioneDettaglioRisposta)risposta).setFaultConsegna(transazioneDB.getFaultCooperazione().getBytes());
  545.                     }
  546.                     if(transazioneDB.getFaultIntegrazione()!=null) {
  547.                         ((TransazioneDettaglioRisposta)risposta).setFaultRicezione(transazioneDB.getFaultIntegrazione().getBytes());
  548.                     }
  549.                 }
  550.             }
  551.             if(this.risposta_errori && !errori.isEmpty()) {
  552.                 ((TransazioneDettaglioRisposta)risposta).setDettagliErrore(new ArrayList<>());
  553.                 for (String errore : errori) {
  554.                     ((TransazioneDettaglioRisposta)risposta).getDettagliErrore().add(errore);
  555.                 }
  556.             }
  557.             ((Transazione)transazione).setRisposta(((TransazioneDettaglioRisposta)risposta));
  558.         }
  559.        
  560.        
  561.        
  562.         TransazioneInformazioniApi api = null;
  563.         if(extended) {
  564.             api = new TransazioneExtInformazioniApi();
  565.         }
  566.         else {
  567.             api = new TransazioneInformazioniApi();
  568.         }
  569.         if(extended) {
  570.             if(this.api_erogatoreExtraInfo) {
  571.                 if(transazioneDB.getNomeSoggettoErogatore()!=null && transazioneDB.getTipoSoggettoErogatore()!=null) {
  572.                     String idPorta = transazioneDB.getIdportaSoggettoErogatore();
  573.                     if(idPorta==null || "".equals(idPorta)) {
  574.                         idPorta = protocolFactory.createTraduttore().getIdentificativoPortaDefault(new IDSoggetto(transazioneDB.getTipoSoggettoErogatore(), transazioneDB.getNomeSoggettoErogatore()));
  575.                     }
  576.                     ((TransazioneExtInformazioniApi)api).setInformazioniErogatore(_newTransazioneSoggetto(transazioneDB.getTipoSoggettoErogatore(),
  577.                             idPorta, transazioneDB.getIndirizzoSoggettoErogatore()));
  578.                 }
  579.             }
  580.             if(this.api_tipo) {
  581.                 ((TransazioneExtInformazioniApi)api).setTipo(transazioneDB.getTipoServizio());
  582.             }
  583.         }
  584.         if(this.api_erogatore) {
  585.             api.setErogatore(transazioneDB.getNomeSoggettoErogatore());
  586.         }
  587.         if(this.api_tags) {
  588.             if(transazioneDB.getGruppi()!=null && !"".equals(transazioneDB.getGruppi())) {
  589.                 String [] tmp = transazioneDB.getGruppi().split(",");
  590.                 if(tmp!=null && tmp.length>0) {
  591.                     ((TransazioneExtInformazioniApi)api).setTags(new ArrayList<>());
  592.                     for (String tag : tmp) {
  593.                         if(tag!=null && !"".equals(tag.trim())) {
  594.                             ((TransazioneExtInformazioniApi)api).addTagsItem(tag.trim());
  595.                         }
  596.                     }
  597.                 }
  598.             }
  599.         }
  600.         if(this.api_nome) {
  601.             api.setNome(transazioneDB.getNomeServizio());
  602.         }
  603.         if(this.api_versione) {
  604.             api.setVersione(transazioneDB.getVersioneServizio());
  605.         }
  606.         if(this.api_operazione) {
  607.             api.setOperazione(transazioneDB.getAzione());
  608.         }
  609.         if(extended) {
  610.             if(this.api_idAsincrono) {
  611.                 ((TransazioneExtInformazioniApi)api).setIdAsincrono(transazioneDB.getIdAsincrono());
  612.             }
  613.             if(this.api_profiloCollaborazione && transazioneDB.getProfiloCollaborazioneOp2()!=null) {
  614.                 ProfiloDiCollaborazione prof = ProfiloDiCollaborazione.toProfiloDiCollaborazione(transazioneDB.getProfiloCollaborazioneOp2());
  615.                 if(prof!=null) {
  616.                     switch (prof) {
  617.                     case ONEWAY:
  618.                         ((TransazioneExtInformazioniApi)api).setProfiloCollaborazione(ProfiloCollaborazioneEnum.ONEWAY);        
  619.                         break;
  620.                     case SINCRONO:
  621.                         ((TransazioneExtInformazioniApi)api).setProfiloCollaborazione(ProfiloCollaborazioneEnum.SINCRONO);      
  622.                         break;
  623.                     case ASINCRONO_SIMMETRICO:
  624.                         ((TransazioneExtInformazioniApi)api).setProfiloCollaborazione(ProfiloCollaborazioneEnum.ASINCRONOSIMMETRICO);      
  625.                         break;
  626.                     case ASINCRONO_ASIMMETRICO:
  627.                         ((TransazioneExtInformazioniApi)api).setProfiloCollaborazione(ProfiloCollaborazioneEnum.ASINCRONOASIMMETRICO);      
  628.                         break;
  629.                     case UNKNOWN:
  630.                         break;
  631.                     }
  632.                 }
  633.             }
  634.             ((TransazioneExt)transazione).setApi(((TransazioneExtInformazioniApi)api));
  635.         }
  636.         else {
  637.             ((Transazione)transazione).setApi(api);
  638.         }
  639.        
  640.         TransazioneInformazioniMittente mittente = null;
  641.         if(extended) {
  642.             mittente = new TransazioneExtInformazioniMittente();
  643.         }
  644.         else {
  645.             mittente = new TransazioneInformazioniMittente();
  646.         }
  647.         if(extended) {
  648.             if(this.mittente_fruitoreExtraInfo) {
  649.                 if(transazioneDB.getNomeSoggettoFruitore()!=null && transazioneDB.getTipoSoggettoFruitore()!=null) {
  650.                     String idPorta = transazioneDB.getIdportaSoggettoFruitore();
  651.                     if(idPorta==null || "".equals(idPorta)) {
  652.                         idPorta = protocolFactory.createTraduttore().getIdentificativoPortaDefault(new IDSoggetto(transazioneDB.getTipoSoggettoFruitore(), transazioneDB.getNomeSoggettoFruitore()));
  653.                     }
  654.                     ((TransazioneExtInformazioniMittente)mittente).setInformazioniFruitore(_newTransazioneSoggetto(transazioneDB.getTipoSoggettoFruitore(),
  655.                             idPorta, transazioneDB.getIndirizzoSoggettoFruitore()));
  656.                 }
  657.             }
  658.             if(this.mittente_applicativo) {
  659.                 ((TransazioneExtInformazioniMittente)mittente).setApplicativo(transazioneDB.getServizioApplicativoFruitore());
  660.             }
  661.             if(this.mittente_credenziali) {
  662.                 ((TransazioneExtInformazioniMittente)mittente).setCredenziali(transazioneDB.getCredenziali());
  663.             }
  664.             if(this.mittente_applicativoToken && credenzialiMittente!=null && credenzialiMittente.getTokenClientId()!=null) {
  665.                 IDServizioApplicativo idSA = CredenzialeTokenClient.convertApplicationDBValueToOriginal(credenzialiMittente.getTokenClientId().getCredenziale());
  666.                 if(idSA!=null) {
  667.                     ((TransazioneExtInformazioniMittente)mittente).setApplicativoToken(new TransazioneExtInformazioniMittenteApplicativoToken());
  668.                     ((TransazioneExtInformazioniMittente)mittente).getApplicativoToken().setNome(idSA.getNome());
  669.                     ((TransazioneExtInformazioniMittente)mittente).getApplicativoToken().setSoggetto(idSA.getIdSoggettoProprietario().getNome());
  670.                     String idPorta = protocolFactory.createTraduttore().getIdentificativoPortaDefault(new IDSoggetto(idSA.getIdSoggettoProprietario().getTipo(), idSA.getIdSoggettoProprietario().getNome()));
  671.                     ((TransazioneExtInformazioniMittente)mittente).getApplicativoToken().setInformazioniSoggetto(_newTransazioneSoggetto(idSA.getIdSoggettoProprietario().getTipo(),
  672.                             idPorta, null));
  673.                 }
  674.             }
  675.         }
  676.         if(this.mittente_principal && credenzialiMittente!=null && credenzialiMittente.getTrasporto()!=null) {
  677.             mittente.setPrincipal(credenzialiMittente.getTrasporto().getCredenziale());
  678.         }
  679.         if(this.mittente_fruitore) {
  680.             mittente.setFruitore(transazioneDB.getNomeSoggettoFruitore());
  681.         }
  682.         if(this.mittente_utente && credenzialiMittente!=null && credenzialiMittente.getTokenUsername()!=null) {
  683.             mittente.setUtente(credenzialiMittente.getTokenUsername().getCredenziale());
  684.         }
  685.         if(this.mittente_client && credenzialiMittente!=null && credenzialiMittente.getTokenClientId()!=null) {
  686.             mittente.setClient(CredenzialeTokenClient.convertClientIdDBValueToOriginal(credenzialiMittente.getTokenClientId().getCredenziale()));
  687.         }
  688.         if(this.mittente_indirizzoClient) {
  689.             mittente.setIndirizzoClient(transazioneDB.getSocketClientAddress());
  690.         }
  691.         if(this.mittente_indirizzoClientInoltrato) {
  692.             mittente.setIndirizzoClientInoltrato(transazioneDB.getTransportClientAddress());
  693.         }
  694.        
  695.         if(extended) {
  696.             if((this.mittente_tokenClaims && credenzialiMittente!=null) || (this.mittente_token && transazioneDB.getTokenInfo()!=null)) {
  697.                 TransazioneExtInformazioniToken informazioniToken = new TransazioneExtInformazioniToken();
  698.                 boolean add = false;
  699.                 if(this.mittente_tokenClaims && credenzialiMittente!=null) {
  700.                     if(credenzialiMittente.getTokenClientId()!=null) {
  701.                         informazioniToken.setClientId(CredenzialeTokenClient.convertClientIdDBValueToOriginal(credenzialiMittente.getTokenClientId().getCredenziale()));
  702.                         add=true;
  703.                     }
  704.                     if(credenzialiMittente.getTokenIssuer()!=null) {
  705.                         informazioniToken.setIssuer(credenzialiMittente.getTokenIssuer().getCredenziale());
  706.                         add=true;
  707.                     }
  708.                     if(credenzialiMittente.getTokenSubject()!=null) {
  709.                         informazioniToken.setSubject(credenzialiMittente.getTokenSubject().getCredenziale());
  710.                         add=true;
  711.                     }
  712.                     if(credenzialiMittente.getTokenUsername()!=null) {
  713.                         informazioniToken.setUsername(credenzialiMittente.getTokenUsername().getCredenziale());
  714.                         add=true;
  715.                     }
  716.                     if(credenzialiMittente.getTokenEMail()!=null) {
  717.                         informazioniToken.setMail(credenzialiMittente.getTokenEMail().getCredenziale());
  718.                         add=true;
  719.                     }
  720.                 }
  721.                 if (transazioneDB.getTokenPurposeId() != null) {
  722.                     informazioniToken.setPurposeId(transazioneDB.getTokenPurposeId());
  723.                     add=true;
  724.                 }
  725.                 if (transazioneDB.getTokenId() != null) {
  726.                     informazioniToken.setTokenId(transazioneDB.getTokenId());
  727.                     add=true;
  728.                 }
  729.                 if(add) {
  730.                     ((TransazioneExtInformazioniMittente)mittente).setInformazioniToken(informazioniToken);
  731.                 }
  732.                 if(this.mittente_token && transazioneDB.getTokenInfo()!=null) {
  733.                     ((TransazioneExtInformazioniMittente)mittente).setToken(transazioneDB.getTokenInfo().getBytes());
  734.                 }
  735.             }
  736.             ((TransazioneExt)transazione).setMittente((TransazioneExtInformazioniMittente)mittente);
  737.         }
  738.         else {
  739.             ((Transazione)transazione).setMittente(mittente);
  740.         }
  741.        
  742.         if(extended) {
  743.        
  744.             if(messaggiDiagnostici!=null && messaggiDiagnostici.size()>0) {
  745.            
  746.                 ((TransazioneExt)transazione).setDiagnostici(new ArrayList<>());
  747.                
  748.                 for (MsgDiagnostico msgDiag : messaggiDiagnostici) {
  749.                     Diagnostico diag = new Diagnostico();
  750.                     diag.setCodice(msgDiag.getCodice());
  751.                     diag.setData(new DateTime(msgDiag.getGdo().getTime()));
  752.                     diag.setFunzione(msgDiag.getIdFunzione());
  753.                     diag.setMessaggio(msgDiag.getMessaggio());
  754.                     DiagnosticoSeveritaEnum severita = null;
  755.                     if(LogLevels.SEVERITA_FATAL == msgDiag.getSeverita()) {
  756.                         severita = DiagnosticoSeveritaEnum.FATAL;
  757.                     }
  758.                     else if(LogLevels.SEVERITA_ERROR_INTEGRATION == msgDiag.getSeverita() || LogLevels.SEVERITA_ERROR_PROTOCOL == msgDiag.getSeverita()) {
  759.                         severita = DiagnosticoSeveritaEnum.ERROR;
  760.                     }
  761.                     else if(LogLevels.SEVERITA_INFO_INTEGRATION == msgDiag.getSeverita() || LogLevels.SEVERITA_INFO_PROTOCOL == msgDiag.getSeverita()) {
  762.                         severita = DiagnosticoSeveritaEnum.INFO;
  763.                     }
  764.                     else if(LogLevels.SEVERITA_DEBUG_LOW == msgDiag.getSeverita() || LogLevels.SEVERITA_DEBUG_MEDIUM == msgDiag.getSeverita()) {
  765.                         severita = DiagnosticoSeveritaEnum.DEBUG;
  766.                     }
  767.                     else {
  768.                         severita = DiagnosticoSeveritaEnum.TRACE;
  769.                     }
  770.                     diag.setSeverita(severita);
  771.                     diag.setSeveritaCodice(msgDiag.getCodice());
  772.                     ((TransazioneExt)transazione).getDiagnostici().add(diag);
  773.                 }
  774.            
  775.             }
  776.            
  777.         }
  778.        
  779.         return transazione;

  780.     }
  781.    
  782.     private String normalizeUrl(String url) {
  783.         if(url!=null) {
  784.             if(url.startsWith("[") && url.contains("] ") && !url.endsWith("] ")) {
  785.                 return url.substring(url.indexOf("] ")+2);
  786.             }
  787.         }
  788.         return url;
  789.     }
  790.    
  791.     private TransazioneExtInformazioniSoggetto _newTransazioneSoggetto(String tipo, String codice, String indirizzo) {
  792.         TransazioneExtInformazioniSoggetto soggetto = new TransazioneExtInformazioniSoggetto();
  793.         soggetto.setTipo(tipo);
  794.         soggetto.setCodice(codice);
  795.         soggetto.setIndirizzo(indirizzo);
  796.         return soggetto;
  797.     }
  798.    
  799.     private TransazioneContenutoMessaggio newTransazioneContenutoMessaggio(org.openspcoop2.core.transazioni.Transazione transazioneDB,
  800.             TipoMessaggio tipoMessaggioNormale, TipoMessaggio tipoMessaggioBinario, boolean extended) {
  801.        
  802.         DumpMessaggio dumpMessaggio = null;
  803.         if(transazioneDB.sizeDumpMessaggioList()>0) {
  804.             for (DumpMessaggio check : transazioneDB.getDumpMessaggioList()) {
  805.                 if(tipoMessaggioBinario.equals(check.getTipoMessaggio())) {
  806.                     dumpMessaggio = check;
  807.                     break;
  808.                 }
  809.             }
  810.             if(dumpMessaggio==null) {
  811.                 for (DumpMessaggio check : transazioneDB.getDumpMessaggioList()) {
  812.                     if(tipoMessaggioNormale.equals(check.getTipoMessaggio())) {
  813.                         dumpMessaggio = check;
  814.                         break;
  815.                     }
  816.                 }
  817.             }
  818.         }
  819.         if(dumpMessaggio==null) {
  820.             return null;
  821.         }      
  822.        
  823.         TransazioneContenutoMessaggio msg = null;
  824.         if(extended) {
  825.             msg = new TransazioneExtContenutoMessaggio();
  826.         }
  827.         else {
  828.             msg = new TransazioneContenutoMessaggio();
  829.         }
  830.        
  831.         msg.setBody(dumpMessaggio.getBody());
  832.        
  833.         if(dumpMessaggio.sizeHeaderTrasportoList()>0) {
  834.             msg.setHeaders(new ArrayList<>());
  835.             for (DumpHeaderTrasporto dumpHeaderTrasporto : dumpMessaggio.getHeaderTrasportoList()) {
  836.                 TransazioneContenutoMessaggioHeader hdr = new TransazioneContenutoMessaggioHeader();
  837.                 hdr.setNome(dumpHeaderTrasporto.getNome());
  838.                 hdr.setValore(dumpHeaderTrasporto.getValore());
  839.                 msg.getHeaders().add(hdr);
  840.             }
  841.         }
  842.        
  843.         if(extended) {
  844.             TransazioneExtContenutoMessaggioBody body = new TransazioneExtContenutoMessaggioBody();
  845.             body.setFormato(_convert(dumpMessaggio.getFormatoMessaggio()));
  846.             body.setContentType(dumpMessaggio.getContentType());
  847.             body.setContentLength(dumpMessaggio.getContentLength());
  848.             if(dumpMessaggio.getMultipartContentId()!=null ||
  849.                     dumpMessaggio.getMultipartContentLocation()!=null ||
  850.                     dumpMessaggio.getMultipartContentType()!=null ||
  851.                     dumpMessaggio.sizeMultipartHeaderList()>0) {
  852.                 TransazioneExtContenutoMessaggioBodyMultipart multipart = new TransazioneExtContenutoMessaggioBodyMultipart();
  853.                 multipart.setContentId(dumpMessaggio.getMultipartContentId());
  854.                 multipart.setContentType(dumpMessaggio.getMultipartContentType());
  855.                 multipart.setContentLocation(dumpMessaggio.getMultipartContentLocation());
  856.                 if(dumpMessaggio.sizeMultipartHeaderList()>0) {
  857.                     multipart.setHeaders(new ArrayList<>());
  858.                     for (DumpMultipartHeader dumpHeaderTrasporto : dumpMessaggio.getMultipartHeaderList()) {
  859.                         TransazioneContenutoMessaggioHeader hdr = new TransazioneContenutoMessaggioHeader();
  860.                         hdr.setNome(dumpHeaderTrasporto.getNome());
  861.                         hdr.setValore(dumpHeaderTrasporto.getValore());
  862.                         multipart.getHeaders().add(hdr);
  863.                     }
  864.                 }
  865.                 body.setMultipart(multipart);
  866.             }
  867.             if(dumpMessaggio.sizeContenutoList()>0) {
  868.                 body.setContenutiBody(new ArrayList<>());
  869.                 for (DumpContenuto contenuto : dumpMessaggio.getContenutoList()) {
  870.                     TransazioneExtContenutoMessaggioPorzioneBody r = new TransazioneExtContenutoMessaggioPorzioneBody();
  871.                     r.setNome(contenuto.getNome());
  872.                     r.setValore(contenuto.getValore());
  873.                     body.getContenutiBody().add(r);    
  874.                 }
  875.             }
  876.             ((TransazioneExtContenutoMessaggio)msg).setInformazioniBody(body);

  877.             if(dumpMessaggio.sizeAllegatoList()>0) {
  878.                 ((TransazioneExtContenutoMessaggio)msg).setAttachments(new ArrayList<>());
  879.                 for (DumpAllegato dumpAllegato : dumpMessaggio.getAllegatoList()) {
  880.                     TransazioneExtContenutoMessaggioAllegato attach = new TransazioneExtContenutoMessaggioAllegato();
  881.                     attach.setContentId(dumpAllegato.getContentId());
  882.                     attach.setContentType(dumpAllegato.getContentType());
  883.                     attach.setContentLocation(dumpAllegato.getContentLocation());
  884.                     attach.setContenuto(dumpAllegato.getAllegato());
  885.                     if(dumpAllegato.sizeHeaderList()>0) {
  886.                         dumpAllegato.setHeaderList(new ArrayList<>());
  887.                         for (DumpHeaderAllegato dumpHeaderAllegato : dumpAllegato.getHeaderList()) {
  888.                             TransazioneContenutoMessaggioHeader hdr = new TransazioneContenutoMessaggioHeader();
  889.                             hdr.setNome(dumpHeaderAllegato.getNome());
  890.                             hdr.setValore(dumpHeaderAllegato.getValore());
  891.                             attach.getHeaders().add(hdr);
  892.                         }
  893.                     }
  894.                     ((TransazioneExtContenutoMessaggio)msg).getAttachments().add(attach);
  895.                 }
  896.             }
  897.         }
  898.        

  899.        
  900.         return msg;
  901.     }
  902.    
  903.     private TransazioneMessaggioFormatoEnum _convert(String formato) {
  904.         if(formato==null) {
  905.             return null;
  906.         }
  907.         MessageType tipoMessaggio = null;
  908.         try {
  909.             tipoMessaggio = MessageType.valueOf(formato);
  910.         }catch(Throwable t) {}
  911.         if(tipoMessaggio==null) {
  912.             return null;
  913.         }
  914.         switch (tipoMessaggio) {
  915.         case SOAP_11:
  916.             return TransazioneMessaggioFormatoEnum.SOAP11;
  917.         case SOAP_12:
  918.             return TransazioneMessaggioFormatoEnum.SOAP12;
  919.         case JSON:
  920.             return TransazioneMessaggioFormatoEnum.JSON;
  921.         case XML:
  922.             return TransazioneMessaggioFormatoEnum.XML;
  923.         case BINARY:
  924.             return TransazioneMessaggioFormatoEnum.BINARY;
  925.         case MIME_MULTIPART:
  926.             return TransazioneMessaggioFormatoEnum.MULTIPART;
  927.         }
  928.         return null;
  929.     }
  930.    
  931.    
  932.    
  933.     // SETTER
  934.    
  935.     public void setLog(Logger log) {
  936.         this.log = log;
  937.     }


  938.     public void setThrowInitProtocol(boolean throwInitProtocol) {
  939.         this.throwInitProtocol = throwInitProtocol;
  940.     }


  941.     public void setEmittente(boolean emittente) {
  942.         this.emittente = emittente;
  943.     }


  944.     public void setDataEmissione(boolean dataEmissione) {
  945.         this.dataEmissione = dataEmissione;
  946.     }


  947.     public void setId(boolean id) {
  948.         this.id = id;
  949.     }


  950.     public void setIdConversazione(boolean idConversazione) {
  951.         this.idConversazione = idConversazione;
  952.     }


  953.     public void setRuolo(boolean ruolo) {
  954.         this.ruolo = ruolo;
  955.     }


  956.     public void setEsito(boolean esito) {
  957.         this.esito = esito;
  958.     }


  959.     public void setMessaggi_id(boolean messaggi_id) {
  960.         this.messaggi_id = messaggi_id;
  961.     }


  962.     public void setMessaggi_idApplicativo(boolean messaggi_idApplicativo) {
  963.         this.messaggi_idApplicativo = messaggi_idApplicativo;
  964.     }


  965.     public void setMessaggi_data(boolean messaggi_data) {
  966.         this.messaggi_data = messaggi_data;
  967.     }


  968.     public void setMessaggi_contenuti(boolean messaggi_contenuti) {
  969.         this.messaggi_contenuti = messaggi_contenuti;
  970.     }


  971.     public void setRichiesta_tipo(boolean richiesta_tipo) {
  972.         this.richiesta_tipo = richiesta_tipo;
  973.     }


  974.     public void setRichiesta_urlInvocazione(boolean richiesta_urlInvocazione) {
  975.         this.richiesta_urlInvocazione = richiesta_urlInvocazione;
  976.     }


  977.     public void setRisposta_esito(boolean risposta_esito) {
  978.         this.risposta_esito = risposta_esito;
  979.     }


  980.     public void setRisposta_fault(boolean risposta_fault) {
  981.         this.risposta_fault = risposta_fault;
  982.     }


  983.     public void setRisposta_errori(boolean risposta_errori) {
  984.         this.risposta_errori = risposta_errori;
  985.     }


  986.     public void setApi_erogatore(boolean api_erogatore) {
  987.         this.api_erogatore = api_erogatore;
  988.     }


  989.     public void setApi_nome(boolean api_nome) {
  990.         this.api_nome = api_nome;
  991.     }


  992.     public void setApi_versione(boolean api_versione) {
  993.         this.api_versione = api_versione;
  994.     }


  995.     public void setApi_operazione(boolean api_operazione) {
  996.         this.api_operazione = api_operazione;
  997.     }


  998.     public void setMittente_fruitore(boolean mittente_fruitore) {
  999.         this.mittente_fruitore = mittente_fruitore;
  1000.     }


  1001.     public void setMittente_principal(boolean mittente_principal) {
  1002.         this.mittente_principal = mittente_principal;
  1003.     }

  1004.    
  1005.     public void setMittente_utente(boolean mittente_utente) {
  1006.         this.mittente_utente = mittente_utente;
  1007.     }
  1008.    
  1009.    
  1010.     public void setMittente_client(boolean mittente_client) {
  1011.         this.mittente_client = mittente_client;
  1012.     }
  1013.    

  1014.     public void setMittente_indirizzoClient(boolean mittente_indirizzoClient) {
  1015.         this.mittente_indirizzoClient = mittente_indirizzoClient;
  1016.     }


  1017.     public void setMittente_indirizzoClientInoltrato(boolean mittente_indirizzoClientInoltrato) {
  1018.         this.mittente_indirizzoClientInoltrato = mittente_indirizzoClientInoltrato;
  1019.     }


  1020.     public void setProfilo(boolean profilo) {
  1021.         this.profilo = profilo;
  1022.     }


  1023.     public void setContesto(boolean contesto) {
  1024.         this.contesto = contesto;
  1025.     }


  1026.     public void setIdCluster(boolean idCluster) {
  1027.         this.idCluster = idCluster;
  1028.     }


  1029.     public void setEmittenteExtraInfo(boolean emittenteExtraInfo) {
  1030.         this.emittenteExtraInfo = emittenteExtraInfo;
  1031.     }


  1032.     public void setStato(boolean stato) {
  1033.         this.stato = stato;
  1034.     }


  1035.     public void setMessaggi_dimensione(boolean messaggi_dimensione) {
  1036.         this.messaggi_dimensione = messaggi_dimensione;
  1037.     }


  1038.     public void setMessaggi_dataAccettazione(boolean messaggi_dataAccettazione) {
  1039.         this.messaggi_dataAccettazione = messaggi_dataAccettazione;
  1040.     }


  1041.     public void setMessaggi_duplicati(boolean messaggi_duplicati) {
  1042.         this.messaggi_duplicati = messaggi_duplicati;
  1043.     }


  1044.     public void setMessaggi_tracciaProtocollo(boolean messaggi_tracciaProtocollo) {
  1045.         this.messaggi_tracciaProtocollo = messaggi_tracciaProtocollo;
  1046.     }


  1047.     public void setRichiesta_connettore(boolean richiesta_connettore) {
  1048.         this.richiesta_connettore = richiesta_connettore;
  1049.     }


  1050.     public void setDiagnostici(boolean diagnostici) {
  1051.         this.diagnostici = diagnostici;
  1052.     }


  1053.     public void setApi_erogatoreExtraInfo(boolean api_erogatoreExtraInfo) {
  1054.         this.api_erogatoreExtraInfo = api_erogatoreExtraInfo;
  1055.     }

  1056.     public void setApi_tags(boolean api_tags) {
  1057.         this.api_tags = api_tags;
  1058.     }

  1059.     public void setApi_tipo(boolean api_tipo) {
  1060.         this.api_tipo = api_tipo;
  1061.     }


  1062.     public void setApi_idAsincrono(boolean api_idAsincrono) {
  1063.         this.api_idAsincrono = api_idAsincrono;
  1064.     }


  1065.     public void setApi_profiloCollaborazione(boolean api_profiloCollaborazione) {
  1066.         this.api_profiloCollaborazione = api_profiloCollaborazione;
  1067.     }


  1068.     public void setMittente_fruitoreExtraInfo(boolean mittente_fruitoreExtraInfo) {
  1069.         this.mittente_fruitoreExtraInfo = mittente_fruitoreExtraInfo;
  1070.     }


  1071.     public void setMittente_applicativo(boolean mittente_applicativo) {
  1072.         this.mittente_applicativo = mittente_applicativo;
  1073.     }


  1074.     public void setMittente_credenziali(boolean mittente_credenziali) {
  1075.         this.mittente_credenziali = mittente_credenziali;
  1076.     }


  1077.     public void setMittente_token(boolean mittente_token) {
  1078.         this.mittente_token = mittente_token;
  1079.     }


  1080.     public void setMittente_tokenClaims(boolean mittente_tokenClaims) {
  1081.         this.mittente_tokenClaims = mittente_tokenClaims;
  1082.     }
  1083. }