OutRequestHandler.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.handlers.transazioni;

  21. import java.util.Date;

  22. import org.apache.commons.lang.StringUtils;
  23. import org.openspcoop2.core.constants.Costanti;
  24. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  25. import org.openspcoop2.pdd.core.CostantiPdD;
  26. import org.openspcoop2.pdd.core.handlers.HandlerException;
  27. import org.openspcoop2.pdd.core.handlers.OutRequestContext;
  28. import org.openspcoop2.pdd.core.transazioni.OutRequestStatefulObject;
  29. import org.openspcoop2.pdd.core.transazioni.RepositoryGestioneStateful;
  30. import org.openspcoop2.pdd.core.transazioni.Transaction;
  31. import org.openspcoop2.pdd.core.transazioni.TransactionContext;
  32. import org.openspcoop2.pdd.core.transazioni.TransactionDeletedException;
  33. import org.openspcoop2.pdd.core.transazioni.TransactionNotExistsException;
  34. import org.openspcoop2.pdd.core.transazioni.TransactionStatefulNotSupportedException;
  35. import org.openspcoop2.utils.transport.http.HttpRequestMethod;

  36. /**    
  37.  * OutRequestHandler
  38.  *
  39.  * @author Poli Andrea (poli@link.it)
  40.  * @author $Author$
  41.  * @version $Rev$, $Date$
  42.  */
  43. public class OutRequestHandler extends LastPositionHandler implements  org.openspcoop2.pdd.core.handlers.OutRequestHandler{

  44.     @Override
  45.     public void invoke(OutRequestContext context) throws HandlerException {

  46.         OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
  47.         if(op2Properties.isTransazioniEnabled()==false) {
  48.             return;
  49.         }
  50.        
  51.         String idTransazione = (String) context.getPddContext().getObject(Costanti.ID_TRANSAZIONE);
  52.        
  53.         //System.out.println("------------- OutRequestHandler ("+idTransazione+")("+context.getTipoPorta().getTipo()+") -------------------");
  54.        
  55.        
  56.        
  57.         if(context.getTransazioneApplicativoServer()!=null) {
  58.            
  59.             try{
  60.            
  61.                 context.getTransazioneApplicativoServer().setDataUscitaRichiesta(context.getDataElaborazioneMessaggio());
  62.                
  63.                 if(context.getConnettore()!=null){
  64.                     context.getTransazioneApplicativoServer().setLocationConnettore(context.getConnettore().getLocation());
  65.                 }
  66.                
  67.             }catch(Exception e){
  68.                 throw new HandlerException("Errore durante il processamento delle informazioni relative alla consegna per l'applicativo '"+context.getTransazioneApplicativoServer().getServizioApplicativoErogatore()+"': "+e.getMessage(),e);
  69.             }
  70.            
  71.         }
  72.         else {
  73.        
  74.        
  75.             //if(context.getIntegrazione()!=null)
  76.             //  System.out.println("GESTIONE STATELESS OutRequestHandler ["+context.getIntegrazione().isGestioneStateless()+"] ["+context.getTipoPorta()+"]");
  77.             if(context.getIntegrazione()!=null &&
  78.                     context.getIntegrazione().isGestioneStateless()!=null &&
  79.                     !context.getIntegrazione().isGestioneStateless()){
  80.                 if(op2Properties.isTransazioniStatefulEnabled()==false){
  81.                     throw new HandlerException("Gestione delle transazioni stateful non abilita");
  82.                 }
  83.             }
  84.            
  85.             boolean gestioneStateful = false;
  86.             Transaction tr = null;
  87.             try{
  88.                 tr = TransactionContext.getTransaction(idTransazione);
  89.             }catch(TransactionNotExistsException e){
  90.                 gestioneStateful = true;
  91.             }
  92.                    
  93.             try{
  94.            
  95.                 OutRequestStatefulObject sObject = null;
  96.                
  97.                 if(tr==null && gestioneStateful){
  98.                    
  99.                     sObject = new OutRequestStatefulObject();
  100.                    
  101.                     //System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler ID TRANSAZIONE ["+idTransazione+"] GESTIONE COMPLETA");
  102.                                    
  103.                     Date dataElaborazioneMessaggio = context.getDataElaborazioneMessaggio();
  104.                     // INEFFICIENTE: RepositoryGestioneStateful.addDataUscitaRichiesta(idTransazione, dataElaborazioneMessaggio);
  105.                     sObject.setDataUscitaRichiesta(dataElaborazioneMessaggio);
  106.                                    
  107.                     if(context.getProtocollo()!=null){
  108.                         // INEFFICIENTE: RepositoryGestioneStateful.addScenarioCooperazione(idTransazione, context.getProtocollo().getScenarioCooperazione());
  109.                         sObject.setScenarioCooperazione(context.getProtocollo().getScenarioCooperazione());
  110.                     }
  111.                    
  112.                     if(context.getConnettore()!=null){
  113.                        
  114.                         // INEFFICIENTE: RepositoryGestioneStateful.addTipoConnettore(idTransazione, context.getConnettore().getTipoConnettore());
  115.                         sObject.setTipoConnettore(context.getConnettore().getTipoConnettore());
  116.                        
  117.                         // INEFFICIENTE: RepositoryGestioneStateful.addLocation(idTransazione, context.getConnettore().getLocation());
  118.                         sObject.setLocation(context.getConnettore().getLocation());
  119.                        
  120.                     }
  121.                    
  122.                     if(context.getIntegrazione()!=null){
  123.                        
  124.                         // INEFFICIENTE: RepositoryGestioneStateful.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
  125.                         for (int i = 0; i < context.getIntegrazione().sizeServiziApplicativiErogatori(); i++) {
  126.                             sObject.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));  
  127.                         }
  128.                        
  129.                     }
  130.                    
  131.                 }
  132.                
  133.                 else{
  134.                
  135.                     if(tr==null) {
  136.                         throw new HandlerException("Transaction is null");
  137.                     }
  138.                    
  139.                     Date dataElaborazioneMessaggio = context.getDataElaborazioneMessaggio();
  140.                     try{
  141.                         tr.setDataUscitaRichiesta(dataElaborazioneMessaggio);
  142.                         //System.out.println("SET DATA ("+dataElaborazioneMessaggio.toString()+")");
  143.                     }catch(TransactionDeletedException e){
  144.                         //System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET DATA ("+dataElaborazioneMessaggio.toString()+")");
  145.                         // INEFFICIENTE: RepositoryGestioneStateful.addDataUscitaRichiesta(idTransazione, dataElaborazioneMessaggio);
  146.                         if(sObject==null)
  147.                             sObject = new OutRequestStatefulObject();
  148.                         sObject.setDataUscitaRichiesta(dataElaborazioneMessaggio);
  149.                     }
  150.                    
  151.                     try{
  152.                         if(context.getProtocollo()!=null){
  153.                             //System.out.println("SET SCENARIO ["+context.getProtocollo().getScenarioCooperazione()+"]");
  154.                             tr.setScenarioCooperazione(context.getProtocollo().getScenarioCooperazione());
  155.                         }
  156.                     }catch(TransactionDeletedException e){
  157.                         //System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET SCENARIO ["+context.getProtocollo().getScenarioCooperazione()+"]");
  158.                         // INEFFICIENTE: RepositoryGestioneStateful.addScenarioCooperazione(idTransazione, context.getProtocollo().getScenarioCooperazione());
  159.                         if(sObject==null)
  160.                             sObject = new OutRequestStatefulObject();
  161.                         sObject.setScenarioCooperazione(context.getProtocollo().getScenarioCooperazione());
  162.                     }
  163.                    
  164.                     if(context.getConnettore()!=null){
  165.                        
  166.                         try{
  167.                             //System.out.println("SET TIPO CONNETTORE ["+context.getConnettore().getTipoConnettore()+"]");
  168.                             tr.setTipoConnettore(context.getConnettore().getTipoConnettore());
  169.                         }catch(TransactionDeletedException e){
  170.                             //System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET TIPO CONNETTORE ["+context.getConnettore().getTipoConnettore()+"]");
  171.                             // INEFFICIENTE: RepositoryGestioneStateful.addTipoConnettore(idTransazione, context.getConnettore().getTipoConnettore());
  172.                             if(sObject==null)
  173.                                 sObject = new OutRequestStatefulObject();
  174.                             sObject.setTipoConnettore(context.getConnettore().getTipoConnettore());
  175.                         }
  176.                        
  177.                         try{
  178.                             //System.out.println("SET LOCATION ["+context.getConnettore().getLocation()+"]");
  179.                             String connettoreRequestUrl = null;
  180.                             String connettoreRequestMethod = null;
  181.                             if(context.getPddContext()!=null) {
  182.                                 if(context.getPddContext().containsKey(CostantiPdD.CONNETTORE_REQUEST_URL)) {
  183.                                     connettoreRequestUrl = (String) context.getPddContext().getObject(CostantiPdD.CONNETTORE_REQUEST_URL);
  184.                                 }
  185.                                 if(context.getPddContext().containsKey(CostantiPdD.CONNETTORE_REQUEST_METHOD)) {
  186.                                     Object o = context.getPddContext().getObject(CostantiPdD.CONNETTORE_REQUEST_METHOD);
  187.                                     if(o instanceof String) {
  188.                                         connettoreRequestMethod = (String) o;
  189.                                     }
  190.                                     else if(o instanceof HttpRequestMethod) {
  191.                                         HttpRequestMethod oConnettoreRequestMethod = (HttpRequestMethod) o;
  192.                                         connettoreRequestMethod = oConnettoreRequestMethod.name();
  193.                                     }
  194.                                 }
  195.                             }
  196.                             if(!StringUtils.isEmpty(connettoreRequestUrl) && !StringUtils.isEmpty(connettoreRequestMethod)) {
  197.                                 tr.setLocation(CostantiPdD.getConnettoreRequest(connettoreRequestUrl, connettoreRequestMethod));
  198.                             }
  199.                             else {
  200.                                 tr.setLocation(context.getConnettore().getLocation());
  201.                             }
  202.                         }catch(TransactionDeletedException e){
  203.                             //System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler SET LOCATION ["+context.getConnettore().getLocation()+"]");
  204.                             // INEFFICIENTE: RepositoryGestioneStateful.addLocation(idTransazione, context.getConnettore().getLocation());
  205.                             if(sObject==null)
  206.                                 sObject = new OutRequestStatefulObject();
  207.                             sObject.setLocation(context.getConnettore().getLocation());
  208.                         }
  209.                        
  210.                     }
  211.                    
  212.                     if(context.getIntegrazione()!=null){
  213.                        
  214.                         for (int i = 0; i < context.getIntegrazione().sizeServiziApplicativiErogatori(); i++) {
  215.                             try{
  216.                                 //  System.out.println("ADD SERVIZIO APPLICATIVO EROGATORE ["+context.getConnettore().getLocation()+"]");
  217.                                 tr.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
  218.                             }catch(TransactionDeletedException e){
  219.                                 //System.out.println("@@@@@REPOSITORY@@@@@ OutRequestHandler ADD SERVIZIO APPLICATIVO EROGATORE ["+context.getIntegrazione().getServizioApplicativoErogatore(i)+"]");
  220.                                 // INEFFICIENTE: RepositoryGestioneStateful.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));
  221.                                 if(sObject==null)
  222.                                     sObject = new OutRequestStatefulObject();
  223.                                 sObject.addServizioApplicativoErogatore(context.getIntegrazione().getServizioApplicativoErogatore(i));  
  224.                             }
  225.                         }
  226.                        
  227.                     }
  228.                 }
  229.                
  230.                
  231.                 if(sObject!=null){
  232.                     // Gestione stateful
  233.                     RepositoryGestioneStateful.addOutRequestStatefulObject(context.getProtocolFactory().getProtocol(),idTransazione, sObject);
  234.                 }
  235.                
  236.             }catch(TransactionStatefulNotSupportedException e){
  237.                 throw new HandlerException("Errore durante il processamento dell'handler: "+e.getMessage(),e);
  238.             }
  239.         }
  240.        
  241.     }


  242. }