DumpRaw.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.core.connettori;

  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Map;

  24. import org.openspcoop2.core.config.DumpConfigurazione;
  25. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  26. import org.openspcoop2.core.constants.TipoPdD;
  27. import org.openspcoop2.core.id.IDPortaApplicativa;
  28. import org.openspcoop2.core.id.IDSoggetto;
  29. import org.openspcoop2.core.transazioni.TransazioneApplicativoServer;
  30. import org.openspcoop2.message.constants.MessageType;
  31. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  32. import org.openspcoop2.pdd.core.PdDContext;
  33. import org.openspcoop2.pdd.logger.Dump;
  34. import org.openspcoop2.pdd.services.connector.ConnectorException;
  35. import org.openspcoop2.protocol.sdk.dump.DumpException;
  36. import org.openspcoop2.utils.io.DumpByteArrayOutputStream;

  37. /**
  38.  * DumpRaw
  39.  *
  40.  * @author Poli Andrea (apoli@link.it)
  41.  * @author $Author$
  42.  * @version $Rev$, $Date$
  43.  */
  44. public class DumpRaw {

  45.     @SuppressWarnings("unused")
  46.     private ConnettoreLogger logger;
  47.     @SuppressWarnings("unused")
  48.     private boolean pd;
  49.     private Dump dump;
  50.     private boolean dumpBinario;
  51.     private boolean dumpBinario_registrazioneDatabase = false;
  52.     private DumpConfigurazione dumpDatabaseConfigurazione;
  53.     private boolean dumpDatabaseRichiestaUscitaHeaders;
  54.     private boolean dumpDatabaseRichiestaUscitaPayload;
  55.     private boolean dumpDatabaseRispostaIngressoHeaders;
  56.     private boolean dumpDatabaseRispostaIngressoPayload;
  57.     private boolean onlyLogFileTraceRichiestaUscitaHeaders = false;
  58.     private boolean onlyLogFileTraceRichiestaUscitaPayload = false;
  59.     private boolean onlyLogFileTraceRispostaIngressoHeaders = false;
  60.     private boolean onlyLogFileTraceRispostaIngressoPayload = false;
  61.    
  62.     private IDSoggetto dominio;
  63.     private String modulo;
  64.     private TipoPdD tipoPdD;
  65.    
  66.     public DumpRaw(ConnettoreLogger log,IDSoggetto dominio,String modulo,TipoPdD tipoPdD,
  67.             boolean dumpBinario,
  68.             DumpConfigurazione dumpConfigurazione,
  69.             boolean fileTraceHeaders, boolean fileTracePayload) throws ConnectorException{
  70.         this.logger = log;
  71.        
  72.         switch (tipoPdD) {
  73.         case DELEGATA:
  74.             this.pd = true;
  75.             break;
  76.         default:
  77.             this.pd = false;
  78.             break;
  79.         }
  80.        
  81.         this.dumpBinario = dumpBinario;
  82.         if(this.dumpBinario) {
  83.             this.dumpBinario_registrazioneDatabase = OpenSPCoop2Properties.getInstance().isDumpBinarioRegistrazioneDatabase();
  84.         }
  85.        
  86.         if(dumpConfigurazione!=null) {
  87.             if(dumpConfigurazione.getRichiestaUscita()!=null) {
  88.                 // il parsing deve essere gestito con l'altra modalità, che dovrà gestire anche gli header, senno sul db si troveranno 2 messaggi
  89.                 boolean payloadParsing = StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRichiestaUscita().getPayload()) &&
  90.                         StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRichiestaUscita().getPayloadParsing());
  91.                 if(!payloadParsing) {
  92.                     if(StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRichiestaUscita().getHeaders())){
  93.                         this.dumpDatabaseRichiestaUscitaHeaders = true;
  94.                     }
  95.                     if(StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRichiestaUscita().getPayload())){
  96.                         this.dumpDatabaseRichiestaUscitaPayload = true;
  97.                     }
  98.                 }
  99.             }
  100.             if(dumpConfigurazione.getRispostaIngresso()!=null) {
  101.                 // il parsing deve essere gestito con l'altra modalità, che dovrà gestire anche gli header, senno sul db si troveranno 2 messaggi
  102.                 boolean payloadParsing = StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRispostaIngresso().getPayload()) &&
  103.                         StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRispostaIngresso().getPayloadParsing());
  104.                 if(!payloadParsing) {
  105.                     if(StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRispostaIngresso().getHeaders())){
  106.                         this.dumpDatabaseRispostaIngressoHeaders = true;
  107.                     }
  108.                     if(StatoFunzionalita.ABILITATO.equals(dumpConfigurazione.getRispostaIngresso().getPayload())){
  109.                         this.dumpDatabaseRispostaIngressoPayload = true;
  110.                     }
  111.                 }
  112.             }
  113.             this.dumpDatabaseConfigurazione = dumpConfigurazione;
  114.         }
  115.        
  116.         if(!this.dumpDatabaseRichiestaUscitaHeaders && (!dumpBinario || !this.dumpBinario_registrazioneDatabase) ) {
  117.             this.onlyLogFileTraceRichiestaUscitaHeaders = fileTraceHeaders;
  118.         }
  119.         if(!this.dumpDatabaseRichiestaUscitaPayload && (!dumpBinario || !this.dumpBinario_registrazioneDatabase) ) {
  120.             this.onlyLogFileTraceRichiestaUscitaPayload = fileTracePayload;
  121.         }
  122.         if(!this.dumpDatabaseRispostaIngressoHeaders && (!dumpBinario || !this.dumpBinario_registrazioneDatabase) ) {
  123.             this.onlyLogFileTraceRispostaIngressoHeaders = fileTraceHeaders;
  124.         }
  125.         if(!this.dumpDatabaseRispostaIngressoPayload && (!dumpBinario || !this.dumpBinario_registrazioneDatabase) ) {
  126.             this.onlyLogFileTraceRispostaIngressoPayload = fileTracePayload;
  127.         }
  128.                
  129.         this.dominio = dominio;
  130.         this.modulo = modulo;
  131.         this.tipoPdD = tipoPdD;
  132.     }
  133.    
  134.     public boolean isActiveDumpDatabase() {
  135.         return this.isDumpBinarioRegistrazioneDatabase() || isRegistrazioneDatabase() || onlyLogFileTrace();
  136.     }
  137.     public boolean isActiveDumpDatabaseRichiesta() {
  138.         return this.dumpBinario || isRegistrazioneDatabaseRichiesta() || onlyLogFileTraceRichiesta();
  139.     }
  140.     public boolean isActiveDumpDatabaseRisposta() {
  141.         return this.dumpBinario || isRegistrazioneDatabaseRisposta() || onlyLogFileTraceRisposta();
  142.     }
  143.    
  144.     private boolean isRegistrazioneDatabase() {
  145.         return this.isRegistrazioneDatabaseRichiesta()
  146.                 ||
  147.                this.isRegistrazioneDatabaseRisposta()
  148.                ;
  149.     }
  150.     private boolean isRegistrazioneDatabaseRichiesta() {
  151.         return this.dumpDatabaseRichiestaUscitaHeaders
  152.                 ||
  153.                this.dumpDatabaseRichiestaUscitaPayload
  154.                ;
  155.     }
  156.     private boolean isRegistrazioneDatabaseRisposta() {
  157.         return this.dumpDatabaseRispostaIngressoHeaders
  158.                 ||
  159.                this.dumpDatabaseRispostaIngressoPayload
  160.                ;
  161.     }
  162.    
  163.     private boolean onlyLogFileTrace() {
  164.         return this.onlyLogFileTraceRichiesta()
  165.                 ||
  166.                this.onlyLogFileTraceRisposta()
  167.                ;
  168.     }
  169.     private boolean onlyLogFileTraceRichiesta() {
  170.         return this.onlyLogFileTraceRichiestaUscitaHeaders
  171.                 ||
  172.                this.onlyLogFileTraceRichiestaUscitaPayload
  173.                 ||
  174.                this.onlyLogFileTraceRispostaIngressoHeaders
  175.                 ||
  176.                this.onlyLogFileTraceRispostaIngressoPayload
  177.                ;
  178.     }
  179.     private boolean onlyLogFileTraceRisposta() {
  180.         return this.onlyLogFileTraceRichiestaUscitaHeaders
  181.                 ||
  182.                this.onlyLogFileTraceRichiestaUscitaPayload
  183.                 ||
  184.                this.onlyLogFileTraceRispostaIngressoHeaders
  185.                 ||
  186.                this.onlyLogFileTraceRispostaIngressoPayload
  187.                ;
  188.     }
  189.    
  190.     private boolean isDumpBinarioRegistrazioneDatabase() {
  191.         return this.dumpBinario && this.dumpBinario_registrazioneDatabase;
  192.     }
  193.    
  194.     public void initDump(String interfaceName, PdDContext pddContext) throws DumpException {
  195.         initDump(interfaceName, pddContext,
  196.                 null,
  197.                 null, null);
  198.     }
  199.     public void initDump(String interfaceName, PdDContext pddContext,
  200.             TransazioneApplicativoServer transazioneApplicativoServer,
  201.             IDPortaApplicativa idPA, Date dataConsegnaTransazioneApplicativoServer) throws DumpException {
  202.        
  203.         if(!isActiveDumpDatabase()) {
  204.             return;
  205.         }
  206.        
  207.         if(this.isRegistrazioneDatabase() || this.isDumpBinarioRegistrazioneDatabase() || this.onlyLogFileTrace()) {
  208.             this.dump = new Dump(this.dominio, this.modulo, this.tipoPdD, interfaceName, pddContext, this.dumpDatabaseConfigurazione);
  209.             if(transazioneApplicativoServer!=null) {
  210.                 this.dump.setTransazioneApplicativoServer(transazioneApplicativoServer,
  211.                         idPA, dataConsegnaTransazioneApplicativoServer);
  212.             }
  213.         }  
  214.     }
  215.        
  216.     public void emitDiagnosticStartDumpBinarioRichiestaUscita() {
  217.         if(!isActiveDumpDatabaseRichiesta()) {
  218.             return;
  219.         }
  220.        
  221.         if(this.dump!=null) {
  222.             boolean onlyFileTrace = !isRegistrazioneDatabaseRichiesta();
  223.             this.dump.emitDiagnosticStartDumpBinarioRichiestaUscita(onlyFileTrace);
  224.         }
  225.     }
  226.     public void dumpRequest(DumpByteArrayOutputStream content, MessageType messageType, InfoConnettoreUscita infoConnettoreUscita) throws DumpException {
  227.        
  228.         if(!isActiveDumpDatabaseRichiesta()) {
  229.             return;
  230.         }
  231.        
  232.         if(this.dump!=null) {
  233.             //if(content!=null){ // devono essere registrati anche solamente gli header
  234.             this.dump.dumpBinarioRichiestaUscita(this.isDumpBinarioRegistrazioneDatabase(), this.onlyLogFileTraceRichiestaUscitaHeaders, this.onlyLogFileTraceRichiestaUscitaPayload,
  235.                     content, messageType,
  236.                     infoConnettoreUscita);
  237.             //}
  238.         }
  239.     }
  240.    
  241.     public void emitDiagnosticStartDumpBinarioRispostaIngresso() {
  242.         if(!isActiveDumpDatabaseRisposta()) {
  243.             return;
  244.         }
  245.        
  246.         if(this.dump!=null) {
  247.             boolean onlyFileTrace = !isRegistrazioneDatabaseRisposta();
  248.             this.dump.emitDiagnosticStartDumpBinarioRispostaIngresso(onlyFileTrace);
  249.         }
  250.     }
  251.     public void dumpResponse(DumpByteArrayOutputStream content, MessageType messageType, InfoConnettoreUscita infoConnettoreUscita, Map<String, List<String>> trasportoRisposta) throws DumpException {
  252.        
  253.         if(!isActiveDumpDatabaseRisposta()) {
  254.             return;
  255.         }
  256.        
  257.         if(this.dump!=null) {
  258.             //if(content!=null){ // devono essere registrati anche solamente gli header
  259.             this.dump.dumpBinarioRispostaIngresso(this.isDumpBinarioRegistrazioneDatabase(), this.onlyLogFileTraceRispostaIngressoHeaders, this.onlyLogFileTraceRispostaIngressoPayload,
  260.                     content, messageType,
  261.                     infoConnettoreUscita, trasportoRisposta);
  262.             //}
  263.         }
  264.     }
  265.    
  266. }