ConvertitoreCodiceDiagnostici.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.diagnostica;

  21. import java.util.ArrayList;
  22. import java.util.Collections;
  23. import java.util.Enumeration;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;

  27. import javax.xml.soap.SOAPFault;

  28. import org.apache.commons.lang.StringUtils;
  29. import org.openspcoop2.core.config.GestioneTokenAutenticazione;
  30. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  31. import org.openspcoop2.core.config.constants.MTOMProcessorType;
  32. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  33. import org.openspcoop2.core.constants.CostantiDB;
  34. import org.openspcoop2.core.constants.TipiConnettore;
  35. import org.openspcoop2.core.eccezione.details.DettaglioEccezione;
  36. import org.openspcoop2.core.eccezione.details.utils.XMLUtils;
  37. import org.openspcoop2.core.id.IDServizio;
  38. import org.openspcoop2.core.id.IDServizioApplicativo;
  39. import org.openspcoop2.core.id.IDSoggetto;
  40. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  41. import org.openspcoop2.core.transazioni.CredenzialeMittente;
  42. import org.openspcoop2.core.transazioni.Transazione;
  43. import org.openspcoop2.core.transazioni.constants.PddRuolo;
  44. import org.openspcoop2.core.transazioni.constants.TipoAPI;
  45. import org.openspcoop2.core.transazioni.utils.credenziali.CredenzialeTokenClient;
  46. import org.openspcoop2.message.OpenSPCoop2Message;
  47. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  48. import org.openspcoop2.message.OpenSPCoop2MessageParseResult;
  49. import org.openspcoop2.message.OpenSPCoop2RestMessage;
  50. import org.openspcoop2.message.OpenSPCoop2SoapMessage;
  51. import org.openspcoop2.message.constants.MessageRole;
  52. import org.openspcoop2.message.constants.MessageType;
  53. import org.openspcoop2.message.constants.ServiceBinding;
  54. import org.openspcoop2.message.exception.MessageException;
  55. import org.openspcoop2.message.exception.MessageNotSupportedException;
  56. import org.openspcoop2.message.soap.SoapUtils;
  57. import org.openspcoop2.message.utils.MessageUtilities;
  58. import org.openspcoop2.pdd.core.CostantiPdD;
  59. import org.openspcoop2.pdd.core.PdDContext;
  60. import org.openspcoop2.pdd.core.autenticazione.GestoreAutenticazione;
  61. import org.openspcoop2.pdd.core.connettori.ConnettoreBase;
  62. import org.openspcoop2.pdd.core.connettori.ConnettoreUtils;
  63. import org.openspcoop2.pdd.core.controllo_traffico.GeneratoreMessaggiErrore;
  64. import org.openspcoop2.pdd.core.credenziali.engine.GestoreCredenzialiEngine;
  65. import org.openspcoop2.pdd.core.token.PolicyGestioneToken;
  66. import org.openspcoop2.pdd.core.trasformazioni.GestoreTrasformazioniUtilities;
  67. import org.openspcoop2.pdd.logger.LogLevels;
  68. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  69. import org.openspcoop2.pdd.logger.record.AbstractDatoRicostruzione;
  70. import org.openspcoop2.pdd.logger.record.RuoloTransazione;
  71. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  72. import org.openspcoop2.protocol.engine.constants.Costanti;
  73. import org.openspcoop2.protocol.engine.utils.NamingUtils;
  74. import org.openspcoop2.protocol.sdk.Busta;
  75. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  76. import org.openspcoop2.protocol.sdk.ProtocolException;
  77. import org.openspcoop2.protocol.sdk.constants.CostantiProtocollo;
  78. import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
  79. import org.openspcoop2.protocol.sdk.constants.MessaggiFaultErroreCooperazione;
  80. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  81. import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
  82. import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
  83. import org.openspcoop2.protocol.utils.EsitiProperties;
  84. import org.openspcoop2.security.message.constants.SecurityConstants;
  85. import org.openspcoop2.utils.LoggerWrapperFactory;
  86. import org.openspcoop2.utils.UtilsException;
  87. import org.openspcoop2.utils.properties.PropertiesReader;
  88. import org.openspcoop2.utils.transport.http.HttpRequestMethod;
  89. import org.slf4j.Logger;

  90. /**    
  91.  * ConvertitoreCodiceDiagnostici
  92.  *
  93.  * @author Poli Andrea (poli@link.it)
  94.  * @author $Author$
  95.  * @version $Rev$, $Date$
  96.  */
  97. public class ConvertitoreCodiceDiagnostici {

  98.     protected org.openspcoop2.pdd.logger.MsgDiagnostico msgDiag;
  99.     protected Transazione transazioneDTO = null;
  100.     protected InformazioniRecordDiagnostici info;
  101.     protected IProtocolFactory<?> protocolFactory;
  102.    
  103.     protected List<String> codiciModuliSimulabili = new ArrayList<>();
  104.     protected   List<String> codiciModuliSimulabiliIntegrazione = new ArrayList<>();
  105.     protected List<String> codiciModuliSimulabiliCooperazione = new ArrayList<>();

  106.     protected OpenSPCoop2Message mFaultRicostruitoCooperazione = null;
  107.     protected String mFaultRicostruitoCooperazioneDescrizioneWithDetails = null;
  108.     protected String mFaultRicostruitoCooperazioneDescrizioneWithoutDetails = null;
  109.    
  110.     protected OpenSPCoop2Message mFaultRicostruitoIntegrazione = null;
  111.     protected String mFaultRicostruitoIntegrazioneDescrizioneWithDetails = null;
  112.     protected String mFaultRicostruitoIntegrazioneDescrizioneWithoutDetails = null;
  113.    
  114.     protected List<String> codiciModuliSimulabiliTracciamento = new ArrayList<>();
  115.    
  116.     protected boolean esitoAutenticazioneInCache = false;
  117.     protected boolean esitoAutorizzazioneInCache = false;
  118.     protected boolean esitoAutorizzazioneContenutiInCache = false;
  119.     protected boolean esitoAutenticazioneTokenInCache = false;
  120.     protected boolean esitoModiTokenAuthorizationInCache = false;
  121.     protected boolean esitoModiTokenIntegrityInCache = false;
  122.     protected boolean esitoModiTokenAuditInCache = false;
  123.    
  124.     protected boolean rispostaLettaDallaCache = false;
  125.    
  126.     protected String dettaglioAutenticazioneFallita = null;
  127.    
  128.     public static final String RICEZIONE_CONTENUTI_APPLICATIVI_CODICE_MODULO = "001"; // codice modulo
  129.     public static final String RICEZIONE_CONTENUTI_APPLICATIVI_LOCAL_FORWARD_LOGINFO_CODICE = "001034"; // ricezioneContenutiApplicativi.localForward.logInfo
  130.     public static final String RICEZIONE_CONTENUTI_APPLICATIVI_CONSEGNA_RISPOSTA_APPLICATIVA_OK_CODICE = "001005"; // ricezioneContenutiApplicativi.consegnaRispostaApplicativaOkEffettuata
  131.     public static final String RICEZIONE_CONTENUTI_APPLICATIVI_CONSEGNA_RISPOSTA_APPLICATIVA_KO_CODICE = "001006"; // ricezioneContenutiApplicativi.consegnaRispostaApplicativaKoEffettuata
  132.     public static final String RICEZIONE_CONTENUTI_APPLICATIVI_AUTENTICAZIONE_IN_CORSO_CODICE = "001050"; // ricezioneContenutiApplicativi.autenticazioneInCorso
  133.        
  134.     public static final String IMBUSTAMENTO_CODICE_MODULO = "002"; // codice modulo
  135.    
  136.     public static final String INOLTRO_BUSTE_CODICE_MODULO = "003"; // codice modulo
  137.     public static final String INOLTRO_BUSTE_INOLTRO_CON_ERRORE_CODICE = "003008"; // inoltroBuste.inoltroConErrore
  138.     public static final String INOLTRO_BUSTE_RICEZIONE_SOAP_FAULT_CODICE = "003013"; // inoltroBuste.ricezioneSoapFault
  139.    
  140.     public static final String RICEZIONE_BUSTE_CODICE_MODULO = "004"; // codice modulo
  141.     public static final String RICEZIONE_BUSTE_AUTORIZZAZIONE_BUSTE_EFFETTUATA_CODICE = "004004"; // ricezioneBuste.autorizzazioneBusteEffettuata
  142.     public static final String RICEZIONE_BUSTE_AUTENTICAZIONE_IN_CORSO_CODICE = "004074"; //ricezioneBuste.autenticazioneInCorso
  143.     public static final String RICEZIONE_BUSTE_AUTENTICAZIONE_EFFETTUATA_CODICE = "004075"; //ricezioneBuste.autenticazioneEffettuata
  144.     public static final String RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_CODICE = "004076"; //ricezioneBuste.autenticazioneFallita
  145.     public static final String RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_OPZIONALE_CODICE = "004077"; //ricezioneBuste.autenticazioneFallita.opzionale
  146.            
  147.     public static final String SBUSTAMENTO_CODICE_MODULO = "005"; // codice modulo
  148.    
  149.     public static final String SBUSTAMENTO_RISPOSTE_CODICE_MODULO = "006"; // codice modulo
  150.    
  151.     public static final String CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO = "007"; // codice modulo
  152.     public static final String CONSEGNA_CONTENUTI_APPLICATIVI_RICEZIONE_SOAP_FAULT_CODICE = "007014"; // consegnaContenutiApplicativi.ricezioneSoapFault
  153.    
  154.    
  155.     public ConvertitoreCodiceDiagnostici(Transazione transazioneDTO,
  156.             Traccia tracciaRichiesta, Traccia tracciaRisposta,
  157.             InformazioniRecordDiagnostici info,
  158.             CredenzialeMittente credenzialeClientId) throws ProtocolException{
  159.         this.init(null, tracciaRichiesta, tracciaRisposta, transazioneDTO, info, credenzialeClientId);
  160.     }
  161.     protected ConvertitoreCodiceDiagnostici() {
  162.         // va chiamato init
  163.     }
  164.     protected void init(IProtocolFactory<?> protocolFactory, Traccia tracciaRichiesta, Traccia tracciaRisposta,
  165.             Transazione transazioneDTO, InformazioniRecordDiagnostici info,
  166.             CredenzialeMittente credenzialeClientId) throws ProtocolException{

  167.         if(protocolFactory==null){
  168.             protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(transazioneDTO.getProtocollo());
  169.         }
  170.        
  171.         /**Logger log = protocolFactory.getLogger() != null ? protocolFactory.getLogger() : LoggerWrapperFactory.getLogger(ConvertitoreCodiceDiagnostici.class);*/
  172.        
  173.         String confDir = null;
  174.         if(!MsgDiagnosticiProperties.initialize(null,confDir)){
  175.             throw new ProtocolException("Inizializzazione MsgDiagnosticiProperties non riuscita");
  176.         }
  177.         MsgDiagnosticiProperties msgDiagProperties = MsgDiagnosticiProperties.getInstance();
  178.         if(!msgDiagProperties.initializeMsgDiagnosticiPersonalizzati()){
  179.             throw new ProtocolException("Inizializzazione MsgDiagnosticiProperties (msg personalizzati) non riuscita");
  180.         }
  181.        
  182.         this.msgDiag = org.openspcoop2.pdd.logger.MsgDiagnostico.newInstance();
  183.         this.msgDiag.setPrefixMsgPersonalizzati("");

  184.         this.transazioneDTO = transazioneDTO;
  185.         this.info = info;
  186.        
  187.        
  188.         /* ---- Codici Simulabili ----- */
  189.        
  190.         //this.codiciModuliSimulabili.add("000"); all
  191.         this.codiciModuliSimulabili.add(RICEZIONE_CONTENUTI_APPLICATIVI_CODICE_MODULO); // ricezioneContenutiApplicativi
  192.         this.codiciModuliSimulabili.add(IMBUSTAMENTO_CODICE_MODULO); // imbustamentoBusta
  193.         this.codiciModuliSimulabili.add(INOLTRO_BUSTE_CODICE_MODULO); // inoltroBuste
  194.         this.codiciModuliSimulabili.add(RICEZIONE_BUSTE_CODICE_MODULO); // ricezioneBuste
  195.         this.codiciModuliSimulabili.add(SBUSTAMENTO_CODICE_MODULO); // sbustamentoBusta
  196.         this.codiciModuliSimulabili.add(SBUSTAMENTO_RISPOSTE_CODICE_MODULO); // sbustamentoRispostaBusta
  197.         this.codiciModuliSimulabili.add(CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO); // consegnaContenutiApplicativi
  198.         this.codiciModuliSimulabili.add("008"); // integrationManager
  199.         //this.codiciModuliSimulabili.add("009"); // tracciamento
  200.         //this.codiciModuliSimulabili.add("010"); // timerGestoreRiscontriRicevute
  201.         //this.codiciModuliSimulabili.add("011"); // timerGestoreMessaggi
  202.         //this.codiciModuliSimulabili.add("012"); // timerGestoreMessaggiInconsistenti
  203.         //this.codiciModuliSimulabili.add("013"); // timerGestoreRepositoryBuste
  204.         //this.codiciModuliSimulabili.add("014"); // timerMonitoraggioRisorse
  205.         //this.codiciModuliSimulabili.add("015"); // timerThreshold
  206.         //this.codiciModuliSimulabili.add("100"); // openspcoopStartup
  207.        
  208.         this.codiciModuliSimulabiliIntegrazione.add(RICEZIONE_CONTENUTI_APPLICATIVI_CODICE_MODULO); // ricezioneContenutiApplicativi
  209.         this.codiciModuliSimulabiliIntegrazione.add(IMBUSTAMENTO_CODICE_MODULO); // imbustamentoBusta
  210.         this.codiciModuliSimulabiliIntegrazione.add(CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO); // consegnaContenutiApplicativi
  211.        
  212.         this.codiciModuliSimulabiliCooperazione.add(INOLTRO_BUSTE_CODICE_MODULO); // inoltroBuste
  213.         this.codiciModuliSimulabiliCooperazione.add(RICEZIONE_BUSTE_CODICE_MODULO); // ricezioneBuste
  214.         this.codiciModuliSimulabiliCooperazione.add(SBUSTAMENTO_CODICE_MODULO); // sbustamentoBusta
  215.         this.codiciModuliSimulabiliCooperazione.add(SBUSTAMENTO_RISPOSTE_CODICE_MODULO); // sbustamentoRispostaBusta
  216.        
  217.         this.codiciModuliSimulabiliTracciamento.add("009007"); // richiestaIngresso.inCorso
  218.         this.codiciModuliSimulabiliTracciamento.add("009008"); // richiestaIngresso.completato
  219.         this.codiciModuliSimulabiliTracciamento.add("009009"); // richiestaUscita.inCorso
  220.         this.codiciModuliSimulabiliTracciamento.add("009010"); // richiestaUscita.completato
  221.         this.codiciModuliSimulabiliTracciamento.add("009011"); // rispostaIngresso.inCorso
  222.         this.codiciModuliSimulabiliTracciamento.add("009012"); // rispostaIngresso.completato
  223.         this.codiciModuliSimulabiliTracciamento.add("009013"); // rispostaUscita.inCorso
  224.         this.codiciModuliSimulabiliTracciamento.add("009014"); // rispostaUscita.completato
  225.         this.codiciModuliSimulabiliTracciamento.add("009015"); // richiestaIngresso.inCorso (fileTrace)
  226.         this.codiciModuliSimulabiliTracciamento.add("009016"); // richiestaIngresso.completato (fileTrace)
  227.         this.codiciModuliSimulabiliTracciamento.add("009017"); // richiestaUscita.inCorso (fileTrace)
  228.         this.codiciModuliSimulabiliTracciamento.add("009018"); // richiestaUscita.completato (fileTrace)
  229.         this.codiciModuliSimulabiliTracciamento.add("009019"); // rispostaIngresso.inCorso (fileTrace)
  230.         this.codiciModuliSimulabiliTracciamento.add("009020"); // rispostaIngresso.completato (fileTrace)
  231.         this.codiciModuliSimulabiliTracciamento.add("009021"); // rispostaUscita.inCorso (fileTrace)
  232.         this.codiciModuliSimulabiliTracciamento.add("009022"); // rispostaUscita.completato (fileTrace)
  233.        
  234.        
  235.         /* ---- Dati identificativi ----- */
  236.        
  237.         IDSoggetto soggettoMittente = null;
  238.         if(transazioneDTO.getTipoSoggettoFruitore()!=null && transazioneDTO.getNomeSoggettoFruitore()!=null){
  239.             soggettoMittente = new IDSoggetto(transazioneDTO.getTipoSoggettoFruitore(),transazioneDTO.getNomeSoggettoFruitore());
  240.         }
  241.         IDServizio idServizio = null;
  242.         try {
  243.             if(transazioneDTO.getTipoServizio()!=null && transazioneDTO.getNomeServizio()!=null &&
  244.                     transazioneDTO.getTipoSoggettoErogatore()!=null && transazioneDTO.getNomeSoggettoErogatore()!=null) {
  245.                 idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(transazioneDTO.getTipoServizio(),transazioneDTO.getNomeServizio(),
  246.                         transazioneDTO.getTipoSoggettoErogatore(),transazioneDTO.getNomeSoggettoErogatore(),
  247.                         transazioneDTO.getVersioneServizio());
  248.             }
  249.         }catch(Exception e) {
  250.             throw new ProtocolException(e.getMessage(),e);
  251.         }
  252.         if(idServizio!=null) {
  253.             idServizio.setAzione(transazioneDTO.getAzione());
  254.         }
  255.        

  256.         /* ---- Protocollo ---- */
  257.         this.protocolFactory = protocolFactory;
  258.         String protocollo = protocolFactory.getProtocol();
  259.         this.msgDiag.addKeywords(protocolFactory);


  260.         /* ---- Buste ---- */

  261.         // NOTA: se esiste una traccia di richiesta, si fornisce quella.
  262.         // Altrimenti la si costruisce dalla transazione.
  263.         Busta bustaRichiesta = null;
  264.         if(tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null){
  265.             bustaRichiesta = tracciaRichiesta.getBusta();
  266.             this.msgDiag.addKeywords(tracciaRichiesta.getBusta(), true);
  267.         }
  268.         else{
  269.             bustaRichiesta = new Busta(protocollo);
  270.             bustaRichiesta.setID(transazioneDTO.getIdMessaggioRichiesta());
  271.             ProfiloDiCollaborazione profilo = null;
  272.             if(transazioneDTO.getProfiloCollaborazioneOp2()!=null){
  273.                 profilo = ProfiloDiCollaborazione.toProfiloDiCollaborazione(transazioneDTO.getProfiloCollaborazioneOp2());
  274.                 bustaRichiesta.setProfiloDiCollaborazione(profilo);
  275.             }
  276.             bustaRichiesta.setProfiloDiCollaborazioneValue(transazioneDTO.getProfiloCollaborazioneProt());
  277.             bustaRichiesta.setTipoMittente(transazioneDTO.getTipoSoggettoFruitore());
  278.             bustaRichiesta.setMittente(transazioneDTO.getNomeSoggettoFruitore());
  279.             bustaRichiesta.setIdentificativoPortaMittente(transazioneDTO.getIdportaSoggettoFruitore());
  280.             bustaRichiesta.setIndirizzoMittente(transazioneDTO.getIndirizzoSoggettoFruitore());
  281.             bustaRichiesta.setTipoDestinatario(transazioneDTO.getTipoSoggettoErogatore());
  282.             bustaRichiesta.setDestinatario(transazioneDTO.getNomeSoggettoErogatore());
  283.             bustaRichiesta.setIdentificativoPortaDestinatario(transazioneDTO.getIdportaSoggettoErogatore());
  284.             bustaRichiesta.setIndirizzoDestinatario(transazioneDTO.getIndirizzoSoggettoErogatore());
  285.             bustaRichiesta.setTipoServizio(transazioneDTO.getTipoServizio());
  286.             bustaRichiesta.setServizio(transazioneDTO.getNomeServizio());
  287.             bustaRichiesta.setVersioneServizio(transazioneDTO.getVersioneServizio());
  288.             bustaRichiesta.setAzione(transazioneDTO.getAzione());
  289.             //bustaRichiesta.setRiferimentoMessaggio(null); // non posso saperlo se c'era l'id di richiesta o altro
  290.             //bustaRichiesta.setSequenza(-1); // non posso saperlo se c'era nella richiesta o nella risposta
  291.             //bustaRichiesta.setScadenza(new Date()); //non posso saperlo se c'era nella richiesta o nella risposta
  292.             this.msgDiag.addKeywords(bustaRichiesta, true);
  293.         }

  294.         // NOTA: se esiste una traccia di richiesta, si fornisce quella.
  295.         // Altrimenti la si costruisce dalla transazione.
  296.         if(tracciaRisposta!=null && tracciaRisposta.getBusta()!=null){
  297.             this.msgDiag.addKeywords(tracciaRisposta.getBusta(), false);
  298.         }
  299.         else{
  300.             Busta bustaRisposta = new Busta(protocollo);
  301.             bustaRisposta.setID(transazioneDTO.getIdMessaggioRisposta());
  302.             ProfiloDiCollaborazione profilo = null;
  303.             if(transazioneDTO.getProfiloCollaborazioneOp2()!=null){
  304.                 profilo = ProfiloDiCollaborazione.toProfiloDiCollaborazione(transazioneDTO.getProfiloCollaborazioneOp2());
  305.                 bustaRisposta.setProfiloDiCollaborazione(profilo);
  306.             }
  307.             bustaRisposta.setProfiloDiCollaborazioneValue(transazioneDTO.getProfiloCollaborazioneProt());
  308.             bustaRisposta.setTipoMittente(transazioneDTO.getTipoSoggettoErogatore());
  309.             bustaRisposta.setMittente(transazioneDTO.getNomeSoggettoErogatore());
  310.             bustaRisposta.setIdentificativoPortaMittente(transazioneDTO.getIdportaSoggettoErogatore());
  311.             bustaRisposta.setIndirizzoMittente(transazioneDTO.getIndirizzoSoggettoErogatore());
  312.             bustaRisposta.setTipoDestinatario(transazioneDTO.getTipoSoggettoFruitore());
  313.             bustaRisposta.setDestinatario(transazioneDTO.getNomeSoggettoFruitore());
  314.             bustaRisposta.setIdentificativoPortaDestinatario(transazioneDTO.getIdportaSoggettoFruitore());
  315.             bustaRisposta.setIndirizzoDestinatario(transazioneDTO.getIndirizzoSoggettoFruitore());
  316.             bustaRisposta.setTipoServizio(transazioneDTO.getTipoServizio());
  317.             bustaRisposta.setServizio(transazioneDTO.getNomeServizio());
  318.             bustaRisposta.setVersioneServizio(transazioneDTO.getVersioneServizio());
  319.             bustaRisposta.setAzione(transazioneDTO.getAzione());
  320.             //bustaRichiesta.setRiferimentoMessaggio(null); // non posso saperlo se c'era l'id di richiesta o altro
  321.             //bustaRichiesta.setSequenza(-1); // non posso saperlo se c'era nella richiesta o nella risposta
  322.             //bustaRichiesta.setScadenza(new Date()); //non posso saperlo se c'era nella richiesta o nella risposta
  323.             this.msgDiag.addKeywords(bustaRisposta, false);
  324.         }

  325.        
  326.         /* ---- Servizi Applicativi ---- */
  327.         String servizioApplicativoFruitore = transazioneDTO.getServizioApplicativoFruitore();
  328.         if(servizioApplicativoFruitore!=null && !"".equals(servizioApplicativoFruitore)){
  329.             this.msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, transazioneDTO.getServizioApplicativoFruitore());
  330.         }
  331.         else{
  332.             this.msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO);
  333.         }
  334.         String servizioApplicativoErogatore = transazioneDTO.getServizioApplicativoErogatore();
  335.         this.msgDiag.addKeyword(CostantiPdD.KEY_SA_EROGATORE, servizioApplicativoErogatore);

  336.        
  337.         /* ---- Servizi Applicativi via Token ---- */
  338.         if(credenzialeClientId!=null && credenzialeClientId.getCredenziale()!=null) {
  339.             String clientId = CredenzialeTokenClient.convertClientIdDBValueToOriginal(credenzialeClientId.getCredenziale());
  340.             if(clientId!=null) {
  341.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TOKEN_CLIENT_ID, clientId);
  342.             }
  343.             try {
  344.                 IDServizioApplicativo idApplicativoToken = CredenzialeTokenClient.convertApplicationDBValueToOriginal(credenzialeClientId.getCredenziale());
  345.                 if(idApplicativoToken!=null) {
  346.                     this.msgDiag.addKeyword(CostantiPdD.KEY_TOKEN_SERVIZIO_APPLICATIVO, idApplicativoToken.getNome()+NamingUtils.LABEL_DOMINIO+idApplicativoToken.getIdSoggettoProprietario().toString());
  347.                 }
  348.             }catch(Exception e) {
  349.                 protocolFactory.getLogger().error(e.getMessage(),e);
  350.             }
  351.         }

  352.         /* ---- Correlazione Applicativa ---- */
  353.         this.msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, transazioneDTO.getIdCorrelazioneApplicativa());


  354.         /* ---- Ruolo (scenario, tipologia, tipoRicevuta, profiloAsincrono) ---- */
  355.         RuoloTransazione ruoloTransazione = RuoloTransazione.toEnumConstant(transazioneDTO.getRuoloTransazione());
  356.         String idAsincrono = transazioneDTO.getIdAsincrono();
  357.         if(ruoloTransazione!=null){
  358.             if(RuoloTransazione.INVOCAZIONE_ONEWAY.equals(ruoloTransazione)){              
  359.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO);
  360.             }
  361.             else if(RuoloTransazione.INVOCAZIONE_SINCRONA.equals(ruoloTransazione)){                
  362.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "risposta sincrona");
  363.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO);
  364.             }
  365.             else if(RuoloTransazione.INVOCAZIONE_ASINCRONA_SIMMETRICA.equals(ruoloTransazione)){                
  366.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una richiesta asincrona simmetrica");
  367.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_RICEVUTA_ASINCRONA, "ricevuta di una richiesta asincrona simmetrica");
  368.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO);
  369.             }
  370.             else if(RuoloTransazione.RISPOSTA_ASINCRONA_SIMMETRICA.equals(ruoloTransazione)){              
  371.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una risposta asincrona simmetrica");
  372.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_RICEVUTA_ASINCRONA, "ricevuta di una risposta asincrona simmetrica");
  373.                 if(idAsincrono!=null){
  374.                     this.msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_ASINCRONA, idAsincrono);
  375.                 }
  376.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA);
  377.             }
  378.             else if(RuoloTransazione.INVOCAZIONE_ASINCRONA_ASIMMETRICA.equals(ruoloTransazione)){              
  379.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una richiesta asincrona asimmetrica");
  380.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_RICEVUTA_ASINCRONA, "ricevuta di una richiesta asincrona asimmetrica");
  381.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO);
  382.             }
  383.             else if(RuoloTransazione.RICHIESTA_STATO_ASINCRONA_ASIMMETRICA.equals(ruoloTransazione)){              
  384.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una risposta asincrona asimmetrica");
  385.                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_RICEVUTA_ASINCRONA, "ricevuta di una risposta asincrona asimmetrica contenente l'esito della richiesta stato");
  386.                 if(idAsincrono!=null){
  387.                     this.msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_ASINCRONA, idAsincrono);
  388.                 }
  389.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING);
  390.             }
  391.         }

  392.         String tipoMessaggio = "messaggio";
  393.         //tipoMessaggio = "ricevuta asincrona"; non simulabile
  394.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA, tipoMessaggio);

  395.        
  396.         /* ---- Behaviour ---- */
  397.         // L'informazione non la si puo' salvare essendo i behaviour piu' di 1.
  398.         // Inoltre contengono il carattere separatore e andrebbe gestita anche questa criticita
  399.         this.msgDiag.addKeyword(CostantiPdD.KEY_DESCRIZIONE_BEHAVIOUR, "");

  400.        
  401.         /* ---- Router ---- */
  402.         // router non verra' simulato
  403.         this.msgDiag.addKeyword(CostantiPdD.KEY_DESTINATARIO_TRASMISSIONE, "");

  404.        
  405.         /* ---- Credenziali ---- */
  406.        
  407.         String credenziali = transazioneDTO.getCredenziali();
  408.        
  409.         // credenziali da gateway
  410.         if(credenziali!=null && !"".equals(credenziali)){
  411.             if(GestoreCredenzialiEngine.containsPrefixGatewayCredenziali(credenziali)) {
  412.                 String identitaGateway = GestoreCredenzialiEngine.readIdentitaGatewayCredenziali(credenziali);
  413.                 credenziali = GestoreCredenzialiEngine.erasePrefixGatewayCredenziali(credenziali);          
  414.                 this.msgDiag.addKeyword(CostantiPdD.KEY_IDENTITA_GESTORE_CREDENZIALI, identitaGateway);
  415.                 this.msgDiag.addKeyword(CostantiPdD.KEY_NUOVE_CREDENZIALI, normalizeCredenziali(credenziali,true,false));
  416.             }
  417.             else{
  418.                 this.msgDiag.addKeyword(CostantiPdD.KEY_NUOVE_CREDENZIALI, normalizeCredenziali(credenziali,true,false));
  419.             }
  420.            
  421.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI, normalizeCredenziali(credenziali,true,true));
  422.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_SA_FRUITORE, normalizeCredenziali(credenziali,true,true));
  423.         }
  424.         else{
  425.             this.msgDiag.addKeyword(CostantiPdD.KEY_NUOVE_CREDENZIALI, "");
  426.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI, "");
  427.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_SA_FRUITORE, "");
  428.         }
  429.        
  430.        
  431.         /* ---- Operazione IM ---- */
  432.        
  433.         if(transazioneDTO.getOperazioneIm()!=null){
  434.             this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_OPERAZIONE_IM, transazioneDTO.getOperazioneIm());
  435.         }
  436.        
  437.        
  438.         /* ---- Parametri IM ---- */
  439.        
  440.         if(transazioneDTO.getNomePorta()!=null){
  441.            
  442.             String messaggioPerIdAsincrono = "";
  443.             if(idAsincrono!=null){
  444.                 messaggioPerIdAsincrono = " riferimentoMessaggio["+idAsincrono+"]";
  445.             }
  446.            
  447.             String c = "";
  448.             if(credenziali!=null){
  449.                 c = credenziali;
  450.             }
  451.    
  452.             String param = "PD["+transazioneDTO.getNomePorta()+"]"+c+messaggioPerIdAsincrono;
  453.             this.msgDiag.addKeyword(CostantiPdD.KEY_PARAMETRI_OPERAZIONE_IM, param);
  454.         }
  455.        
  456.        

  457.         /* ---- Autorizzazione Buste ---- */

  458.         if(idServizio!=null) {
  459.             if(soggettoMittente!=null){
  460.                 this.msgDiag.addKeyword(CostantiPdD.KEY_MITTENTE_E_SERVIZIO_DA_AUTORIZZARE, "fruitore ["+soggettoMittente.toString()+"] -> servizio ["+idServizio.toString()+"]");
  461.             }
  462.             else{
  463.                 this.msgDiag.addKeyword(CostantiPdD.KEY_MITTENTE_E_SERVIZIO_DA_AUTORIZZARE, "servizio ["+idServizio.toString()+"]");
  464.             }
  465.         }

  466.         // KEY_CREDENZIALI_MITTENTE_MSG Gestite all'interno del metodo buildContextForSingleMsgDiagnostico
  467.         /**if(credenziali!=null && !"".equals(credenziali)) {
  468.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, " credenzialiMittente "+credenziali);
  469.         }
  470.         else{
  471.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, "");
  472.         }*/
  473.         if(servizioApplicativoFruitore!=null)
  474.             this.msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, " identitaServizioApplicativoFruitore ["+servizioApplicativoFruitore+"]");
  475.         else
  476.             this.msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, "");
  477.         this.msgDiag.addKeyword(CostantiPdD.KEY_SUBJECT_MESSAGE_SECURITY_MSG, ""); // non simulato

  478.         this.msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, ""); // non simulabile

  479.         if(tracciaRisposta!=null && tracciaRisposta.getBusta()!=null && tracciaRisposta.getBusta().sizeListaRiscontri()==1){
  480.             this.msgDiag.addKeyword(CostantiPdD.KEY_DATA_RISCONTRO, tracciaRisposta.getBusta().getRiscontro(0).getOraRegistrazione().toString());
  481.             this.msgDiag.addKeyword(CostantiPdD.KEY_ID_BUSTA_RISCONTRATA, tracciaRisposta.getBusta().getRiscontro(0).getID());
  482.         }

  483.        
  484.        
  485.         /* ---- Integrazione ---- */

  486.         Object o = info.getDato(MappingRicostruzioneDiagnostici.RESPONSE_FROM_CACHE).getDato();
  487.         String infoResponseFromCache = (o!=null ? (String) o : null );
  488.         if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoResponseFromCache)) {
  489.             this.rispostaLettaDallaCache = true;
  490.         }
  491.         else {
  492.             this.rispostaLettaDallaCache = false;
  493.         }
  494.        
  495.        
  496.         if(PddRuolo.DELEGATA.equals(transazioneDTO.getPddRuolo())){
  497.             this.msgDiag.addKeyword(CostantiPdD.KEY_PORTA_DELEGATA, transazioneDTO.getNomePorta());
  498.         }
  499.         else{
  500.             this.msgDiag.addKeyword(CostantiPdD.KEY_PORTA_APPLICATIVA, transazioneDTO.getNomePorta());
  501.         }

  502.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_CONNETTORE).getDato();
  503.         String tipoConnettore = (o!=null ? (String) o : null );
  504.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_CONNETTORE, tipoConnettore);
  505.        
  506.         if(transazioneDTO.getLocationConnettore()!=null) {
  507.            
  508.             String locationConnettore = transazioneDTO.getLocationConnettore();
  509.            
  510.             if(this.rispostaLettaDallaCache &&
  511.                 locationConnettore.contains(ConnettoreBase.LOCATION_CACHED_SEPARATOR_REQUEST_URL)) {
  512.                 int indexOf = locationConnettore.indexOf(ConnettoreBase.LOCATION_CACHED_SEPARATOR_REQUEST_URL);
  513.                 if(indexOf>0 && locationConnettore.length()>(indexOf+ConnettoreBase.LOCATION_CACHED_SEPARATOR_REQUEST_URL.length())) {
  514.                     locationConnettore = locationConnettore.substring(indexOf+ConnettoreBase.LOCATION_CACHED_SEPARATOR_REQUEST_URL.length());
  515.                 }
  516.             }
  517.            
  518.             String url = null;
  519.             String method = null;
  520.             try {
  521.                 url = CostantiPdD.readUrlFromConnettoreRequest(locationConnettore);
  522.                 method = CostantiPdD.readMethodFromConnettoreRequest(locationConnettore);
  523.             }catch(Exception e) {
  524.                 protocolFactory.getLogger().error(e.getMessage(),e);
  525.             }
  526.             if(url==null || StringUtils.isEmpty(url) || method==null || StringUtils.isEmpty(method)) {
  527.                 url = locationConnettore;
  528.                 method = transazioneDTO.getTipoRichiesta();
  529.             }
  530.                        
  531.             boolean tipoConnettoreHttp = false;
  532.             if(tipoConnettore!=null &&
  533.                     (TipiConnettore.HTTP.getNome().equals(tipoConnettore) || TipiConnettore.HTTPS.getNome().equals(tipoConnettore)  || tipoConnettore.toLowerCase().startsWith("http"))
  534.                 ) {
  535.                 tipoConnettoreHttp = true;  
  536.             }
  537.            
  538.             HttpRequestMethod httpRequestMethod = null;
  539.             if(method!=null && !StringUtils.isEmpty(method)) {
  540.                 httpRequestMethod = HttpRequestMethod.valueOf(method);
  541.             }
  542.            
  543.             if( (TipoAPI.SOAP.getValoreAsInt() == transazioneDTO.getTipoApi()) || !tipoConnettoreHttp) {
  544.                 httpRequestMethod = null; // il diagnostico in soap o in un connettore non http non contiene l'http method
  545.             }
  546.             this.msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, ConnettoreUtils.formatLocation(httpRequestMethod, url));
  547.         }
  548.        
  549.        
  550.         /* ---- ControlloCongestione ---- */
  551.        
  552.         o = info.getDato(MappingRicostruzioneDiagnostici.MAX_THREADS_THRESHOLD).getDato();
  553.         String maxThreadThreshold = (o!=null ? (String) o : null );
  554.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_MAX_THREADS_THRESHOLD, maxThreadThreshold);
  555.        
  556.         o = info.getDato(MappingRicostruzioneDiagnostici.CONTROLLO_TRAFFICO_THRESHOLD).getDato();
  557.         String controlloTrafficoThreshold = (o!=null ? (String) o : null );
  558.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_CONTROLLO_TRAFFICO_THRESHOLD, controlloTrafficoThreshold);
  559.        
  560.         o = info.getDato(MappingRicostruzioneDiagnostici.ACTIVE_THREADS).getDato();
  561.         String activeThreads = (o!=null ? (String) o : null );
  562.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_ACTIVE_THREADS, activeThreads);
  563.        
  564.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_CONFIGURATE).getDato();
  565.         String numeroPolicy = (o!=null ? (String) o : null );
  566.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY, numeroPolicy);
  567.        
  568.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_DISABILITATE).getDato();
  569.         String numeroPolicyDisabilitate = (o!=null ? (String) o : null );
  570.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_DISABILITATE, numeroPolicyDisabilitate);
  571.        
  572.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_FILTRATE).getDato();
  573.         String numeroPolicyFiltrate = (o!=null ? (String) o : null );
  574.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_FILTRATE, numeroPolicyFiltrate);

  575.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_NON_APPLICATE).getDato();
  576.         String numeroPolicyNonApplicabili = (o!=null ? (String) o : null );
  577.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_NON_APPLICATE, numeroPolicyNonApplicabili);
  578.        
  579.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_RISPETTATE).getDato();
  580.         String numeroPolicyRispettate = (o!=null ? (String) o : null );
  581.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_RISPETTATE, numeroPolicyRispettate);
  582.        
  583.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_VIOLATE).getDato();
  584.         String numeroPolicyViolate = (o!=null ? (String) o : null );
  585.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_VIOLATE, numeroPolicyViolate);
  586.        
  587.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_VIOLATE_WARNING_ONLY).getDato();
  588.         String numeroPolicyViolateWarningOnly = (o!=null ? (String) o : null );
  589.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_VIOLATE_WARNING_ONLY, numeroPolicyViolateWarningOnly);

  590.         o = info.getDato(MappingRicostruzioneDiagnostici.NUMERO_POLICY_IN_ERRORE).getDato();
  591.         String numeroPolicyInErrore = (o!=null ? (String) o : null );
  592.         this.msgDiag.addKeyword(GeneratoreMessaggiErrore.TEMPLATE_NUMERO_POLICY_IN_ERRORE, numeroPolicyInErrore);
  593.            
  594.        
  595.        
  596.    
  597.        
  598.        
  599.         /* ---- Altro ---- */

  600.         this.msgDiag.addKeyword(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO, ""); // non simulabile

  601.         String infoSearch = "";
  602.         if(bustaRichiesta!=null &&
  603.             bustaRichiesta.getTipoServizio()!=null && bustaRichiesta.getServizio()!=null &&
  604.             bustaRichiesta.getTipoDestinatario()!=null && bustaRichiesta.getDestinatario()!=null){
  605.             infoSearch = bustaRichiesta.getTipoServizio() + "/"
  606.                     + bustaRichiesta.getServizio() + " erogato dal Soggetto "
  607.                     + bustaRichiesta.getTipoDestinatario() + "/"
  608.                     + bustaRichiesta.getDestinatario();
  609.             if (bustaRichiesta.getAzione() != null)
  610.                 infoSearch = infoSearch + " azione " + bustaRichiesta.getAzione();
  611.             if (idAsincrono != null) {
  612.                 infoSearch = "Servizio correlato " + infoSearch;
  613.             } else {
  614.                 infoSearch = "Servizio " + infoSearch;
  615.             }
  616.             infoSearch = "Ricerca nel registro dei servizi di: " + infoSearch;
  617.             if (idAsincrono != null)
  618.                 infoSearch = infoSearch + " (idServizioCorrelato: "+ idAsincrono + ")";
  619.         }
  620.         this.msgDiag.addKeyword(CostantiPdD.KEY_INFO_SERVIZIO_BUSTA, infoSearch);

  621.            
  622.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_AUTENTICAZIONE).getDato();
  623.         String tipoAutenticazione = (o!=null ? (String) o : null );
  624.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTENTICAZIONE, tipoAutenticazione);
  625.                
  626.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_AUTORIZZAZIONE).getDato();
  627.         String tipoAutorizzazione = (o!=null ? (String) o : null );
  628.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE_BUSTE, tipoAutorizzazione);
  629.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE, tipoAutorizzazione);
  630.        
  631.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_AUTORIZZAZIONE_CONTENUTI).getDato();
  632.         String tipoAutorizzazioneContenuti = (o!=null ? (String) o : null );
  633.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE_CONTENUTO, tipoAutorizzazioneContenuti);
  634.        
  635.        
  636.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_VALIDAZIONE_CONTENUTI).getDato();
  637.         String tipoTradottoOpenSPCoop = null;
  638.         String tipoValidazioneContenuti = (o!=null ? (String) o : null );
  639.         if(tipoValidazioneContenuti!=null && tipoValidazioneContenuti.length()>0){
  640.             char tipoValidazione = tipoValidazioneContenuti.charAt(0);
  641.             if(CostantiMappingDiagnostici.TIPO_VALIDAZIONE_CONTENUTI_OPENSPCOOP == tipoValidazione){
  642.                 tipoTradottoOpenSPCoop = CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.getValue();
  643.             }
  644.             else if(CostantiMappingDiagnostici.TIPO_VALIDAZIONE_CONTENUTI_INTERFACE == tipoValidazione){
  645.                 tipoTradottoOpenSPCoop = CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.getValue();
  646.             }
  647.             else if(CostantiMappingDiagnostici.TIPO_VALIDAZIONE_CONTENUTI_XSD == tipoValidazione){
  648.                 tipoTradottoOpenSPCoop = CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.getValue();
  649.             }
  650.             if(tipoValidazioneContenuti.length()>1){
  651.                 char mtom = tipoValidazioneContenuti.charAt(1);
  652.                 if(CostantiMappingDiagnostici.TIPO_VALIDAZIONE_CONTENUTI_MTOM == mtom){
  653.                     tipoTradottoOpenSPCoop =  tipoTradottoOpenSPCoop + CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_PRINT_SEPARATOR +  
  654.                             CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_CON_MTOM;
  655.                 }
  656.                 if(tipoValidazioneContenuti.length()>2){
  657.                     char warn = tipoValidazioneContenuti.charAt(2);
  658.                     if(CostantiMappingDiagnostici.TIPO_VALIDAZIONE_CONTENUTI_WARN == warn){
  659.                         tipoTradottoOpenSPCoop =  tipoTradottoOpenSPCoop + CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_PRINT_SEPARATOR +  
  660.                                 CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_IN_WARNING_MODE;
  661.                     }
  662.                 }
  663.             }
  664.         }
  665.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_VALIDAZIONE_CONTENUTI, tipoTradottoOpenSPCoop);
  666.         this.msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,"");
  667.        
  668.        
  669.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MTOM_RICHIESTA).getDato();
  670.         tipoTradottoOpenSPCoop = null;
  671.         String tipoProcessamentoMTOMRichiesta = (o!=null ? (String) o : null );
  672.         if(tipoProcessamentoMTOMRichiesta!=null && tipoProcessamentoMTOMRichiesta.length()==1){
  673.             char tipoProcessamento = tipoProcessamentoMTOMRichiesta.charAt(0);
  674.             if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_DISABLE == tipoProcessamento){
  675.                 tipoTradottoOpenSPCoop = MTOMProcessorType.DISABLE.getValue();
  676.             }
  677.             else if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_PACKAGING == tipoProcessamento){
  678.                 tipoTradottoOpenSPCoop = MTOMProcessorType.PACKAGING.getValue();
  679.             }
  680.             else if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_UNPACKAGING == tipoProcessamento){
  681.                 tipoTradottoOpenSPCoop = MTOMProcessorType.UNPACKAGING.getValue();
  682.             }
  683.             else if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_VERIFY == tipoProcessamento){
  684.                 tipoTradottoOpenSPCoop = MTOMProcessorType.VERIFY.getValue();
  685.             }
  686.         }
  687.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_PROCESSAMENTO_MTOM_RICHIESTA, tipoTradottoOpenSPCoop);
  688.        
  689.        
  690.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MTOM_RISPOSTA).getDato();
  691.         tipoTradottoOpenSPCoop = null;
  692.         String tipoProcessamentoMTOMRisposta = (o!=null ? (String) o : null );
  693.         if(tipoProcessamentoMTOMRisposta!=null && tipoProcessamentoMTOMRisposta.length()==1){
  694.             char tipoProcessamento = tipoProcessamentoMTOMRisposta.charAt(0);
  695.             if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_DISABLE == tipoProcessamento){
  696.                 tipoTradottoOpenSPCoop = MTOMProcessorType.DISABLE.getValue();
  697.             }
  698.             else if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_PACKAGING == tipoProcessamento){
  699.                 tipoTradottoOpenSPCoop = MTOMProcessorType.PACKAGING.getValue();
  700.             }
  701.             else if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_UNPACKAGING == tipoProcessamento){
  702.                 tipoTradottoOpenSPCoop = MTOMProcessorType.UNPACKAGING.getValue();
  703.             }
  704.             else if(CostantiMappingDiagnostici.TIPO_MTOM_PROCESSAMENTO_VERIFY == tipoProcessamento){
  705.                 tipoTradottoOpenSPCoop = MTOMProcessorType.VERIFY.getValue();
  706.             }
  707.         }
  708.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_PROCESSAMENTO_MTOM_RISPOSTA, tipoTradottoOpenSPCoop);
  709.        
  710.        
  711.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MESSAGE_SECURITY_RICHIESTA).getDato();
  712.         tipoTradottoOpenSPCoop = null;
  713.         String tipoProcessamentoMessageSecurityRichiesta = (o!=null ? (String) o : null );
  714.         if(tipoProcessamentoMessageSecurityRichiesta!=null && tipoProcessamentoMessageSecurityRichiesta.length()>0){
  715.             tipoTradottoOpenSPCoop = buildSicurezzaMessaggio(tipoProcessamentoMessageSecurityRichiesta);
  716.         }
  717.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_SICUREZZA_MESSAGGIO_RICHIESTA, tipoTradottoOpenSPCoop);
  718.        
  719.        
  720.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MESSAGE_SECURITY_RISPOSTA).getDato();
  721.         tipoTradottoOpenSPCoop = null;
  722.         String tipoProcessamentoMessageSecurityRisposta = (o!=null ? (String) o : null );
  723.         if(tipoProcessamentoMessageSecurityRisposta!=null && tipoProcessamentoMessageSecurityRisposta.length()>0){
  724.             tipoTradottoOpenSPCoop = buildSicurezzaMessaggio(tipoProcessamentoMessageSecurityRisposta);
  725.         }
  726.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_SICUREZZA_MESSAGGIO_RISPOSTA, tipoTradottoOpenSPCoop);
  727.        
  728.        
  729.         o = info.getDato(MappingRicostruzioneDiagnostici.AUTENTICAZIONE_IN_CACHE).getDato();
  730.         String infoAutenticazioneInCache = (o!=null ? (String) o : null );
  731.         if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoAutenticazioneInCache)) {
  732.             this.esitoAutenticazioneInCache = true;
  733.         }
  734.         else {
  735.             this.esitoAutenticazioneInCache = false;
  736.         }
  737.        
  738.        
  739.         o = info.getDato(MappingRicostruzioneDiagnostici.AUTORIZZAZIONE_IN_CACHE).getDato();
  740.         String infoAutorizzazioneInCache = (o!=null ? (String) o : null );
  741.         if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoAutorizzazioneInCache)) {
  742.             this.esitoAutorizzazioneInCache = true;
  743.         }
  744.         else {
  745.             this.esitoAutorizzazioneInCache = false;
  746.         }
  747.        
  748.        
  749.         o = info.getDato(MappingRicostruzioneDiagnostici.AUTORIZZAZIONE_CONTENUTI_IN_CACHE).getDato();
  750.         String infoAutorizzazioneContenutiInCache = (o!=null ? (String) o : null );
  751.         if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoAutorizzazioneContenutiInCache)) {
  752.             this.esitoAutorizzazioneContenutiInCache = true;
  753.         }
  754.         else {
  755.             this.esitoAutorizzazioneContenutiInCache = false;
  756.         }
  757.        

  758.         o = info.getDato(MappingRicostruzioneDiagnostici.TOKEN_POLICY).getDato();
  759.         String tokenPolicy = (o!=null ? (String) o : null );
  760.         this.msgDiag.addKeyword(CostantiPdD.KEY_TOKEN_POLICY_GESTIONE, tokenPolicy);
  761.        
  762.         o = info.getDato(MappingRicostruzioneDiagnostici.TOKEN_POLICY_ACTIONS).getDato();
  763.         tipoTradottoOpenSPCoop = null;
  764.         String tokenPolicyActions = (o!=null ? (String) o : null );
  765.         if(tokenPolicyActions!=null && tokenPolicyActions.length()>0){
  766.             tipoTradottoOpenSPCoop = buildTokenPolicyValidationActions(tokenPolicyActions);
  767.         }
  768.         this.msgDiag.addKeyword(CostantiPdD.KEY_TOKEN_POLICY_AZIONI, tipoTradottoOpenSPCoop);
  769.        
  770.        
  771.         o = info.getDato(MappingRicostruzioneDiagnostici.TOKEN_POLICY_AUTENTCAZIONE).getDato();
  772.         tipoTradottoOpenSPCoop = null;
  773.         String tokenPolicyAuthn = (o!=null ? (String) o : null );
  774.         if(tokenPolicyAuthn!=null && tokenPolicyAuthn.length()>0){
  775.             tipoTradottoOpenSPCoop = buildTokenPolicyAuthnActions(tokenPolicyAuthn);
  776.         }
  777.         this.msgDiag.addKeyword(CostantiPdD.KEY_TOKEN_AUTHN_CHECK, tipoTradottoOpenSPCoop);
  778.        
  779.        
  780.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_TRASFORMAZIONE_RICHIESTA).getDato();
  781.         tipoTradottoOpenSPCoop = null;
  782.         String tipoTrasformazioneRichiesta = (o!=null ? (String) o : null );
  783.         if(tipoTrasformazioneRichiesta!=null && tipoTrasformazioneRichiesta.length()>0){
  784.             tipoTradottoOpenSPCoop = buildTipoTrasformazione(tipoTrasformazioneRichiesta);
  785.         }
  786.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_TRASFORMAZIONE_RICHIESTA, tipoTradottoOpenSPCoop);
  787.        
  788.        
  789.         o = info.getDato(MappingRicostruzioneDiagnostici.TIPO_TRASFORMAZIONE_RISPOSTA).getDato();
  790.         tipoTradottoOpenSPCoop = null;
  791.         String tipoTrasformazioneRisposta = (o!=null ? (String) o : null );
  792.         if(tipoTrasformazioneRisposta!=null && tipoTrasformazioneRisposta.length()>0){
  793.             tipoTradottoOpenSPCoop = buildTipoTrasformazione(tipoTrasformazioneRisposta);
  794.         }
  795.         this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_TRASFORMAZIONE_RISPOSTA, tipoTradottoOpenSPCoop);
  796.        
  797.        
  798.         AbstractDatoRicostruzione<?> oDatoAutenticazioneTokenInCache = info.getDato(MappingRicostruzioneDiagnostici.AUTENTICAZIONE_TOKEN_IN_CACHE);
  799.         if(oDatoAutenticazioneTokenInCache!=null) {
  800.             o = oDatoAutenticazioneTokenInCache.getDato();
  801.             String infoAutenticazioneTokenInCache = (o!=null ? (String) o : null );
  802.             if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoAutenticazioneTokenInCache)) {
  803.                 this.esitoAutenticazioneTokenInCache = true;
  804.             }
  805.             else {
  806.                 this.esitoAutenticazioneTokenInCache = false;
  807.             }
  808.         }else {
  809.             this.esitoAutenticazioneTokenInCache = false;
  810.         }
  811.        
  812.         AbstractDatoRicostruzione<?> oDatoAutenticazioneFallitaMotivazione = info.getDato(MappingRicostruzioneDiagnostici.AUTENTICAZIONE_FALLITA_MOTIVAZIONE);
  813.         if(oDatoAutenticazioneFallitaMotivazione!=null) {
  814.             o = oDatoAutenticazioneFallitaMotivazione.getDato();
  815.             tipoTradottoOpenSPCoop = null;
  816.             String tipoAutenticazioneFallitaMotivazione = (o!=null ? (String) o : null );
  817.             if(tipoAutenticazioneFallitaMotivazione!=null && tipoAutenticazioneFallitaMotivazione.length()>0){
  818.                 tipoTradottoOpenSPCoop = buildTipoAutenticazioneFallitaMotivazione(tipoAutenticazioneFallitaMotivazione);
  819.             }
  820.             if(tipoTradottoOpenSPCoop!=null) {
  821.                 this.dettaglioAutenticazioneFallita = tipoTradottoOpenSPCoop;
  822.             }      
  823.         }
  824.            
  825.         if(!PddRuolo.DELEGATA.equals(transazioneDTO.getPddRuolo()) &&
  826.                 Costanti.MODIPA_PROTOCOL_NAME.equals(protocollo) &&
  827.                 CostantiConfigurazione.AUTENTICAZIONE_TOKEN.equals(tipoAutorizzazione)) {
  828.             // casoSpecialeAutorizzazioneTokenModi
  829.             this.msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, "");
  830.         }

  831.        
  832.        
  833.         AbstractDatoRicostruzione<?> oDatoModiTokenAuthorizationInCache = info.getDato(MappingRicostruzioneDiagnostici.MODI_TOKEN_AUTHORIZATION_IN_CACHE);
  834.         if(oDatoModiTokenAuthorizationInCache!=null) {
  835.             o = oDatoModiTokenAuthorizationInCache.getDato();
  836.             String infoInCache = (o!=null ? (String) o : null );
  837.             if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoInCache)) {
  838.                 this.esitoModiTokenAuthorizationInCache = true;
  839.             }
  840.             else {
  841.                 this.esitoModiTokenAuthorizationInCache = false;
  842.             }
  843.         }else {
  844.             this.esitoModiTokenAuthorizationInCache = false;
  845.         }
  846.        
  847.        
  848.         AbstractDatoRicostruzione<?> oDatoModiTokenIntegrityInCache = info.getDato(MappingRicostruzioneDiagnostici.MODI_TOKEN_INTEGRITY_IN_CACHE);
  849.         if(oDatoModiTokenIntegrityInCache!=null) {
  850.             o = oDatoModiTokenIntegrityInCache.getDato();
  851.             String infoInCache = (o!=null ? (String) o : null );
  852.             if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoInCache)) {
  853.                 this.esitoModiTokenIntegrityInCache = true;
  854.             }
  855.             else {
  856.                 this.esitoModiTokenIntegrityInCache = false;
  857.             }
  858.         }else {
  859.             this.esitoModiTokenIntegrityInCache = false;
  860.         }
  861.        
  862.         AbstractDatoRicostruzione<?> oDatoModiTokenAuditInCache = info.getDato(MappingRicostruzioneDiagnostici.MODI_TOKEN_AUDIT_IN_CACHE);
  863.         if(oDatoModiTokenAuditInCache!=null) {
  864.             o = oDatoModiTokenAuditInCache.getDato();
  865.             String infoInCache = (o!=null ? (String) o : null );
  866.             if(CostantiMappingDiagnostici.IN_CACHE_TRUE.equals(infoInCache)) {
  867.                 this.esitoModiTokenAuditInCache = true;
  868.             }
  869.             else {
  870.                 this.esitoModiTokenAuditInCache = false;
  871.             }
  872.         }else {
  873.             this.esitoModiTokenAuditInCache = false;
  874.         }
  875.        
  876.        
  877.        
  878.         if(info.sizeMetaDati()>=CostantiMappingDiagnostici.LENGHT_DATI_SIMULATI_VERSIONE_ATTUALE){
  879.            
  880.             // altri...
  881.            
  882.         }
  883.        
  884.     }

  885.     private String normalizeCredenziali(String credenziali, boolean addParentesi, boolean addFinalSpace) {
  886.         String newC = credenziali + "";
  887.         try {
  888.             if(newC.endsWith(" ")){
  889.                 newC = newC.substring(0,newC.length()-1);
  890.             }
  891.             if(newC.contains("SSL-Issuer ")) {
  892.                 newC = newC.substring(0,newC.indexOf("SSL-Issuer "));
  893.                 while(newC.endsWith(" ") || newC.endsWith("\n")) {
  894.                     newC = newC.substring(0,newC.length()-1);
  895.                 }
  896.             }
  897.             String c = null;
  898.             if(addParentesi) {
  899.                 c = "( "+newC+" )";
  900.             }
  901.             else {
  902.                 c= newC;
  903.             }
  904.             if(addFinalSpace) {
  905.                 c = c + " ";
  906.             }
  907.             return c;
  908.         }catch(Exception e) {
  909.             String msgError = "Interpretazione credenziali '"+credenziali+"' non riuscita: ("+newC+") "+e.getMessage();
  910.             LoggerWrapperFactory.getLogger(ConvertitoreCodiceDiagnostici.class).error(msgError, e);
  911.             return credenziali;
  912.         }
  913.     }
  914.    
  915.     private String buildSicurezzaMessaggio(String tmp){
  916.        
  917.         StringBuilder tipoTradottoOpenSPCoop = new StringBuilder();
  918.        
  919.         char engine = tmp.charAt(0);
  920.         addSicurezzaMessaggioEngine(engine,  tipoTradottoOpenSPCoop);
  921.        
  922.         tipoTradottoOpenSPCoop.append(SecurityConstants.TIPO_SECURITY_ENGINE_SEPARATOR);
  923.        
  924.         for (int i = 1; i < tmp.length(); i++) {
  925.        
  926.             String actionCode = tmp.charAt(i)+"";
  927.             for (String keySecurity : CostantiMappingDiagnostici.getMapSecurityAction().keySet()) {
  928.                 String actionSecurityCode = CostantiMappingDiagnostici.getMapSecurityAction().get(keySecurity);
  929.                 if(actionSecurityCode.equals(actionCode)){
  930.                     if(i>1){
  931.                         tipoTradottoOpenSPCoop.append(SecurityConstants.TIPO_SECURITY_ACTION_SEPARATOR);
  932.                     }
  933.                     tipoTradottoOpenSPCoop.append(keySecurity);
  934.                     break;
  935.                 }
  936.             }
  937.            
  938.         }
  939.        
  940.         if(tipoTradottoOpenSPCoop.length()>0) {
  941.             return tipoTradottoOpenSPCoop.toString();
  942.         }
  943.         return null;
  944.     }
  945.     private void addSicurezzaMessaggioEngine(char engine, StringBuilder tipoTradottoOpenSPCoop) {
  946.         if(CostantiMappingDiagnostici.TIPO_SECURITY_ENGINE_WSS4J == engine){
  947.             tipoTradottoOpenSPCoop.append(SecurityConstants.SECURITY_ENGINE_WSS4J);
  948.         }
  949.         else if(CostantiMappingDiagnostici.TIPO_SECURITY_ENGINE_SOAPBOX == engine){
  950.             tipoTradottoOpenSPCoop.append(SecurityConstants.SECURITY_ENGINE_SOAPBOX);
  951.         }
  952.         else if(CostantiMappingDiagnostici.TIPO_SECURITY_ENGINE_DSS == engine){
  953.             tipoTradottoOpenSPCoop.append(SecurityConstants.SECURITY_ENGINE_DSS);
  954.         }
  955.         else if(CostantiMappingDiagnostici.TIPO_SECURITY_ENGINE_JOSE == engine){
  956.             tipoTradottoOpenSPCoop.append(SecurityConstants.SECURITY_ENGINE_JOSE);
  957.         }
  958.         else if(CostantiMappingDiagnostici.TIPO_SECURITY_ENGINE_XML == engine){
  959.             tipoTradottoOpenSPCoop.append(SecurityConstants.SECURITY_ENGINE_XML);
  960.         }
  961.     }
  962.    
  963.     private String buildTokenPolicyValidationActions(String tmp) {
  964.        
  965.         PolicyGestioneToken pgt = new PolicyGestioneToken();
  966.        
  967.         if(tmp.length()==1 && (CostantiMappingDiagnostici.GESTIONE_TOKEN_VALIDATION_ACTION_NONE+"").equals(tmp)) {
  968.             return pgt.getLabelAzioniGestioneToken();
  969.         }
  970.        
  971.         for (int i = 0; i < tmp.length(); i++) {
  972.            
  973.             String actionCode = tmp.charAt(i)+"";
  974.             if((CostantiMappingDiagnostici.GESTIONE_TOKEN_VALIDATION_ACTION_JWT+"").equals(actionCode)) {
  975.                 pgt.setValidazioneJWT(true);
  976.             }
  977.             else if((CostantiMappingDiagnostici.GESTIONE_TOKEN_VALIDATION_ACTION_INTROSPECTION+"").equals(actionCode)) {
  978.                 pgt.setIntrospection(true);
  979.             }
  980.             else if((CostantiMappingDiagnostici.GESTIONE_TOKEN_VALIDATION_ACTION_USER_INFO+"").equals(actionCode)) {
  981.                 pgt.setUserInfo(true);
  982.             }
  983.            
  984.         }
  985.        
  986.         return pgt.getLabelAzioniGestioneToken();
  987.        
  988.     }
  989.    
  990.     private String buildTokenPolicyAuthnActions(String tmp) {
  991.        
  992.         GestioneTokenAutenticazione gestore = new GestioneTokenAutenticazione();
  993.        
  994.         for (int i = 0; i < tmp.length(); i++) {
  995.            
  996.             String actionCode = tmp.charAt(i)+"";
  997.             if((CostantiMappingDiagnostici.AUTENTICAZIONE_TOKEN_ISSUER+"").equals(actionCode)) {
  998.                 gestore.setIssuer(StatoFunzionalita.ABILITATO);
  999.             }
  1000.             else if((CostantiMappingDiagnostici.AUTENTICAZIONE_TOKEN_SUBJECT+"").equals(actionCode)) {
  1001.                 gestore.setSubject(StatoFunzionalita.ABILITATO);
  1002.             }
  1003.             else if((CostantiMappingDiagnostici.AUTENTICAZIONE_TOKEN_CLIENTID+"").equals(actionCode)) {
  1004.                 gestore.setClientId(StatoFunzionalita.ABILITATO);
  1005.             }
  1006.             else if((CostantiMappingDiagnostici.AUTENTICAZIONE_TOKEN_USERNAME+"").equals(actionCode)) {
  1007.                 gestore.setUsername(StatoFunzionalita.ABILITATO);
  1008.             }
  1009.             else if((CostantiMappingDiagnostici.AUTENTICAZIONE_TOKEN_EMAIL+"").equals(actionCode)) {
  1010.                 gestore.setEmail(StatoFunzionalita.ABILITATO);
  1011.             }
  1012.            
  1013.         }
  1014.        
  1015.         return GestoreAutenticazione.getLabel(gestore);
  1016.        
  1017.     }
  1018.    
  1019.     private String buildTipoTrasformazione(String tmp) {
  1020.        
  1021.         if(CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_NESSUNA.equals(tmp)){
  1022.             return GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_NESSUNA;
  1023.         }
  1024.        
  1025.         StringBuilder bf = new StringBuilder();
  1026.        
  1027.         for (int i = 0; i < tmp.length(); i++) {
  1028.            
  1029.             if(i>0) {
  1030.                 bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_SEPARATOR);
  1031.             }
  1032.            
  1033.             String actionCode = tmp.charAt(i)+"";
  1034.             addTipoTrasformazioneAction(actionCode, bf);
  1035.            
  1036.         }
  1037.        
  1038.         if(bf.length()>0) {
  1039.             return bf.toString();
  1040.         }
  1041.        
  1042.         return null;
  1043.        
  1044.     }
  1045.     private void addTipoTrasformazioneAction(String actionCode, StringBuilder bf) {
  1046.         if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_SOAP+"").equals(actionCode)) {
  1047.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_SOAP);
  1048.         }
  1049.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_REST+"").equals(actionCode)) {
  1050.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_REST);
  1051.         }
  1052.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_METHOD+"").equals(actionCode)) {
  1053.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_METHOD);
  1054.         }
  1055.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_PATH+"").equals(actionCode)) {
  1056.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_PATH);
  1057.         }
  1058.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_HEADERS+"").equals(actionCode)) {
  1059.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_HEADERS);
  1060.         }
  1061.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_QUERY_PARAMETERS+"").equals(actionCode)) {
  1062.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_QUERY_PARAMETERS);
  1063.         }
  1064.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_CONVERSIONE_RETURN_CODE+"").equals(actionCode)) {
  1065.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_CONVERSIONE_RETURN_CODE);
  1066.         }
  1067.         else if((CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_NESSUNA+"").equals(actionCode)) {
  1068.             bf.append(GestoreTrasformazioniUtilities.TIPO_TRASFORMAZIONE_NESSUNA);
  1069.         }
  1070.         else {
  1071.             for (String keySecurity : CostantiMappingDiagnostici.getMapTipiConversione().keySet()) {
  1072.                 String actionSecurityCode = CostantiMappingDiagnostici.getMapTipiConversione().get(keySecurity);
  1073.                 if(actionSecurityCode.equals(actionCode)){
  1074.                     bf.append(keySecurity);
  1075.                     break;
  1076.                 }
  1077.             }
  1078.         }
  1079.     }
  1080.    
  1081.     private String buildTipoAutenticazioneFallitaMotivazione(String tmp) {
  1082.        
  1083.         if(CostantiMappingDiagnostici.TIPO_AUTENTICAZIONE_FALLITA_MOTIVAZIONE_CREDENZIALI_NON_FORNITE.equals(tmp)){
  1084.             return CostantiProtocollo.CREDENZIALI_NON_FORNITE;
  1085.         }
  1086.         else if(CostantiMappingDiagnostici.TIPO_AUTENTICAZIONE_FALLITA_MOTIVAZIONE_CREDENZIALI_FORNITE_NON_CORRETE.equals(tmp)){
  1087.             return CostantiProtocollo.CREDENZIALI_FORNITE_NON_CORRETTE;
  1088.         }
  1089.                
  1090.         return null;
  1091.        
  1092.     }
  1093.    
  1094.     private void buildFaultInfo(Logger log) throws Exception {
  1095.        
  1096.         buildFaultInfoIntegrazione(log);
  1097.        
  1098.         buildFaultInfoCooperazione(log);
  1099.        
  1100.     }
  1101.     private void buildFaultInfoIntegrazione(Logger log) throws Exception {
  1102.         if(this.mFaultRicostruitoIntegrazione==null &&
  1103.                 this.transazioneDTO.getFaultIntegrazione()!=null &&
  1104.                 !"".equals(this.transazioneDTO.getFaultIntegrazione())){
  1105.             if(StringUtils.isNotEmpty(this.transazioneDTO.getFormatoFaultIntegrazione())){
  1106.                 MessageType msgType = MessageType.valueOf(this.transazioneDTO.getFormatoFaultIntegrazione());
  1107.                 OpenSPCoop2MessageParseResult parseResult = OpenSPCoop2MessageFactory.getDefaultMessageFactory().createMessage(msgType, MessageRole.FAULT,
  1108.                         MessageUtilities.getDefaultContentType(msgType),this.transazioneDTO.getFaultIntegrazione().getBytes());
  1109.                 this.mFaultRicostruitoIntegrazione = parseResult.getMessage_throwParseException();
  1110.             }
  1111.             buildFaultInfoIntegrazioneDetails(log);
  1112.         }
  1113.     }
  1114.     private void buildFaultInfoIntegrazioneDetails(Logger log) throws MessageException, MessageNotSupportedException {
  1115.         if(this.mFaultRicostruitoIntegrazione!=null) {
  1116.             if(ServiceBinding.SOAP.equals(this.mFaultRicostruitoIntegrazione.getServiceBinding())) {
  1117.                 OpenSPCoop2SoapMessage soapMsg = this.mFaultRicostruitoIntegrazione.castAsSoap();
  1118.                 if(soapMsg.getSOAPBody()!=null && soapMsg.getSOAPBody().hasFault()){
  1119.                     this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails = SoapUtils.safe_toString(soapMsg.getFactory(), soapMsg.getSOAPBody().getFault(), log);
  1120.                     this.mFaultRicostruitoIntegrazioneDescrizioneWithoutDetails = SoapUtils.safe_toString(soapMsg.getFactory(), soapMsg.getSOAPBody().getFault(), false, log);
  1121.                 }
  1122.             }
  1123.             else {
  1124.                 OpenSPCoop2RestMessage<?> restMsg = this.mFaultRicostruitoIntegrazione.castAsRest();
  1125.                 if(restMsg.isFault()){
  1126.                     this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails = restMsg.getContentAsString();
  1127.                     this.mFaultRicostruitoIntegrazioneDescrizioneWithoutDetails = restMsg.getContentAsString();
  1128.                 }
  1129.             }
  1130.         }
  1131.     }
  1132.     private void buildFaultInfoCooperazione(Logger log) throws Exception {
  1133.         if(this.mFaultRicostruitoCooperazione==null &&
  1134.                 this.transazioneDTO.getFaultCooperazione()!=null &&
  1135.                 !"".equals(this.transazioneDTO.getFaultCooperazione())){
  1136.             if(StringUtils.isNotEmpty(this.transazioneDTO.getFormatoFaultCooperazione())){
  1137.                 MessageType msgType = MessageType.valueOf(this.transazioneDTO.getFormatoFaultCooperazione());
  1138.                 OpenSPCoop2MessageParseResult parseResult = OpenSPCoop2MessageFactory.getDefaultMessageFactory().createMessage(msgType, MessageRole.FAULT,
  1139.                         MessageUtilities.getDefaultContentType(msgType),this.transazioneDTO.getFaultCooperazione().getBytes());
  1140.                 this.mFaultRicostruitoCooperazione = parseResult.getMessage_throwParseException();
  1141.             }
  1142.             buildFaultInfoCooperazioneDetails(log);
  1143.         }
  1144.     }
  1145.     private void buildFaultInfoCooperazioneDetails(Logger log) throws MessageException, MessageNotSupportedException {
  1146.         if(this.mFaultRicostruitoCooperazione!=null) {
  1147.             if(ServiceBinding.SOAP.equals(this.mFaultRicostruitoCooperazione.getServiceBinding())) {
  1148.                 OpenSPCoop2SoapMessage soapMsg = this.mFaultRicostruitoCooperazione.castAsSoap();
  1149.                 if(soapMsg.getSOAPBody()!=null && soapMsg.getSOAPBody().hasFault()){
  1150.                     this.mFaultRicostruitoCooperazioneDescrizioneWithDetails = SoapUtils.safe_toString(soapMsg.getFactory(), soapMsg.getSOAPBody().getFault(), log);
  1151.                     this.mFaultRicostruitoCooperazioneDescrizioneWithoutDetails = SoapUtils.safe_toString(soapMsg.getFactory(), soapMsg.getSOAPBody().getFault(), false, log);
  1152.                 }
  1153.             }
  1154.             else {
  1155.                 OpenSPCoop2RestMessage<?> restMsg = this.mFaultRicostruitoCooperazione.castAsRest();
  1156.                 if(restMsg.isFault()){
  1157.                     this.mFaultRicostruitoCooperazioneDescrizioneWithDetails = restMsg.getContentAsString();
  1158.                     this.mFaultRicostruitoCooperazioneDescrizioneWithoutDetails = restMsg.getContentAsString();
  1159.                 }
  1160.             }
  1161.         }
  1162.     }
  1163.    
  1164.     protected void buildFault(Logger log, String codice, String codiceModulo) throws Exception{
  1165.        
  1166.         if(codice!=null) {
  1167.             // nop
  1168.         }
  1169.        
  1170.         this.msgDiag.getKeywordLogPersonalizzati().remove(CostantiPdD.KEY_SOAP_FAULT);
  1171.         this.msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, "");
  1172.        
  1173.         if(this.codiciModuliSimulabiliIntegrazione.contains(codiceModulo)){
  1174.             buildFaultInfo(log);
  1175.             // aggiorno key soap fault per il diagnostico in questione
  1176.             if(this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails!=null){
  1177.                 this.msgDiag.getKeywordLogPersonalizzati().remove(CostantiPdD.KEY_SOAP_FAULT);
  1178.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails);
  1179.             }
  1180.         }
  1181.         else if(this.codiciModuliSimulabiliCooperazione.contains(codiceModulo)){
  1182.             buildFaultInfo(log);
  1183.             // aggiorno key soap fault per il diagnostico in questione
  1184.             if(this.mFaultRicostruitoCooperazioneDescrizioneWithDetails!=null){
  1185.                 this.msgDiag.getKeywordLogPersonalizzati().remove(CostantiPdD.KEY_SOAP_FAULT);
  1186.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, this.mFaultRicostruitoCooperazioneDescrizioneWithDetails);
  1187.             }
  1188.         }
  1189.     }
  1190.    
  1191.     protected void buildContextForSingleMsgDiagnostico(String codice, String codiceModulo,
  1192.             boolean dynamic, String dynamicType, String dynamicValue, Logger log) throws Exception{
  1193.                
  1194.        
  1195.         if(codice.equals("001013") || codice.equals("001056") || codice.equals("001058") ||
  1196.                 codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_EFFETTUATA_CODICE) || codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_CODICE) || codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_OPZIONALE_CODICE)) {
  1197.             PdDContext pddContextDevNull = new PdDContext();
  1198.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoAutenticazioneInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTENTICAZIONE);
  1199.         }
  1200.         else if(codice.equals("001015") || codice.equals("001045") ||
  1201.                 codice.equals(RICEZIONE_BUSTE_AUTORIZZAZIONE_BUSTE_EFFETTUATA_CODICE) || codice.equals("004005")) {
  1202.             PdDContext pddContextDevNull = new PdDContext();
  1203.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoAutorizzazioneInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE);
  1204.         }
  1205.         else if(codice.equals("001016") || codice.equals("001048") ||
  1206.                 codice.equals("004045") || codice.equals("004046")) {
  1207.             PdDContext pddContextDevNull = new PdDContext();
  1208.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoAutorizzazioneContenutiInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE_CONTENUTI);
  1209.         }
  1210.         else if(codice.equals("001126") || codice.equals("001127") || codice.equals("001128") ||
  1211.                 codice.equals("004149") || codice.equals("004150") || codice.equals("004151")) {
  1212.             PdDContext pddContextDevNull = new PdDContext();
  1213.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoAutenticazioneTokenInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTENTICAZIONE_TOKEN);
  1214.         }
  1215.         else if(codice.equals("001133") || codice.equals("004159") ) {
  1216.             PdDContext pddContextDevNull = new PdDContext();
  1217.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoModiTokenAuthorizationInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_MODI_TOKEN_AUTHORIZATION);
  1218.         }
  1219.         else if(codice.equals("001139") || codice.equals("004165") ) {
  1220.             PdDContext pddContextDevNull = new PdDContext();
  1221.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoModiTokenIntegrityInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_MODI_TOKEN_INTEGRITY);
  1222.         }
  1223.         else if(codice.equals("001145") ) {
  1224.             PdDContext pddContextDevNull = new PdDContext();
  1225.             CostantiPdD.addKeywordInCache(this.msgDiag, this.esitoModiTokenAuditInCache, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_MODI_TOKEN_AUDIT);
  1226.         }
  1227.        
  1228.         if(
  1229.             (codice.equals("001058") || codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_OPZIONALE_CODICE) )
  1230.             &&
  1231.             (this.dettaglioAutenticazioneFallita!=null)
  1232.             ){
  1233.             PdDContext pddContextDevNull = new PdDContext();
  1234.             CostantiPdD.addKeywordAutenticazioneFallita(this.msgDiag, this.dettaglioAutenticazioneFallita, pddContextDevNull, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTENTICAZIONE_FALLITA);
  1235.         }
  1236.        
  1237.         if(
  1238.             (codice.equals("003007") || codice.equals("007012") || codice.equals("007028"))
  1239.                 &&
  1240.             (this.rispostaLettaDallaCache)
  1241.             ){
  1242.             this.msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, ConnettoreBase.LOCATION_CACHED);
  1243.         }
  1244.        
  1245.         /*
  1246.          * Il messaggio contiene solo i singoli dettagli del soapFault.
  1247.          * es. Risposta applicativa (SOAPFault faultCode[ns0:Server.OpenSPCoopExampleFault] faultActor[OpenSPCoopTrace] faultString[Fault ritornato dalla servlet di trace, esempio di OpenSPCoop]) consegnata al servizio applicativo con codice di trasporto ...
  1248.          */
  1249.         if(codice.equals(RICEZIONE_CONTENUTI_APPLICATIVI_CONSEGNA_RISPOSTA_APPLICATIVA_OK_CODICE) || codice.equals(RICEZIONE_CONTENUTI_APPLICATIVI_CONSEGNA_RISPOSTA_APPLICATIVA_KO_CODICE) || codice.equals("001008") || codice.equals("001031") || codice.equals("001033") ){
  1250.             buildFaultInfo(log);
  1251.             if(this.mFaultRicostruitoIntegrazioneDescrizioneWithoutDetails!=null) {
  1252.                 String descrizioneSoapFault = " ("+this.mFaultRicostruitoIntegrazioneDescrizioneWithoutDetails+")";
  1253.                 this.msgDiag.getKeywordLogPersonalizzati().remove(CostantiPdD.KEY_SOAP_FAULT);
  1254.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, descrizioneSoapFault);
  1255.             }
  1256.         }
  1257.         if(codice.equals("004011") || codice.equals("004012") || codice.equals("004014")){
  1258.             buildFaultInfo(log);
  1259.             if(this.mFaultRicostruitoCooperazioneDescrizioneWithoutDetails!=null){
  1260.                 String descrizioneSoapFault = " ("+this.mFaultRicostruitoCooperazioneDescrizioneWithoutDetails+")";
  1261.                 this.msgDiag.getKeywordLogPersonalizzati().remove(CostantiPdD.KEY_SOAP_FAULT);
  1262.                 this.msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, descrizioneSoapFault);
  1263.             }
  1264.         }
  1265.        
  1266.         if(codice.equals("003024") ){
  1267.             buildFaultInfo(log);
  1268.             if(this.mFaultRicostruitoCooperazione!=null){
  1269.                 this.msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_SOAP_FAULT_PRESENTE);
  1270.             }
  1271.             else{
  1272.                 if(this.msgDiag.getKeywordLogPersonalizzati().containsKey(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO)){
  1273.                     String v = this.msgDiag.getKeywordLogPersonalizzati().get(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO);
  1274.                     if(Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(v)){
  1275.                         this.msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_SOAP_BODY_NON_PRESENTE);
  1276.                     }
  1277.                 }
  1278.             }
  1279.         }
  1280.         if(codice.equals("007024") ){
  1281.             buildFaultInfo(log);
  1282.             if(this.mFaultRicostruitoIntegrazione!=null){
  1283.                 this.msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_SOAP_FAULT_PRESENTE);
  1284.             }
  1285.             else{
  1286.                 if(this.msgDiag.getKeywordLogPersonalizzati().containsKey(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO)){
  1287.                     String v = this.msgDiag.getKeywordLogPersonalizzati().get(CostantiPdD.KEY_SCENARIO_COOPERAZIONE_GESTITO);
  1288.                     if(Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(v)){
  1289.                         this.msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_SOAP_BODY_NON_PRESENTE);
  1290.                     }
  1291.                 }
  1292.             }
  1293.         }
  1294.        
  1295.         /*
  1296.          * Il messaggi che indica l'utilizzo della funzionalita' di LocalForward richiede il nome della PA
  1297.          * Tale nome non e' conosciuto nel contesto di PortaDelegata delle Transazione.
  1298.          * Comunque non aggiunge una informazione importante, potendo essere recuperata dai dati sul servizio e azione invocata
  1299.          **/
  1300.         if(codice.equals(RICEZIONE_CONTENUTI_APPLICATIVI_LOCAL_FORWARD_LOGINFO_CODICE)){
  1301.             this.msgDiag.addKeyword(CostantiPdD.KEY_PORTA_APPLICATIVA, "");
  1302.         }
  1303.        
  1304.         // autenticazione dei soggetti su PA
  1305.         String credenziali = this.msgDiag.getKeywordLogPersonalizzati().get(CostantiPdD.KEY_CREDENZIALI);
  1306.         if(codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_IN_CORSO_CODICE) || //ricezioneBuste.autenticazioneInCorso
  1307.                 codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_EFFETTUATA_CODICE) || //ricezioneBuste.autenticazioneEffettuata
  1308.                 codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_CODICE) || //ricezioneBuste.autenticazioneFallita
  1309.                 codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_FALLITA_OPZIONALE_CODICE)  //ricezioneBuste.autenticazioneFallita.opzionale
  1310.                 ) {
  1311.             if(credenziali!=null && !"".equals(credenziali)) {
  1312.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, credenziali);
  1313.             }
  1314.             else{
  1315.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, "");
  1316.             }
  1317.         }
  1318.         else {
  1319.             if(credenziali!=null && !"".equals(credenziali)) {
  1320.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, " credenzialiMittente "+credenziali);
  1321.             }
  1322.             else{
  1323.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, "");
  1324.             }
  1325.         }
  1326.        
  1327.         if(codice.equals(RICEZIONE_BUSTE_AUTENTICAZIONE_EFFETTUATA_CODICE)){
  1328.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, ""); // per evitare di visualizzarle anche nei successivi diagnostici
  1329.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI, "");
  1330.         }
  1331.         else if(codice.equals("001056")){
  1332.             this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_SA_FRUITORE, ""); // per evitare di visualizzarle anche nei successivi diagnostici
  1333.         }
  1334.        
  1335.         // Le credenziali del servizio applicativo non vengono più visualizzate se è stata effettuata l'autenticazione
  1336.         // Questo processo avviene dal diagnosticio con codice 001003 in poi sulla porta delegata
  1337.         if(codice.equals("001003")){
  1338.             String autenticazione = this.msgDiag.getKeywordLogPersonalizzati().get(CostantiPdD.KEY_TIPO_AUTENTICAZIONE);
  1339.             if(autenticazione!=null && !"".equals(autenticazione) && !"-".equals(autenticazione) && !"none".equals(autenticazione)) {
  1340.                 // in caso di autenticazione effettuata questo diagnostico non contiene le credenziali
  1341.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_SA_FRUITORE, "");
  1342.             }
  1343.         }
  1344.        
  1345.         // Le credenziali del soggetto non vengono più visualizzate se è stata effettuata l'autenticazione
  1346.         // Questo processo avviene dal diagnosticio con codice 004001 in poi sulla porta applicativa
  1347.         if(codice.equals("004001")){
  1348.             String autenticazione = this.msgDiag.getKeywordLogPersonalizzati().get(CostantiPdD.KEY_TIPO_AUTENTICAZIONE);
  1349.             if(autenticazione!=null && !"".equals(autenticazione) && !"-".equals(autenticazione) && !"none".equals(autenticazione)) {
  1350.                 // in caso di autenticazione effettuata questo diagnostico non contiene le credenziali
  1351.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI, "");
  1352.                 this.msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, "");
  1353.             }
  1354.         }
  1355.            
  1356.         String codiceConsegnaRichiesta = null;
  1357.         String codiceConsegnaRisposta = null;
  1358.         if( RICEZIONE_CONTENUTI_APPLICATIVI_CODICE_MODULO.equals(codiceModulo)  // ricezioneContenutiApplicativi
  1359.                 ||
  1360.                 RICEZIONE_BUSTE_CODICE_MODULO.equals(codiceModulo)  // ricezioneBuste
  1361.                
  1362.                 ){
  1363.             Object o = this.info.getDato(MappingRicostruzioneDiagnostici.CODICE_TRASPORTO_RISPOSTA).getDato();
  1364.             codiceConsegnaRisposta = (o!=null ? (String) o : null );
  1365.             this.msgDiag.addKeyword(CostantiPdD.KEY_CODICE_CONSEGNA, codiceConsegnaRisposta);
  1366.         }
  1367.         else if (INOLTRO_BUSTE_CODICE_MODULO.equals(codiceModulo)  // inoltroBuste
  1368.                 ||
  1369.                 CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO.equals(codiceModulo)  // consegnaContenutiApplicativi
  1370.                 ){
  1371.             Object o = this.info.getDato(MappingRicostruzioneDiagnostici.CODICE_TRASPORTO_RICHIESTA).getDato();
  1372.             codiceConsegnaRichiesta = (o!=null ? (String) o : null );
  1373.             this.msgDiag.addKeyword(CostantiPdD.KEY_CODICE_CONSEGNA, codiceConsegnaRichiesta);
  1374.            
  1375.             String erroreConsegna = "errore di trasporto, codice "+codiceConsegnaRichiesta;
  1376.             if(this.mFaultRicostruitoCooperazione!=null || this.mFaultRicostruitoIntegrazione!=null){
  1377.                
  1378.                 boolean faultProtocollo = false;
  1379.                 if(codice.equals(INOLTRO_BUSTE_INOLTRO_CON_ERRORE_CODICE)){
  1380.                     try{
  1381.                         EsitoTransazioneName name = EsitoTransazioneName.convertoTo(EsitiProperties.getInstanceFromProtocolName(log, this.transazioneDTO.getProtocollo()).getEsitoName(this.transazioneDTO.getEsito()));
  1382.                         if(EsitoTransazioneName.ERRORE_PROTOCOLLO.equals(name)){
  1383.                             faultProtocollo = true;
  1384.                         }
  1385.                     }catch(Exception e){
  1386.                         log.error("Errore durante la comprensione dell'esito ["+this.transazioneDTO.getEsito()+"]: "+e.getMessage(),e);
  1387.                     }
  1388.                 }
  1389.                
  1390.                 if(faultProtocollo){
  1391.                    
  1392.                     boolean set = false;
  1393.                     OpenSPCoop2Message msg = null;
  1394.                     if(INOLTRO_BUSTE_CODICE_MODULO.equals(codiceModulo)){
  1395.                         msg = this.mFaultRicostruitoCooperazione;
  1396.                     }
  1397.                     else if(CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO.equals(codiceModulo)){
  1398.                         msg = this.mFaultRicostruitoIntegrazione;
  1399.                     }
  1400.                     if(msg!=null && ServiceBinding.SOAP.equals(msg.getServiceBinding())){
  1401.                         SOAPFault soapFault = null;
  1402.                         if(msg.castAsSoap().getSOAPBody()!=null){
  1403.                             soapFault = msg.castAsSoap().getSOAPBody().getFault();
  1404.                         }
  1405.                         if(soapFault!=null && soapFault.getFaultString()!=null){
  1406.                             if( soapFault.getFaultString().equals(this.protocolFactory.createTraduttore().toString(MessaggiFaultErroreCooperazione.FAULT_STRING_VALIDAZIONE)) ){
  1407.                                 set = true;
  1408.                                 erroreConsegna = soapFault.getFaultString();
  1409.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA_ERRORE, CostantiPdD.TIPO_MESSAGGIO_BUSTA_ERRORE_INTESTAZIONE);
  1410.                             }
  1411.                             else if( soapFault.getFaultString().equals(this.protocolFactory.createTraduttore().toString(MessaggiFaultErroreCooperazione.FAULT_STRING_PROCESSAMENTO)) ){
  1412.                                 set = true;
  1413.                                 erroreConsegna = soapFault.getFaultString();
  1414.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA_ERRORE, CostantiPdD.TIPO_MESSAGGIO_BUSTA_ERRORE_PROCESSAMENTO);
  1415.                             }
  1416.                         }
  1417.                        
  1418.                         if(set){
  1419.                             // abbiamo un soap fault. Controllo il detail per i successivi diagnostici
  1420.                             DettaglioEccezione dettaglioEccezione = XMLUtils.getDettaglioEccezione(log,msg);
  1421.                             if(dettaglioEccezione!=null){
  1422.                                 this.msgDiag.addKeyword(CostantiPdD.KEY_OPENSPCOOP2_DETAILS, XMLUtils.toString(dettaglioEccezione));
  1423.                             }
  1424.                         }
  1425.                     }
  1426.                     if(!set){
  1427.                         if(INOLTRO_BUSTE_CODICE_MODULO.equals(codiceModulo) && this.mFaultRicostruitoCooperazioneDescrizioneWithDetails!=null){
  1428.                             erroreConsegna = erroreConsegna + " (" +this.mFaultRicostruitoCooperazioneDescrizioneWithDetails+ ")";
  1429.                         }
  1430.                         if(CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO.equals(codiceModulo) && this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails!=null){
  1431.                             erroreConsegna = erroreConsegna + " (" +this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails+ ")";
  1432.                         }
  1433.                     }
  1434.                 }
  1435.                 else{
  1436.                     if(INOLTRO_BUSTE_CODICE_MODULO.equals(codiceModulo) && this.mFaultRicostruitoCooperazioneDescrizioneWithDetails!=null){
  1437.                         erroreConsegna = erroreConsegna + " (" +this.mFaultRicostruitoCooperazioneDescrizioneWithDetails+ ")";
  1438.                     }
  1439.                     if(CONSEGNA_CONTENUTI_APPLICATIVI_CODICE_MODULO.equals(codiceModulo) && this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails!=null){
  1440.                         erroreConsegna = erroreConsegna + " (" +this.mFaultRicostruitoIntegrazioneDescrizioneWithDetails+ ")";
  1441.                     }
  1442.                 }
  1443.             }
  1444.             this.msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_CONSEGNA, erroreConsegna);
  1445.         }
  1446.         else{
  1447.             this.msgDiag.addKeyword(CostantiPdD.KEY_CODICE_CONSEGNA, null);
  1448.         }
  1449.        
  1450.         if(dynamic){
  1451.             DynamicExtendedInfoDiagnosticoType type = DynamicExtendedInfoDiagnosticoType.getEnum(dynamicType);
  1452.             switch (type) {
  1453.             case NON_RICOSTRUIBILE:
  1454.                 // nop
  1455.                 break;
  1456.             case POLICY_CONTROLLO_TRAFFICO:
  1457.                 Map<String, String> map = DynamicExtendedInfoDiagnosticoControlloTraffico.convertToProperties(dynamicValue);
  1458.                 if(map!=null && map.size()>0){
  1459.                     this.msgDiag.getKeywordLogPersonalizzati().putAll(map);
  1460.                 }
  1461.                 break;
  1462.             default:
  1463.                 break;
  1464.             }
  1465.         }
  1466.     }
  1467.    
  1468.    
  1469.    

  1470.    
  1471.     // ***************** BUILD FROM DATI SIMULATI ********************
  1472.    
  1473.     public List<MsgDiagnostico> build(Logger log) throws UtilsException{
  1474.        
  1475.         List<MsgDiagnostico> msgDiagnosticiNormali = new ArrayList<>();
  1476.         if(this.info.getDiagnostici()!=null && !this.info.getDiagnostici().isEmpty()){
  1477.             for (InfoDiagnostico infoMsgDiag : this.info.getDiagnostici()) {
  1478.                
  1479.                 MsgDiagnostico m = new MsgDiagnostico();
  1480.                
  1481.                 String codice = infoMsgDiag.getCode();
  1482.                 String codiceModulo = codice.substring(0, 3);
  1483.                
  1484.                 try{
  1485.                     this.buildFault(log, codice, codiceModulo);
  1486.                     this.buildContextForSingleMsgDiagnostico(codice,codiceModulo,false,
  1487.                             null,null,
  1488.                             log);
  1489.                 }catch(Throwable t){
  1490.                     throw new UtilsException("build context error: "+t.getMessage(),t);
  1491.                 }
  1492.                
  1493.                 this.setDatiEngine(m, codice, codiceModulo, infoMsgDiag, null);
  1494.                
  1495.                 msgDiagnosticiNormali.add(m);
  1496.             }
  1497.         }
  1498.        
  1499.         if(this.info.getDiagnosticiExt()!=null && !this.info.getDiagnosticiExt().isEmpty()){
  1500.             List<MsgDiagnostico> msgDiagnosticiCompleted = new ArrayList<>();
  1501.            
  1502.             List<String> positions = new ArrayList<>();
  1503.             Map<String, InfoDiagnostico> mapPositionToInfoDiagnostico = new HashMap<>();
  1504.             Map<String, DynamicExtendedInfoDiagnostico> mapPositionToDynamicExtendedInfoDiagnostico = new HashMap<>();
  1505.            
  1506.             // nota: devo ordinarli per position, poichè vengono serializzati prima i diag ext di un tipo, poi di un altro.
  1507.             // esempio prima i CT (controlloTraffico) poi quelli non ricostruibili
  1508.            
  1509.             for (int i = 0; i < this.info.getDiagnosticiExt().size(); i++) {
  1510.                
  1511.                 InfoDiagnostico infoMsgDiag = this.info.getDiagnosticiExt().get(i);
  1512.                 DynamicExtendedInfoDiagnostico d = this.info.getDatiExt().get(i);
  1513.                
  1514.                 String keyPosition = null;
  1515.                 if(d.getDiagnosticPosition()<10){
  1516.                     keyPosition = "000"+d.getDiagnosticPosition();
  1517.                 }
  1518.                 else if(d.getDiagnosticPosition()<100){
  1519.                     keyPosition = "00"+d.getDiagnosticPosition();
  1520.                 }
  1521.                 else if(d.getDiagnosticPosition()<1000){
  1522.                     keyPosition = "0"+d.getDiagnosticPosition();
  1523.                 }
  1524.                 else{
  1525.                     keyPosition = ""+d.getDiagnosticPosition();
  1526.                 }
  1527.                
  1528.                 positions.add(keyPosition);
  1529.                 mapPositionToInfoDiagnostico.put(keyPosition, infoMsgDiag);
  1530.                 mapPositionToDynamicExtendedInfoDiagnostico.put(keyPosition, d);
  1531.                
  1532.             }
  1533.            
  1534.             Collections.sort(positions);
  1535.            
  1536.             for (int i = 0; i < positions.size(); i++) {
  1537.            
  1538.                 String keyPosition = positions.get(i);
  1539.                 InfoDiagnostico infoMsgDiag = mapPositionToInfoDiagnostico.remove(keyPosition);
  1540.                 DynamicExtendedInfoDiagnostico d = mapPositionToDynamicExtendedInfoDiagnostico.remove(keyPosition);
  1541.                
  1542.                 MsgDiagnostico m = new MsgDiagnostico();
  1543.                
  1544.                 String codice = infoMsgDiag.getCode();
  1545.                 String codiceModulo = codice.substring(0, 3);
  1546.                
  1547.                 try{
  1548.                     this.buildFault(log, codice, codiceModulo);
  1549.                     this.buildContextForSingleMsgDiagnostico(codice,codiceModulo,true,
  1550.                             d.getType().getValue(),d.getValue(),
  1551.                             log);
  1552.                 }catch(Throwable t){
  1553.                     throw new UtilsException("build context error: "+t.getMessage(),t);
  1554.                 }
  1555.                
  1556.                 this.setDatiEngine(m, codice, codiceModulo, infoMsgDiag, d);
  1557.                
  1558.                 while(msgDiagnosticiCompleted.size()<d.getDiagnosticPosition() && !msgDiagnosticiNormali.isEmpty()){
  1559.                     msgDiagnosticiCompleted.add(msgDiagnosticiNormali.remove(0));
  1560.                 }
  1561.                
  1562.                 msgDiagnosticiCompleted.add(m);
  1563.             }
  1564.            
  1565.             while(!msgDiagnosticiNormali.isEmpty()){
  1566.                 msgDiagnosticiCompleted.add(msgDiagnosticiNormali.remove(0));
  1567.             }
  1568.            
  1569.             return msgDiagnosticiCompleted;
  1570.            
  1571.         }
  1572.         else{
  1573.             return msgDiagnosticiNormali;
  1574.         }
  1575.     }
  1576.    
  1577.     private void setDatiEngine(MsgDiagnostico msgDiag,String codice, String codiceModulo,
  1578.             InfoDiagnostico infoMsgDiag,
  1579.             DynamicExtendedInfoDiagnostico d) throws UtilsException{
  1580.        
  1581.         PropertiesReader pr = MsgDiagnosticiProperties.getMappingCodiceToKeywordMsgDiagnosticiPersonalizzati();
  1582.         PropertiesReader prSeverita = MsgDiagnosticiProperties.getLivelliMsgDiagnosticiPersonalizzati();
  1583.        
  1584.         MsgDiagnosticiProperties msgDiagProp = MsgDiagnosticiProperties.getInstance();
  1585.         boolean setSeverita = true;
  1586.         if(msgDiagProp.getCodiceDiagnosticoDebugHigh().equals(codice)){
  1587.             setSeverita = false;
  1588.             msgDiag.setSeverita(LogLevels.SEVERITA_DEBUG_HIGH);
  1589.         }
  1590.         else if(msgDiagProp.getCodiceDiagnosticoDebugMedium().equals(codice)){
  1591.             setSeverita = false;
  1592.             msgDiag.setSeverita(LogLevels.SEVERITA_DEBUG_MEDIUM);
  1593.         }
  1594.        
  1595.         String nomeCompletoDiagnostico = pr.getValue(codice);
  1596.        
  1597.         msgDiag.setCodice(codice);
  1598.        
  1599.         msgDiag.setGdo(infoMsgDiag.getGdo());
  1600.        
  1601.         msgDiag.setIdBusta(this.transazioneDTO.getIdMessaggioRichiesta());
  1602.         msgDiag.setIdBustaRisposta(this.transazioneDTO.getIdMessaggioRisposta());
  1603.        
  1604.         msgDiag.setIdFunzione(this.getIdentificativoFunzione(codiceModulo));
  1605.        
  1606.         IDSoggetto idDominio = new IDSoggetto(this.transazioneDTO.getPddTipoSoggetto(), this.transazioneDTO.getPddNomeSoggetto(), this.transazioneDTO.getPddCodice());
  1607.         msgDiag.setIdSoggetto(idDominio);
  1608.        
  1609.         if(d!=null && DynamicExtendedInfoDiagnosticoType.NON_RICOSTRUIBILE.equals(d.getType())){
  1610.             msgDiag.setMessaggio(DynamicExtendedInfoDiagnosticoNonRicostruibileUtils.convertToHumanMessage(d.getValue()));
  1611.         }else{
  1612.             msgDiag.setMessaggio(this.msgDiag.getMessaggio_replaceKeywords(nomeCompletoDiagnostico));
  1613.         }
  1614.        
  1615.         String idTransazionePresente = msgDiag.getProperty(CostantiDB.MSG_DIAGNOSTICI_COLUMN_ID_TRANSAZIONE);
  1616.         if(idTransazionePresente==null){
  1617.             msgDiag.addProperty(CostantiDB.MSG_DIAGNOSTICI_COLUMN_ID_TRANSAZIONE, this.transazioneDTO.getIdTransazione());
  1618.         }
  1619.        
  1620.         msgDiag.setProtocollo(this.transazioneDTO.getProtocollo());
  1621.            
  1622.         if(setSeverita){
  1623.             String sev = (String) prSeverita.get(nomeCompletoDiagnostico);
  1624.             int sevI = 0;
  1625.             try{
  1626.                 sevI = Integer.parseInt(sev);
  1627.             }catch(Exception e){
  1628.                 throw new UtilsException("Errore durante il parsing della severità ["+sev+"] per il diagnostico ["+nomeCompletoDiagnostico+"] code ["+codice+"]");
  1629.             }
  1630.             msgDiag.setSeverita( (sevI) / 10000);
  1631.         }
  1632.        
  1633.     }
  1634.    
  1635.    
  1636.    
  1637.    
  1638.    
  1639.    
  1640.    
  1641.    
  1642.    
  1643.    
  1644.     // *********** U T I L S **********************

  1645.     private String getIdentificativoFunzione(String codice) throws UtilsException{
  1646.         PropertiesReader pr = MsgDiagnosticiProperties.getCodiciIdentificativiFunzione();
  1647.         Enumeration<?> keys = pr.keys();
  1648.         while (keys.hasMoreElements()) {
  1649.             String key = (String) keys.nextElement();
  1650.             String value = pr.getValue(key);
  1651.             /**System.out.println("code["+key+"] name["+value+"]");*/
  1652.             if(value.equals(codice)){
  1653.                 return key;
  1654.             }
  1655.         }
  1656.         /**return null;*/
  1657.         // Fix: non devo ritornare null sennò poi la serializzazione va in errore
  1658.         return "core";
  1659.     }
  1660. }