ContenutiUtilities.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.transazioni;

  21. import org.openspcoop2.core.commons.dao.DAOFactory;
  22. import org.openspcoop2.core.transazioni.DumpContenuto;
  23. import org.openspcoop2.core.transazioni.DumpMessaggio;
  24. import org.openspcoop2.core.transazioni.IdDumpMessaggio;
  25. import org.openspcoop2.core.transazioni.Transazione;
  26. import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
  27. import org.openspcoop2.core.transazioni.dao.IDumpMessaggioService;
  28. import org.openspcoop2.monitor.engine.config.TransactionResource;
  29. import org.openspcoop2.monitor.engine.config.TransactionServiceLibrary;
  30. import org.openspcoop2.monitor.engine.transaction.TransactionContentUtils;

  31. import java.util.List;

  32. import org.slf4j.Logger;
  33. import org.openspcoop2.generic_project.exception.MultipleResultException;
  34. import org.openspcoop2.generic_project.exception.NotFoundException;
  35. import org.openspcoop2.generic_project.exception.NotImplementedException;
  36. import org.openspcoop2.generic_project.exception.ServiceException;
  37. import org.openspcoop2.pdd.core.handlers.HandlerException;
  38. import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
  39. import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
  40. import org.openspcoop2.utils.date.DateManager;

  41. /**    
  42.  * ContenutiUtilities
  43.  *
  44.  * @author Poli Andrea (poli@link.it)
  45.  * @author $Author$
  46.  * @version $Rev$, $Date$
  47.  */
  48. public class ContenutiUtilities {

  49.     private Logger logger;
  50.    
  51.     public ContenutiUtilities(Logger log){
  52.         this.logger = log;
  53.     }
  54.    
  55.     public void insertContenuti(Transazione transactionDTO,
  56.             Traccia tracciaRichiesta, Traccia tracciaRisposta,
  57.             List<MsgDiagnostico> msgDiagnostici,
  58.             IDumpMessaggioService dumpMessageService,
  59.             List<TransactionResource> risorse,
  60.             TransactionServiceLibrary transactionServiceLibrary,
  61.             DAOFactory daoFactory) throws HandlerException{

  62.         try {

  63.             boolean updateRichiestaIngresso = false;
  64.             boolean updateRichiestaUscita = false;
  65.             boolean updateRispostaIngresso = false;
  66.             boolean updateRispostaUscita = false;
  67.            
  68.             DumpMessaggio dumpMessaggioRichiestaIngresso = null;
  69.             DumpMessaggio dumpMessaggioRichiestaUscita = null;
  70.             DumpMessaggio dumpMessaggioRispostaIngresso = null;
  71.             DumpMessaggio dumpMessaggioRispostaUscita = null;
  72.            
  73.             IdDumpMessaggio idDumpMessaggioRichiestaIngresso = new IdDumpMessaggio();
  74.             idDumpMessaggioRichiestaIngresso.setIdTransazione(transactionDTO.getIdTransazione());
  75.             idDumpMessaggioRichiestaIngresso.setTipoMessaggio(TipoMessaggio.RICHIESTA_INGRESSO);
  76.            
  77.             IdDumpMessaggio idDumpMessaggioRichiestaUscita = new IdDumpMessaggio();
  78.             idDumpMessaggioRichiestaUscita.setIdTransazione(transactionDTO.getIdTransazione());
  79.             idDumpMessaggioRichiestaUscita.setTipoMessaggio(TipoMessaggio.RICHIESTA_USCITA);
  80.            
  81.             IdDumpMessaggio idDumpMessaggioRispostaIngresso = new IdDumpMessaggio();
  82.             idDumpMessaggioRispostaIngresso.setIdTransazione(transactionDTO.getIdTransazione());
  83.             idDumpMessaggioRispostaIngresso.setTipoMessaggio(TipoMessaggio.RISPOSTA_INGRESSO);
  84.            
  85.             IdDumpMessaggio idDumpMessaggioRispostaUscita = new IdDumpMessaggio();
  86.             idDumpMessaggioRispostaUscita.setIdTransazione(transactionDTO.getIdTransazione());
  87.             idDumpMessaggioRispostaUscita.setTipoMessaggio(TipoMessaggio.RISPOSTA_USCITA);
  88.            
  89.            

  90.             // ----------------------- Inserimento contenuti -------------------------
  91.             if(risorse!=null && !risorse.isEmpty()){
  92.                
  93.                
  94.                 for (TransactionResource risorsaCalcolata : risorse) {
  95.                    
  96.                     if(org.openspcoop2.core.transazioni.constants.TipoMessaggio.RICHIESTA_INGRESSO.equals(risorsaCalcolata.getTipoMessaggio())){
  97.                        
  98.                         if(dumpMessaggioRichiestaIngresso==null) {
  99.                             dumpMessaggioRichiestaIngresso = getSafe(dumpMessageService, idDumpMessaggioRichiestaIngresso);
  100.                         }
  101.                        
  102.                         if(dumpMessaggioRichiestaIngresso==null){
  103.                             dumpMessaggioRichiestaIngresso = new DumpMessaggio();
  104.                             dumpMessaggioRichiestaIngresso.setIdTransazione(transactionDTO.getIdTransazione());
  105.                             dumpMessaggioRichiestaIngresso.setTipoMessaggio(TipoMessaggio.RICHIESTA_INGRESSO);
  106.                             dumpMessaggioRichiestaIngresso.setDumpTimestamp(DateManager.getDate());
  107.                         }
  108.                         DumpContenuto contenuto =
  109.                                 TransactionContentUtils.createDumpContenuto(risorsaCalcolata.getNome(),
  110.                                         risorsaCalcolata.getValore(),
  111.                                         DateManager.getDate());
  112.                         dumpMessaggioRichiestaIngresso.addContenuto(contenuto);
  113.                         updateRichiestaIngresso = true;
  114.                     }
  115.                    
  116.                     else if(org.openspcoop2.core.transazioni.constants.TipoMessaggio.RICHIESTA_USCITA.equals(risorsaCalcolata.getTipoMessaggio())){
  117.                        
  118.                         if(dumpMessaggioRichiestaUscita==null) {
  119.                             dumpMessaggioRichiestaUscita = getSafe(dumpMessageService, idDumpMessaggioRichiestaUscita);
  120.                         }
  121.                        
  122.                         if(dumpMessaggioRichiestaUscita==null){
  123.                             dumpMessaggioRichiestaUscita = new DumpMessaggio();
  124.                             dumpMessaggioRichiestaUscita.setIdTransazione(transactionDTO.getIdTransazione());
  125.                             dumpMessaggioRichiestaUscita.setTipoMessaggio(TipoMessaggio.RICHIESTA_USCITA);
  126.                             dumpMessaggioRichiestaUscita.setDumpTimestamp(DateManager.getDate());
  127.                         }
  128.                         DumpContenuto contenuto =
  129.                                 TransactionContentUtils.createDumpContenuto(risorsaCalcolata.getNome(),
  130.                                         risorsaCalcolata.getValore(),
  131.                                         DateManager.getDate());
  132.                         dumpMessaggioRichiestaUscita.addContenuto(contenuto);
  133.                         updateRichiestaUscita = true;
  134.                     }
  135.                    
  136.                     else if(org.openspcoop2.core.transazioni.constants.TipoMessaggio.RISPOSTA_INGRESSO.equals(risorsaCalcolata.getTipoMessaggio())){
  137.                        
  138.                         if(dumpMessaggioRispostaIngresso==null) {
  139.                             dumpMessaggioRispostaIngresso = getSafe(dumpMessageService, idDumpMessaggioRispostaIngresso);
  140.                         }
  141.                        
  142.                         if(dumpMessaggioRispostaIngresso==null){
  143.                             dumpMessaggioRispostaIngresso = new DumpMessaggio();
  144.                             dumpMessaggioRispostaIngresso.setIdTransazione(transactionDTO.getIdTransazione());
  145.                             dumpMessaggioRispostaIngresso.setTipoMessaggio(TipoMessaggio.RISPOSTA_INGRESSO);
  146.                             dumpMessaggioRispostaIngresso.setDumpTimestamp(DateManager.getDate());
  147.                         }
  148.                         DumpContenuto contenuto =
  149.                                 TransactionContentUtils.createDumpContenuto(risorsaCalcolata.getNome(),
  150.                                         risorsaCalcolata.getValore(),
  151.                                         DateManager.getDate());
  152.                         dumpMessaggioRispostaIngresso.addContenuto(contenuto);
  153.                         updateRispostaIngresso = true;
  154.                     }
  155.                    
  156.                     else if(org.openspcoop2.core.transazioni.constants.TipoMessaggio.RISPOSTA_USCITA.equals(risorsaCalcolata.getTipoMessaggio())){
  157.                        
  158.                         if(dumpMessaggioRispostaUscita==null) {
  159.                             dumpMessaggioRispostaUscita = getSafe(dumpMessageService, idDumpMessaggioRispostaUscita);
  160.                         }
  161.                        
  162.                         if(dumpMessaggioRispostaUscita==null){
  163.                             dumpMessaggioRispostaUscita = new DumpMessaggio();
  164.                             dumpMessaggioRispostaUscita.setIdTransazione(transactionDTO.getIdTransazione());
  165.                             dumpMessaggioRispostaUscita.setTipoMessaggio(TipoMessaggio.RISPOSTA_USCITA);
  166.                             dumpMessaggioRispostaUscita.setDumpTimestamp(DateManager.getDate());
  167.                         }
  168.                         DumpContenuto contenuto =
  169.                                 TransactionContentUtils.createDumpContenuto(risorsaCalcolata.getNome(),
  170.                                         risorsaCalcolata.getValore(),
  171.                                         DateManager.getDate());
  172.                         dumpMessaggioRispostaUscita.addContenuto(contenuto);
  173.                         updateRispostaUscita = true;
  174.                     }
  175.                 }
  176.             }
  177.            
  178.            
  179.            
  180.             // ----------------------- SDK -------------------------
  181.                
  182.             if(dumpMessaggioRichiestaIngresso==null && transactionServiceLibrary!=null){
  183.                 dumpMessaggioRichiestaIngresso = new DumpMessaggio();
  184.                 dumpMessaggioRichiestaIngresso.setIdTransazione(transactionDTO.getIdTransazione());
  185.                 dumpMessaggioRichiestaIngresso.setTipoMessaggio(TipoMessaggio.RICHIESTA_INGRESSO);
  186.                 dumpMessaggioRichiestaIngresso.setDumpTimestamp(DateManager.getDate());
  187.             }
  188.            
  189.             if(dumpMessaggioRichiestaUscita==null && transactionServiceLibrary!=null){
  190.                 dumpMessaggioRichiestaUscita = new DumpMessaggio();
  191.                 dumpMessaggioRichiestaUscita.setIdTransazione(transactionDTO.getIdTransazione());
  192.                 dumpMessaggioRichiestaUscita.setTipoMessaggio(TipoMessaggio.RICHIESTA_USCITA);
  193.                 dumpMessaggioRichiestaUscita.setDumpTimestamp(DateManager.getDate());
  194.             }
  195.            
  196.             if(dumpMessaggioRispostaIngresso==null && transactionServiceLibrary!=null){
  197.                 dumpMessaggioRispostaIngresso = new DumpMessaggio();
  198.                 dumpMessaggioRispostaIngresso.setIdTransazione(transactionDTO.getIdTransazione());
  199.                 dumpMessaggioRispostaIngresso.setTipoMessaggio(TipoMessaggio.RISPOSTA_INGRESSO);
  200.                 dumpMessaggioRispostaIngresso.setDumpTimestamp(DateManager.getDate());
  201.             }
  202.            
  203.             if(dumpMessaggioRispostaUscita==null && transactionServiceLibrary!=null){
  204.                 dumpMessaggioRispostaUscita = new DumpMessaggio();
  205.                 dumpMessaggioRispostaUscita.setIdTransazione(transactionDTO.getIdTransazione());
  206.                 dumpMessaggioRispostaUscita.setTipoMessaggio(TipoMessaggio.RISPOSTA_USCITA);
  207.                 dumpMessaggioRispostaUscita.setDumpTimestamp(DateManager.getDate());
  208.             }
  209.            
  210.             boolean messaggioModificatoSDK = false;
  211.             if(transactionServiceLibrary!=null){
  212.                 messaggioModificatoSDK = transactionServiceLibrary.processResourcesBeforeSaveOnDatabase(transactionDTO,
  213.                         tracciaRichiesta, tracciaRisposta,
  214.                         msgDiagnostici,
  215.                         dumpMessaggioRichiestaIngresso, dumpMessaggioRichiestaUscita,
  216.                         dumpMessaggioRispostaIngresso, dumpMessaggioRispostaUscita,
  217.                         transactionDTO.getStato(),
  218.                         this.logger,daoFactory);
  219.             }
  220.            
  221.            
  222.            
  223.            
  224.             // ----------------------- UPDATE -------------------------

  225.             if(updateRichiestaIngresso || messaggioModificatoSDK){
  226.                 dumpMessageService.updateOrCreate(idDumpMessaggioRichiestaIngresso, dumpMessaggioRichiestaIngresso);
  227.             }
  228.             if(updateRichiestaUscita || messaggioModificatoSDK){
  229.                 dumpMessageService.updateOrCreate(idDumpMessaggioRichiestaUscita, dumpMessaggioRichiestaUscita);
  230.             }
  231.            
  232.             if(updateRispostaIngresso || messaggioModificatoSDK){
  233.                 dumpMessageService.updateOrCreate(idDumpMessaggioRispostaIngresso, dumpMessaggioRispostaIngresso);
  234.             }
  235.             if(updateRispostaUscita || messaggioModificatoSDK){
  236.                 dumpMessageService.updateOrCreate(idDumpMessaggioRispostaUscita, dumpMessaggioRispostaUscita);
  237.             }
  238.            
  239.         } catch (Exception e) {
  240.             throw new HandlerException("Errore durante la scrittura della transazione sul database: " + e.getLocalizedMessage(), e);
  241.         }
  242.     }
  243.    
  244.     private DumpMessaggio getSafe(IDumpMessaggioService dumpMessageService, IdDumpMessaggio id) throws ServiceException, MultipleResultException, NotImplementedException {
  245.         try{
  246.             return dumpMessageService.get(id);
  247.         }catch(NotFoundException notFound){
  248.             // ignore
  249.             return null;
  250.         }
  251.     }
  252.    
  253. }