ConnettoreUtilities.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.controllo_traffico;

  21. import java.util.Iterator;
  22. import java.util.Map;

  23. import org.openspcoop2.core.config.AccessoConfigurazionePdD;
  24. import org.openspcoop2.core.config.Connettore;
  25. import org.openspcoop2.core.config.PortaApplicativa;
  26. import org.openspcoop2.core.config.ServizioApplicativo;
  27. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  28. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  29. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  30. import org.openspcoop2.core.constants.CostantiConnettori;
  31. import org.openspcoop2.core.constants.TipoPdD;
  32. import org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale;
  33. import org.openspcoop2.core.controllo_traffico.beans.DatiTransazione;
  34. import org.openspcoop2.core.id.IDPortaApplicativa;
  35. import org.openspcoop2.core.id.IDServizioApplicativo;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  38. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  39. import org.openspcoop2.pdd.core.handlers.InRequestProtocolContext;
  40. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  41. import org.openspcoop2.protocol.sdk.state.RequestInfo;

  42. /**    
  43.  * ConnettoreUtilities
  44.  *
  45.  * @author Poli Andrea (poli@link.it)
  46.  * @author $Author$
  47.  * @version $Rev$, $Date$
  48.  */
  49. public class ConnettoreUtilities {
  50.    
  51.     private ConnettoreUtilities() {}

  52.     public static DatiTempiRisposta readDatiGlobaliTimeout(ConfigurazionePdDManager configPdDManager, TipoPdD tipoPdD, RequestInfo requestInfo, OpenSPCoop2Properties properties) throws DriverConfigurazioneException {
  53.         // Prelevo la configurazione del Controllo del Traffico
  54.        
  55.         AccessoConfigurazionePdD accessoConfigurazione = null;
  56.         try {
  57.             accessoConfigurazione = properties.getAccessoConfigurazionePdD();
  58.         }catch(Exception e) {
  59.             throw new DriverConfigurazioneException(e.getMessage(),e);
  60.         }
  61.        
  62.         ConfigurazioneGenerale configurazioneGenerale = null;
  63.         if(accessoConfigurazione!=null && CostantiConfigurazione.CONFIGURAZIONE_DB.equalsIgnoreCase(accessoConfigurazione.getTipo())) {
  64.             try {
  65.                 configurazioneGenerale = configPdDManager.getConfigurazioneControlloTraffico(requestInfo);
  66.             }catch(DriverConfigurazioneNotFound notFound) {
  67.                 // ignore
  68.             }
  69.         }
  70.        
  71.         if(TipoPdD.DELEGATA.equals(tipoPdD)){
  72.             return readDatiGlobaliTimeoutFruizione(configurazioneGenerale, properties);
  73.         }
  74.         else{
  75.             return readDatiGlobaliTimeoutErogazione(configurazioneGenerale, properties);
  76.         }
  77.    
  78.     }
  79.     private static DatiTempiRisposta readDatiGlobaliTimeoutFruizione(ConfigurazioneGenerale configurazioneGenerale, OpenSPCoop2Properties properties) {
  80.         DatiTempiRisposta datiTempiRisposta = new DatiTempiRisposta();
  81.         if(configurazioneGenerale!=null && configurazioneGenerale.getTempiRispostaFruizione()!=null) {
  82.             if(configurazioneGenerale.getTempiRispostaFruizione().getConnectionTimeout()!=null) {
  83.                 datiTempiRisposta.setConnectionTimeout(configurazioneGenerale.getTempiRispostaFruizione().getConnectionTimeout());
  84.             }
  85.             else {
  86.                 datiTempiRisposta.setConnectionTimeout(properties.getConnectionTimeout_inoltroBuste());
  87.             }
  88.             if(configurazioneGenerale.getTempiRispostaFruizione().getReadTimeout()!=null) {
  89.                 datiTempiRisposta.setReadConnectionTimeout(configurazioneGenerale.getTempiRispostaFruizione().getReadTimeout());
  90.             }
  91.             else {
  92.                 datiTempiRisposta.setReadConnectionTimeout(properties.getReadConnectionTimeout_inoltroBuste());
  93.             }
  94.         }
  95.         else {
  96.             datiTempiRisposta.setConnectionTimeout(properties.getConnectionTimeout_inoltroBuste());
  97.             datiTempiRisposta.setReadConnectionTimeout(properties.getReadConnectionTimeout_inoltroBuste());
  98.         }
  99.         return datiTempiRisposta;
  100.     }
  101.     private static DatiTempiRisposta readDatiGlobaliTimeoutErogazione(ConfigurazioneGenerale configurazioneGenerale, OpenSPCoop2Properties properties) {
  102.         DatiTempiRisposta datiTempiRisposta = new DatiTempiRisposta();
  103.         if(configurazioneGenerale!=null && configurazioneGenerale.getTempiRispostaErogazione()!=null) {
  104.             if(configurazioneGenerale.getTempiRispostaErogazione().getConnectionTimeout()!=null) {
  105.                 datiTempiRisposta.setConnectionTimeout(configurazioneGenerale.getTempiRispostaErogazione().getConnectionTimeout());
  106.             }
  107.             else {
  108.                 datiTempiRisposta.setConnectionTimeout(properties.getConnectionTimeout_consegnaContenutiApplicativi());
  109.             }
  110.             if(configurazioneGenerale.getTempiRispostaErogazione().getReadTimeout()!=null) {
  111.                 datiTempiRisposta.setReadConnectionTimeout(configurazioneGenerale.getTempiRispostaErogazione().getReadTimeout());
  112.             }
  113.             else {
  114.                 datiTempiRisposta.setReadConnectionTimeout(properties.getReadConnectionTimeout_consegnaContenutiApplicativi());
  115.             }
  116.         }
  117.         else {
  118.             datiTempiRisposta.setConnectionTimeout(properties.getConnectionTimeout_consegnaContenutiApplicativi());
  119.             datiTempiRisposta.setReadConnectionTimeout(properties.getReadConnectionTimeout_consegnaContenutiApplicativi());
  120.         }
  121.         return datiTempiRisposta;
  122.     }
  123.    
  124.     public static DatiTempiRisposta readDatiTempiRisposta(TipoPdD tipoPdD, RequestInfo requestInfo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  125.         // Prelevo la configurazione del Controllo del Traffico
  126.         ConfigurazionePdDManager configPdDManager = ConfigurazionePdDManager.getInstance();
  127.         ConfigurazioneGenerale configurazioneGenerale = configPdDManager.getConfigurazioneControlloTraffico(requestInfo);      
  128.        
  129.        
  130.         // Imposto i valori di default
  131.         DatiTempiRisposta datiTempiRisposta = new DatiTempiRisposta();
  132.         if(TipoPdD.DELEGATA.equals(tipoPdD)){
  133.             datiTempiRisposta.setConnectionTimeout(configurazioneGenerale.getTempiRispostaFruizione().getConnectionTimeout());
  134.             datiTempiRisposta.setReadConnectionTimeout(configurazioneGenerale.getTempiRispostaFruizione().getReadTimeout());
  135.             datiTempiRisposta.setAvgResponseTime(configurazioneGenerale.getTempiRispostaFruizione().getTempoMedioRisposta());
  136.         }
  137.         else{
  138.             datiTempiRisposta.setConnectionTimeout(configurazioneGenerale.getTempiRispostaErogazione().getConnectionTimeout());
  139.             datiTempiRisposta.setReadConnectionTimeout(configurazioneGenerale.getTempiRispostaErogazione().getReadTimeout());
  140.             datiTempiRisposta.setAvgResponseTime(configurazioneGenerale.getTempiRispostaErogazione().getTempoMedioRisposta());
  141.         }
  142.    
  143.         return datiTempiRisposta;
  144.     }
  145.    
  146.     public static void mergeTempiRisposta(DatiTempiRisposta datiTempiRisposta, Map<String, String> properties){
  147.         // Leggo i valori se fossero ridefiniti sul connettore
  148.         if(properties!=null && properties.size()>0){
  149.            
  150.             Integer connectionTimeout = null;
  151.             Integer readTimeout = null;
  152.             Integer avgResponseTime = null;
  153.             Iterator<String> keys = properties.keySet().iterator();
  154.             while (keys.hasNext()) {
  155.                 String key = keys.next();
  156.                 if(key.equals(CostantiConnettori.CONNETTORE_CONNECTION_TIMEOUT)){
  157.                     connectionTimeout = Integer.parseInt(properties.get(key));
  158.                 }
  159.                 else if(key.endsWith(CostantiConnettori.CONNETTORE_READ_CONNECTION_TIMEOUT)){
  160.                     readTimeout = Integer.parseInt(properties.get(key));
  161.                 }
  162.                 else if(key.endsWith(CostantiConnettori.CONNETTORE_TEMPO_MEDIO_RISPOSTA)){
  163.                     avgResponseTime = Integer.parseInt(properties.get(key));
  164.                 }
  165.             }
  166.             if(connectionTimeout!=null){
  167.                 datiTempiRisposta.setConnectionTimeout(connectionTimeout);
  168.             }
  169.             if(readTimeout!=null){
  170.                 datiTempiRisposta.setReadConnectionTimeout(readTimeout);
  171.             }
  172.             if(avgResponseTime!=null){
  173.                 datiTempiRisposta.setAvgResponseTime(avgResponseTime);
  174.             }
  175.         }
  176.        
  177.     }
  178.    
  179.     public static DatiTempiRisposta getDatiTempiRisposta(InRequestProtocolContext context, DatiTransazione datiTransazione, RequestInfo requestInfo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  180.        
  181.         DatiTempiRisposta datiTempiRisposta = readDatiTempiRisposta(context.getTipoPorta(), requestInfo);
  182.        
  183.         ConfigurazionePdDManager configPdDManager = ConfigurazionePdDManager.getInstance();
  184.        
  185.         if(TipoPdD.DELEGATA.equals(context.getTipoPorta())){
  186.            
  187.             setDatiTempiRispostaFruizione(configPdDManager, datiTempiRisposta,
  188.                     context, datiTransazione, requestInfo);
  189.            
  190.         }
  191.         else{
  192.            
  193.             setDatiTempiRispostaErogazione(configPdDManager, datiTempiRisposta,
  194.                     context, requestInfo);
  195.            
  196.         }
  197.        
  198.         return datiTempiRisposta;
  199.        
  200.     }
  201.    
  202.     private static void setDatiTempiRispostaFruizione(ConfigurazionePdDManager configPdDManager, DatiTempiRisposta datiTempiRisposta,
  203.             InRequestProtocolContext context, DatiTransazione datiTransazione, RequestInfo requestInfo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  204.         try{
  205.             Connettore connettore = configPdDManager.getForwardRoute(datiTransazione.getSoggettoFruitore(),datiTransazione.getIdServizio(),false, requestInfo);
  206.             mergeTempiRisposta(datiTempiRisposta, connettore.getProperties());
  207.         }catch(Exception e){
  208.             // registro solamente l'errore su log.
  209.             // sicuramente avverrà un errore durante la gestione del messaggio
  210.             try{
  211.                 OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(OpenSPCoop2Properties.getInstance().isControlloTrafficoDebug()).error(e.getMessage(),e);
  212.             }catch(Exception eLogger){
  213.                 context.getLogCore().error(e.getMessage(),e);
  214.             }
  215.         }
  216.     }
  217.    
  218.     private static void setDatiTempiRispostaErogazione(ConfigurazionePdDManager configPdDManager, DatiTempiRisposta datiTempiRisposta,
  219.             InRequestProtocolContext context, RequestInfo requestInfo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  220.         try{
  221.             if(context.getIntegrazione()!=null && context.getIntegrazione().getIdPA()!=null) {
  222.                 IDPortaApplicativa idPA = context.getIntegrazione().getIdPA();
  223.                 PortaApplicativa pa = configPdDManager.getPortaApplicativa(idPA, requestInfo);
  224.                 if(pa.sizeServizioApplicativoList()>0) {
  225.                     IDServizioApplicativo idSA = new IDServizioApplicativo();
  226.                     idSA.setIdSoggettoProprietario(new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()));
  227.                     idSA.setNome(pa.getServizioApplicativo(0).getNome()); // uso il primo
  228.                            
  229.                     ServizioApplicativo sa = configPdDManager.getServizioApplicativo(idSA, requestInfo);
  230.                     setConnettoreDatiTempiRispostaErogazione(context, sa, datiTempiRisposta);
  231.                 }
  232.             }
  233.         }catch(Exception e){
  234.             // registro solamente l'errore su log.
  235.             // sicuramente avverrà un errore durante la gestione del messaggio
  236.             try{
  237.                 OpenSPCoop2Logger.getLoggerOpenSPCoopControlloTraffico(OpenSPCoop2Properties.getInstance().isControlloTrafficoDebug()).error(e.getMessage(),e);
  238.             }catch(Exception eLogger){
  239.                 context.getLogCore().error(e.getMessage(),e);
  240.             }
  241.         }
  242.     }
  243.     private static void setConnettoreDatiTempiRispostaErogazione(InRequestProtocolContext context, ServizioApplicativo sa, DatiTempiRisposta datiTempiRisposta) {
  244.        
  245.         Connettore connettore = null;
  246.        
  247.         String scenarioCooperazione = context.getProtocollo().getScenarioCooperazione();
  248.         if(scenarioCooperazione!=null){
  249.             if(org.openspcoop2.protocol.engine.constants.Costanti.SCENARIO_CONSEGNA_CONTENUTI_APPLICATIVI.equals(scenarioCooperazione) ||
  250.                     org.openspcoop2.protocol.engine.constants.Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) ||
  251.                     org.openspcoop2.protocol.engine.constants.Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING.equals(scenarioCooperazione) ){
  252.                 if(sa.getRispostaAsincrona()!=null){
  253.                     connettore = sa.getRispostaAsincrona().getConnettore();
  254.                 }
  255.             }else{
  256.                 if(sa.getInvocazioneServizio()!=null){
  257.                     connettore = sa.getInvocazioneServizio().getConnettore();
  258.                 }
  259.             }
  260.         }
  261.        
  262.         if(connettore!=null){
  263.             mergeTempiRisposta(datiTempiRisposta, connettore.getProperties());
  264.         }
  265.        
  266.     }
  267. }