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(add) {
  722.                     ((TransazioneExtInformazioniMittente)mittente).setInformazioniToken(informazioniToken);
  723.                 }
  724.                 if(this.mittente_token && transazioneDB.getTokenInfo()!=null) {
  725.                     ((TransazioneExtInformazioniMittente)mittente).setToken(transazioneDB.getTokenInfo().getBytes());
  726.                 }
  727.             }
  728.             ((TransazioneExt)transazione).setMittente((TransazioneExtInformazioniMittente)mittente);
  729.         }
  730.         else {
  731.             ((Transazione)transazione).setMittente(mittente);
  732.         }
  733.        
  734.         if(extended) {
  735.        
  736.             if(messaggiDiagnostici!=null && messaggiDiagnostici.size()>0) {
  737.            
  738.                 ((TransazioneExt)transazione).setDiagnostici(new ArrayList<>());
  739.                
  740.                 for (MsgDiagnostico msgDiag : messaggiDiagnostici) {
  741.                     Diagnostico diag = new Diagnostico();
  742.                     diag.setCodice(msgDiag.getCodice());
  743.                     diag.setData(new DateTime(msgDiag.getGdo().getTime()));
  744.                     diag.setFunzione(msgDiag.getIdFunzione());
  745.                     diag.setMessaggio(msgDiag.getMessaggio());
  746.                     DiagnosticoSeveritaEnum severita = null;
  747.                     if(LogLevels.SEVERITA_FATAL == msgDiag.getSeverita()) {
  748.                         severita = DiagnosticoSeveritaEnum.FATAL;
  749.                     }
  750.                     else if(LogLevels.SEVERITA_ERROR_INTEGRATION == msgDiag.getSeverita() || LogLevels.SEVERITA_ERROR_PROTOCOL == msgDiag.getSeverita()) {
  751.                         severita = DiagnosticoSeveritaEnum.ERROR;
  752.                     }
  753.                     else if(LogLevels.SEVERITA_INFO_INTEGRATION == msgDiag.getSeverita() || LogLevels.SEVERITA_INFO_PROTOCOL == msgDiag.getSeverita()) {
  754.                         severita = DiagnosticoSeveritaEnum.INFO;
  755.                     }
  756.                     else if(LogLevels.SEVERITA_DEBUG_LOW == msgDiag.getSeverita() || LogLevels.SEVERITA_DEBUG_MEDIUM == msgDiag.getSeverita()) {
  757.                         severita = DiagnosticoSeveritaEnum.DEBUG;
  758.                     }
  759.                     else {
  760.                         severita = DiagnosticoSeveritaEnum.TRACE;
  761.                     }
  762.                     diag.setSeverita(severita);
  763.                     diag.setSeveritaCodice(msgDiag.getCodice());
  764.                     ((TransazioneExt)transazione).getDiagnostici().add(diag);
  765.                 }
  766.            
  767.             }
  768.            
  769.         }
  770.        
  771.         return transazione;

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

  869.             if(dumpMessaggio.sizeAllegatoList()>0) {
  870.                 ((TransazioneExtContenutoMessaggio)msg).setAttachments(new ArrayList<>());
  871.                 for (DumpAllegato dumpAllegato : dumpMessaggio.getAllegatoList()) {
  872.                     TransazioneExtContenutoMessaggioAllegato attach = new TransazioneExtContenutoMessaggioAllegato();
  873.                     attach.setContentId(dumpAllegato.getContentId());
  874.                     attach.setContentType(dumpAllegato.getContentType());
  875.                     attach.setContentLocation(dumpAllegato.getContentLocation());
  876.                     attach.setContenuto(dumpAllegato.getAllegato());
  877.                     if(dumpAllegato.sizeHeaderList()>0) {
  878.                         dumpAllegato.setHeaderList(new ArrayList<>());
  879.                         for (DumpHeaderAllegato dumpHeaderAllegato : dumpAllegato.getHeaderList()) {
  880.                             TransazioneContenutoMessaggioHeader hdr = new TransazioneContenutoMessaggioHeader();
  881.                             hdr.setNome(dumpHeaderAllegato.getNome());
  882.                             hdr.setValore(dumpHeaderAllegato.getValore());
  883.                             attach.getHeaders().add(hdr);
  884.                         }
  885.                     }
  886.                     ((TransazioneExtContenutoMessaggio)msg).getAttachments().add(attach);
  887.                 }
  888.             }
  889.         }
  890.        

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


  930.     public void setThrowInitProtocol(boolean throwInitProtocol) {
  931.         this.throwInitProtocol = throwInitProtocol;
  932.     }


  933.     public void setEmittente(boolean emittente) {
  934.         this.emittente = emittente;
  935.     }


  936.     public void setDataEmissione(boolean dataEmissione) {
  937.         this.dataEmissione = dataEmissione;
  938.     }


  939.     public void setId(boolean id) {
  940.         this.id = id;
  941.     }


  942.     public void setIdConversazione(boolean idConversazione) {
  943.         this.idConversazione = idConversazione;
  944.     }


  945.     public void setRuolo(boolean ruolo) {
  946.         this.ruolo = ruolo;
  947.     }


  948.     public void setEsito(boolean esito) {
  949.         this.esito = esito;
  950.     }


  951.     public void setMessaggi_id(boolean messaggi_id) {
  952.         this.messaggi_id = messaggi_id;
  953.     }


  954.     public void setMessaggi_idApplicativo(boolean messaggi_idApplicativo) {
  955.         this.messaggi_idApplicativo = messaggi_idApplicativo;
  956.     }


  957.     public void setMessaggi_data(boolean messaggi_data) {
  958.         this.messaggi_data = messaggi_data;
  959.     }


  960.     public void setMessaggi_contenuti(boolean messaggi_contenuti) {
  961.         this.messaggi_contenuti = messaggi_contenuti;
  962.     }


  963.     public void setRichiesta_tipo(boolean richiesta_tipo) {
  964.         this.richiesta_tipo = richiesta_tipo;
  965.     }


  966.     public void setRichiesta_urlInvocazione(boolean richiesta_urlInvocazione) {
  967.         this.richiesta_urlInvocazione = richiesta_urlInvocazione;
  968.     }


  969.     public void setRisposta_esito(boolean risposta_esito) {
  970.         this.risposta_esito = risposta_esito;
  971.     }


  972.     public void setRisposta_fault(boolean risposta_fault) {
  973.         this.risposta_fault = risposta_fault;
  974.     }


  975.     public void setRisposta_errori(boolean risposta_errori) {
  976.         this.risposta_errori = risposta_errori;
  977.     }


  978.     public void setApi_erogatore(boolean api_erogatore) {
  979.         this.api_erogatore = api_erogatore;
  980.     }


  981.     public void setApi_nome(boolean api_nome) {
  982.         this.api_nome = api_nome;
  983.     }


  984.     public void setApi_versione(boolean api_versione) {
  985.         this.api_versione = api_versione;
  986.     }


  987.     public void setApi_operazione(boolean api_operazione) {
  988.         this.api_operazione = api_operazione;
  989.     }


  990.     public void setMittente_fruitore(boolean mittente_fruitore) {
  991.         this.mittente_fruitore = mittente_fruitore;
  992.     }


  993.     public void setMittente_principal(boolean mittente_principal) {
  994.         this.mittente_principal = mittente_principal;
  995.     }

  996.    
  997.     public void setMittente_utente(boolean mittente_utente) {
  998.         this.mittente_utente = mittente_utente;
  999.     }
  1000.    
  1001.    
  1002.     public void setMittente_client(boolean mittente_client) {
  1003.         this.mittente_client = mittente_client;
  1004.     }
  1005.    

  1006.     public void setMittente_indirizzoClient(boolean mittente_indirizzoClient) {
  1007.         this.mittente_indirizzoClient = mittente_indirizzoClient;
  1008.     }


  1009.     public void setMittente_indirizzoClientInoltrato(boolean mittente_indirizzoClientInoltrato) {
  1010.         this.mittente_indirizzoClientInoltrato = mittente_indirizzoClientInoltrato;
  1011.     }


  1012.     public void setProfilo(boolean profilo) {
  1013.         this.profilo = profilo;
  1014.     }


  1015.     public void setContesto(boolean contesto) {
  1016.         this.contesto = contesto;
  1017.     }


  1018.     public void setIdCluster(boolean idCluster) {
  1019.         this.idCluster = idCluster;
  1020.     }


  1021.     public void setEmittenteExtraInfo(boolean emittenteExtraInfo) {
  1022.         this.emittenteExtraInfo = emittenteExtraInfo;
  1023.     }


  1024.     public void setStato(boolean stato) {
  1025.         this.stato = stato;
  1026.     }


  1027.     public void setMessaggi_dimensione(boolean messaggi_dimensione) {
  1028.         this.messaggi_dimensione = messaggi_dimensione;
  1029.     }


  1030.     public void setMessaggi_dataAccettazione(boolean messaggi_dataAccettazione) {
  1031.         this.messaggi_dataAccettazione = messaggi_dataAccettazione;
  1032.     }


  1033.     public void setMessaggi_duplicati(boolean messaggi_duplicati) {
  1034.         this.messaggi_duplicati = messaggi_duplicati;
  1035.     }


  1036.     public void setMessaggi_tracciaProtocollo(boolean messaggi_tracciaProtocollo) {
  1037.         this.messaggi_tracciaProtocollo = messaggi_tracciaProtocollo;
  1038.     }


  1039.     public void setRichiesta_connettore(boolean richiesta_connettore) {
  1040.         this.richiesta_connettore = richiesta_connettore;
  1041.     }


  1042.     public void setDiagnostici(boolean diagnostici) {
  1043.         this.diagnostici = diagnostici;
  1044.     }


  1045.     public void setApi_erogatoreExtraInfo(boolean api_erogatoreExtraInfo) {
  1046.         this.api_erogatoreExtraInfo = api_erogatoreExtraInfo;
  1047.     }

  1048.     public void setApi_tags(boolean api_tags) {
  1049.         this.api_tags = api_tags;
  1050.     }

  1051.     public void setApi_tipo(boolean api_tipo) {
  1052.         this.api_tipo = api_tipo;
  1053.     }


  1054.     public void setApi_idAsincrono(boolean api_idAsincrono) {
  1055.         this.api_idAsincrono = api_idAsincrono;
  1056.     }


  1057.     public void setApi_profiloCollaborazione(boolean api_profiloCollaborazione) {
  1058.         this.api_profiloCollaborazione = api_profiloCollaborazione;
  1059.     }


  1060.     public void setMittente_fruitoreExtraInfo(boolean mittente_fruitoreExtraInfo) {
  1061.         this.mittente_fruitoreExtraInfo = mittente_fruitoreExtraInfo;
  1062.     }


  1063.     public void setMittente_applicativo(boolean mittente_applicativo) {
  1064.         this.mittente_applicativo = mittente_applicativo;
  1065.     }


  1066.     public void setMittente_credenziali(boolean mittente_credenziali) {
  1067.         this.mittente_credenziali = mittente_credenziali;
  1068.     }


  1069.     public void setMittente_token(boolean mittente_token) {
  1070.         this.mittente_token = mittente_token;
  1071.     }


  1072.     public void setMittente_tokenClaims(boolean mittente_tokenClaims) {
  1073.         this.mittente_tokenClaims = mittente_tokenClaims;
  1074.     }
  1075. }