DimensioneMessaggiConfigurationUtils.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.HashMap;
  22. import java.util.Iterator;
  23. import java.util.List;
  24. import java.util.Map;

  25. import org.apache.commons.lang.StringUtils;
  26. import org.openspcoop2.core.commons.CoreException;
  27. import org.openspcoop2.core.config.PortaApplicativa;
  28. import org.openspcoop2.core.config.PortaDelegata;
  29. import org.openspcoop2.core.config.Proprieta;
  30. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  31. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  32. import org.openspcoop2.core.constants.TipoPdD;
  33. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  34. import org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy;
  35. import org.openspcoop2.core.controllo_traffico.ElencoIdPolicyAttive;
  36. import org.openspcoop2.core.controllo_traffico.IdActivePolicy;
  37. import org.openspcoop2.core.controllo_traffico.beans.DatiTransazione;
  38. import org.openspcoop2.core.controllo_traffico.beans.UniqueIdentifierUtilities;
  39. import org.openspcoop2.core.controllo_traffico.constants.TipoRisorsaPolicyAttiva;
  40. import org.openspcoop2.core.controllo_traffico.utils.PolicyUtilities;
  41. import org.openspcoop2.core.id.IDPortaApplicativa;
  42. import org.openspcoop2.core.id.IDPortaDelegata;
  43. import org.openspcoop2.message.OpenSPCoop2Message;
  44. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  45. import org.openspcoop2.pdd.config.CostantiProprieta;
  46. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  47. import org.openspcoop2.pdd.core.PdDContext;
  48. import org.openspcoop2.pdd.core.controllo_traffico.policy.InterceptorPolicyUtilities;
  49. import org.openspcoop2.pdd.core.controllo_traffico.policy.PolicyFiltroApplicativoUtilities;
  50. import org.openspcoop2.pdd.core.controllo_traffico.policy.PolicyVerifier;
  51. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  52. import org.openspcoop2.protocol.sdk.ProtocolException;
  53. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  54. import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
  55. import org.slf4j.Logger;

  56. /**    
  57.  * DimensioneMessaggiConfigurationUtils
  58.  *
  59.  * @author Poli Andrea (poli@link.it)
  60.  * @author $Author$
  61.  * @version $Rev$, $Date$
  62.  */
  63. public class DimensioneMessaggiConfigurationUtils {

  64.     private DimensioneMessaggiConfigurationUtils() {}
  65.    
  66.     private static void logDebug(Logger log, String msg) {
  67.         if(log!=null) {
  68.             log.debug(msg);
  69.         }
  70.     }
  71.    
  72.     public static SoglieDimensioneMessaggi readSoglieDimensioneMessaggi(TipoPdD tipoPdD, String nomePorta,
  73.             DatiTransazione datiTransazione, Logger log,
  74.             URLProtocolContext urlProtocolContext, RequestInfo requestInfo, PdDContext pddContext,
  75.             IProtocolFactory<?> protocolFactory) throws CoreException {
  76.        
  77.         OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
  78.         ConfigurazioneGatewayControlloTraffico configurazioneControlloTraffico =  op2Properties.getConfigurazioneControlloTraffico();
  79.         ConfigurazionePdDManager configPdDManager = ConfigurazionePdDManager.getInstance();
  80.        
  81.         SoglieDimensioneMessaggi soglie = null;
  82.        
  83.         Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> mapPolicyAttive = null;
  84.         boolean mapFromRequestInfo = false;
  85.         try{
  86.        
  87.             if(requestInfo!=null && requestInfo.getRequestRateLimitingConfig()!=null) {
  88.                 if(requestInfo.getRequestRateLimitingConfig().getNomePorta()==null && nomePorta!=null) {
  89.                     requestInfo.getRequestRateLimitingConfig().setDatiPorta(tipoPdD, nomePorta,
  90.                             datiTransazione!=null ? datiTransazione.getIdServizio() :  null,
  91.                             datiTransazione!=null ? datiTransazione.getSoggettoFruitore() : null);
  92.                 }
  93.                 if(requestInfo.getRequestRateLimitingConfig().getMapPolicyAttive_dimensioneMessaggi()!=null) {
  94.                     mapPolicyAttive = requestInfo.getRequestRateLimitingConfig().getMapPolicyAttive_dimensioneMessaggi();
  95.                     mapFromRequestInfo = true;
  96.                 }
  97.             }
  98.            
  99.             if(!mapFromRequestInfo) {
  100.                
  101.                 mapPolicyAttive = new HashMap<>();
  102.                
  103.                 if(tipoPdD!=null && nomePorta!=null) {
  104.                     Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> mapPolicyAttiveAPI = null;
  105.                     try {
  106.                         mapPolicyAttiveAPI = configPdDManager.getElencoIdPolicyAttiveAPIDimensioneMessaggio(configurazioneControlloTraffico.isPolicyReadedWithDynamicCache(),
  107.                                 tipoPdD, nomePorta);
  108.                     }catch(DriverConfigurazioneNotFound notFound) {
  109.                         // ignore
  110.                     }
  111.                     if(mapPolicyAttiveAPI!=null && !mapPolicyAttiveAPI.isEmpty()) {
  112.                         Iterator<TipoRisorsaPolicyAttiva> it = mapPolicyAttiveAPI.keySet().iterator();
  113.                         while (it.hasNext()) {
  114.                             TipoRisorsaPolicyAttiva tipoRisorsaPolicyAttiva = it.next();
  115.                             ElencoIdPolicyAttive elencoPolicyAttiveAPI = mapPolicyAttiveAPI.get(tipoRisorsaPolicyAttiva);
  116.                             if(elencoPolicyAttiveAPI!=null) {
  117.                                 ElencoIdPolicyAttive cloned = (ElencoIdPolicyAttive) elencoPolicyAttiveAPI.clone(); // altrimenti dopo aggiungendo quelle globali si modifica l'oggetto in cache
  118.                                 mapPolicyAttive.put(tipoRisorsaPolicyAttiva, cloned);
  119.                             }
  120.                         }
  121.                     }
  122.                 }
  123.        
  124.                 Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> mapPolicyAttiveGlobali = null;
  125.                 try {
  126.                     mapPolicyAttiveGlobali = configPdDManager.getElencoIdPolicyAttiveGlobaliDimensioneMessaggio(configurazioneControlloTraffico.isPolicyReadedWithDynamicCache());
  127.                 }catch(DriverConfigurazioneNotFound notFound) {
  128.                     // ignore
  129.                 }
  130.                 if(mapPolicyAttiveGlobali!=null && !mapPolicyAttiveGlobali.isEmpty()) {
  131.                     Iterator<TipoRisorsaPolicyAttiva> it = mapPolicyAttiveGlobali.keySet().iterator();
  132.                     while (it.hasNext()) {
  133.                         TipoRisorsaPolicyAttiva tipoRisorsaPolicyAttiva = it.next();
  134.                         ElencoIdPolicyAttive elencoPolicyAttiveGlobali = mapPolicyAttiveGlobali.get(tipoRisorsaPolicyAttiva);
  135.                        
  136.                         if(mapPolicyAttive.containsKey(tipoRisorsaPolicyAttiva)) {
  137.                             ElencoIdPolicyAttive elencoPolicyAttiveCloned = mapPolicyAttive.get(tipoRisorsaPolicyAttiva); // gia' clonato per l'api sopra
  138.                             for (IdActivePolicy idActivePolicyGlobale : elencoPolicyAttiveGlobali.getIdActivePolicyList()) {
  139.                                 elencoPolicyAttiveCloned.addIdActivePolicy(idActivePolicyGlobale);
  140.                             }
  141.                         }
  142.                         else {
  143.                             ElencoIdPolicyAttive cloned = (ElencoIdPolicyAttive) elencoPolicyAttiveGlobali.clone(); // per non modificare l'oggetto in cache
  144.                             mapPolicyAttive.put(tipoRisorsaPolicyAttiva, cloned);
  145.                         }
  146.                     }
  147.                 }
  148.                
  149.                 if(requestInfo!=null && requestInfo.getRequestRateLimitingConfig()!=null) {
  150.                     requestInfo.getRequestRateLimitingConfig().setMapPolicyAttive_dimensioneMessaggi(mapPolicyAttive);
  151.                 }
  152.             }
  153.         }catch(Exception e){
  154.             throw new CoreException("Configurazione non disponibile: "+e.getMessage(), e);
  155.         }
  156.        
  157.         try{
  158.             if(mapPolicyAttive!=null && !mapPolicyAttive.isEmpty()){
  159.                
  160.                 int policyTotali = 0;
  161.                 int policyDisabilitate = 0;
  162.                 int policyFiltrate = 0;
  163.                 /**int policyNonApplicabili = 0;*/
  164.                 int policyRispettate = 0;
  165.                 /**int policyViolate = 0;*/
  166.                 /**int policyViolateWarningOnly = 0;*/
  167.                 int policyInErrore = 0;
  168.                
  169.                 Iterator<TipoRisorsaPolicyAttiva> it = mapPolicyAttive.keySet().iterator();
  170.                 while (it.hasNext()) {
  171.                     TipoRisorsaPolicyAttiva tipoRisorsaPolicyAttiva = it.next();
  172.                    
  173.                     if(!TipoRisorsaPolicyAttiva.DIMENSIONE_MASSIMA_MESSAGGIO.equals(tipoRisorsaPolicyAttiva)) {
  174.                         // non dovrebbe capitare mai
  175.                         continue;
  176.                     }
  177.                    
  178.                     ElencoIdPolicyAttive elencoPolicyAttivePerRisorsa = mapPolicyAttive.get(tipoRisorsaPolicyAttiva);
  179.                    
  180.                     boolean policyRispettataCheRichiedeBreak = false;
  181.                     boolean policyViolataBreak = false;
  182.                                        
  183.                     for (IdActivePolicy idActive : elencoPolicyAttivePerRisorsa.getIdActivePolicyList()) {
  184.                        
  185.                         policyTotali++;
  186.                        
  187.                         try{
  188.                            
  189.                             if(idActive.isEnabled()){
  190.                            
  191.                                 // Prelevo la configurazione del Controllo del Traffico per quanto concerne le policy attive
  192.                                 AttivazionePolicy attivazionePolicy = null;
  193.                                 try {
  194.                                     String id = UniqueIdentifierUtilities.getUniqueId(idActive);
  195.                                     if(mapFromRequestInfo) {
  196.                                         attivazionePolicy = requestInfo.getRequestRateLimitingConfig().getAttivazionePolicy_dimensioneMessaggi(id);
  197.                                     }
  198.                                     if(attivazionePolicy==null) {
  199.                                         attivazionePolicy = configPdDManager.getAttivazionePolicy(configurazioneControlloTraffico.isPolicyReadedWithDynamicCache(), id);
  200.                                         if(requestInfo!=null && requestInfo.getRequestRateLimitingConfig()!=null) {
  201.                                             requestInfo.getRequestRateLimitingConfig().addAttivazionePolicy_dimensioneMessaggi(id, attivazionePolicy);
  202.                                         }
  203.                                     }
  204.                                 }catch(DriverConfigurazioneNotFound notFound) {
  205.                                     throw new CoreException("Istanza di Policy con id ["+idActive.getNome()+"] non esistente: "+notFound.getMessage(),notFound);
  206.                                 }
  207.                                 if(attivazionePolicy==null){
  208.                                     throw new CoreException("Istanza di Policy con id ["+idActive.getNome()+"] non esistente?");
  209.                                 }
  210.                                 String alias = PolicyUtilities.getNomeActivePolicy(attivazionePolicy.getAlias(), attivazionePolicy.getIdActivePolicy());
  211.                                
  212.                                 // Verifico se un eventuale filtro configurato per la policy matcha con i dati della transazione
  213.                                 boolean matchFiltro = !policyRispettataCheRichiedeBreak && !policyViolataBreak && InterceptorPolicyUtilities.filter(attivazionePolicy.getFiltro(), datiTransazione, null, requestInfo);
  214.                                 if(matchFiltro){
  215.                                    
  216.                                     if(attivazionePolicy.getFiltro().isEnabled() && attivazionePolicy.getFiltro().isInformazioneApplicativaEnabled()){
  217.                                    
  218.                                         // Verifico Filtro Applicativo
  219.                                         OpenSPCoop2Message message = null;
  220.                                         String soapActionParam = null;
  221.                                         String valorePresente = PolicyFiltroApplicativoUtilities.getValore(log,
  222.                                                 attivazionePolicy.getFiltro().getInformazioneApplicativaTipo(),
  223.                                                 attivazionePolicy.getFiltro().getInformazioneApplicativaNome(),
  224.                                                 datiTransazione, true,
  225.                                                 message, urlProtocolContext, soapActionParam, pddContext,
  226.                                                 null);

  227.                                         if(valorePresente==null || !valorePresente.equals(attivazionePolicy.getFiltro().getInformazioneApplicativaValore())){
  228.                                            
  229.                                             policyFiltrate++;
  230.                                            
  231.                                             // Emetto Diagnostico Policy Filtrata
  232.                                             if(valorePresente==null){
  233.                                                 valorePresente = "n.d.";
  234.                                             }
  235.                                             logDebug(log,"Filtro Applicativo atteso ["+
  236.                                                     attivazionePolicy.getFiltro().getInformazioneApplicativaValore()+"] differente da quello estratto dalla transazione ["+
  237.                                                     valorePresente+"]");
  238.                                            
  239.                                             matchFiltro = false;
  240.                                            
  241.                                         }
  242.                                        
  243.                                     }
  244.                                    
  245.                                     if(matchFiltro){
  246.                                            
  247.                                         if(soglie==null) {
  248.                                             soglie = new SoglieDimensioneMessaggi();
  249.                                         }
  250.                                         long sogliaRichiesta = -1;
  251.                                         long sogliaRisposta = -1;
  252.                                         if(attivazionePolicy.isRidefinisci()) {
  253.                                             if(attivazionePolicy.getValore2()!=null) {
  254.                                                 sogliaRichiesta = attivazionePolicy.getValore2();
  255.                                             }
  256.                                             if(attivazionePolicy.getValore()!=null) {
  257.                                                 sogliaRisposta = attivazionePolicy.getValore();
  258.                                             }
  259.                                         }
  260.                                         else {
  261.                                        
  262.                                             // Prelevo la configurazione del Controllo del Traffico per quanto concerne le policy istanziata
  263.                                             ConfigurazionePolicy configurazionePolicy = null;
  264.                                             try {
  265.                                                 String id = idActive.getIdPolicy();
  266.                                                 if(mapFromRequestInfo) {
  267.                                                     configurazionePolicy = requestInfo.getRequestRateLimitingConfig().getConfigurazionePolicy_dimensioneMessaggi(id);
  268.                                                 }
  269.                                                 if(configurazionePolicy==null) {
  270.                                                     configurazionePolicy = configPdDManager.getConfigurazionePolicy(configurazioneControlloTraffico.isPolicyReadedWithDynamicCache(), id);
  271.                                                     if(requestInfo!=null && requestInfo.getRequestRateLimitingConfig()!=null) {
  272.                                                         requestInfo.getRequestRateLimitingConfig().addConfigurazionePolicy_dimensioneMessaggi(id, configurazionePolicy);
  273.                                                     }
  274.                                                 }
  275.                                             }catch(DriverConfigurazioneNotFound notFound) {
  276.                                                 throw new CoreException("Policy con id ["+idActive.getIdPolicy()+"] non esistente: "+notFound.getMessage(),notFound);
  277.                                             }
  278.                                             if(configurazionePolicy==null){
  279.                                                 throw new CoreException("Policy con id ["+idActive.getIdPolicy()+"] non esistente?");
  280.                                             }
  281.                                        
  282.                                             if(configurazionePolicy.getValore2()!=null) {
  283.                                                 sogliaRichiesta = configurazionePolicy.getValore2();
  284.                                             }
  285.                                             if(configurazionePolicy.getValore()!=null) {
  286.                                                 sogliaRisposta = configurazionePolicy.getValore();
  287.                                             }
  288.                                         }
  289.                                        
  290.                                         if(sogliaRichiesta>0) {
  291.                                             boolean updateRichiesta = false;
  292.                                             if(soglie.getRichiesta()==null
  293.                                                     ||
  294.                                                     (sogliaRichiesta<soglie.getRichiesta().getSogliaKb())
  295.                                                     ) {
  296.                                                 updateRichiesta = true;
  297.                                             }
  298.                                             if(updateRichiesta) {
  299.                                                 soglie.setRichiesta(build(sogliaRichiesta, attivazionePolicy, protocolFactory, configPdDManager, requestInfo, tipoPdD, nomePorta));
  300.                                             }
  301.                                         }
  302.                                        
  303.                                         if(sogliaRisposta>0) {
  304.                                             boolean updateRisposta = false;
  305.                                             if(soglie.getRisposta()==null
  306.                                                     ||
  307.                                                     (sogliaRisposta<soglie.getRisposta().getSogliaKb())
  308.                                                     ) {
  309.                                                 updateRisposta = true;
  310.                                             }
  311.                                             if(updateRisposta) {
  312.                                                 soglie.setRisposta(build(sogliaRisposta, attivazionePolicy, protocolFactory, configPdDManager, requestInfo, tipoPdD, nomePorta));
  313.                                             }
  314.                                         }
  315.                                        
  316.                                         policyRispettate++;
  317.                                            
  318.                                         if(!attivazionePolicy.isContinuaValutazione()) {
  319.                                             policyRispettataCheRichiedeBreak = true;
  320.                                         }

  321.                                     }
  322.                                    
  323.                                 }
  324.                                 else{
  325.                                    
  326.                                     policyFiltrate++;
  327.                                    
  328.                                     // Emetto Diagnostico Policy Filtrata
  329.                                     if(policyRispettataCheRichiedeBreak) {
  330.                                         logDebug(log,"[policy: "+alias+"] "+GeneratoreMessaggiErrore.TEMPLATE_POLICY_FILTRATA_MOTIVO_BREAK);
  331.                                     }
  332.                                     else if(policyViolataBreak) {
  333.                                         logDebug(log,"[policy: "+alias+"] "+GeneratoreMessaggiErrore.TEMPLATE_POLICY_FILTRATA_MOTIVO_BREAK_VIOLATA);
  334.                                     }
  335.                                     else {
  336.                                         logDebug(log,"[policy: "+alias+"] "+GeneratoreMessaggiErrore.TEMPLATE_POLICY_FILTRATA_MOTIVO_FILTRO+ PolicyUtilities.toStringFilter(attivazionePolicy.getFiltro()));
  337.                                     }
  338.                                    
  339.                                 }
  340.                                
  341.                             }
  342.                             else{
  343.                                
  344.                                 policyDisabilitate++;
  345.                                
  346.                                 // Emetto Diagnostico Policy Disabilitata
  347.                                 logDebug(log,"[policy: "+idActive.getNome()+"] policy disabilitata");
  348.                                
  349.                             }
  350.                            
  351.                         }
  352.                         catch(Throwable e){
  353.                            
  354.                             policyInErrore++;

  355.                             // Emetto Diagnostico Policy in Errore
  356.                             log.error("Errore durante il controllo della policy con id["+idActive.getNome()+"]: "+e.getMessage(),e);
  357.                            
  358.                         }
  359.                     }
  360.                
  361.                 }
  362.            
  363.                 logDebug(log,"Valutazione policy totali["+policyTotali+"] disabilitate["+policyDisabilitate+"] filtrate["+policyFiltrate+"] utilizzate["+policyRispettate+"] inErrore["+policyInErrore+"]");
  364.                                
  365.             }
  366.         }catch(Exception e){
  367.             throw new CoreException("Errore durante l'identificazione dei limiti sulla dimensione dei messaggi: "+e.getMessage(), e);
  368.         }
  369.        
  370.         if(soglie!=null &&
  371.             (soglie.getRichiesta()==null || soglie.getRisposta()==null)
  372.             ){
  373.             soglie = null;
  374.         }
  375.        
  376.         return soglie;
  377.     }
  378.    
  379.     private static SogliaDimensioneMessaggio build(long sogliaKb, AttivazionePolicy attivazionePolicy, IProtocolFactory<?> protocolFactory, ConfigurazionePdDManager configPdDManager, RequestInfo requestInfo,
  380.             TipoPdD tipoPdD, String nomePorta) throws ProtocolException, DriverConfigurazioneException {
  381.         SogliaDimensioneMessaggio soglia = new SogliaDimensioneMessaggio();
  382.         soglia.setSogliaKb(sogliaKb);
  383.        
  384.         OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
  385.         soglia.setUseContentLengthHeader(op2Properties.isLimitedInputStreamUseContentLength());
  386.         soglia.setUseContentLengthHeaderAcceptZeroValue(op2Properties.isLimitedInputStreamUseContentLengthAcceptZeroValue());
  387.        
  388.         boolean policyPorta = attivazionePolicy.getFiltro()!=null && attivazionePolicy.getFiltro().getEnabled() &&
  389.                 attivazionePolicy.getFiltro().getNomePorta()!=null &&
  390.                 attivazionePolicy.getFiltro().getRuoloPorta()!=null;
  391.         soglia.setPolicyGlobale(!policyPorta);

  392.         soglia.setNomePolicy(PolicyUtilities.getNomeActivePolicy(attivazionePolicy.getAlias(), attivazionePolicy.getIdActivePolicy()));
  393.        
  394.         String idPolicyConGruppo = null;
  395.         String configurazione = null;
  396.         String idAPI = null;
  397.         if(!soglia.isPolicyGlobale()) {
  398.             idAPI = PolicyVerifier.getIdAPI(attivazionePolicy, protocolFactory, configPdDManager, requestInfo);
  399.         }
  400.         idPolicyConGruppo = PolicyUtilities.buildIdConfigurazioneEventoPerPolicy(attivazionePolicy, null, idAPI);
  401.         configurazione = PolicyUtilities.buildConfigurazioneEventoPerPolicy(attivazionePolicy, soglia.isPolicyGlobale());
  402.         soglia.setIdPolicyConGruppo(idPolicyConGruppo);
  403.         soglia.setConfigurazione(configurazione);
  404.        
  405.         IDPortaDelegata idPD = null;
  406.         IDPortaApplicativa idPA = null;
  407.         if(tipoPdD!=null && nomePorta!=null && StringUtils.isNotEmpty(nomePorta)) {
  408.             if(TipoPdD.DELEGATA.equals(tipoPdD)) {
  409.                 idPD = new IDPortaDelegata();
  410.                 idPD.setNome(nomePorta);
  411.             }
  412.             else {
  413.                 idPA = new IDPortaApplicativa();
  414.                 idPA.setNome(nomePorta);
  415.             }
  416.         }
  417.         else if(policyPorta) {
  418.             if(org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy.DELEGATA.equals(attivazionePolicy.getFiltro().getRuoloPorta())) {
  419.                 idPD = new IDPortaDelegata();
  420.                 idPD.setNome(attivazionePolicy.getFiltro().getNomePorta());
  421.             }
  422.             else {
  423.                 idPA = new IDPortaApplicativa();
  424.                 idPA.setNome(attivazionePolicy.getFiltro().getNomePorta());
  425.             }
  426.         }
  427.        
  428.         List<Proprieta> listP = null;
  429.         if(idPD!=null) {
  430.             listP = readProperties(idPD, configPdDManager, requestInfo);
  431.         }
  432.         else {
  433.             listP = readProperties(idPA, configPdDManager, requestInfo);
  434.         }
  435.        
  436.         if(listP!=null && !listP.isEmpty()) {
  437.             soglia.setUseContentLengthHeader(CostantiProprieta.isRateLimitingUseHttpContentLength(listP, soglia.isUseContentLengthHeader()));
  438.             soglia.setUseContentLengthHeaderAcceptZeroValue(CostantiProprieta.isRateLimitingUseHttpContentLengthAcceptZeroValue(listP, soglia.isUseContentLengthHeaderAcceptZeroValue()));
  439.         }
  440.        
  441.         return soglia;
  442.     }
  443.     private static List<Proprieta> readProperties(IDPortaDelegata idPD, ConfigurazionePdDManager configPdDManager, RequestInfo requestInfo) throws DriverConfigurazioneException {
  444.         List<Proprieta> listP = null;
  445.         PortaDelegata pd = configPdDManager.getPortaDelegataSafeMethod(idPD, requestInfo);
  446.         if(pd!=null) {
  447.             listP = pd.getProprieta();
  448.         }
  449.         return listP;
  450.     }
  451.     private static List<Proprieta> readProperties(IDPortaApplicativa idPA, ConfigurazionePdDManager configPdDManager, RequestInfo requestInfo) throws DriverConfigurazioneException {
  452.         List<Proprieta> listP = null;
  453.         PortaApplicativa pa = configPdDManager.getPortaApplicativaSafeMethod(idPA, requestInfo);
  454.         if(pa!=null) {
  455.             listP = pa.getProprieta();
  456.         }
  457.         return listP;
  458.     }
  459.    
  460. }