ConfigurazionePdDReader.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.config;


  21. import java.io.File;
  22. import java.sql.Connection;
  23. import java.util.ArrayList;
  24. import java.util.HashMap;
  25. import java.util.Iterator;
  26. import java.util.List;
  27. import java.util.Map;
  28. import java.util.Properties;
  29. import java.util.concurrent.ConcurrentHashMap;

  30. import javax.servlet.http.HttpServletRequest;

  31. import org.apache.commons.lang.StringUtils;
  32. import org.apache.logging.log4j.Level;
  33. import org.openspcoop2.core.allarmi.Allarme;
  34. import org.openspcoop2.core.allarmi.utils.FiltroRicercaAllarmi;
  35. import org.openspcoop2.core.commons.CoreException;
  36. import org.openspcoop2.core.commons.IMonitoraggioRisorsa;
  37. import org.openspcoop2.core.config.AccessoConfigurazione;
  38. import org.openspcoop2.core.config.AccessoConfigurazionePdD;
  39. import org.openspcoop2.core.config.AccessoDatiAttributeAuthority;
  40. import org.openspcoop2.core.config.AccessoDatiAutenticazione;
  41. import org.openspcoop2.core.config.AccessoDatiAutorizzazione;
  42. import org.openspcoop2.core.config.AccessoDatiConsegnaApplicativi;
  43. import org.openspcoop2.core.config.AccessoDatiGestioneToken;
  44. import org.openspcoop2.core.config.AccessoDatiKeystore;
  45. import org.openspcoop2.core.config.AccessoDatiRichieste;
  46. import org.openspcoop2.core.config.AccessoRegistro;
  47. import org.openspcoop2.core.config.AutorizzazioneRuoli;
  48. import org.openspcoop2.core.config.Cache;
  49. import org.openspcoop2.core.config.CanaleConfigurazione;
  50. import org.openspcoop2.core.config.CanaleConfigurazioneNodo;
  51. import org.openspcoop2.core.config.CanaliConfigurazione;
  52. import org.openspcoop2.core.config.Configurazione;
  53. import org.openspcoop2.core.config.ConfigurazioneGeneraleHandler;
  54. import org.openspcoop2.core.config.ConfigurazioneHandler;
  55. import org.openspcoop2.core.config.ConfigurazioneMultitenant;
  56. import org.openspcoop2.core.config.ConfigurazionePortaHandler;
  57. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
  58. import org.openspcoop2.core.config.Connettore;
  59. import org.openspcoop2.core.config.CorrelazioneApplicativa;
  60. import org.openspcoop2.core.config.CorrelazioneApplicativaRisposta;
  61. import org.openspcoop2.core.config.CorsConfigurazione;
  62. import org.openspcoop2.core.config.Credenziali;
  63. import org.openspcoop2.core.config.Dump;
  64. import org.openspcoop2.core.config.DumpConfigurazione;
  65. import org.openspcoop2.core.config.GenericProperties;
  66. import org.openspcoop2.core.config.GestioneErrore;
  67. import org.openspcoop2.core.config.GestioneToken;
  68. import org.openspcoop2.core.config.InvocazioneCredenziali;
  69. import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
  70. import org.openspcoop2.core.config.InvocazioneServizio;
  71. import org.openspcoop2.core.config.MessageSecurity;
  72. import org.openspcoop2.core.config.MessageSecurityFlow;
  73. import org.openspcoop2.core.config.MessaggiDiagnostici;
  74. import org.openspcoop2.core.config.MtomProcessor;
  75. import org.openspcoop2.core.config.MtomProcessorFlow;
  76. import org.openspcoop2.core.config.PortaApplicativa;
  77. import org.openspcoop2.core.config.PortaDelegata;
  78. import org.openspcoop2.core.config.Property;
  79. import org.openspcoop2.core.config.Proprieta;
  80. import org.openspcoop2.core.config.ResponseCachingConfigurazione;
  81. import org.openspcoop2.core.config.ResponseCachingConfigurazioneGenerale;
  82. import org.openspcoop2.core.config.RispostaAsincrona;
  83. import org.openspcoop2.core.config.Route;
  84. import org.openspcoop2.core.config.RoutingTable;
  85. import org.openspcoop2.core.config.RoutingTableDestinazione;
  86. import org.openspcoop2.core.config.Ruolo;
  87. import org.openspcoop2.core.config.ServizioApplicativo;
  88. import org.openspcoop2.core.config.ServizioApplicativoRuoli;
  89. import org.openspcoop2.core.config.Soggetto;
  90. import org.openspcoop2.core.config.StatoServiziPdd;
  91. import org.openspcoop2.core.config.SystemProperties;
  92. import org.openspcoop2.core.config.TipoFiltroAbilitazioneServizi;
  93. import org.openspcoop2.core.config.Tracciamento;
  94. import org.openspcoop2.core.config.Transazioni;
  95. import org.openspcoop2.core.config.TrasformazioneRegolaRichiesta;
  96. import org.openspcoop2.core.config.TrasformazioneRegolaRisposta;
  97. import org.openspcoop2.core.config.Trasformazioni;
  98. import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
  99. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  100. import org.openspcoop2.core.config.constants.RuoloContesto;
  101. import org.openspcoop2.core.config.constants.RuoloTipoMatch;
  102. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  103. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  104. import org.openspcoop2.core.config.driver.BeanUtilities;
  105. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  106. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  107. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  108. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  109. import org.openspcoop2.core.config.driver.FiltroRicercaServiziApplicativi;
  110. import org.openspcoop2.core.config.driver.IDriverConfigurazioneGet;
  111. import org.openspcoop2.core.config.driver.ValidazioneSemantica;
  112. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB;
  113. import org.openspcoop2.core.config.driver.xml.DriverConfigurazioneXML;
  114. import org.openspcoop2.core.constants.CostantiConnettori;
  115. import org.openspcoop2.core.constants.CostantiLabel;
  116. import org.openspcoop2.core.constants.StatoCheck;
  117. import org.openspcoop2.core.constants.TipiConnettore;
  118. import org.openspcoop2.core.constants.TipoPdD;
  119. import org.openspcoop2.core.controllo_traffico.AttivazionePolicy;
  120. import org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale;
  121. import org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy;
  122. import org.openspcoop2.core.controllo_traffico.ElencoIdPolicy;
  123. import org.openspcoop2.core.controllo_traffico.ElencoIdPolicyAttive;
  124. import org.openspcoop2.core.controllo_traffico.beans.DatiTransazione;
  125. import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
  126. import org.openspcoop2.core.controllo_traffico.constants.TipoRisorsaPolicyAttiva;
  127. import org.openspcoop2.core.controllo_traffico.driver.PolicyGroupByActiveThreadsType;
  128. import org.openspcoop2.core.id.IDAccordo;
  129. import org.openspcoop2.core.id.IDConnettore;
  130. import org.openspcoop2.core.id.IDGenericProperties;
  131. import org.openspcoop2.core.id.IDPortaApplicativa;
  132. import org.openspcoop2.core.id.IDPortaDelegata;
  133. import org.openspcoop2.core.id.IDServizio;
  134. import org.openspcoop2.core.id.IDServizioApplicativo;
  135. import org.openspcoop2.core.id.IDSoggetto;
  136. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  137. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  138. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  139. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  140. import org.openspcoop2.core.registry.Fruitore;
  141. import org.openspcoop2.core.registry.RuoliSoggetto;
  142. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  143. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  144. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  145. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  146. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  147. import org.openspcoop2.core.registry.driver.db.DriverRegistroServiziDB;
  148. import org.openspcoop2.core.registry.wsdl.WSDLValidatorConfig;
  149. import org.openspcoop2.message.OpenSPCoop2Message;
  150. import org.openspcoop2.message.constants.ServiceBinding;
  151. import org.openspcoop2.message.soap.mtom.MtomXomPackageInfo;
  152. import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
  153. import org.openspcoop2.monitor.engine.dynamic.IRegistroPluginsReader;
  154. import org.openspcoop2.monitor.sdk.alarm.AlarmStatus;
  155. import org.openspcoop2.monitor.sdk.alarm.IAlarm;
  156. import org.openspcoop2.pdd.core.PdDContext;
  157. import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativiRest;
  158. import org.openspcoop2.pdd.core.autorizzazione.canali.CanaliUtils;
  159. import org.openspcoop2.pdd.core.byok.BYOKUnwrapPolicyUtilities;
  160. import org.openspcoop2.pdd.core.connettori.ConnettoreCheck;
  161. import org.openspcoop2.pdd.core.connettori.ConnettoreHTTPSProperties;
  162. import org.openspcoop2.pdd.core.connettori.ConnettoreMsg;
  163. import org.openspcoop2.pdd.core.connettori.GestoreErroreConnettore;
  164. import org.openspcoop2.pdd.core.connettori.InfoConnettoreIngresso;
  165. import org.openspcoop2.pdd.core.controllo_traffico.DimensioneMessaggiConfigurationUtils;
  166. import org.openspcoop2.pdd.core.controllo_traffico.ReadTimeoutConfigurationUtils;
  167. import org.openspcoop2.pdd.core.controllo_traffico.ReadTimeoutContextParam;
  168. import org.openspcoop2.pdd.core.controllo_traffico.SogliaReadTimeout;
  169. import org.openspcoop2.pdd.core.controllo_traffico.SoglieDimensioneMessaggi;
  170. import org.openspcoop2.pdd.core.controllo_traffico.policy.InterceptorPolicyUtilities;
  171. import org.openspcoop2.pdd.core.controllo_traffico.policy.config.PolicyConfiguration;
  172. import org.openspcoop2.pdd.core.dynamic.DynamicMapBuilderUtils;
  173. import org.openspcoop2.pdd.core.dynamic.Template;
  174. import org.openspcoop2.pdd.core.integrazione.HeaderIntegrazione;
  175. import org.openspcoop2.pdd.core.token.AbstractPolicyToken;
  176. import org.openspcoop2.pdd.core.token.Costanti;
  177. import org.openspcoop2.pdd.core.token.InformazioniToken;
  178. import org.openspcoop2.pdd.core.token.PolicyGestioneToken;
  179. import org.openspcoop2.pdd.core.token.PolicyNegoziazioneToken;
  180. import org.openspcoop2.pdd.core.token.TokenException;
  181. import org.openspcoop2.pdd.core.token.TokenUtilities;
  182. import org.openspcoop2.pdd.core.token.attribute_authority.AttributeAuthorityUtilities;
  183. import org.openspcoop2.pdd.core.token.attribute_authority.PolicyAttributeAuthority;
  184. import org.openspcoop2.pdd.logger.LogLevels;
  185. import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
  186. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  187. import org.openspcoop2.protocol.engine.constants.ModalitaIdentificazioneAzione;
  188. import org.openspcoop2.protocol.engine.mapping.IdentificazioneDinamicaException;
  189. import org.openspcoop2.protocol.engine.mapping.OperationFinder;
  190. import org.openspcoop2.protocol.engine.utils.NamingUtils;
  191. import org.openspcoop2.protocol.registry.CertificateCheck;
  192. import org.openspcoop2.protocol.registry.CertificateUtils;
  193. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  194. import org.openspcoop2.protocol.registry.RegistroServiziReader;
  195. import org.openspcoop2.protocol.sdk.Context;
  196. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  197. import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
  198. import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
  199. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  200. import org.openspcoop2.protocol.sdk.state.IState;
  201. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  202. import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
  203. import org.openspcoop2.protocol.utils.ModIUtils;
  204. import org.openspcoop2.protocol.utils.PorteNamingUtils;
  205. import org.openspcoop2.security.SecurityException;
  206. import org.openspcoop2.security.message.constants.SecurityConstants;
  207. import org.openspcoop2.security.message.jose.JOSEUtils;
  208. import org.openspcoop2.security.message.utils.SecurityUtils;
  209. import org.openspcoop2.utils.LoggerWrapperFactory;
  210. import org.openspcoop2.utils.NameValue;
  211. import org.openspcoop2.utils.SemaphoreLock;
  212. import org.openspcoop2.utils.cache.CacheType;
  213. import org.openspcoop2.utils.certificate.CertificateInfo;
  214. import org.openspcoop2.utils.certificate.KeystoreParams;
  215. import org.openspcoop2.utils.crypt.CryptConfig;
  216. import org.openspcoop2.utils.transport.TransportUtils;
  217. import org.openspcoop2.utils.transport.http.IBYOKUnwrapManager;
  218. import org.openspcoop2.utils.transport.http.SSLConfig;
  219. import org.slf4j.Logger;


  220. /**
  221.  * Classe utilizzata per ottenere informazioni che interessano ad OpenSPCoop
  222.  *
  223.  * @author Poli Andrea (apoli@link.it)
  224.  * @author $Author$
  225.  * @version $Rev$, $Date$
  226.  */
  227. public class ConfigurazionePdDReader {

  228.     /* istanza di ConfigurazioneReader */
  229.     private static  ConfigurazionePdDReader configurazionePdDReader;
  230.     /* informazione sull'inizializzazione dell'istanza */
  231.     private static boolean initialize = false;

  232.     /* Configurazione della PdD */
  233.     private ConfigurazionePdD configurazionePdD;
  234.     /** ConfigurazioneDinamica */
  235.     private boolean configurazioneDinamica = false;

  236.     /** Registro dei Servizi Reader per il routing */
  237.     /** private RegistroServiziReader registroServiziReader;*/

  238.     /** Logger utilizzato per debug. */
  239.     private Logger logger = null;
  240.     private void logDebug(String msg) {
  241.         this.logDebug(msg, null);
  242.     }
  243.     private void logDebug(String msg, Throwable e) {
  244.         if(this.logger!=null) {
  245.             if(e!=null) {
  246.                 this.logger.debug(msg, e);
  247.             }
  248.             else {
  249.                 this.logger.debug(msg);
  250.             }
  251.         }
  252.     }
  253.     private void logInfo(String msg) {
  254.         this.logInfo(msg, null);
  255.     }
  256.     private void logInfo(String msg, Throwable e) {
  257.         if(this.logger!=null) {
  258.             if(e!=null) {
  259.                 this.logger.info(msg, e);
  260.             }
  261.             else {
  262.                 this.logger.info(msg);
  263.             }
  264.         }
  265.     }
  266.     @SuppressWarnings("unused")
  267.     private void logWarn(String msg) {
  268.         this.logWarn(msg, null);
  269.     }
  270.     private void logWarn(String msg, Throwable e) {
  271.         if(this.logger!=null) {
  272.             if(e!=null) {
  273.                 this.logger.warn(msg, e);
  274.             }
  275.             else {
  276.                 this.logger.warn(msg);
  277.             }
  278.         }
  279.     }
  280.     private void logError(String msg) {
  281.         this.logError(msg, null);
  282.     }
  283.     private void logError(String msg, Throwable e) {
  284.         if(this.logger!=null) {
  285.             if(e!=null) {
  286.                 this.logger.error(msg, e);
  287.             }
  288.             else {
  289.                 this.logger.error(msg);
  290.             }
  291.         }
  292.     }
  293.     /** OpenSPCoopProperties */
  294.     private OpenSPCoop2Properties openspcoopProperties = null;
  295.     private PddProperties pddProperties = null;

  296.     /** Server J2EE */
  297.     private boolean serverJ2EE;



  298.     /* --------------- Cache --------------------*/
  299.     public static boolean isCacheAbilitata() throws DriverConfigurazioneException{
  300.         try{
  301.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  302.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  303.                 return configurazionePdDReader.configurazionePdD.isCacheAbilitata();
  304.             }
  305.             return false;
  306.         }catch(Exception e){
  307.             throw new DriverConfigurazioneException("IsCacheAbilitata, recupero informazione della cache della Configurazione non riuscita: "+e.getMessage(),e);
  308.         }
  309.     }
  310.     public static void resetCache() throws DriverConfigurazioneException{
  311.         try{
  312.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  313.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  314.                 configurazionePdDReader.configurazionePdD.resetCache();
  315.             }
  316.         }catch(Exception e){
  317.             throw new DriverConfigurazioneException("Reset della cache della Configurazione non riuscita: "+e.getMessage(),e);
  318.         }
  319.     }
  320.     public static void prefillCache(CryptConfig configApplicativi) throws DriverConfigurazioneException{
  321.         try{
  322.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  323.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  324.                 configurazionePdDReader.configurazionePdD.prefillCache(null, OpenSPCoop2Logger.getLoggerOpenSPCoopCore(), configApplicativi);
  325.                 configurazionePdDReader.configurazionePdD.prefillCacheConInformazioniRegistro(OpenSPCoop2Logger.getLoggerOpenSPCoopCore());
  326.             }
  327.         }catch(Exception e){
  328.             throw new DriverConfigurazioneException("Prefill della cache della Configurazione non riuscita: "+e.getMessage(),e);
  329.         }
  330.     }
  331.     public static String printStatsCache(String separator) throws DriverConfigurazioneException{
  332.         try{
  333.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  334.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  335.                 return configurazionePdDReader.configurazionePdD.printStatsCache(separator);
  336.             }
  337.             else{
  338.                 throw new Exception("ConfigurazionePdD Non disponibile");
  339.             }
  340.         }catch(Exception e){
  341.             throw new DriverConfigurazioneException("Visualizzazione Statistiche riguardante la cache della Configurazione non riuscita: "+e.getMessage(),e);
  342.         }
  343.     }
  344.     public static void abilitaCache() throws DriverConfigurazioneException{
  345.         try{
  346.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  347.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  348.                 configurazionePdDReader.configurazionePdD.abilitaCache();
  349.             }
  350.         }catch(Exception e){
  351.             throw new DriverConfigurazioneException("Abilitazione cache della Configurazione non riuscita: "+e.getMessage(),e);
  352.         }
  353.     }
  354.     public static void abilitaCache(Long dimensioneCache,Boolean algoritmoCacheLRU,Long itemIdleTime,Long itemLifeSecond, CryptConfig configApplicativi) throws DriverConfigurazioneException{
  355.         try{
  356.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  357.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  358.                 configurazionePdDReader.configurazionePdD.abilitaCache(dimensioneCache,algoritmoCacheLRU,itemIdleTime,itemLifeSecond, configApplicativi);
  359.             }
  360.         }catch(Exception e){
  361.             throw new DriverConfigurazioneException("Abilitazione cache della Configurazione non riuscita: "+e.getMessage(),e);
  362.         }
  363.     }
  364.     public static void disabilitaCache() throws DriverConfigurazioneException{
  365.         try{
  366.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  367.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  368.                 configurazionePdDReader.configurazionePdD.disabilitaCache();
  369.             }
  370.         }catch(Exception e){
  371.             throw new DriverConfigurazioneException("Disabilitazione cache della Configurazione non riuscita: "+e.getMessage(),e);
  372.         }
  373.     }
  374.     public static String listKeysCache(String separator) throws DriverConfigurazioneException{
  375.         try{
  376.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  377.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  378.                 return configurazionePdDReader.configurazionePdD.listKeysCache(separator);
  379.             }
  380.             else{
  381.                 throw new Exception("ConfigurazionePdD Non disponibile");
  382.             }
  383.         }catch(Exception e){
  384.             throw new DriverConfigurazioneException("Visualizzazione chiavi presenti nella cache della Configurazione non riuscita: "+e.getMessage(),e);
  385.         }
  386.     }
  387.     public static List<String> keysCache() throws DriverConfigurazioneException{
  388.         try{
  389.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  390.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  391.                 return configurazionePdDReader.configurazionePdD.keysCache();
  392.             }
  393.             else{
  394.                 throw new Exception("ConfigurazionePdD Non disponibile");
  395.             }
  396.         }catch(Exception e){
  397.             throw new DriverConfigurazioneException("Visualizzazione chiavi presenti nella cache della Configurazione non riuscita: "+e.getMessage(),e);
  398.         }
  399.     }

  400.     public static String getObjectCache(String key) throws DriverConfigurazioneException{
  401.         try{
  402.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  403.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  404.                 return configurazionePdDReader.configurazionePdD.getObjectCache(key);
  405.             }
  406.             else{
  407.                 throw new Exception("ConfigurazionePdD Non disponibile");
  408.             }
  409.         }catch(Exception e){
  410.             throw new DriverConfigurazioneException("Visualizzazione oggetto presente nella cache della Configurazione non riuscita: "+e.getMessage(),e);
  411.         }
  412.     }
  413.    
  414.     public static Object getRawObjectCache(String key) throws DriverConfigurazioneException{
  415.         try{
  416.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  417.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  418.                 return configurazionePdDReader.configurazionePdD.getRawObjectCache(key);
  419.             }
  420.             else{
  421.                 throw new Exception("ConfigurazionePdD Non disponibile");
  422.             }
  423.         }catch(Exception e){
  424.             throw new DriverConfigurazioneException("Visualizzazione oggetto presente nella cache della Configurazione non riuscita: "+e.getMessage(),e);
  425.         }
  426.     }

  427.     public static void removeObjectCache(String key) throws DriverConfigurazioneException{
  428.         try{
  429.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  430.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  431.                 configurazionePdDReader.configurazionePdD.removeObjectCache(key);
  432.             }
  433.             else{
  434.                 throw new Exception("ConfigurazionePdD Non disponibile");
  435.             }
  436.         }catch(Exception e){
  437.             throw new DriverConfigurazioneException("Rimozione oggetto presente nella cache della Configurazione non riuscita: "+e.getMessage(),e);
  438.         }
  439.     }
  440.    
  441.     public static org.openspcoop2.utils.cache.Cache getCache() throws DriverConfigurazioneException {
  442.         try{
  443.             ConfigurazionePdDReader configurazionePdDReader = org.openspcoop2.pdd.config.ConfigurazionePdDReader.getInstance();
  444.             if(configurazionePdDReader!=null && configurazionePdDReader.configurazionePdD!=null){
  445.                 return configurazionePdDReader.configurazionePdD.getCache();
  446.             }
  447.             else{
  448.                 throw new DriverConfigurazioneException("ConfigurazionePdD Non disponibile");
  449.             }
  450.         }catch(Exception e){
  451.             throw new DriverConfigurazioneException("Lettura cache della Configurazione non riuscita: "+e.getMessage(),e);
  452.         }
  453.     }
  454.    
  455.    
  456.    
  457.     /*----------------- CLEANER --------------------*/
  458.    
  459.     public static void removeErogazione(IDServizio idServizio) throws Exception {
  460.         removeApiImpl(null, idServizio, true);
  461.     }
  462.     public static void removeFruizione(IDSoggetto fruitore, IDServizio idServizio) throws Exception {
  463.         removeApiImpl(fruitore, idServizio, false);
  464.     }
  465.     private static void removeApiImpl(IDSoggetto idFruitore, IDServizio idServizio, boolean erogazione) throws Exception {
  466.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  467.            
  468.             boolean soggettiVirtuali = OpenSPCoop2Properties.getInstance().isSoggettiVirtualiEnabled();
  469.            
  470.             if(soggettiVirtuali) {
  471.                 String keyServizi_SoggettiVirtuali = ConfigurazionePdD.getKeyMethodGetServiziSoggettiVirtuali();
  472.                 Object oServizi_SoggettiVirtuali = ConfigurazionePdDReader.getRawObjectCache(keyServizi_SoggettiVirtuali);
  473.                 if(oServizi_SoggettiVirtuali!=null && oServizi_SoggettiVirtuali instanceof List<?>) {
  474.                     List<?> l = (List<?>) oServizi_SoggettiVirtuali;
  475.                     if(l!=null && !l.isEmpty()) {
  476.                         boolean checkAzione = true;
  477.                         for (Object object : l) {
  478.                             if(object!=null && object instanceof IDServizio) {
  479.                                 IDServizio idS = (IDServizio) object;
  480.                                 if(idS.equals(idServizio, !checkAzione)) {
  481.                                     ConfigurazionePdDReader.removeObjectCache(keyServizi_SoggettiVirtuali);
  482.                                     break;
  483.                                 }
  484.                             }
  485.                         }
  486.                     }
  487.                 }
  488.             }
  489.            
  490.             List<String> keyForClean = new ArrayList<>();
  491.             List<String> keys = ConfigurazionePdDReader.keysCache();
  492.             if(keys!=null && !keys.isEmpty()) {
  493.                
  494.                 String prefixPorta = null;
  495.                 if(erogazione) {
  496.                     prefixPorta = ConfigurazionePdD._getKey_MappingErogazionePortaApplicativaList(idServizio, false);
  497.                 }
  498.                 else {
  499.                     prefixPorta = ConfigurazionePdD._getKey_MappingFruizionePortaDelegataList(idFruitore, idServizio, false);
  500.                 }
  501.                
  502.                 String prefixForwardProxy = ConfigurazionePdD._toKey_ForwardProxyConfigPrefix(!erogazione);
  503.                 String suffixForwardProxy = ConfigurazionePdD._toKey_ForwardProxyConfigSuffix(idServizio);
  504.                
  505.                 String prefixPorteApplicativeRicercaPuntuale = null;
  506.                 String prefixPorteApplicativeRicercaNonPuntuale = null;
  507.                 if(erogazione) {
  508.                     prefixPorteApplicativeRicercaPuntuale = ConfigurazionePdD._toKey_getPorteApplicativePrefix(idServizio, true);
  509.                     prefixPorteApplicativeRicercaNonPuntuale = ConfigurazionePdD._toKey_getPorteApplicativePrefix(idServizio, false);
  510.                 }
  511.                
  512.                 String prefixPorteApplicativeVirtualiRicercaPuntuale = null;
  513.                 String prefixPorteApplicativeVirtualiRicercaNonPuntuale = null;
  514.                 String porteApplicativeVirtualiIdServizio = null;
  515.                 if(soggettiVirtuali) {
  516.                     prefixPorteApplicativeVirtualiRicercaPuntuale = ConfigurazionePdD._toKey_getPorteApplicativeVirtualiPrefix(true);
  517.                     prefixPorteApplicativeVirtualiRicercaNonPuntuale = ConfigurazionePdD._toKey_getPorteApplicativeVirtualiPrefix(false);
  518.                     porteApplicativeVirtualiIdServizio = ConfigurazionePdD._toKey_getPorteApplicativeVirtuali_idServizio(idServizio);
  519.                 }
  520.                
  521.                 String prefixPorteApplicativeSoggettiVirtuali = null;
  522.                 if(soggettiVirtuali) {
  523.                     prefixPorteApplicativeSoggettiVirtuali = ConfigurazionePdD.toKeyMethodGetPorteApplicativeSoggettiVirtualiPrefix(idServizio);
  524.                 }
  525.                
  526.                 for (String key : keys) {
  527.                     if(key!=null) {
  528.                         if(key.startsWith(prefixPorta) ) {
  529.                             keyForClean.add(key);
  530.                         }
  531.                         else if(key.startsWith(prefixForwardProxy) && key.endsWith(suffixForwardProxy) ) {
  532.                             keyForClean.add(key);
  533.                         }
  534.                         else if(erogazione &&
  535.                                 (key.startsWith(prefixPorteApplicativeRicercaPuntuale) || key.startsWith(prefixPorteApplicativeRicercaNonPuntuale)) ) {
  536.                             keyForClean.add(key);
  537.                         }
  538.                         else if( soggettiVirtuali &&
  539.                             ((key.startsWith(prefixPorteApplicativeVirtualiRicercaPuntuale)) || (key.startsWith(prefixPorteApplicativeVirtualiRicercaNonPuntuale)))
  540.                             &&
  541.                             key.contains(porteApplicativeVirtualiIdServizio)) {
  542.                             keyForClean.add(key);
  543.                         }
  544.                         else if( soggettiVirtuali &&
  545.                                 key.startsWith(prefixPorteApplicativeSoggettiVirtuali)) {
  546.                             keyForClean.add(key);
  547.                         }
  548.                     }
  549.                 }
  550.             }
  551.             if(keyForClean!=null && !keyForClean.isEmpty()) {
  552.                 for (String key : keyForClean) {
  553.                     removeObjectCache(key);
  554.                 }
  555.             }
  556.            
  557.         }
  558.     }
  559.    
  560.     public static void removePortaDelegata(IDPortaDelegata idPD) throws Exception {
  561.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  562.            
  563.             boolean removeControlloTraffico = true;
  564.            
  565.             IProtocolFactory<?> protocolFactory = null;
  566.             PorteNamingUtils namingUtils = null;
  567.             try {
  568.                 ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  569.                 String protocol = protocolFactoryManager.getProtocolByOrganizationType(idPD.getIdentificativiFruizione().getSoggettoFruitore().getTipo());
  570.                 protocolFactory = protocolFactoryManager.getProtocolFactoryByName(protocol);
  571.                 namingUtils = new PorteNamingUtils(protocolFactory);
  572.             }catch(Exception t) {
  573.                 OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("Errore durante la comprensione del protocol factory della PD ["+idPD+"]");
  574.             }
  575.                        
  576.             List<String> keyForClean = new ArrayList<>();
  577.             List<String> keys = ConfigurazionePdDReader.keysCache();
  578.             if(keys!=null && !keys.isEmpty()) {
  579.                
  580.                 String nomePorta = idPD.getNome();
  581.                 String nomePorta_normalized = null;
  582.                 if(namingUtils!=null) {
  583.                     nomePorta_normalized = namingUtils.normalizePD(nomePorta);
  584.                 }
  585.                
  586.                 String prefixKeyIdPD = ConfigurazionePdD._getKey_getIDPortaDelegata(nomePorta);
  587.                 String prefixKeyIdPD_normalized = null;
  588.                 if(nomePorta_normalized!=null) {
  589.                     prefixKeyIdPD_normalized = ConfigurazionePdD._getKey_getIDPortaDelegata(nomePorta_normalized);
  590.                 }
  591.                
  592.                 String prefixKeyPD = ConfigurazionePdD._getKey_getPortaDelegata(idPD);
  593.                
  594.                 String prefixCT = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPI(TipoPdD.DELEGATA, nomePorta);
  595.                 String prefixCTNormalized = null;
  596.                 if(nomePorta_normalized!=null) {
  597.                     prefixCTNormalized  = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPI(TipoPdD.DELEGATA, nomePorta_normalized);
  598.                 }
  599.                
  600.                 String prefixCTDimensioneMessaggio = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPIDimensioneMessaggio(TipoPdD.DELEGATA, nomePorta);
  601.                 String prefixCTDimensioneMessaggioNormalized = null;
  602.                 if(nomePorta_normalized!=null) {
  603.                     prefixCTDimensioneMessaggioNormalized  = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPIDimensioneMessaggio(TipoPdD.DELEGATA, nomePorta_normalized);
  604.                 }
  605.                
  606.                 String prefixGetAllId = ConfigurazionePdD._toKey_getAllIdPorteDelegate_method();
  607.                
  608.                 String prefixAttivazionePolicy = ConfigurazionePdD._toKey_AttivazionePolicyPrefix();
  609.                
  610.                 for (String key : keys) {
  611.                     if(key!=null) {
  612.                         if(key.startsWith(prefixKeyIdPD)) {
  613.                             keyForClean.add(key);
  614.                         }
  615.                         else if(prefixKeyIdPD_normalized!=null && key.startsWith(prefixKeyIdPD_normalized)) {
  616.                             keyForClean.add(key);
  617.                         }
  618.                         else if(key.startsWith(prefixKeyPD)) {
  619.                             keyForClean.add(key);
  620.                         }
  621.                         if(removeControlloTraffico && key.startsWith(prefixCT)) {
  622.                             keyForClean.add(key);
  623.                         }
  624.                         else if(removeControlloTraffico && prefixCTNormalized!=null && key.startsWith(prefixCTNormalized)) {
  625.                             keyForClean.add(key);
  626.                         }
  627.                         if(removeControlloTraffico && key.startsWith(prefixCTDimensioneMessaggio)) {
  628.                             keyForClean.add(key);
  629.                         }
  630.                         else if(removeControlloTraffico && prefixCTDimensioneMessaggioNormalized!=null && key.startsWith(prefixCTDimensioneMessaggioNormalized)) {
  631.                             keyForClean.add(key);
  632.                         }
  633.                         else if(key.startsWith(prefixGetAllId)) {
  634.                             Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  635.                             if(oCode!=null) {
  636.                                 if(oCode instanceof List<?>) {
  637.                                     List<?> l = (List<?>) oCode;
  638.                                     if(l!=null && !l.isEmpty()) {
  639.                                         for (Object object : l) {
  640.                                             if(object!=null && object instanceof IDPortaDelegata) {
  641.                                                 IDPortaDelegata idPDcheck = (IDPortaDelegata) object;
  642.                                                 if(idPDcheck.getNome().equals(nomePorta)) {
  643.                                                     keyForClean.add(key);
  644.                                                     break;
  645.                                                 }
  646.                                                 else if(nomePorta_normalized!=null && idPDcheck.getNome().equals(nomePorta_normalized)) {
  647.                                                     keyForClean.add(key);
  648.                                                     break;
  649.                                                 }
  650.                                             }
  651.                                         }
  652.                                     }
  653.                                 }
  654.                                 else if(oCode instanceof Exception) {
  655.                                     Exception t = (Exception) oCode;
  656.                                     String msg = t.getMessage();
  657.                                     if(msg!=null) {
  658.                                         String check = FiltroRicercaPorteDelegate.PREFIX_PORTA_DELEGANTE + nomePorta + FiltroRicercaPorteDelegate.SUFFIX_PORTA_DELEGANTE;
  659.                                         if(msg.contains(check)){
  660.                                             keyForClean.add(key);
  661.                                         }
  662.                                         else {
  663.                                             if(nomePorta_normalized!=null) {
  664.                                                 String check_normalized = FiltroRicercaPorteDelegate.PREFIX_PORTA_DELEGANTE + nomePorta_normalized + FiltroRicercaPorteDelegate.SUFFIX_PORTA_DELEGANTE;
  665.                                                 if(msg.contains(check_normalized)){
  666.                                                     keyForClean.add(key);
  667.                                                 }
  668.                                             }
  669.                                         }
  670.                                     }
  671.                                 }
  672.                             }
  673.                         }
  674.                         else if(removeControlloTraffico && key.startsWith(prefixAttivazionePolicy)) {
  675.                             Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  676.                             if(oCode!=null && oCode instanceof AttivazionePolicy) {
  677.                                 AttivazionePolicy aPolicy = (AttivazionePolicy) oCode;
  678.                                 if(aPolicy.getFiltro()!=null && aPolicy.getFiltro().isEnabled() &&
  679.                                         RuoloPolicy.DELEGATA.equals(aPolicy.getFiltro().getRuoloPorta())){
  680.                                     if(nomePorta.equals(aPolicy.getFiltro().getNomePorta())) {
  681.                                         keyForClean.add(key);
  682.                                     }
  683.                                     else if(nomePorta_normalized!=null && nomePorta_normalized.equals(aPolicy.getFiltro().getNomePorta())) {
  684.                                         keyForClean.add(key);
  685.                                     }
  686.                                 }
  687.                             }
  688.                         }
  689.                     }
  690.                 }
  691.             }
  692.             if(keyForClean!=null && !keyForClean.isEmpty()) {
  693.                 for (String key : keyForClean) {
  694.                     removeObjectCache(key);
  695.                 }
  696.             }
  697.         }
  698.     }
  699.    
  700.     public static void removePortaApplicativa(IDPortaApplicativa idPA) throws Exception {
  701.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  702.            
  703.             boolean removeControlloTraffico = true;
  704.            
  705.             IProtocolFactory<?> protocolFactory = null;
  706.             PorteNamingUtils namingUtils = null;
  707.             try {
  708.                 ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  709.                 String protocol = protocolFactoryManager.getProtocolByOrganizationType(idPA.getIdentificativiErogazione().getIdServizio().getSoggettoErogatore().getTipo());
  710.                 protocolFactory = protocolFactoryManager.getProtocolFactoryByName(protocol);
  711.                 namingUtils = new PorteNamingUtils(protocolFactory);
  712.             }catch(Exception t) {
  713.                 OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("Errore durante la comprensione del protocol factory della PA ["+idPA+"]");
  714.             }
  715.                            
  716.             List<String> keyForClean = new ArrayList<>();
  717.             List<String> keys = ConfigurazionePdDReader.keysCache();
  718.             if(keys!=null && !keys.isEmpty()) {
  719.                
  720.                 String nomePorta = idPA.getNome();
  721.                 String nomePorta_normalized = null;
  722.                 if(namingUtils!=null) {
  723.                     nomePorta_normalized = namingUtils.normalizePA(nomePorta);
  724.                 }
  725.                
  726.                 String prefixKeyIdPA = ConfigurazionePdD._getKey_getIDPortaApplicativa(nomePorta);
  727.                 String prefixKeyIdPA_normalized = null;
  728.                 if(nomePorta_normalized!=null) {
  729.                     prefixKeyIdPA_normalized = ConfigurazionePdD._getKey_getIDPortaApplicativa(nomePorta_normalized);
  730.                 }
  731.                
  732.                 String prefixKeyPA = ConfigurazionePdD._getKey_getPortaApplicativa(idPA);
  733.                
  734.                 String prefixCT = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPI(TipoPdD.APPLICATIVA, nomePorta);
  735.                 String prefixCTNormalized = null;
  736.                 if(nomePorta_normalized!=null) {
  737.                     prefixCTNormalized  = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPI(TipoPdD.APPLICATIVA, nomePorta_normalized);
  738.                 }
  739.                
  740.                 String prefixCTDimensioneMessaggio = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPIDimensioneMessaggio(TipoPdD.APPLICATIVA, nomePorta);
  741.                 String prefixCTDimensioneMessaggioNormalized = null;
  742.                 if(nomePorta_normalized!=null) {
  743.                     prefixCTDimensioneMessaggioNormalized  = ConfigurazionePdD.getKeyMethodElencoIdPolicyAttiveAPIDimensioneMessaggio(TipoPdD.APPLICATIVA, nomePorta_normalized);
  744.                 }
  745.                
  746.                 String prefixGetAllId = ConfigurazionePdD._toKey_getAllIdPorteApplicative_method();
  747.                
  748.                 String prefixAttivazionePolicy = ConfigurazionePdD._toKey_AttivazionePolicyPrefix();
  749.                
  750.                 for (String key : keys) {
  751.                     if(key!=null) {
  752.                         if(key.startsWith(prefixKeyIdPA)) {
  753.                             keyForClean.add(key);
  754.                         }
  755.                         else if(prefixKeyIdPA_normalized!=null && key.startsWith(prefixKeyIdPA_normalized)) {
  756.                             keyForClean.add(key);
  757.                         }
  758.                         else if(key.startsWith(prefixKeyPA)) {
  759.                             keyForClean.add(key);
  760.                         }
  761.                         if(removeControlloTraffico && key.startsWith(prefixCT)) {
  762.                             keyForClean.add(key);
  763.                         }
  764.                         else if(removeControlloTraffico && prefixCTNormalized!=null && key.startsWith(prefixCTNormalized)) {
  765.                             keyForClean.add(key);
  766.                         }
  767.                         if(removeControlloTraffico && key.startsWith(prefixCTDimensioneMessaggio)) {
  768.                             keyForClean.add(key);
  769.                         }
  770.                         else if(removeControlloTraffico && prefixCTDimensioneMessaggioNormalized!=null && key.startsWith(prefixCTDimensioneMessaggioNormalized)) {
  771.                             keyForClean.add(key);
  772.                         }
  773.                         else if(key.startsWith(prefixGetAllId)) {
  774.                             Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  775.                             if(oCode!=null) {                              
  776.                                 if(oCode instanceof List<?>) {
  777.                                     List<?> l = (List<?>) oCode;
  778.                                     if(l!=null && !l.isEmpty()) {
  779.                                         for (Object object : l) {
  780.                                             if(object!=null && object instanceof IDPortaApplicativa) {
  781.                                                 IDPortaApplicativa idPAcheck = (IDPortaApplicativa) object;
  782.                                                 if(idPAcheck.getNome().equals(nomePorta)) {
  783.                                                     keyForClean.add(key);
  784.                                                     break;
  785.                                                 }
  786.                                                 else if(nomePorta_normalized!=null && idPAcheck.getNome().equals(nomePorta_normalized)) {
  787.                                                     keyForClean.add(key);
  788.                                                     break;
  789.                                                 }
  790.                                             }
  791.                                         }
  792.                                     }
  793.                                 }
  794.                                 else if(oCode instanceof Exception) {
  795.                                     Exception t = (Exception) oCode;
  796.                                     String msg = t.getMessage();
  797.                                     if(msg!=null) {
  798.                                         String check = FiltroRicercaPorteApplicative.PREFIX_PORTA_DELEGANTE + nomePorta + FiltroRicercaPorteApplicative.SUFFIX_PORTA_DELEGANTE;
  799.                                         if(msg.contains(check)){
  800.                                             keyForClean.add(key);
  801.                                         }
  802.                                         else {
  803.                                             if(nomePorta_normalized!=null) {
  804.                                                 String check_normalized = FiltroRicercaPorteApplicative.PREFIX_PORTA_DELEGANTE + nomePorta_normalized + FiltroRicercaPorteApplicative.SUFFIX_PORTA_DELEGANTE;
  805.                                                 if(msg.contains(check_normalized)){
  806.                                                     keyForClean.add(key);
  807.                                                 }
  808.                                             }
  809.                                         }
  810.                                     }
  811.                                 }
  812.                             }
  813.                         }
  814.                         else if(removeControlloTraffico && key.startsWith(prefixAttivazionePolicy)) {
  815.                             Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  816.                             if(oCode!=null && oCode instanceof AttivazionePolicy) {
  817.                                 AttivazionePolicy aPolicy = (AttivazionePolicy) oCode;
  818.                                 if(aPolicy.getFiltro()!=null && aPolicy.getFiltro().isEnabled() &&
  819.                                         RuoloPolicy.APPLICATIVA.equals(aPolicy.getFiltro().getRuoloPorta())){
  820.                                     if(nomePorta.equals(aPolicy.getFiltro().getNomePorta())) {
  821.                                         keyForClean.add(key);
  822.                                     }
  823.                                     else if(nomePorta_normalized!=null && nomePorta_normalized.equals(aPolicy.getFiltro().getNomePorta())) {
  824.                                         keyForClean.add(key);
  825.                                     }
  826.                                 }
  827.                             }
  828.                         }
  829.                     }
  830.                 }
  831.             }
  832.             if(keyForClean!=null && !keyForClean.isEmpty()) {
  833.                 for (String key : keyForClean) {
  834.                     removeObjectCache(key);
  835.                 }
  836.             }
  837.         }
  838.     }
  839.    
  840.     public static void removeConnettore(IDConnettore idConnettore) throws Exception {
  841.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  842.            
  843.             OpenSPCoop2Properties openSPCoop2Properties = OpenSPCoop2Properties.getInstance();
  844.            
  845.             if(openSPCoop2Properties.isTimerConsegnaContenutiApplicativiAbilitato()) {
  846.                 List<String> code = openSPCoop2Properties.getTimerConsegnaContenutiApplicativiCode();
  847.                 for (String coda : code) {
  848.                     String key = ConfigurazionePdD.getKey_getConnettoriConsegnaNotifichePrioritarie(coda);
  849.                     Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  850.                     if(oCode!=null && oCode instanceof List<?>) {
  851.                         List<?> l = (List<?>) oCode;
  852.                         if(l!=null && !l.isEmpty()) {
  853.                             for (Object object : l) {
  854.                                 if(object!=null && object instanceof IDConnettore) {
  855.                                     IDConnettore idC = (IDConnettore) object;
  856.                                     if(idC.equals(idConnettore)) {
  857.                                         ConfigurazionePdDReader.removeObjectCache(key);
  858.                                         break;
  859.                                     }
  860.                                 }
  861.                             }
  862.                         }
  863.                     }
  864.                 }
  865.             }
  866.                    
  867.         }
  868.     }
  869.    
  870.     public static void removeSoggetto(IDSoggetto idSoggetto) throws Exception {
  871.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  872.            
  873.             boolean soggettiVirtuali = OpenSPCoop2Properties.getInstance().isSoggettiVirtualiEnabled();
  874.            
  875.             String keySoggetto = ConfigurazionePdD._getKey_getSoggettoByID(idSoggetto);
  876.             ConfigurazionePdDReader.removeObjectCache(keySoggetto);
  877.            
  878.             String keyRouter = ConfigurazionePdD._getKey_getRouter();
  879.             Object oRouter = ConfigurazionePdDReader.getRawObjectCache(keyRouter);
  880.             if(oRouter!=null && oRouter instanceof Soggetto) {
  881.                 Soggetto s = (Soggetto) oRouter;
  882.                 if(s.getTipo().equals(idSoggetto.getTipo())
  883.                         &&
  884.                     s.getNome().equals(idSoggetto.getNome()) ) {
  885.                     ConfigurazionePdDReader.removeObjectCache(keyRouter);
  886.                 }
  887.             }
  888.            
  889.             if(soggettiVirtuali) {
  890.                 String keySoggettiVirtuali = ConfigurazionePdD._getKey_getSoggettiVirtuali();
  891.                 Object oSoggettiVirtuali = ConfigurazionePdDReader.getRawObjectCache(keySoggettiVirtuali);
  892.                 if(oSoggettiVirtuali!=null && oSoggettiVirtuali instanceof List<?>) {
  893.                     List<?> l = (List<?>) oSoggettiVirtuali;
  894.                     if(l!=null && !l.isEmpty()) {
  895.                         for (Object object : l) {
  896.                             if(object!=null && object instanceof IDSoggetto) {
  897.                                 IDSoggetto idS = (IDSoggetto) object;
  898.                                 if(idS.equals(idSoggetto)) {
  899.                                     ConfigurazionePdDReader.removeObjectCache(keySoggettiVirtuali);
  900.                                     break;
  901.                                 }
  902.                             }
  903.                         }
  904.                     }
  905.                 }
  906.             }
  907.            
  908.             if(soggettiVirtuali) {
  909.                 List<String> keyForClean = new ArrayList<>();
  910.                 List<String> keys = ConfigurazionePdDReader.keysCache();
  911.                 if(keys!=null && !keys.isEmpty()) {
  912.                     String prefixPorteApplicativeVirtualiRicercaPuntuale = ConfigurazionePdD._toKey_getPorteApplicativeVirtualiPrefix(true);
  913.                     String prefixPorteApplicativeVirtualiRicercaNonPuntuale = ConfigurazionePdD._toKey_getPorteApplicativeVirtualiPrefix(false);
  914.                     String porteApplicativeVirtualiIdSoggetto = ConfigurazionePdD._toKey_getPorteApplicativeVirtuali_idSoggettoVirtuale(idSoggetto);
  915.                     for (String key : keys) {
  916.                         if(key!=null) {
  917.                             if(
  918.                                 ((key.startsWith(prefixPorteApplicativeVirtualiRicercaPuntuale)) || (key.startsWith(prefixPorteApplicativeVirtualiRicercaNonPuntuale)))
  919.                                 &&
  920.                                 key.contains(porteApplicativeVirtualiIdSoggetto)) {
  921.                                 keyForClean.add(key);
  922.                             }
  923.                         }
  924.                     }
  925.                 }
  926.                 if(keyForClean!=null && !keyForClean.isEmpty()) {
  927.                     for (String key : keyForClean) {
  928.                         removeObjectCache(key);
  929.                     }
  930.                 }
  931.             }

  932.         }
  933.     }
  934.    
  935.     public static void removeApplicativo(IDServizioApplicativo idApplicativo) throws Exception {
  936.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  937.            
  938.             String keyApplicativo = ConfigurazionePdD._getKey_getServizioApplicativo(idApplicativo);
  939.             ConfigurazionePdDReader.removeObjectCache(keyApplicativo);
  940.            
  941.             List<String> keyForClean = new ArrayList<>();
  942.             List<String> keys = ConfigurazionePdDReader.keysCache();
  943.             if(keys!=null && !keys.isEmpty()) {
  944.                
  945.                 String prefixCredenzialiBasic = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiBasicPrefix();
  946.                 String prefixCredenzialiApiKey = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiApiKeyPrefix(false);
  947.                 String prefixCredenzialiApiKeyAppId = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiApiKeyPrefix(true);
  948.                 String prefixCredenzialiSsl = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiSslPrefix(true);
  949.                 String prefixCredenzialiSslCert = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiSslCertPrefix(true);
  950.                 String prefixCredenzialiPrincipal = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiPrincipalPrefix();
  951.                 String prefixCredenzialiToken = ConfigurazionePdD._toKey_getServizioApplicativoByCredenzialiTokenPrefix();
  952.                
  953.                 String prefixGetAllId = ConfigurazionePdD._toKey_getAllIdServiziApplicativi_method();
  954.                                
  955.                 for (String key : keys) {
  956.                     if(key!=null) {
  957.                         if(key.startsWith(prefixCredenzialiBasic) ||
  958.                                 key.startsWith(prefixCredenzialiApiKey) ||
  959.                                 key.startsWith(prefixCredenzialiApiKeyAppId) ||
  960.                                 key.startsWith(prefixCredenzialiSsl) ||
  961.                                 key.startsWith(prefixCredenzialiSslCert) ||
  962.                                 key.startsWith(prefixCredenzialiPrincipal) ||
  963.                                 key.startsWith(prefixCredenzialiToken)) {
  964.                            
  965.                             Object o = ConfigurazionePdDReader.getRawObjectCache(key);
  966.                             if(o!=null && o instanceof ServizioApplicativo) {
  967.                                 ServizioApplicativo sa = (ServizioApplicativo) o;
  968.                                 if(idApplicativo.getNome().equals(sa.getNome()) &&
  969.                                         idApplicativo.getIdSoggettoProprietario().getTipo().equals(sa.getTipoSoggettoProprietario()) &&
  970.                                         idApplicativo.getIdSoggettoProprietario().getNome().equals(sa.getNomeSoggettoProprietario())) {
  971.                                     keyForClean.add(key);
  972.                                 }
  973.                             }
  974.                            
  975.                         }
  976.                         else if(key.startsWith(prefixGetAllId)) {
  977.                             Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  978.                             if(oCode!=null && oCode instanceof List<?>) {
  979.                                 List<?> l = (List<?>) oCode;
  980.                                 if(l!=null && !l.isEmpty()) {
  981.                                     for (Object object : l) {
  982.                                         if(object!=null && object instanceof IDServizioApplicativo) {
  983.                                             IDServizioApplicativo idSAcheck = (IDServizioApplicativo) object;
  984.                                             if(idSAcheck.equals(idApplicativo)) {
  985.                                                 keyForClean.add(key);
  986.                                                 break;
  987.                                             }
  988.                                         }
  989.                                     }
  990.                                 }
  991.                             }
  992.                         }
  993.                     }
  994.                 }
  995.             }
  996.             if(keyForClean!=null && !keyForClean.isEmpty()) {
  997.                 for (String key : keyForClean) {
  998.                     removeObjectCache(key);
  999.                 }
  1000.             }
  1001.            
  1002.             OpenSPCoop2Properties openSPCoop2Properties = OpenSPCoop2Properties.getInstance();
  1003.            
  1004.             if(openSPCoop2Properties.isTimerConsegnaContenutiApplicativiAbilitato()) {
  1005.                 List<String> code = openSPCoop2Properties.getTimerConsegnaContenutiApplicativiCode();
  1006.                 for (String coda : code) {
  1007.                     String key = ConfigurazionePdD.getKey_getConnettoriConsegnaNotifichePrioritarie(coda);
  1008.                     Object oCode = ConfigurazionePdDReader.getRawObjectCache(key);
  1009.                     if(oCode!=null && oCode instanceof List<?>) {
  1010.                         List<?> l = (List<?>) oCode;
  1011.                         if(l!=null && !l.isEmpty()) {
  1012.                             for (Object object : l) {
  1013.                                 if(object!=null && object instanceof IDConnettore) {
  1014.                                     IDConnettore idC = (IDConnettore) object;
  1015.                                     if(idC.getNome().equals(idApplicativo.getNome()) &&
  1016.                                             idC.getIdSoggettoProprietario().equals(idApplicativo.getIdSoggettoProprietario())) {
  1017.                                         ConfigurazionePdDReader.removeObjectCache(key);
  1018.                                         break;
  1019.                                     }
  1020.                                 }
  1021.                             }
  1022.                         }
  1023.                     }
  1024.                 }
  1025.             }
  1026.         }
  1027.     }
  1028.    
  1029.     public static void removeGenericProperties(IDGenericProperties idGP) throws Exception {
  1030.         if(ConfigurazionePdDReader.isCacheAbilitata()) {
  1031.            
  1032.             String keyGP = ConfigurazionePdD._getKey_getGenericProperties(idGP.getTipologia(), idGP.getNome());
  1033.             ConfigurazionePdDReader.removeObjectCache(keyGP);
  1034.            
  1035.             String keyGPTipologia = ConfigurazionePdD._getKey_getGenericProperties(idGP.getTipologia());
  1036.             ConfigurazionePdDReader.removeObjectCache(keyGPTipologia);
  1037.            
  1038.             String prefixForwardProxy = ConfigurazionePdD.PREFIX_FORWARD_PROXY;
  1039.             String forwardProxyGP = ConfigurazionePdD._toKey_ForwardProxyConfigSuffix(idGP);
  1040.            
  1041.             List<String> keyForClean = new ArrayList<>();
  1042.             List<String> keys = ConfigurazionePdDReader.keysCache();
  1043.             if(keys!=null && !keys.isEmpty()) {
  1044.                 for (String key : keys) {
  1045.                     if(key!=null) {
  1046.                         if(forwardProxyGP!=null && key.startsWith(prefixForwardProxy)&& key.contains(forwardProxyGP)) {
  1047.                             keyForClean.add(key);
  1048.                         }
  1049.                     }
  1050.                 }
  1051.             }
  1052.             if(keyForClean!=null && !keyForClean.isEmpty()) {
  1053.                 for (String key : keyForClean) {
  1054.                     removeObjectCache(key);
  1055.                 }
  1056.             }
  1057.            
  1058.         }
  1059.     }
  1060.    
  1061.    


  1062.     /*   -------------- Metodi di inizializzazione -----------------  */
  1063.     /**
  1064.      * Si occupa di inizializzare l'engine che permette di effettuare
  1065.      * query alla configurazione di OpenSPCoop.
  1066.      * L'engine inizializzato sara' diverso a seconda del <var>tipo</var> di configurazione :
  1067.      * <ul>
  1068.      * <li> {@link org.openspcoop2.core.config.driver.xml.DriverConfigurazioneXML}, interroga una configurazione realizzata tramite un file xml.
  1069.      * <li> {@link org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB}, interroga una configurazione realizzata tramite un database relazionale.
  1070.      * </ul>
  1071.      *
  1072.      * @param accessoConfigurazione Informazioni per accedere alla configurazione della PdD OpenSPCoop.
  1073.      * @return true se l'inizializzazione ha successo, false altrimenti.
  1074.      */
  1075.     public static boolean initialize(AccessoConfigurazionePdD accessoConfigurazione,Logger aLog,Logger aLogconsole,Properties localProperties,
  1076.             String jndiNameDatasourcePdD, boolean forceDisableCache,
  1077.             boolean useOp2UtilsDatasource, boolean bindJMX,
  1078.             boolean prefillCache, CryptConfig configApplicativi,
  1079.             CacheType cacheType){

  1080.         try {
  1081.             ConfigurazionePdDReader.configurazionePdDReader = new ConfigurazionePdDReader(accessoConfigurazione,aLog,aLogconsole,localProperties,jndiNameDatasourcePdD,
  1082.                     forceDisableCache, useOp2UtilsDatasource, bindJMX,
  1083.                     prefillCache, configApplicativi,
  1084.                     cacheType);
  1085.             return ConfigurazionePdDReader.initialize;
  1086.         }
  1087.         catch(Exception e) {
  1088.             aLog.error(e.getMessage(),e);
  1089.             aLogconsole.error(e.getMessage());
  1090.             return false;
  1091.         }
  1092.     }

  1093.     public static void prefillCacheConInformazioniRegistro(Logger aLogconsole){
  1094.         getInstance().configurazionePdD.prefillCacheConInformazioniRegistro(aLogconsole);
  1095.     }

  1096.     /**
  1097.      * Ritorna lo stato dell'engine che permette di effettuare
  1098.      * query alla configurazione
  1099.      *
  1100.      * @return true se l'inizializzazione all'engine e' stata precedentemente effettuata, false altrimenti.
  1101.      */
  1102.     public static boolean isInitialize(){
  1103.         return ConfigurazionePdDReader.initialize;
  1104.     }

  1105.     /**
  1106.      * Ritorna l'istanza di questa classe
  1107.      *
  1108.      * @return Istanza del Reader della Configurazione
  1109.      */
  1110.     public static ConfigurazionePdDReader getInstance(){
  1111.         return ConfigurazionePdDReader.configurazionePdDReader;
  1112.     }

  1113.     public static IDriverConfigurazioneGet getDriverConfigurazionePdD() {
  1114.         return ConfigurazionePdDReader.configurazionePdDReader.configurazionePdD.getDriverConfigurazionePdD();
  1115.     }










  1116.     /*   -------------- Costruttore -----------------  */

  1117.     /**
  1118.      * Inizializza il reader
  1119.      *
  1120.      * @param accessoConfigurazione Informazioni per accedere alla configurazione della PdD OpenSPCoop.
  1121.      */
  1122.     public ConfigurazionePdDReader(AccessoConfigurazionePdD accessoConfigurazione,Logger aLog,Logger aLogconsole,Properties localProperties,
  1123.             String jndiNameDatasourcePdD, boolean forceDisableCache,
  1124.             boolean useOp2UtilsDatasource, boolean bindJMX,
  1125.             boolean prefillCache, CryptConfig configApplicativi,
  1126.             CacheType cacheType)throws DriverConfigurazioneException{
  1127.         try{
  1128.             if(aLog!=null)
  1129.                 this.logger = aLog;
  1130.             else
  1131.                 this.logger = LoggerWrapperFactory.getLogger(ConfigurazionePdDReader.class);
  1132.             this.configurazionePdD = new ConfigurazionePdD(accessoConfigurazione,this.logger,aLogconsole,localProperties,jndiNameDatasourcePdD, forceDisableCache,
  1133.                     useOp2UtilsDatasource, bindJMX,
  1134.                     prefillCache, configApplicativi,
  1135.                     cacheType);

  1136.             // OpenSPCoop Properties
  1137.             this.openspcoopProperties = OpenSPCoop2Properties.getInstance();
  1138.             this.pddProperties = PddProperties.getInstance();

  1139.             // configurazioneDinamica
  1140.             this.configurazioneDinamica = this.openspcoopProperties.isConfigurazioneDinamica();

  1141.             // Server J2EE
  1142.             this.serverJ2EE = this.openspcoopProperties.isServerJ2EE();
  1143.            
  1144.             ConfigurazionePdDReader.initialize = true;
  1145.         }catch(Exception e){
  1146.             if(this.logger!=null)
  1147.                 this.logError("Configurazione non inizializzata",e);
  1148.             else
  1149.                 aLogconsole.error("Configurazione non inizializzata:"+e.getMessage(),e);
  1150.             ConfigurazionePdDReader.initialize = false;
  1151.         }
  1152.     }



  1153.     /**
  1154.      * Inixializza il reader del registro servizi, per il routing
  1155.      *
  1156.      * @throws DriverConfigurazioneException
  1157.      */
  1158.     //  public void initializeRegistroServiziReader()throws DriverConfigurazioneException{
  1159.     //      //   RegistroServizi
  1160.     //      if(RegistroServiziReader.isInitialize()==false){
  1161.     //          throw new DriverConfigurazioneException("Registro dei Servizi non risulta inizializzato");
  1162.     //      }
  1163.     //      this.registroServiziReader = RegistroServiziReader.getInstance();
  1164.     //  }








  1165.     /**
  1166.      * Metodo che verica la connessione ad una risorsa.
  1167.      * Se la connessione non e' presente, viene lanciata una eccezione che contiene il motivo della mancata connessione
  1168.      *
  1169.      * @throws CoreException eccezione che contiene il motivo della mancata connessione
  1170.      */
  1171.     protected void isAlive() throws CoreException{
  1172.         ((IMonitoraggioRisorsa)this.configurazionePdD.getDriverConfigurazionePdD()).isAlive();
  1173.     }


  1174.     /**
  1175.      * Validazione semantica dei registri servizi
  1176.      *
  1177.      * @throws CoreException eccezione che contiene il motivo della validazione semantica errata
  1178.      */
  1179.     protected void validazioneSemantica(String[] tipiConnettori,String[] tipiMsgDiagnosticoAppender,String[] tipiTracciamentoAppender,String [] tipiDumpAppender,
  1180.             String[]tipoAutenticazionePortaDelegata,String[]tipoAutenticazionePortaApplicativa,
  1181.             String[]tipoAutorizzazionePortaDelegata,String[]tipoAutorizzazionePortaApplicativa,
  1182.             String[]tipoAutorizzazioneContenutoPortaDelegata,String[]tipoAutorizzazioneContenutoPortaApplicativa,
  1183.             String [] tipiIntegrazionePD, String [] tipiIntegrazionePA,
  1184.             boolean validazioneSemanticaAbilitataXML,boolean validazioneSemanticaAbilitataAltreConfigurazioni,boolean validaConfigurazione,
  1185.             Logger logConsole) throws CoreException{
  1186.         try{
  1187.             Object o = this.configurazionePdD.getDriverConfigurazionePdD();
  1188.             boolean validazione = false;
  1189.             if(o instanceof DriverConfigurazioneXML){
  1190.                 validazione = validazioneSemanticaAbilitataXML;
  1191.             }else{
  1192.                 validazione = validazioneSemanticaAbilitataAltreConfigurazioni;
  1193.             }
  1194.             if(validazione){
  1195.                 BeanUtilities driverConfigurazione = (BeanUtilities) o;
  1196.                 org.openspcoop2.core.config.Openspcoop2 configurazionePdD = driverConfigurazione.getImmagineCompletaConfigurazionePdD();

  1197.                 ValidazioneSemantica validazioneSemantica = new ValidazioneSemantica(configurazionePdD,
  1198.                         tipiConnettori,ProtocolFactoryManager.getInstance().getOrganizationTypesAsArray(),
  1199.                         ProtocolFactoryManager.getInstance().getServiceTypesAsArray(org.openspcoop2.protocol.manifest.constants.ServiceBinding.SOAP),
  1200.                         ProtocolFactoryManager.getInstance().getServiceTypesAsArray(org.openspcoop2.protocol.manifest.constants.ServiceBinding.REST),
  1201.                         tipiMsgDiagnosticoAppender,tipiTracciamentoAppender,tipiDumpAppender,
  1202.                         tipoAutenticazionePortaDelegata, tipoAutenticazionePortaApplicativa,
  1203.                         tipoAutorizzazionePortaDelegata, tipoAutorizzazionePortaApplicativa,
  1204.                         tipoAutorizzazioneContenutoPortaDelegata, tipoAutorizzazioneContenutoPortaApplicativa,
  1205.                         tipiIntegrazionePD,tipiIntegrazionePA,validaConfigurazione);
  1206.                 validazioneSemantica.validazioneSemantica(false);
  1207.                 if(logConsole!=null){
  1208.                     logConsole.info("Validazione semantica della configurazione effettuata.");
  1209.                 }
  1210.             }
  1211.         }catch(Exception e){
  1212.             throw new CoreException(e.getMessage(),e);
  1213.         }
  1214.     }

  1215.     protected void setValidazioneSemanticaModificaConfigurazionePdDXML(String[] tipiConnettori,
  1216.             String[]tipoMsgDiagnosticiAppender,String[]tipoTracciamentoAppender,String [] tipiDumpAppender,
  1217.             String[]tipoAutenticazionePortaDelegata,String[]tipoAutenticazionePortaApplicativa,
  1218.             String[]tipoAutorizzazionePortaDelegata,String[]tipoAutorizzazionePortaApplicativa,
  1219.             String[]tipoAutorizzazioneContenutoPortaDelegata,String[]tipoAutorizzazioneContenutoPortaApplicativa,
  1220.             String[]tipoIntegrazionePD,String[]tipoIntegrazionePA) throws CoreException{
  1221.         try{
  1222.             Object o = this.configurazionePdD.getDriverConfigurazionePdD();
  1223.             if(o instanceof DriverConfigurazioneXML){
  1224.                 DriverConfigurazioneXML driver = (DriverConfigurazioneXML) o;
  1225.                 driver.abilitazioneValidazioneSemanticaDuranteModificaXML(tipiConnettori,
  1226.                         ProtocolFactoryManager.getInstance().getOrganizationTypesAsArray(),
  1227.                         ProtocolFactoryManager.getInstance().getServiceTypesAsArray(org.openspcoop2.protocol.manifest.constants.ServiceBinding.SOAP),
  1228.                         ProtocolFactoryManager.getInstance().getServiceTypesAsArray(org.openspcoop2.protocol.manifest.constants.ServiceBinding.REST),
  1229.                         tipoMsgDiagnosticiAppender, tipoTracciamentoAppender, tipiDumpAppender,
  1230.                         tipoAutenticazionePortaDelegata, tipoAutenticazionePortaApplicativa,
  1231.                         tipoAutorizzazionePortaDelegata, tipoAutorizzazionePortaApplicativa,
  1232.                         tipoAutorizzazioneContenutoPortaDelegata, tipoAutorizzazioneContenutoPortaApplicativa,
  1233.                         tipoIntegrazionePD, tipoIntegrazionePA);
  1234.             }
  1235.         }catch(Exception e){
  1236.             throw new CoreException(e.getMessage(),e);
  1237.         }
  1238.     }

  1239.     protected void verificaConsistenzaConfigurazione() throws DriverConfigurazioneException {
  1240.         Object o = this.configurazionePdD.getDriverConfigurazionePdD();
  1241.         if(o instanceof DriverConfigurazioneXML){
  1242.             DriverConfigurazioneXML driver = (DriverConfigurazioneXML) o;
  1243.             driver.refreshConfigurazioneXML();
  1244.         }
  1245.     }












  1246.     /* ********  SOGGETTI (Interfaccia)  ******** */

  1247.     /**
  1248.      * Restituisce Il dominio di un soggetto  identificato da <var>idSoggetto</var>
  1249.      *
  1250.      * @param idSoggetto Identificativo di un soggetto
  1251.      * @return Il dominio del Soggetto.
  1252.      *
  1253.      */
  1254.     protected String getIdentificativoPorta(Connection connectionPdD, IDSoggetto idSoggetto,IProtocolFactory<?> protocolFactory, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1255.         Soggetto soggetto = this.configurazionePdD.getSoggetto(connectionPdD,idSoggetto);
  1256.         if(soggetto == null)
  1257.             throw new DriverConfigurazioneNotFound("Soggetto["+idSoggetto.toString()+"] per lettura Dominio non trovato");

  1258.         if( soggetto.getIdentificativoPorta() != null  )
  1259.             return soggetto.getIdentificativoPorta();
  1260.         else{
  1261.             if(soggetto.getNome() != null){
  1262.                 try{
  1263.                     return protocolFactory.createTraduttore().getIdentificativoPortaDefault(idSoggetto);
  1264.                 }catch(Exception e){
  1265.                     throw new DriverConfigurazioneException(e.getMessage(),e);
  1266.                 }
  1267.             }else{
  1268.                 OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance();
  1269.                 return properties.getIdentificativoPortaDefault(protocolFactory.getProtocol(), requestInfo);
  1270.             }
  1271.         }
  1272.     }

  1273.     /**
  1274.      * Restituisce L'indicazione se il soggetto e' un soggetto virtuale
  1275.      *
  1276.      * @param idSoggetto Identificativo di un soggetto
  1277.      * @return true se il soggetto e' un soggetto virtuale gestito dalla porta di dominio.
  1278.      *
  1279.      */
  1280.     protected boolean isSoggettoVirtuale(Connection connectionPdD, IDSoggetto idSoggetto) throws DriverConfigurazioneException {

  1281.         if(!this.openspcoopProperties.isSoggettiVirtualiEnabled()) {
  1282.             return false;
  1283.         }
  1284.        
  1285.         // il soggetto virtuale e' stato registrato come tale?

  1286.         if(idSoggetto == null || idSoggetto.getTipo()==null || idSoggetto.getNome()==null)
  1287.             return false;

  1288.         /** Lista di Soggetti Virtuali */
  1289.         List<IDSoggetto> listaSoggettiVirtuali = null;
  1290.         try{
  1291.             listaSoggettiVirtuali = this.configurazionePdD.getSoggettiVirtuali(connectionPdD);
  1292.         }catch(DriverConfigurazioneNotFound de){
  1293.             this.logInfo("Soggetti virtuali non presenti.");
  1294.             return false;
  1295.         }

  1296.         if(listaSoggettiVirtuali!=null && listaSoggettiVirtuali.size()>0) {
  1297.             for (int i = 0; i < listaSoggettiVirtuali.size(); i++) {
  1298.                 if(listaSoggettiVirtuali.get(i).equals(idSoggetto)) {
  1299.                     return true;
  1300.                 }
  1301.             }
  1302.         }

  1303.         return false;
  1304.     }

  1305.     protected Soggetto getSoggetto(Connection connectionPdD, IDSoggetto idSoggetto)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{  
  1306.         Soggetto soggetto = this.configurazionePdD.getSoggetto(connectionPdD, idSoggetto);
  1307.         return soggetto;
  1308.     }
  1309.    
  1310.     /**
  1311.      * Restituisce l'indicazione se la PdD gestisce il soggetto indicato
  1312.      *
  1313.      * @param idSoggetto Identificativo di un soggetto
  1314.      * @return true se il soggetto e' un soggetto gestito dalla porta di dominio.
  1315.      *
  1316.      */
  1317.     protected boolean existsSoggetto(Connection connectionPdD, IDSoggetto idSoggetto)throws DriverConfigurazioneException{  
  1318.         Soggetto soggetto = null;
  1319.         try{
  1320.             soggetto = this.configurazionePdD.getSoggetto(connectionPdD, idSoggetto);
  1321.         }catch(DriverConfigurazioneNotFound e){
  1322.             //this.logDebug("existsSoggetto (not found): "+e.getMessage());
  1323.             return false;
  1324.         }
  1325.         return soggetto!=null;
  1326.     }

  1327.     /**
  1328.      * Restituisce la lista dei soggetti virtuali gestiti dalla PdD
  1329.      *
  1330.      * @return Restituisce la lista dei servizi associati a soggetti virtuali gestiti dalla PdD
  1331.      * @throws DriverConfigurazioneException
  1332.      */
  1333.     protected  List<IDServizio> getServiziSoggettiVirtuali(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1334.         return this.configurazionePdD.getServiziSoggettiVirtuali(connectionPdD);
  1335.     }










  1336.     /* ************* ROUTING **************** */

  1337.     /**
  1338.      * Restituisce la rotta per il dato soggetto seguendo queste regole:
  1339.      * <ul>
  1340.      * </li>1) Se la PdD non contiene una entry per il soggetto indicato,
  1341.      * viene acceduto normalmente il registro per ottenere il connettore del destinatario reale della busta.
  1342.      * </li>2) Se la PdD contiene una entry specifica (destinazione) per il soggetto destinatario
  1343.      *         vengono eseguite le rotte elencate nella entry fino a che non viene trovato un connettore.
  1344.      *         Nel caso non venga trovato un connettore si rimanda al punto 3.
  1345.      * </li> 3) Viene utilizzata l'entry di default (obbligatorio) per trovare un connettore.
  1346.      *          Vengono eseguite le rotte elencate nella entry fino a che non viene trovato un connettore
  1347.      * </ul>
  1348.      *
  1349.      * @param idSoggettoDestinatario Identificativo del soggetto destinatario della busta
  1350.      * @return Il connettore da utilizzare per la spedizione della busta.
  1351.      *
  1352.      */
  1353.     protected Connettore getForwardRoute(Connection connectionPdD, RegistroServiziManager registroServiziManager ,IDSoggetto idSoggettoDestinatario,boolean functionAsRouter, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1354.         return getForwardRoute(connectionPdD,registroServiziManager,null,this.buildIDServizioWithOnlySoggetto(idSoggettoDestinatario),functionAsRouter, requestInfo);
  1355.     }

  1356.     @SuppressWarnings("deprecation")
  1357.     private IDServizio buildIDServizioWithOnlySoggetto(IDSoggetto idSoggettoDestinatario){
  1358.         IDServizio idServizio = new IDServizio();
  1359.         idServizio.setSoggettoErogatore(idSoggettoDestinatario);
  1360.         return idServizio;
  1361.     }

  1362.     /**
  1363.      * Restituisce la rotta per il dato soggetto seguendo queste regole:
  1364.      * <ul>
  1365.      * </li>1) Se la PdD non contiene una entry per il soggetto indicato,
  1366.      * viene acceduto normalmente il registro per ottenere il connettore del destinatario reale della busta.
  1367.      * </li>2) Se la PdD contiene una entry specifica (destinazione) per il soggetto destinatario
  1368.      *         vengono eseguite le rotte elencate nella entry fino a che non viene trovato un connettore.
  1369.      *         Nel caso non venga trovato un connettore si rimanda al punto 3.
  1370.      * </li> 3) Viene utilizzata l'entry di default (obbligatorio) per trovare un connettore.
  1371.      *          Vengono eseguite le rotte elencate nella entry fino a che non viene trovato un connettore
  1372.      * </ul>
  1373.      *
  1374.      * @param idSoggettoMittente Identificativo del mittente della busta
  1375.      * @param idServizio Identificativo del servizio richiesto (soggetto destinatario, servizio e azione della busta)
  1376.      * @return Il connettore da utilizzare per la spedizione della busta.
  1377.      *
  1378.      */
  1379.     protected Connettore getForwardRoute(Connection connectionPdD, RegistroServiziManager registroServiziManager , IDSoggetto idSoggettoMittente, IDServizio idServizio,boolean functionAsRouter, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{


  1380.         if(idServizio == null)
  1381.             throw new DriverConfigurazioneException("getForwardRoute error: Identificativo servizio non definito");
  1382.         if(idServizio.getSoggettoErogatore()==null)
  1383.             throw new DriverConfigurazioneException("getForwardRoute error: Soggetto Erogatore non definito");
  1384.         String nome = idServizio.getSoggettoErogatore().getNome();
  1385.         String tipo= idServizio.getSoggettoErogatore().getTipo();
  1386.         if(nome==null || tipo==null)
  1387.             throw new DriverConfigurazioneException("getForwardRoute error: Soggetto Erogatore con tipo/nome non definito");

  1388.         // 1) Se la PdD non contiene una forward route, utilizza normalmente il registro
  1389.         RoutingTable routingTable = this.configurazionePdD.getRoutingTable(connectionPdD);
  1390.         /*if(routingTable.isAbilitata()==false){
  1391.             System.out.println("ROUTING TABLE DISABILITATA");
  1392.         }
  1393.         else{
  1394.             Route[] routesDefault = routingTable.get_defaultList();
  1395.             if(routesDefault!=null){
  1396.                 for (int i = 0; i < routesDefault.length; i++) {
  1397.                     if(routesDefault[i].getGateway()!=null){
  1398.                         System.out.println("ROUTING TABLE DEFAULT ["+i+"] GATEWAY: "+routesDefault[i].getGateway().getTipo()+"/"+routesDefault[i].getGateway().getNome());
  1399.                     }else{
  1400.                         System.out.println("ROUTING TABLE DEFAULT ["+i+"] REGISTRO: "+routesDefault[i].getRegistro().getNome());
  1401.                     }
  1402.                 }
  1403.             }
  1404.             RoutingTableDestinazione [] rdt = routingTable.getDestinazioneList();
  1405.             if(rdt!=null){
  1406.                 for (int i = 0; i < rdt.length; i++) {
  1407.                     if(rdt[i].getRoute(0).getGateway()!=null){
  1408.                         System.out.println("ROUTING TABLE ("+rdt[i].getTipo()+"/"+rdt[i].getNome()+") ["+i+"] GATEWAY: "+rdt[i].getRoute(0).getGateway().getTipo()+"/"+rdt[i].getRoute(0).getGateway().getNome());
  1409.                     }else{
  1410.                         System.out.println("ROUTING TABLE ("+rdt[i].getTipo()+"/"+rdt[i].getNome()+") ["+i+"] REGISTRO: "+rdt[i].getRoute(0).getRegistro().getNome());
  1411.                     }
  1412.                 }
  1413.             }
  1414.         }   */
  1415.         if( (routingTable.getAbilitata()==null || routingTable.getAbilitata()==false)
  1416.                 ||
  1417.                 (
  1418.                         ( (routingTable.getDefault()==null) || (routingTable.getDefault().sizeRouteList()==0) )
  1419.                         &&
  1420.                         (routingTable.sizeDestinazioneList()==0)
  1421.                         )
  1422.                 ){

  1423.             if(routingTable.getAbilitata()==null || routingTable.getAbilitata()==false)
  1424.                 this.logDebug("getForwardRoute: routing table disabilitata");
  1425.             else
  1426.                 this.logDebug("getForwardRoute: routing table senza rotte");

  1427.             Connettore connettoreDominio = null;
  1428.             try{
  1429.                 if(idSoggettoMittente!=null && idServizio.getNome()!=null){
  1430.                     connettoreDominio = registroServiziManager.getConnettore(idSoggettoMittente,idServizio,null, requestInfo); // null=allRegistri
  1431.                     if(!functionAsRouter)
  1432.                         setPDUrlPrefixRewriter(connectionPdD,connettoreDominio, idSoggettoMittente, requestInfo);
  1433.                 }else{
  1434.                     connettoreDominio = registroServiziManager.getConnettore(idServizio.getSoggettoErogatore(),null, requestInfo); // null=allRegistri
  1435.                 }
  1436.             }catch(DriverRegistroServiziNotFound e){
  1437.                 throw new DriverConfigurazioneNotFound("getForwardRoute[RoutingTable Non Abilitata], ricerca nel RegistroServizi effettuata: "+e.getMessage(),e);
  1438.             }
  1439.             catch(Exception e){
  1440.                 throw new DriverConfigurazioneException("getForwardRoute[RoutingTable Non Abilitata], errore durante la lettura dal Registro dei Servizi: "+e.getMessage(),e);
  1441.             }
  1442.             if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo())
  1443.                     && !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo()) )
  1444.                 return connettoreDominio;
  1445.             else
  1446.                 throw new DriverConfigurazioneException("getForwardRoute[RoutingTable Non Abilitata], connettore per la busta non trovato.");
  1447.         }

  1448.         StringBuilder bf = new StringBuilder();
  1449.         bf.append("Ricerca connettore del servizio...");
  1450.         this.logDebug("getForwardRoute: routing table abilitata");

  1451.         // Se la PdD contiene una forward route, utilizza la tabella di routing
  1452.         // 2) Destinazioni specifiche
  1453.         for(int i=0;i<routingTable.sizeDestinazioneList();i++){
  1454.             if(nome.equals(routingTable.getDestinazione(i).getNome()) &&
  1455.                     tipo.equals(routingTable.getDestinazione(i).getTipo())){    
  1456.                 bf.append("\nRotta di destinazione ["+routingTable.getDestinazione(i).getTipo()+"/"+routingTable.getDestinazione(i).getNome()+"]...\n");
  1457.                 this.logDebug("getForwardRoute: esamino routing table, destinazione ["+routingTable.getDestinazione(i).getTipo()+"/"+routingTable.getDestinazione(i).getNome()+"]");

  1458.                 // Utilizzo le rotte della destinazione specifica fino a trovare un connettore
  1459.                 // Se un connettore non viene trovato, utilizzero poi il Default della tabella di routing.
  1460.                 RoutingTableDestinazione routingTableDest = routingTable.getDestinazione(i);
  1461.                 for(int j=0;j<routingTableDest.sizeRouteList();j++){
  1462.                     Route route = routingTableDest.getRoute(j);
  1463.                     Connettore connettoreDominio = null;
  1464.                     boolean error = false;
  1465.                     String soggettoGateway = "";
  1466.                     try{
  1467.                         if(route.getRegistro()!=null){
  1468.                             this.logDebug("getForwardRoute: esamino routing table, destinazione ["
  1469.                                     +routingTable.getDestinazione(i).getTipo()+"/"+routingTable.getDestinazione(i).getNome()+"] RegistroNome["+route.getRegistro().getNome()+"]");

  1470.                             bf.append("\tRegistro nomeRegistro["+route.getRegistro().getNome()+"]: ");

  1471.                             // Utilizzo del registro con l'identita reale della busta
  1472.                             if(idSoggettoMittente!=null && idServizio.getNome()!=null){
  1473.                                 connettoreDominio = registroServiziManager.getConnettore(idSoggettoMittente,idServizio,route.getRegistro().getNome(), requestInfo);
  1474.                                 if(!functionAsRouter)
  1475.                                     setPDUrlPrefixRewriter(connectionPdD,connettoreDominio, idSoggettoMittente, requestInfo);
  1476.                             }else{
  1477.                                 connettoreDominio = registroServiziManager.getConnettore(idServizio.getSoggettoErogatore(),route.getRegistro().getNome(), requestInfo);
  1478.                             }
  1479.                             // Registro da utilizzare anche per l'imbustamento
  1480.                             if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo()) &&
  1481.                                     !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo()) )
  1482.                                 connettoreDominio.setNomeRegistro(route.getRegistro().getNome());
  1483.                         }else if(route.getGateway()!=null){
  1484.                             this.logDebug("getForwardRoute: esamino routing table, destinazione ["
  1485.                                     +routingTable.getDestinazione(i).getTipo()+"/"+routingTable.getDestinazione(i).getNome()+"] GateWay["+route.getGateway().getTipo()+"/"+route.getGateway().getNome()+"]");
  1486.                             bf.append("\tGateWay["+route.getGateway().getTipo()+"/"+route.getGateway().getNome()+"]: ");

  1487.                             // Utilizzo del gateway
  1488.                             IDSoggetto gateway = new IDSoggetto(route.getGateway().getTipo(),
  1489.                                     route.getGateway().getNome());
  1490.                             soggettoGateway = " [Gateway:"+gateway.toString()+"]";
  1491.                             connettoreDominio = registroServiziManager.getConnettore(gateway,null, requestInfo); //null=allRegistri
  1492.                             // Rotta diversa dalla destinazione della busta per l'elemento trasmissione
  1493.                             if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo()) &&
  1494.                                     !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo())){
  1495.                                 connettoreDominio.setNomeDestinatarioTrasmissioneBusta(gateway.getNome());
  1496.                                 connettoreDominio.setTipoDestinatarioTrasmissioneBusta(gateway.getTipo());
  1497.                             }
  1498.                         }
  1499.                     }catch(DriverRegistroServiziNotFound e){
  1500.                         // Ricerca Connettore fallita
  1501.                         error = true;
  1502.                         bf.append(" non trovata: "+e.getMessage());
  1503.                     }
  1504.                     catch(Exception e){
  1505.                         throw new DriverConfigurazioneException("getForwardRoute: esamino routing table, destinazione ["
  1506.                                 +routingTable.getDestinazione(i).getTipo()+"/"+routingTable.getDestinazione(i).getNome()+"]: Accesso al registro non riuscito"+soggettoGateway+": "+e.getMessage(),e);
  1507.                     }
  1508.                     if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo())
  1509.                             && !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo()))
  1510.                         return connettoreDominio;
  1511.                     else{
  1512.                         if(!error){
  1513.                             bf.append(" non trovata: connettore non definito");
  1514.                         }
  1515.                     }
  1516.                 }
  1517.             }
  1518.         }

  1519.         // 3) Default (obbligatorio)    
  1520.         // Utilizzo le rotte del default fino a trovare un connettore
  1521.         // Se un connettore non viene trovato, significa che e' stata effettuata una scorretta installazione
  1522.         if(routingTable.getDefault()!=null){
  1523.             for(int i=0;i<routingTable.getDefault().sizeRouteList();i++){
  1524.                 this.logDebug("getForwardRoute: esamino routing table, rotta di default");
  1525.                 bf.append("\nRotta di default");
  1526.                 Route route = routingTable.getDefault().getRoute(i);
  1527.                 Connettore connettoreDominio = null;
  1528.                 boolean error = false;
  1529.                 String soggettoGateway = "";
  1530.                 try{
  1531.                     if(route.getRegistro()!=null){
  1532.                         this.logDebug("getForwardRoute: esamino routing table, rotta di default, Registro nomeRegistro["+route.getRegistro().getNome()+"]");
  1533.                         bf.append(" Registro nomeRegistro["+route.getRegistro().getNome()+"]: ");

  1534.                         // Utilizzo del registro con l'identita reale della busta
  1535.                         if(idSoggettoMittente!=null && idServizio.getNome()!=null){
  1536.                             connettoreDominio = registroServiziManager.getConnettore(idSoggettoMittente,idServizio,route.getRegistro().getNome(), requestInfo);
  1537.                             if(!functionAsRouter)
  1538.                                 setPDUrlPrefixRewriter(connectionPdD,connettoreDominio, idSoggettoMittente, requestInfo);
  1539.                         }else{
  1540.                             connettoreDominio = registroServiziManager.getConnettore(idServizio.getSoggettoErogatore(),route.getRegistro().getNome(), requestInfo);
  1541.                         }
  1542.                         // Registro da utilizzare anche per l'imbustamento
  1543.                         if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo()) &&
  1544.                                 !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo()))
  1545.                             connettoreDominio.setNomeRegistro(route.getRegistro().getNome());
  1546.                     }else if(route.getGateway()!=null){
  1547.                         this.logDebug("getForwardRoute: esamino routing table, rotta di default, GateWay["+route.getGateway().getTipo()+"/"+route.getGateway().getNome()+"]");
  1548.                         bf.append(" GateWay["+route.getGateway().getTipo()+"/"+route.getGateway().getNome()+"]: ");

  1549.                         // Utilizzo del gateway
  1550.                         IDSoggetto gateway = new IDSoggetto(route.getGateway().getTipo(),
  1551.                                 route.getGateway().getNome());
  1552.                         soggettoGateway = " [Gateway:"+gateway.toString()+"]";
  1553.                         connettoreDominio = registroServiziManager.getConnettore(gateway,null, requestInfo);//null=allRegistri
  1554.                         // Rotta diversa dalla destinazione della busta per l'elemento trasmissione
  1555.                         if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo()) &&
  1556.                                 !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo())){
  1557.                             connettoreDominio.setNomeDestinatarioTrasmissioneBusta(gateway.getNome());
  1558.                             connettoreDominio.setTipoDestinatarioTrasmissioneBusta(gateway.getTipo());
  1559.                         }
  1560.                     }
  1561.                 }catch(DriverRegistroServiziNotFound e){
  1562.                     // Ricerca Connettore fallita
  1563.                     error = true;
  1564.                     bf.append(" non trovata: "+e.getMessage());
  1565.                 }
  1566.                 catch(Exception e){
  1567.                     throw new DriverConfigurazioneException("getForwardRoute: esamino routing table, rotta di default: Accesso al registro non riuscito"+soggettoGateway+": "+e.getMessage(),e);
  1568.                 }
  1569.                 if(connettoreDominio!=null && !CostantiConfigurazione.NONE.equals(connettoreDominio.getTipo())
  1570.                         && !CostantiConfigurazione.DISABILITATO.equals(connettoreDominio.getTipo()))
  1571.                     return connettoreDominio;
  1572.                 else{
  1573.                     if(!error){
  1574.                         bf.append(" non trovata: connettore non definito");
  1575.                     }
  1576.                 }
  1577.             }
  1578.         }

  1579.         // connettore non trovato?
  1580.         throw new DriverConfigurazioneNotFound("getForwardRoute [Routing Table] error: connettore per la busta non trovato: \n"+bf.toString());
  1581.     }

  1582.     /**
  1583.      * Restituisce il nome di un registro dei servizi da utilizzare per effettuare il processo di imbustamento.
  1584.      * Viene restituito null se e' possibile utilizzare qualsiasi registro, in ordine di definizione.
  1585.      *
  1586.      * @param idSoggettoMittente Identificativo del mittente della busta
  1587.      * @param idServizio Identificativo del servizio richiesto (soggetto destinatario, servizio e azione della busta)
  1588.      * @return Il nome di un registro dei servizi da utilizzare per effettuare il processo di imbustamento.
  1589.      *
  1590.      */
  1591.     protected String getRegistroForImbustamento(Connection connectionPdD, RegistroServiziManager registroServiziManager , IDSoggetto idSoggettoMittente, IDServizio idServizio,boolean functionAsRouter, RequestInfo requestInfo)throws DriverConfigurazioneException{
  1592.         Connettore conn = null;
  1593.         try {
  1594.             conn = getForwardRoute(connectionPdD,registroServiziManager,idSoggettoMittente,idServizio,functionAsRouter, requestInfo);
  1595.         }catch(DriverConfigurazioneNotFound e){}
  1596.         if(conn!=null)
  1597.             return conn.getNomeRegistro();
  1598.         else
  1599.             return null;
  1600.     }

  1601.     /**
  1602.      * Restituisce l'indicazione se la PdD e' stata configurata per funzionare anche come router.
  1603.      *
  1604.      * @return true se la PdD deve funzionare anche come router.
  1605.      *
  1606.      */
  1607.     protected boolean routerFunctionActive(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  1608.         // Per essere configurata come Router, una PdD deve possedere una tabella di routing:
  1609.         RoutingTable routingTable = null;
  1610.         try{
  1611.             routingTable = this.configurazionePdD.getRoutingTable(connectionPdD);
  1612.         }catch(Exception e){
  1613.             this.logDebug("routerFunctionActive[getRoutingTable]",e);
  1614.         }
  1615.         if(routingTable == null || (routingTable.getAbilitata()==null || routingTable.getAbilitata()==false) ||
  1616.                 (
  1617.                         (routingTable.getDefault()==null || routingTable.getDefault().sizeRouteList()==0)
  1618.                         &&
  1619.                         (routingTable.sizeDestinazioneList()==0)
  1620.                         )
  1621.                 ){
  1622.             return false;
  1623.         }

  1624.         // Inoltre deve possedere un soggetto configurato come Router
  1625.         Soggetto router = null;
  1626.         try{
  1627.             router = this.configurazionePdD.getRouter(connectionPdD);
  1628.         }catch(DriverConfigurazioneNotFound e){
  1629.             return false;
  1630.             //this.logDebug("routerFunctionActive[getRouter] (not found): "+e.getMessage());
  1631.         }  
  1632.         return router!=null;
  1633.     }

  1634.     /**
  1635.      * Restituisce l'identita della PdD nel caso debba funzionare come router.
  1636.      *
  1637.      * @return idSoggetto Identita
  1638.      *
  1639.      */
  1640.     protected IDSoggetto getRouterIdentity(Connection connectionPdD,IProtocolFactory<?> protocolFactory, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  1641.         // Per essere configurata come Router, una PdD deve possedere una tabella di routing:
  1642.         RoutingTable routingTable = null;
  1643.         try{
  1644.             routingTable = this.configurazionePdD.getRoutingTable(connectionPdD);
  1645.         }catch(Exception e){
  1646.             this.logDebug("getRouterIdentity[routingTable]",e);
  1647.         }
  1648.         if(routingTable == null || (routingTable.getAbilitata()==null || routingTable.getAbilitata()==false) ||
  1649.                 (
  1650.                         (routingTable.getDefault()==null || routingTable.getDefault().sizeRouteList()==0)
  1651.                         &&
  1652.                         (routingTable.sizeDestinazioneList()==0)
  1653.                         )
  1654.                 ){
  1655.             throw new DriverConfigurazioneException("getRouterIdentity error: RoutingTable non definita");
  1656.         }

  1657.         // Inoltre deve possedere un soggetto configurato come Router
  1658.         Soggetto router = this.configurazionePdD.getRouter(connectionPdD);
  1659.         if(router==null)
  1660.             throw new DriverConfigurazioneNotFound("Router non trovato");

  1661.         String codicePorta = router.getIdentificativoPorta();
  1662.         if(codicePorta==null){
  1663.             if(router.getNome()!=null)
  1664.                 try{
  1665.                     codicePorta = protocolFactory.createTraduttore().getIdentificativoPortaDefault(new IDSoggetto(router.getTipo(), router.getNome()));
  1666.                 }catch(Exception e){
  1667.                     throw new DriverConfigurazioneException("getRouterIdentity error: costruzione IdentificativoPorta per soggetto "+router.getTipo()+"/"+router.getNome()+" non riuscita: "+e.getMessage(),e);
  1668.                 }
  1669.             else{
  1670.                 OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance();
  1671.                 codicePorta = properties.getIdentificativoPortaDefault(protocolFactory.getProtocol(), requestInfo);
  1672.             }
  1673.         }
  1674.         return new IDSoggetto(router.getTipo(),router.getNome(),codicePorta);
  1675.     }











  1676.     /* ********  URLPrefixRewriter  ******** */

  1677.     protected void setPDUrlPrefixRewriter(Connection connectionPdD, org.openspcoop2.core.config.Connettore connettore, IDSoggetto idSoggettoFruitore, RequestInfo requestInfo) throws DriverConfigurazioneNotFound,DriverConfigurazioneException{
  1678.         if(idSoggettoFruitore==null)
  1679.             return;
  1680.        
  1681.         Soggetto soggettoFruitore = null;
  1682.         if( requestInfo!=null && requestInfo.getRequestConfig()!=null && idSoggettoFruitore!=null) {
  1683.             if( requestInfo.getRequestConfig().getSoggettoFruitoreConfig()!=null &&
  1684.                     idSoggettoFruitore.getTipo().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getTipo()) &&
  1685.                     idSoggettoFruitore.getNome().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getNome())   ) {
  1686.                 soggettoFruitore = requestInfo.getRequestConfig().getSoggettoFruitoreConfig();
  1687.             }
  1688.         }
  1689.         if(soggettoFruitore==null) {
  1690.             soggettoFruitore = this.configurazionePdD.getSoggetto(connectionPdD,idSoggettoFruitore);
  1691.         }
  1692.         setUrlPrefixRewriter(soggettoFruitore.getPdUrlPrefixRewriter(),"pdUrlPrefixRewriter", connettore);
  1693.     }
  1694.     protected void setPAUrlPrefixRewriter(Connection connectionPdD, org.openspcoop2.core.config.Connettore connettore, IDSoggetto idSoggettoErogatore, RequestInfo requestInfo) throws DriverConfigurazioneNotFound,DriverConfigurazioneException{
  1695.         if(idSoggettoErogatore==null)
  1696.             return;
  1697.        
  1698.         Soggetto soggettoErogatore = null;
  1699.         if( requestInfo!=null && requestInfo.getRequestConfig()!=null && idSoggettoErogatore!=null) {
  1700.             if(requestInfo.getRequestConfig().getSoggettoErogatoreConfig()!=null &&
  1701.                     idSoggettoErogatore.getTipo().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getTipo()) &&
  1702.                     idSoggettoErogatore.getNome().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getNome()) ) {
  1703.                 soggettoErogatore = requestInfo.getRequestConfig().getSoggettoErogatoreConfig();
  1704.             }
  1705.         }
  1706.         if(soggettoErogatore==null) {
  1707.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo()!=null) {
  1708.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig()!=null && idSoggettoErogatore!=null &&
  1709.                         idSoggettoErogatore.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getTipo()) &&
  1710.                         idSoggettoErogatore.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getNome())) {
  1711.                     soggettoErogatore = requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig();
  1712.                 }
  1713.             }
  1714.         }
  1715.         if(soggettoErogatore==null) {
  1716.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo()!=null) {
  1717.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig()!=null && idSoggettoErogatore!=null &&
  1718.                         idSoggettoErogatore.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getTipo()) &&
  1719.                         idSoggettoErogatore.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getNome())) {
  1720.                     soggettoErogatore = requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig();
  1721.                 }
  1722.             }
  1723.         }
  1724.         if(soggettoErogatore==null) {
  1725.             soggettoErogatore = this.configurazionePdD.getSoggetto(connectionPdD,idSoggettoErogatore);
  1726.         }
  1727.         setUrlPrefixRewriter(soggettoErogatore.getPaUrlPrefixRewriter(),"paUrlPrefixRewriter", connettore);
  1728.     }
  1729.     private void setUrlPrefixRewriter(String urlPrefix,String funzione,org.openspcoop2.core.config.Connettore connettore) throws DriverConfigurazioneNotFound,DriverConfigurazioneException{

  1730.         if( (urlPrefix!=null) && (!"".equals(urlPrefix)) ){
  1731.             // search location property
  1732.             for (int i = 0; i < connettore.sizePropertyList(); i++) {
  1733.                 Property cp = connettore.getProperty(i);
  1734.                 if(cp.getNome().equalsIgnoreCase(CostantiConnettori.CONNETTORE_LOCATION)){
  1735.                     String originale = cp.getValore();
  1736.                     cp.setValore(urlPrefixRewriter(funzione,originale, urlPrefix.trim()));
  1737.                     break;
  1738.                 }
  1739.             }

  1740.         }

  1741.     }
  1742.     private String urlPrefixRewriter(String funzione,String urlOriginale, String urlPrefix) throws DriverConfigurazioneException{

  1743.         try{

  1744.             String urlFinale = urlPrefix;

  1745.             String originale = urlOriginale;
  1746.             if(originale==null){
  1747.                 throw new DriverRegistroServiziException("["+funzione+"] Url originale non fornita");
  1748.             }
  1749.             originale = originale.trim();

  1750.             // Per evitare replace multipli (in caso di risultati cachati)
  1751.             if(originale.startsWith(urlPrefix)){
  1752.                 // replace gia' effettuato
  1753.                 return originale;
  1754.             }

  1755.             this.logDebug("["+funzione+"]  Originale["+originale+"] UrlPrefix["+urlPrefix+"] ...");

  1756.             String tmp = null;
  1757.             if(originale.contains("://")){
  1758.                 tmp = originale.substring(originale.indexOf("://")+3);
  1759.             }else{
  1760.                 return urlOriginale; // url prefix effettuato solo se definito un protocollo es. http://
  1761.             }

  1762.             this.logDebug("["+funzione+"]  eliminazioneProtocollo["+tmp+"] ...");

  1763.             if(tmp.contains("/")){
  1764.                 tmp = tmp.substring(tmp.indexOf("/")+1);
  1765.                 this.logDebug("["+funzione+"]  salvataggioContesto["+tmp+"] ...");
  1766.                 if(urlFinale.endsWith("/")==false){
  1767.                     urlFinale = urlFinale + "/";
  1768.                 }
  1769.                 urlFinale = urlFinale + tmp;
  1770.             }
  1771.             // else sostituisco completamente tutta la url, non avendo un contesto.

  1772.             this.logDebug("["+funzione+"]  nuova url: ["+urlFinale+"]");

  1773.             return urlFinale;

  1774.         }catch(Exception e){
  1775.             this.logError("Processo di ["+funzione+"]  fallito (urlOriginale:"+urlOriginale+") (urlPrefix:"+urlPrefix+")",e);
  1776.             throw new DriverConfigurazioneException("Processo di ["+funzione+"]  fallito (urlOriginale:"+urlOriginale+") (urlPrefix:"+urlPrefix+")",e);
  1777.         }
  1778.     }










  1779.     /* ********  PORTE DELEGATE (Interfaccia)  ******** */

  1780.     public IDPortaDelegata getIDPortaDelegata(Connection connectionPdD,String nome) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1781.         return this.configurazionePdD.getIDPortaDelegata(connectionPdD, nome);
  1782.     }

  1783.     protected PortaDelegata getPortaDelegata(Connection connectionPdD,IDPortaDelegata idPD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  1784.         return this.configurazionePdD.getPortaDelegata(connectionPdD,idPD);
  1785.     }

  1786.     protected PortaDelegata getPortaDelegataSafeMethod(Connection connectionPdD,IDPortaDelegata idPD)throws DriverConfigurazioneException{
  1787.         try{
  1788.             if(idPD!=null && idPD.getNome()!=null)
  1789.                 return this.getPortaDelegata(connectionPdD,idPD);
  1790.             else
  1791.                 return null;
  1792.         }catch(DriverConfigurazioneNotFound e){
  1793.             return null;
  1794.         }
  1795.     }

  1796.     protected void updateStatoPortaDelegata(Connection connectionPdD,IDPortaDelegata idPD, StatoFunzionalita stato) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1797.         this.configurazionePdD.updateStatoPortaDelegata(connectionPdD, idPD, stato);
  1798.     }
  1799.    
  1800.     protected Map<String, String> getProprietaConfigurazione(PortaDelegata pd) throws DriverConfigurazioneException {
  1801.         if (pd == null) {
  1802.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  1803.         } else if (pd.sizeProprietaList() <= 0) {
  1804.             return null;
  1805.         } else {
  1806.             Map<String, String> properties = new HashMap<>();

  1807.             for(int i = 0; i < pd.sizeProprietaList(); ++i) {
  1808.                 Proprieta p = pd.getProprieta(i);
  1809.                 properties.put(p.getNome(), p.getValore());
  1810.             }

  1811.             return properties;
  1812.         }
  1813.     }

  1814.     protected boolean identificazioneContentBased(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1815.         if(pd==null){
  1816.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  1817.         }
  1818.         if( pd.getAzione() != null  ){
  1819.             if(CostantiConfigurazione.PORTA_DELEGATA_AZIONE_CONTENT_BASED.equals(pd.getAzione().getIdentificazione())){
  1820.                 return true;
  1821.             }else{
  1822.                 return false;
  1823.             }
  1824.         }else
  1825.             return false;
  1826.     }

  1827.     protected boolean identificazioneInputBased(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1828.         if(pd==null){
  1829.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  1830.         }
  1831.         if( pd.getAzione() != null  ){
  1832.             if(CostantiConfigurazione.PORTA_DELEGATA_AZIONE_INPUT_BASED.equals(pd.getAzione().getIdentificazione())){
  1833.                 return true;
  1834.             }else{
  1835.                 return false;
  1836.             }
  1837.         }else
  1838.             return false;
  1839.     }

  1840.     protected String getAzione(RegistroServiziManager registroServiziManager,PortaDelegata pd,URLProtocolContext urlProtocolContext,RequestInfo requestInfo,
  1841.             OpenSPCoop2Message message, OpenSPCoop2MessageSoapStreamReader soapStreamReader, HeaderIntegrazione headerIntegrazione, boolean readFirstHeaderIntegrazione,
  1842.             IProtocolFactory<?> protocolFactory) throws DriverConfigurazioneException, IdentificazioneDinamicaException {

  1843.         try{

  1844.             if(pd==null){
  1845.                 throw new DriverConfigurazioneException("Porta Delegata non fornita");
  1846.             }
  1847.             IDSoggetto soggettoErogatore = new IDSoggetto(pd.getSoggettoErogatore().getTipo(),pd.getSoggettoErogatore().getNome());
  1848.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pd.getServizio().getTipo(),pd.getServizio().getNome(),
  1849.                     soggettoErogatore,
  1850.                     pd.getServizio().getVersione());

  1851.             String azioneHeaderIntegrazione = null;
  1852.             if(headerIntegrazione!=null && headerIntegrazione.getBusta()!=null && headerIntegrazione.getBusta().getAzione()!=null){
  1853.                 azioneHeaderIntegrazione = headerIntegrazione.getBusta().getAzione();
  1854.             }

  1855.             ModalitaIdentificazioneAzione modalitaIdentificazione = ModalitaIdentificazioneAzione.STATIC;
  1856.             String pattern = null;
  1857.             boolean forceRegistryBased = false;
  1858.             boolean forcePluginBased = false;
  1859.             if( pd.getAzione() != null  ){
  1860.                 idServizio.setAzione(pd.getAzione().getNome());
  1861.                 pattern = pd.getAzione().getPattern();
  1862.                 if( pd.getAzione().getIdentificazione() != null  ){
  1863.                     modalitaIdentificazione = ModalitaIdentificazioneAzione.convert(pd.getAzione().getIdentificazione());
  1864.                 }
  1865.                 forceRegistryBased = StatoFunzionalita.ABILITATO.equals(pd.getAzione().getForceInterfaceBased());
  1866.             }

  1867.             OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
  1868.            
  1869.             boolean bufferMessageReadOnly = op2Properties.isReadByPathBufferEnabled();
  1870.            
  1871.             boolean rpcAcceptRootElementUnqualified = OpenSPCoop2Properties.getInstance().isValidazioneContenutiApplicativiRpcAcceptRootElementUnqualified();
  1872.             if(pd!=null && pd.getProprietaList()!=null && !pd.getProprietaList().isEmpty()) {
  1873.                 boolean defaultRpcAcceptRootElementUnqualified = rpcAcceptRootElementUnqualified;
  1874.                 rpcAcceptRootElementUnqualified = ValidatoreMessaggiApplicativiRest.readBooleanValueWithDefault(pd.getProprietaList(), CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RPC_ACCEPT_ROOT_ELEMENT_UNQUALIFIED_ENABLED, defaultRpcAcceptRootElementUnqualified);
  1875.             }
  1876.            
  1877.             WSDLValidatorConfig config = new WSDLValidatorConfig();
  1878.             config.setRpcAcceptRootElementUnqualified(rpcAcceptRootElementUnqualified);
  1879.            
  1880.             String azione = OperationFinder.getAzione(registroServiziManager, urlProtocolContext, requestInfo, message, soapStreamReader, soggettoErogatore, idServizio,
  1881.                     readFirstHeaderIntegrazione, azioneHeaderIntegrazione, protocolFactory, modalitaIdentificazione,
  1882.                     pattern, forceRegistryBased, forcePluginBased, this.logger, false,
  1883.                     bufferMessageReadOnly,
  1884.                     headerIntegrazione!=null ? headerIntegrazione.getIdTransazione() : null,
  1885.                     config);

  1886.             // Se non ho riconosciuto una azione a questo punto,
  1887.             // durante il processo standard di riconoscimento viene sollevata una eccezione IdentificazioneDinamicaException

  1888.             return azione;

  1889.         }catch(IdentificazioneDinamicaException e){
  1890.             throw e;
  1891.         }
  1892.         catch(Exception e){
  1893.             throw new DriverConfigurazioneException(e.getMessage(),e);
  1894.         }

  1895.     }

  1896.     protected MTOMProcessorConfig getMTOMProcessorForSender(PortaDelegata pd) throws DriverConfigurazioneException{

  1897.         MTOMProcessorConfig config = new MTOMProcessorConfig();
  1898.         List<MtomXomPackageInfo> list = new ArrayList<MtomXomPackageInfo>();
  1899.         config.setInfo(list);

  1900.         if(pd == null)
  1901.             return config;

  1902.         MtomProcessor mtomProcessor = pd.getMtomProcessor();
  1903.         if(mtomProcessor == null)
  1904.             return config;

  1905.         if(mtomProcessor.getRequestFlow()!=null){
  1906.             MtomProcessorFlow mtomFlow = mtomProcessor.getRequestFlow();
  1907.             config.setMtomProcessorType(mtomFlow.getMode());
  1908.             for(int i=0 ; i<mtomFlow.sizeParameterList() ; i++){
  1909.                 String nome = mtomFlow.getParameter(i).getNome();
  1910.                 if(nome!=null){
  1911.                     MtomXomPackageInfo info = new MtomXomPackageInfo();
  1912.                     info.setName(nome);
  1913.                     info.setXpathExpression(mtomFlow.getParameter(i).getPattern());
  1914.                     info.setContentType(mtomFlow.getParameter(i).getContentType());
  1915.                     info.setRequired(mtomFlow.getParameter(i).getRequired());
  1916.                     list.add(info);
  1917.                 }
  1918.             }
  1919.         }

  1920.         return config;
  1921.     }

  1922.     protected MTOMProcessorConfig getMTOMProcessorForReceiver(PortaDelegata pd) throws DriverConfigurazioneException{

  1923.         MTOMProcessorConfig config = new MTOMProcessorConfig();
  1924.         List<MtomXomPackageInfo> list = new ArrayList<MtomXomPackageInfo>();
  1925.         config.setInfo(list);

  1926.         if(pd == null)
  1927.             return config;

  1928.         MtomProcessor mtomProcessor = pd.getMtomProcessor();
  1929.         if(mtomProcessor == null)
  1930.             return config;

  1931.         if(mtomProcessor.getResponseFlow()!=null){
  1932.             MtomProcessorFlow mtomFlow = mtomProcessor.getResponseFlow();
  1933.             config.setMtomProcessorType(mtomFlow.getMode());
  1934.             for(int i=0 ; i<mtomFlow.sizeParameterList() ; i++){
  1935.                 String nome = mtomFlow.getParameter(i).getNome();
  1936.                 if(nome!=null){
  1937.                     MtomXomPackageInfo info = new MtomXomPackageInfo();
  1938.                     info.setName(nome);
  1939.                     info.setXpathExpression(mtomFlow.getParameter(i).getPattern());
  1940.                     info.setContentType(mtomFlow.getParameter(i).getContentType());
  1941.                     info.setRequired(mtomFlow.getParameter(i).getRequired());
  1942.                     list.add(info);
  1943.                 }
  1944.             }
  1945.         }

  1946.         return config;
  1947.     }

  1948.     protected MessageSecurityConfig getMessageSecurityForSender(PortaDelegata pd) throws DriverConfigurazioneException{

  1949.         MessageSecurityConfig securityConfig = new MessageSecurityConfig();
  1950.         java.util.Map<String,Object> table = new java.util.HashMap<>();
  1951.         securityConfig.setFlowParameters(table);

  1952.         if(pd == null)
  1953.             return securityConfig;

  1954.         if(pd.getStatoMessageSecurity()!=null && CostantiConfigurazione.DISABILITATO.toString().equals(pd.getStatoMessageSecurity())){
  1955.             return securityConfig;
  1956.         }

  1957.         MessageSecurity messageSecurity = pd.getMessageSecurity();
  1958.         if(messageSecurity == null)
  1959.             return securityConfig;

  1960.         if(messageSecurity.getRequestFlow()!=null){
  1961.             MessageSecurityFlow securityFlow = messageSecurity.getRequestFlow();
  1962.             if(securityFlow.getApplyToMtom()!=null){
  1963.                 securityConfig.setApplyToMtom(StatoFunzionalita.ABILITATO.equals(securityFlow.getApplyToMtom()));
  1964.             }
  1965.             for(int i=0 ; i<securityFlow.sizeParameterList() ; i++){
  1966.                 String nome = securityFlow.getParameter(i).getNome();
  1967.                 if(nome!=null){
  1968.                     String valore = securityFlow.getParameter(i).getValore();
  1969.                     if("actor".equals(nome)){
  1970.                         // patch per header senza actor (dove non si vuole che venga assunto il default=openspcoop)
  1971.                         if(valore == null)
  1972.                             valore = "";
  1973.                         else if("notDefined".equals(valore)){
  1974.                             valore = "";
  1975.                         }
  1976.                     }
  1977.                     table.put(nome,valore);
  1978.                 }
  1979.             }
  1980.         }

  1981.         return securityConfig;
  1982.     }

  1983.     protected MessageSecurityConfig getMessageSecurityForReceiver(PortaDelegata pd) throws DriverConfigurazioneException{

  1984.         MessageSecurityConfig securityConfig = new MessageSecurityConfig();
  1985.         java.util.Map<String,Object> table = new java.util.HashMap<>();
  1986.         securityConfig.setFlowParameters(table);

  1987.         if(pd == null)
  1988.             return securityConfig;

  1989.         if(pd.getStatoMessageSecurity()!=null && CostantiConfigurazione.DISABILITATO.toString().equals(pd.getStatoMessageSecurity())){
  1990.             return securityConfig;
  1991.         }

  1992.         MessageSecurity messageSecurity = pd.getMessageSecurity();
  1993.         if(messageSecurity == null)
  1994.             return securityConfig;

  1995.         if(messageSecurity.getResponseFlow()!=null){
  1996.             MessageSecurityFlow securityFlow = messageSecurity.getResponseFlow();
  1997.             if(securityFlow.getApplyToMtom()!=null){
  1998.                 securityConfig.setApplyToMtom(StatoFunzionalita.ABILITATO.equals(securityFlow.getApplyToMtom()));
  1999.             }
  2000.             for(int i=0 ; i<securityFlow.sizeParameterList() ; i++){
  2001.                 String nome = securityFlow.getParameter(i).getNome();
  2002.                 if(nome!=null){
  2003.                     String valore = securityFlow.getParameter(i).getValore();
  2004.                     if("actor".equals(nome)){
  2005.                         // patch per header senza actor (dove non si vuole che venga assunto il default=openspcoop)
  2006.                         if(valore == null)
  2007.                             valore = "";
  2008.                         else if("notDefined".equals(valore)){
  2009.                             valore = "";
  2010.                         }
  2011.                     }
  2012.                     table.put(nome,valore);
  2013.                 }
  2014.             }
  2015.         }

  2016.         return securityConfig;
  2017.     }

  2018.     protected String getAutenticazione(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2019.         if(pd==null){
  2020.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2021.         }

  2022.         if(pd.getAutenticazione() == null || "".equals(pd.getAutenticazione()))
  2023.             return CostantiConfigurazione.CREDENZIALE_SSL.toString();
  2024.         else
  2025.             return pd.getAutenticazione();
  2026.     }

  2027.     protected boolean isAutenticazioneOpzionale(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2028.         if(pd==null){
  2029.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2030.         }

  2031.         if(pd.getAutenticazioneOpzionale() == null)
  2032.             return false;
  2033.         else{
  2034.             if(StatoFunzionalita.ABILITATO.equals(pd.getAutenticazioneOpzionale())){
  2035.                 return true;
  2036.             }
  2037.             else if(StatoFunzionalita.DISABILITATO.equals(pd.getAutenticazioneOpzionale())){
  2038.                 return false;
  2039.             }
  2040.             else{
  2041.                 return false;
  2042.             }
  2043.         }

  2044.     }

  2045.     protected String getGestioneToken(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2046.         if(pd==null){
  2047.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2048.         }

  2049.         if(pd.getGestioneToken()!=null && pd.getGestioneToken().getPolicy()!=null) {
  2050.             return pd.getGestioneToken().getPolicy();
  2051.         }
  2052.         return null;
  2053.     }

  2054.     protected PolicyGestioneToken getPolicyGestioneToken(Connection connectionPdD, PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2055.         if(pd==null){
  2056.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2057.         }

  2058.         if(pd.getGestioneToken()==null || pd.getGestioneToken().getPolicy()==null) {
  2059.             throw new DriverConfigurazioneException("Porta Delegata senza una policy di gestione token");
  2060.         }

  2061.         GenericProperties gp = this.getGenericProperties(connectionPdD, org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA, pd.getGestioneToken().getPolicy());

  2062.         PolicyGestioneToken policy = null;
  2063.         try {
  2064.             policy = TokenUtilities.convertTo(gp, pd.getGestioneToken());
  2065.         }catch(Exception e) {
  2066.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2067.         }

  2068.         return policy;
  2069.     }

  2070.     protected String getAutorizzazione(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2071.         if(pd==null){
  2072.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2073.         }

  2074.         if(pd.getAutorizzazione() == null || "".equals(pd.getAutorizzazione()) )
  2075.             return CostantiConfigurazione.AUTORIZZAZIONE_AUTHENTICATED;
  2076.         else
  2077.             return pd.getAutorizzazione();
  2078.     }

  2079.     protected String getAutorizzazioneContenuto(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2080.         if(pd==null){
  2081.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2082.         }

  2083.         if(pd.getAutorizzazioneContenuto() == null || "".equals(pd.getAutorizzazioneContenuto()))
  2084.             return CostantiConfigurazione.NONE;
  2085.         else
  2086.             return pd.getAutorizzazioneContenuto();
  2087.     }

  2088.     public CorsConfigurazione getConfigurazioneCORS(Connection connectionPdD, PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2089.         if(pd==null){
  2090.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2091.         }

  2092.         CorsConfigurazione cors = pd.getGestioneCors();
  2093.         if(cors==null) {
  2094.             cors = this.getConfigurazioneCORS(connectionPdD);
  2095.         }
  2096.         return cors;
  2097.     }

  2098.     public ResponseCachingConfigurazione getConfigurazioneResponseCaching(Connection connectionPdD, PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2099.         if(pd==null){
  2100.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2101.         }

  2102.         ResponseCachingConfigurazione c = pd.getResponseCaching();
  2103.         if(c==null) {
  2104.             c = this.getConfigurazioneResponseCaching(connectionPdD);
  2105.         }
  2106.         return c;
  2107.     }

  2108.     protected boolean ricevutaAsincronaSimmetricaAbilitata(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2109.         if(pd==null)
  2110.             return true; // default Abilitata-CNIPA
  2111.         return !CostantiConfigurazione.DISABILITATO.equals(pd.getRicevutaAsincronaSimmetrica());
  2112.     }

  2113.     protected boolean ricevutaAsincronaAsimmetricaAbilitata(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2114.         if(pd==null)
  2115.             return true; // default Abilitata-CNIPA
  2116.         return !CostantiConfigurazione.DISABILITATO.equals(pd.getRicevutaAsincronaAsimmetrica());
  2117.     }

  2118.     protected ValidazioneContenutiApplicativi getTipoValidazioneContenutoApplicativo(Connection connectionPdD, PortaDelegata pd,String implementazionePdDSoggetto, boolean request) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2119.         // default in configurazione
  2120.         ValidazioneContenutiApplicativi val = this.getTipoValidazioneContenutoApplicativo(connectionPdD,implementazionePdDSoggetto);

  2121.         if( pd==null || pd.getValidazioneContenutiApplicativi() == null ){
  2122.             return val;
  2123.         }

  2124.         ValidazioneContenutiApplicativi valPD = new ValidazioneContenutiApplicativi();

  2125.         if( CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.equals(pd.getValidazioneContenutiApplicativi().getStato())  )
  2126.             valPD.setStato(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO);
  2127.         else if( CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(pd.getValidazioneContenutiApplicativi().getStato())  )
  2128.             valPD.setStato(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY);
  2129.         else if( CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.equals(pd.getValidazioneContenutiApplicativi().getStato())  )
  2130.             valPD.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);

  2131.         if( CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(pd.getValidazioneContenutiApplicativi().getTipo())  )
  2132.             valPD.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP);
  2133.         else if( CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(pd.getValidazioneContenutiApplicativi().getTipo())  )
  2134.             valPD.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE);
  2135.         else if( CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.equals(pd.getValidazioneContenutiApplicativi().getTipo())  )
  2136.             valPD.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);

  2137.         if( CostantiConfigurazione.ABILITATO.equals(pd.getValidazioneContenutiApplicativi().getAcceptMtomMessage())  )
  2138.             valPD.setAcceptMtomMessage(CostantiConfigurazione.ABILITATO);
  2139.         else if( CostantiConfigurazione.DISABILITATO.equals(pd.getValidazioneContenutiApplicativi().getAcceptMtomMessage())  )
  2140.             valPD.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);

  2141.         refreshByProperties(pd.getProprietaList(), request, valPD);
  2142.            
  2143.         return valPD;
  2144.     }
  2145.    
  2146.     private void refreshByProperties(List<Proprieta> list, boolean request, ValidazioneContenutiApplicativi val) {
  2147.         if(list!=null && !list.isEmpty()) {
  2148.             String pName = request? CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RICHIESTA_ENABLED : CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RISPOSTA_ENABLED;
  2149.             String pNameType = request? CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RICHIESTA_TIPO : CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RISPOSTA_TIPO;
  2150.             String pNameMtom = request? CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RICHIESTA_ACCEPT_MTOM_MESSAGE : CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RISPOSTA_ACCEPT_MTOM_MESSAGE;
  2151.             for (Proprieta p : list) {
  2152.                 if(pName.equals(p.getNome())) {
  2153.                     if(CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_VALUE_ENABLED.equals(p.getValore())) {
  2154.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO);
  2155.                     }
  2156.                     else if(CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_VALUE_DISABLED.equals(p.getValore())) {
  2157.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);
  2158.                     }
  2159.                     else if(CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_VALUE_WARNING_ONLY.equals(p.getValore())) {
  2160.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY);
  2161.                     }
  2162.                 }
  2163.                 else if(pNameType.equals(p.getNome())) {
  2164.                     if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(p.getValore())) {
  2165.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP);
  2166.                     }
  2167.                     else if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(p.getValore())) {
  2168.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE);
  2169.                     }
  2170.                     else if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.equals(p.getValore())) {
  2171.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);
  2172.                     }
  2173.                 }
  2174.                 else if(pNameMtom.equals(p.getNome())) {
  2175.                     if(CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_VALUE_ENABLED.equals(p.getValore())) {
  2176.                         val.setAcceptMtomMessage(CostantiConfigurazione.ABILITATO);
  2177.                     }
  2178.                     else if(CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_VALUE_DISABLED.equals(p.getValore())) {
  2179.                         val.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);
  2180.                     }
  2181.                 }
  2182.             }
  2183.         }
  2184.     }

  2185.     protected CorrelazioneApplicativa getCorrelazioneApplicativa(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2186.         if(pd==null){
  2187.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2188.         }
  2189.         return pd.getCorrelazioneApplicativa();

  2190.     }

  2191.     protected CorrelazioneApplicativaRisposta getCorrelazioneApplicativaRisposta(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2192.         if(pd==null){
  2193.             throw new DriverConfigurazioneException("Porta Delegata non fornita");
  2194.         }
  2195.         return pd.getCorrelazioneApplicativaRisposta();

  2196.     }

  2197.     protected String[] getTipiIntegrazione(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2198.         String[]tipi = null;
  2199.         if(pd!=null){
  2200.             if(pd.getIntegrazione() != null && ("".equals(pd.getIntegrazione())==false) ){
  2201.                 tipi = pd.getIntegrazione().trim().split(",");
  2202.             }
  2203.         }  

  2204.         return tipi;
  2205.     }

  2206.     protected boolean isGestioneManifestAttachments(Connection connectionPdD, PortaDelegata pd, IProtocolFactory<?> protocolFactory) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2207.         if(pd==null){
  2208.             try{
  2209.                 if(protocolFactory.createProtocolConfiguration().isSupportato(ServiceBinding.SOAP,FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)){
  2210.                     // Bug: 286: devo usare il default della configurazione SOLO SE il protocollo lo supporta.
  2211.                     return this.isGestioneManifestAttachments(connectionPdD); //configurazione di default
  2212.                 }
  2213.                 else{
  2214.                     return false;
  2215.                 }
  2216.             }catch(Exception e){
  2217.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  2218.             }
  2219.         }
  2220.         if( CostantiConfigurazione.ABILITATO.equals(pd.getGestioneManifest())  ){
  2221.             return true;
  2222.         }else if( CostantiConfigurazione.DISABILITATO.equals(pd.getGestioneManifest())  ){
  2223.             return false;
  2224.         }else{
  2225.             try{
  2226.                 if(protocolFactory.createProtocolConfiguration().isSupportato(ServiceBinding.SOAP,FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)){
  2227.                     // Bug: 286: devo usare il default della configurazione SOLO SE il protocollo lo supporta.
  2228.                     return this.isGestioneManifestAttachments(connectionPdD); //configurazione di default
  2229.                 }
  2230.                 else{
  2231.                     return false;
  2232.                 }
  2233.             }catch(Exception e){
  2234.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  2235.             }
  2236.         }
  2237.     }

  2238.     protected boolean isAllegaBody(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2239.         if(pd==null){
  2240.             return false; //configurazione di default
  2241.         }
  2242.         if( CostantiConfigurazione.ABILITATO.equals(pd.getAllegaBody())  )
  2243.             return true;
  2244.         else if( CostantiConfigurazione.DISABILITATO.equals(pd.getAllegaBody())  )
  2245.             return false;
  2246.         else
  2247.             return false; //configurazione di default
  2248.     }

  2249.     protected boolean isScartaBody(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2250.         if(pd==null){
  2251.             return false; //configurazione di default
  2252.         }
  2253.         if( CostantiConfigurazione.ABILITATO.equals(pd.getScartaBody())  )
  2254.             return true;
  2255.         else if( CostantiConfigurazione.DISABILITATO.equals(pd.getScartaBody())  )
  2256.             return false;
  2257.         else
  2258.             return false; //configurazione di default
  2259.     }

  2260.     protected boolean isModalitaStateless(PortaDelegata pd, ProfiloDiCollaborazione profiloCollaborazione) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2261.         if(this.serverJ2EE==false){
  2262.             // Stateless obbligatorio in server di tipo web (non j2ee)
  2263.             return true;
  2264.         }

  2265.         if(pd==null){
  2266.             // configurazione di default
  2267.             if(ProfiloDiCollaborazione.ONEWAY.equals(profiloCollaborazione))
  2268.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessOneWay());
  2269.             else if(ProfiloDiCollaborazione.SINCRONO.equals(profiloCollaborazione))
  2270.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessSincrono());
  2271.             else
  2272.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessAsincroni());
  2273.         }

  2274.         if( CostantiConfigurazione.ABILITATO.equals(pd.getStateless())  )
  2275.             return true;
  2276.         else if( CostantiConfigurazione.DISABILITATO.equals(pd.getStateless())  )
  2277.             return false;
  2278.         else {
  2279.             //configurazione di default
  2280.             if(ProfiloDiCollaborazione.ONEWAY.equals(profiloCollaborazione))
  2281.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessOneWay());
  2282.             else if(ProfiloDiCollaborazione.SINCRONO.equals(profiloCollaborazione))
  2283.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessSincrono());
  2284.             else
  2285.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessAsincroni());
  2286.         }
  2287.     }

  2288.     protected boolean isLocalForwardMode(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2289.         if(pd==null || pd.getLocalForward()==null){
  2290.             // configurazione di default
  2291.             return false;
  2292.         }

  2293.         if( CostantiConfigurazione.ABILITATO.equals(pd.getLocalForward().getStato())  )
  2294.             return true;
  2295.         else if( CostantiConfigurazione.DISABILITATO.equals(pd.getLocalForward().getStato())  )
  2296.             return false;
  2297.         else {
  2298.             //configurazione di default
  2299.             return false;
  2300.         }
  2301.     }

  2302.     protected String getLocalForwardNomePortaApplicativa(PortaDelegata pd) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2303.         if(pd==null || pd.getLocalForward()==null){
  2304.             // configurazione di default
  2305.             return null;
  2306.         }

  2307.         return pd.getLocalForward().getPortaApplicativa();
  2308.     }

  2309.     protected boolean isPortaAbilitata(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  2310.         if(pd==null){
  2311.             //configurazione di default
  2312.             return true;
  2313.         }

  2314.         if( CostantiConfigurazione.ABILITATO.equals(pd.getStato())  )
  2315.             return true;
  2316.         else if( CostantiConfigurazione.DISABILITATO.equals(pd.getStato())  )
  2317.             return false;
  2318.         else {
  2319.             //configurazione di default
  2320.             return true;
  2321.         }
  2322.     }

  2323.     protected DumpConfigurazione getDumpConfigurazione(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2324.         if(pd==null){
  2325.             //configurazione di default
  2326.             return getDumpConfigurazionePortaDelegata(connectionPdD);
  2327.         }

  2328.         if(pd.getDump()!=null) {
  2329.             return pd.getDump();
  2330.         }
  2331.         else {
  2332.             //configurazione di default
  2333.             return getDumpConfigurazionePortaDelegata(connectionPdD);
  2334.         }
  2335.     }
  2336.    
  2337.     protected boolean isTransazioniFileTraceEnabled(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2338.        
  2339.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceEnabled();
  2340.         if(pd==null){
  2341.             //configurazione di default
  2342.             return defaultValue;
  2343.         }
  2344.         try {
  2345.             return CostantiProprieta.isFileTraceEnabled(pd.getProprietaList(), defaultValue);
  2346.         }catch(Exception e) {
  2347.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2348.         }

  2349.     }
  2350.    
  2351.     protected boolean isTransazioniFileTraceDumpBinarioHeadersEnabled(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2352.        
  2353.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDHeadersEnabled();
  2354.         if(pd==null){
  2355.             //configurazione di default
  2356.             return defaultValue;
  2357.         }
  2358.         try {
  2359.             return CostantiProprieta.isFileTraceDumpBinarioHeadersEnabled(pd.getProprietaList(), defaultValue);
  2360.         }catch(Exception e) {
  2361.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2362.         }

  2363.     }
  2364.     protected boolean isTransazioniFileTraceDumpBinarioPayloadEnabled(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2365.        
  2366.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDPayloadEnabled();
  2367.         if(pd==null){
  2368.             //configurazione di default
  2369.             return defaultValue;
  2370.         }
  2371.         try {
  2372.             return CostantiProprieta.isFileTraceDumpBinarioPayloadEnabled(pd.getProprietaList(), defaultValue);
  2373.         }catch(Exception e) {
  2374.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2375.         }

  2376.     }
  2377.    
  2378.     protected boolean isTransazioniFileTraceDumpBinarioConnettoreHeadersEnabled(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2379.    
  2380.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDConnettoreEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDConnettoreHeadersEnabled();
  2381.         if(pd==null){
  2382.             //configurazione di default
  2383.             return defaultValue;
  2384.         }
  2385.         try {
  2386.             return CostantiProprieta.isFileTraceDumpBinarioConnettoreHeadersEnabled(pd.getProprietaList(), defaultValue);
  2387.         }catch(Exception e) {
  2388.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2389.         }

  2390.     }
  2391.     protected boolean isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2392.        
  2393.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDConnettoreEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPDConnettorePayloadEnabled();
  2394.         if(pd==null){
  2395.             //configurazione di default
  2396.             return defaultValue;
  2397.         }
  2398.         try {
  2399.             return CostantiProprieta.isFileTraceDumpBinarioConnettorePayloadEnabled(pd.getProprietaList(), defaultValue);
  2400.         }catch(Exception e) {
  2401.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2402.         }

  2403.     }
  2404.    
  2405.     protected File getFileTraceConfig(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{

  2406.         try {
  2407.             File defaultValue = this.openspcoopProperties.getTransazioniFileTraceConfig();
  2408.             if(pd==null){
  2409.                 //configurazione di default
  2410.                 return defaultValue;
  2411.             }
  2412.             return CostantiProprieta.getFileTraceConfig(pd.getProprietaList(), defaultValue);
  2413.         }catch(Exception e) {
  2414.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2415.         }

  2416.     }
  2417.    
  2418.     protected SoglieDimensioneMessaggi getSoglieLimitedInputStream(Connection connectionPdD,PortaDelegata pd, String azione, String idModulo,
  2419.             PdDContext pddContext, RequestInfo requestInfo,
  2420.             IProtocolFactory<?> protocolFactory, Logger log) throws DriverConfigurazioneException{
  2421.        
  2422.         if(!this.openspcoopProperties.isControlloTrafficoEnabled()){
  2423.             return null;
  2424.         }
  2425.        
  2426.         URLProtocolContext urlProtocolContext = null;
  2427.         if(requestInfo!=null) {
  2428.             urlProtocolContext = requestInfo.getProtocolContext();
  2429.         }
  2430.        
  2431.         TipoPdD tipoPdD = null;
  2432.         String nomePorta = null;
  2433.         IDSoggetto idDominio = null;
  2434.         IDSoggetto soggettoFruitore = null;
  2435.         IDServizio idServizio = null;
  2436.         IDPortaDelegata idPD = null;
  2437.         IDPortaApplicativa idPA = null;
  2438.         if(pd!=null) {
  2439.             tipoPdD = TipoPdD.DELEGATA;
  2440.             nomePorta = pd.getNome();
  2441.             idDominio = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  2442.             soggettoFruitore = idDominio;
  2443.             try {
  2444.                 idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pd.getServizio().getTipo(), pd.getServizio().getNome(),
  2445.                         pd.getSoggettoErogatore().getTipo(), pd.getSoggettoErogatore().getNome(),
  2446.                         pd.getServizio().getVersione());
  2447.                 idServizio.setAzione(azione);
  2448.             }catch(Exception e) {
  2449.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  2450.             }
  2451.             idPD = new IDPortaDelegata();
  2452.             idPD.setNome(nomePorta);
  2453.         }
  2454.         else {
  2455.             idDominio = OpenSPCoop2Properties.getInstance().getIdentitaPortaDefault(protocolFactory!=null ? protocolFactory.getProtocol() : null, requestInfo);
  2456.         }
  2457.          
  2458.         IState state = null;
  2459.         IDAccordo idAccordo = null; // viene calcolato all'interno del metodo
  2460.         String servizioApplicativoFruitore = null;
  2461.         List<String> serviziApplicativiErogatori = null;
  2462.         try {
  2463.             DatiTransazione datiTransazione = InterceptorPolicyUtilities.readDatiTransazione(tipoPdD, idModulo,
  2464.                     pddContext, urlProtocolContext,
  2465.                     protocolFactory, state, log,
  2466.                     idDominio, soggettoFruitore, idServizio, idAccordo,
  2467.                     idPD, idPA,
  2468.                     servizioApplicativoFruitore, serviziApplicativiErogatori);
  2469.             return DimensioneMessaggiConfigurationUtils.readSoglieDimensioneMessaggi(tipoPdD, nomePorta, datiTransazione, log, urlProtocolContext, requestInfo, pddContext, protocolFactory);
  2470.         }catch(Exception e) {
  2471.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2472.         }
  2473.     }
  2474.    
  2475.     protected boolean isConnettoriUseTimeoutInputStream(Connection connectionPdD,PortaDelegata pd) throws DriverConfigurazioneException{
  2476.        
  2477.         boolean defaultValue = this.openspcoopProperties.isConnettoriUseTimeoutInputStream();
  2478.         if(pd==null){
  2479.             //configurazione di default
  2480.             return defaultValue;
  2481.         }
  2482.         try {
  2483.             return CostantiProprieta.isConnettoriUseTimeoutInputStream(pd.getProprietaList(), defaultValue);
  2484.         }catch(Exception e) {
  2485.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2486.         }

  2487.     }
  2488.     protected SogliaReadTimeout getRequestReadTimeout(PortaDelegata pd,
  2489.             RequestInfo requestInfo,
  2490.             IProtocolFactory<?> protocolFactory,
  2491.             Context context,
  2492.             IState state) throws DriverConfigurazioneException{

  2493.         int defaultValue = this.openspcoopProperties.getReadConnectionTimeout_ricezioneContenutiApplicativi();
  2494.         if(pd==null){
  2495.             //configurazione di default
  2496.             return ReadTimeoutConfigurationUtils.buildSogliaRequestTimeout(defaultValue, true, protocolFactory);
  2497.         }
  2498.         try {
  2499.             boolean configurazioneGlobale = !CostantiProprieta.existsConnettoriRequestTimeout(pd.getProprietaList());
  2500.             int sogliaMs = defaultValue;
  2501.             if(!configurazioneGlobale) {
  2502.                 sogliaMs = CostantiProprieta.getConnettoriRequestTimeout(pd.getProprietaList(), defaultValue);
  2503.             }
  2504.             return ReadTimeoutConfigurationUtils.buildSogliaRequestTimeout(sogliaMs, configurazioneGlobale, pd,
  2505.                     new ReadTimeoutContextParam(requestInfo, protocolFactory, context, state));
  2506.         }catch(Exception e) {
  2507.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2508.         }

  2509.     }

  2510.     protected Trasformazioni getTrasformazioni(PortaDelegata pd) throws DriverConfigurazioneException{
  2511.         if(pd!=null && pd.getTrasformazioni()!=null) {
  2512.             return pd.getTrasformazioni();
  2513.         }
  2514.         return null;
  2515.     }
  2516.    
  2517.     protected List<String> getPreInRequestHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2518.         List<String> list = new ArrayList<>();
  2519.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2520.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2521.             if(confPorta.getRequest()!=null) {
  2522.                 fillListHandlers(confPorta.getRequest().getPreInList(), list);
  2523.             }
  2524.         }
  2525.         return list;
  2526.     }
  2527.     protected List<String> getInRequestHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2528.         List<String> list = new ArrayList<>();
  2529.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2530.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2531.             if(confPorta.getRequest()!=null) {
  2532.                 fillListHandlers(confPorta.getRequest().getInList(), list);
  2533.             }
  2534.         }
  2535.         return list;
  2536.     }
  2537.     protected List<String> getInRequestProtocolHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2538.         List<String> list = new ArrayList<>();
  2539.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2540.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2541.             if(confPorta.getRequest()!=null) {
  2542.                 fillListHandlers(confPorta.getRequest().getInProtocolInfoList(), list);
  2543.             }
  2544.         }
  2545.         return list;
  2546.     }
  2547.     protected List<String> getOutRequestHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2548.         List<String> list = new ArrayList<>();
  2549.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2550.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2551.             if(confPorta.getRequest()!=null) {
  2552.                 fillListHandlers(confPorta.getRequest().getOutList(), list);
  2553.             }
  2554.         }
  2555.         return list;
  2556.     }
  2557.     protected List<String> getPostOutRequestHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2558.         List<String> list = new ArrayList<>();
  2559.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2560.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2561.             if(confPorta.getRequest()!=null) {
  2562.                 fillListHandlers(confPorta.getRequest().getPostOutList(), list);
  2563.             }
  2564.         }
  2565.         return list;
  2566.     }
  2567.     protected List<String> getPreInResponseHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2568.         List<String> list = new ArrayList<>();
  2569.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2570.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2571.             if(confPorta.getResponse()!=null) {
  2572.                 fillListHandlers(confPorta.getResponse().getPreInList(), list);
  2573.             }
  2574.         }
  2575.         return list;
  2576.     }
  2577.     protected List<String> getInResponseHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2578.         List<String> list = new ArrayList<>();
  2579.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2580.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2581.             if(confPorta.getResponse()!=null) {
  2582.                 fillListHandlers(confPorta.getResponse().getInList(), list);
  2583.             }
  2584.         }
  2585.         return list;
  2586.     }
  2587.     protected List<String> getOutResponseHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2588.         List<String> list = new ArrayList<>();
  2589.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2590.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2591.             if(confPorta.getResponse()!=null) {
  2592.                 fillListHandlers(confPorta.getResponse().getOutList(), list);
  2593.             }
  2594.         }
  2595.         return list;
  2596.     }
  2597.     protected List<String> getPostOutResponseHandlers(PortaDelegata pd) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2598.         List<String> list = new ArrayList<>();
  2599.         if(pd!=null && pd.getConfigurazioneHandler()!=null) {
  2600.             ConfigurazionePortaHandler confPorta = pd.getConfigurazioneHandler();
  2601.             if(confPorta.getResponse()!=null) {
  2602.                 fillListHandlers(confPorta.getResponse().getPostOutList(), list);
  2603.             }
  2604.         }
  2605.         return list;
  2606.     }

  2607.     protected List<Object> getExtendedInfo(PortaDelegata pd)throws DriverConfigurazioneException{

  2608.         if(pd == null || pd.sizeExtendedInfoList()<=0)
  2609.             return null;

  2610.         return pd.getExtendedInfoList();
  2611.     }

  2612.     protected Template getTemplateTrasformazioneRichiesta(Connection connectionPdD,IDPortaDelegata idPD, String nomeTrasformazione, TrasformazioneRegolaRichiesta richiesta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2613.         return this.configurazionePdD.getTemplateTrasformazioneRichiesta(connectionPdD, idPD, nomeTrasformazione, richiesta, requestInfo);
  2614.     }
  2615.     protected Template getTemplateTrasformazioneSoapRichiesta(Connection connectionPdD,IDPortaDelegata idPD, String nomeTrasformazione, TrasformazioneRegolaRichiesta richiesta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2616.         return this.configurazionePdD.getTemplateTrasformazioneSoapRichiesta(connectionPdD, idPD, nomeTrasformazione, richiesta, requestInfo);
  2617.     }
  2618.     protected Template getTemplateTrasformazioneRisposta(Connection connectionPdD,IDPortaDelegata idPD, String nomeTrasformazione, TrasformazioneRegolaRisposta risposta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2619.         return this.configurazionePdD.getTemplateTrasformazioneRisposta(connectionPdD, idPD, nomeTrasformazione, risposta, requestInfo);
  2620.     }
  2621.     protected Template getTemplateTrasformazioneSoapRisposta(Connection connectionPdD,IDPortaDelegata idPD, String nomeTrasformazione, TrasformazioneRegolaRisposta risposta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2622.         return this.configurazionePdD.getTemplateTrasformazioneSoapRisposta(connectionPdD, idPD, nomeTrasformazione, risposta, requestInfo);
  2623.     }
  2624.    
  2625.     public Template getTemplateCorrelazioneApplicativaRichiesta(Connection connectionPdD,IDPortaDelegata idPD, String nomeRegola, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2626.         return this.configurazionePdD.getTemplateCorrelazioneApplicativaRichiesta(connectionPdD, idPD, nomeRegola, template, requestInfo);
  2627.     }
  2628.     public Template getTemplateCorrelazioneApplicativaRisposta(Connection connectionPdD,IDPortaDelegata idPD, String nomeRegola, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2629.         return this.configurazionePdD.getTemplateCorrelazioneApplicativaRisposta(connectionPdD, idPD, nomeRegola, template, requestInfo);
  2630.     }
  2631.    
  2632.     protected Template getTemplateIntegrazione(Connection connectionPdD,IDPortaDelegata idPD, File file, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2633.         return this.configurazionePdD.getTemplateIntegrazione(connectionPdD, idPD, file, requestInfo);
  2634.     }











  2635.     /* ********  PORTE APPLICATIVE  (Interfaccia) ******** */

  2636.     public IDPortaApplicativa getIDPortaApplicativa(Connection connectionPdD,String nome) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2637.         return this.configurazionePdD.getIDPortaApplicativa(connectionPdD, nome);
  2638.     }

  2639.     protected Map<IDSoggetto,PortaApplicativa> getPorteApplicativeSoggettiVirtuali(Connection connectionPdD,IDServizio idServizio)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2640.         return this.configurazionePdD.getPorteApplicativeSoggettiVirtuali(connectionPdD,idServizio,null,false);
  2641.     }

  2642.     protected boolean existsPA(Connection connectionPdD,RichiestaApplicativa richiestaApplicativa) throws DriverConfigurazioneException{    

  2643.         // Se non c'e' un servizio non puo' esistere una porta applicativa
  2644.         if(richiestaApplicativa.getIDServizio()==null)
  2645.             return false;
  2646.         if( (richiestaApplicativa.getIDServizio().getNome()==null) ||
  2647.                 (richiestaApplicativa.getIDServizio().getTipo()==null) ||
  2648.                 (richiestaApplicativa.getIDServizio().getVersione()==null)  )
  2649.             return false;

  2650.         if( isSoggettoVirtuale(connectionPdD,richiestaApplicativa.getIDServizio().getSoggettoErogatore())  ){
  2651.             Map<IDSoggetto,PortaApplicativa> paConSoggetti = null;
  2652.             try{
  2653.                 paConSoggetti = this.configurazionePdD.getPorteApplicativeSoggettiVirtuali(connectionPdD,richiestaApplicativa.getIDServizio(),richiestaApplicativa.getFiltroProprietaPorteApplicative(),true);
  2654.             }catch(DriverConfigurazioneNotFound e){
  2655.                 return false;
  2656.             }
  2657.             if( paConSoggetti!=null && paConSoggetti.size()>0)
  2658.                 return true;
  2659.             else
  2660.                 return false;
  2661.         }else{
  2662.             PortaApplicativa pa = null;
  2663.             try{
  2664.                 IDPortaApplicativa idPA = richiestaApplicativa.getIdPortaApplicativa();
  2665.                 if(idPA==null){
  2666.                     return false;
  2667.                 }
  2668.                 pa = this.configurazionePdD.getPortaApplicativa(connectionPdD,idPA);
  2669.             }catch(DriverConfigurazioneNotFound e){
  2670.                 return false;
  2671.             }
  2672.             return pa!=null;
  2673.         }
  2674.     }

  2675.     protected PortaApplicativa getPortaApplicativa(Connection connectionPdD,IDPortaApplicativa idPA) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2676.         if(idPA==null){
  2677.             throw new DriverConfigurazioneException("[getPortaApplicativa]: Parametro non definito (idPA is null)");
  2678.         }
  2679.         return this.configurazionePdD.getPortaApplicativa(connectionPdD,idPA);
  2680.     }

  2681.     protected PortaApplicativa getPortaApplicativaSafeMethod(Connection connectionPdD,IDPortaApplicativa idPA)throws DriverConfigurazioneException{
  2682.         try{
  2683.             if(idPA!=null && idPA.getNome()!=null)
  2684.                 return this.getPortaApplicativa(connectionPdD,idPA);
  2685.             else
  2686.                 return null;
  2687.         }catch(DriverConfigurazioneNotFound e){
  2688.             return null;
  2689.         }
  2690.     }

  2691.     protected void updateStatoPortaApplicativa(Connection connectionPdD,IDPortaApplicativa idPA, StatoFunzionalita stato) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2692.         this.configurazionePdD.updateStatoPortaApplicativa(connectionPdD, idPA, stato);
  2693.     }
  2694.    
  2695.     protected String updateStatoConnettoreMultiplo(Connection connectionPdD,IDPortaApplicativa idPA, String nomeConnettore, StatoFunzionalita stato) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2696.         return this.configurazionePdD.updateStatoConnettoreMultiplo(connectionPdD, idPA, nomeConnettore, stato);
  2697.     }
  2698.     protected String updateStatoConnettoreMultiplo(Connection connectionPdD,IDPortaApplicativa idPA, String nomeConnettore, String user, StatoFunzionalita stato) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2699.         return this.configurazionePdD.updateStatoConnettoreMultiplo(connectionPdD, idPA, nomeConnettore, user, stato);
  2700.     }
  2701.    
  2702.     protected String updateSchedulingConnettoreMultiplo(Connection connectionPdD,IDPortaApplicativa idPA, String nomeConnettore, StatoFunzionalita stato) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2703.         return this.configurazionePdD.updateSchedulingConnettoreMultiplo(connectionPdD, idPA, nomeConnettore, stato);
  2704.     }
  2705.     protected String updateSchedulingConnettoreMultiplo(Connection connectionPdD,IDPortaApplicativa idPA, String nomeConnettore, String user, StatoFunzionalita stato) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2706.         return this.configurazionePdD.updateSchedulingConnettoreMultiplo(connectionPdD, idPA, nomeConnettore, user, stato);
  2707.     }
  2708.    
  2709.     public Map<String, String> getProprietaConfigurazione(PortaApplicativa pa) throws DriverConfigurazioneException {
  2710.         if (pa == null) {
  2711.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2712.         } else if (pa.sizeProprietaList() <= 0) {
  2713.             return null;
  2714.         } else {
  2715.             Map<String, String> properties = new HashMap<>();

  2716.             for(int i = 0; i < pa.sizeProprietaList(); ++i) {
  2717.                 Proprieta p = pa.getProprieta(i);
  2718.                 properties.put(p.getNome(), p.getValore());
  2719.             }

  2720.             return properties;
  2721.         }
  2722.     }
  2723.    
  2724.     protected boolean identificazioneContentBased(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2725.         if(pa==null){
  2726.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2727.         }
  2728.         if( pa.getAzione() != null  ){
  2729.             if(CostantiConfigurazione.PORTA_APPLICATIVA_AZIONE_CONTENT_BASED.equals(pa.getAzione().getIdentificazione())){
  2730.                 return true;
  2731.             }else{
  2732.                 return false;
  2733.             }
  2734.         }else
  2735.             return false;
  2736.     }

  2737.     protected boolean identificazioneInputBased(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2738.         if(pa==null){
  2739.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2740.         }
  2741.         if( pa.getAzione() != null  ){
  2742.             if(CostantiConfigurazione.PORTA_APPLICATIVA_AZIONE_INPUT_BASED.equals(pa.getAzione().getIdentificazione())){
  2743.                 return true;
  2744.             }else{
  2745.                 return false;
  2746.             }
  2747.         }else
  2748.             return false;
  2749.     }

  2750.     protected String getAzione(RegistroServiziManager registroServiziManager,PortaApplicativa pa,URLProtocolContext urlProtocolContext, RequestInfo requestInfo,
  2751.             OpenSPCoop2Message message, OpenSPCoop2MessageSoapStreamReader soapStreamReader, HeaderIntegrazione headerIntegrazione, boolean readFirstHeaderIntegrazione,
  2752.             IProtocolFactory<?> protocolFactory) throws DriverConfigurazioneException, IdentificazioneDinamicaException {

  2753.         try{

  2754.             if(pa==null){
  2755.                 throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2756.             }
  2757.             IDSoggetto soggettoErogatore = new IDSoggetto(pa.getTipoSoggettoProprietario(),pa.getNomeSoggettoProprietario());
  2758.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(),pa.getServizio().getNome(),
  2759.                     soggettoErogatore, pa.getServizio().getVersione());

  2760.             String azioneHeaderIntegrazione = null;
  2761.             if(headerIntegrazione!=null && headerIntegrazione.getBusta()!=null && headerIntegrazione.getBusta().getAzione()!=null){
  2762.                 azioneHeaderIntegrazione = headerIntegrazione.getBusta().getAzione();
  2763.             }

  2764.             ModalitaIdentificazioneAzione modalitaIdentificazione = ModalitaIdentificazioneAzione.STATIC;
  2765.             String pattern = null;
  2766.             boolean forceRegistryBased = false;
  2767.             boolean forcePluginBased = true; // sulla PA si fa sempre questo controllo?
  2768.             if( pa.getAzione() != null  ){
  2769.                 idServizio.setAzione(pa.getAzione().getNome());
  2770.                 pattern = pa.getAzione().getPattern();
  2771.                 if( pa.getAzione().getIdentificazione() != null  ){
  2772.                     modalitaIdentificazione = ModalitaIdentificazioneAzione.convert(pa.getAzione().getIdentificazione());
  2773.                 }
  2774.                 forceRegistryBased = StatoFunzionalita.ABILITATO.equals(pa.getAzione().getForceInterfaceBased());
  2775.             }

  2776.             OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
  2777.            
  2778.             boolean bufferMessageReadOnly =  op2Properties.isReadByPathBufferEnabled();
  2779.            
  2780.             boolean rpcAcceptRootElementUnqualified = OpenSPCoop2Properties.getInstance().isValidazioneContenutiApplicativiRpcAcceptRootElementUnqualified();
  2781.             if(pa!=null && pa.getProprietaList()!=null && !pa.getProprietaList().isEmpty()) {
  2782.                 boolean defaultRpcAcceptRootElementUnqualified = rpcAcceptRootElementUnqualified;
  2783.                 rpcAcceptRootElementUnqualified = ValidatoreMessaggiApplicativiRest.readBooleanValueWithDefault(pa.getProprietaList(), CostantiProprieta.VALIDAZIONE_CONTENUTI_PROPERTY_NAME_RPC_ACCEPT_ROOT_ELEMENT_UNQUALIFIED_ENABLED, defaultRpcAcceptRootElementUnqualified);
  2784.             }
  2785.            
  2786.             WSDLValidatorConfig config = new WSDLValidatorConfig();
  2787.             config.setRpcAcceptRootElementUnqualified(rpcAcceptRootElementUnqualified);
  2788.            
  2789.             String azione = OperationFinder.getAzione(registroServiziManager, urlProtocolContext, requestInfo, message, soapStreamReader, soggettoErogatore, idServizio,
  2790.                     readFirstHeaderIntegrazione, azioneHeaderIntegrazione, protocolFactory, modalitaIdentificazione,
  2791.                     pattern, forceRegistryBased, forcePluginBased, this.logger, true,
  2792.                     bufferMessageReadOnly,
  2793.                     headerIntegrazione!=null ? headerIntegrazione.getIdTransazione() : null,
  2794.                     config);

  2795.             // Se non ho riconosciuto una azione a questo punto,
  2796.             // durante il processo standard di riconoscimento viene sollevata una eccezione IdentificazioneDinamicaException

  2797.             return azione;

  2798.         }catch(IdentificazioneDinamicaException e){
  2799.             throw e;
  2800.         }
  2801.         catch(Exception e){
  2802.             throw new DriverConfigurazioneException(e.getMessage(),e);
  2803.         }

  2804.     }

  2805.     protected String[] getServiziApplicativi(PortaApplicativa pa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2806.         if(pa==null){
  2807.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2808.         }

  2809.         String[]sa = new String[pa.sizeServizioApplicativoList()];
  2810.         for(int i=0;i<pa.sizeServizioApplicativoList();i++){
  2811.             sa[i] = pa.getServizioApplicativo(i).getNome();
  2812.         }

  2813.         return sa;
  2814.     }

  2815.     protected SoggettoVirtuale getServiziApplicativiSoggettiVirtuali(Connection connectionPdD,RichiestaApplicativa richiestaApplicativa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2816.         Map<IDSoggetto,PortaApplicativa> paConSoggetti = this.configurazionePdD.getPorteApplicativeSoggettiVirtuali(connectionPdD,richiestaApplicativa.getIDServizio()
  2817.                 ,richiestaApplicativa.getFiltroProprietaPorteApplicative(),true);
  2818.         if(paConSoggetti == null)
  2819.             throw new DriverConfigurazioneNotFound("PorteApplicative contenenti SoggettiVirtuali di ["+richiestaApplicativa.getIDServizio()+"] non trovate");
  2820.         if(paConSoggetti.size() ==0)
  2821.             throw new DriverConfigurazioneNotFound("PorteApplicative contenenti SoggettiVirtuali di ["+richiestaApplicativa.getIDServizio()+"] non trovate");

  2822.         java.util.List<SoggettoVirtualeServizioApplicativo> trovati = new java.util.ArrayList<SoggettoVirtualeServizioApplicativo>();

  2823.         Iterator<IDSoggetto> it = paConSoggetti.keySet().iterator();
  2824.         while (it.hasNext()) {
  2825.             IDSoggetto soggReale = (IDSoggetto) it.next();
  2826.             PortaApplicativa pa = paConSoggetti.get(soggReale);
  2827.             for(int k=0; k<pa.sizeServizioApplicativoList(); k++){

  2828.                 SoggettoVirtualeServizioApplicativo sa = new SoggettoVirtualeServizioApplicativo();
  2829.                 sa.setNomeServizioApplicativo(pa.getServizioApplicativo(k).getNome());
  2830.                 sa.setIdSoggettoReale(soggReale);
  2831.                 sa.setPortaApplicativa(pa);
  2832.                 trovati.add(sa);

  2833.             }
  2834.         }

  2835.         if(trovati.size() == 0)
  2836.             throw new DriverConfigurazioneNotFound("PorteApplicative contenenti SoggettiVirtuali di ["+richiestaApplicativa.getIDServizio()+"] non trovati soggetti virtuali");
  2837.         else{
  2838.             SoggettoVirtuale soggVirtuale = new SoggettoVirtuale();
  2839.             for (SoggettoVirtualeServizioApplicativo soggettoVirtualeServizioApplicativo : trovati) {
  2840.                 soggVirtuale.addServizioApplicativo(soggettoVirtualeServizioApplicativo);
  2841.             }
  2842.             return soggVirtuale;
  2843.         }
  2844.     }

  2845.     protected List<PortaApplicativa> getPorteApplicative(Connection connectionPdD,IDServizio idServizio, boolean ricercaPuntuale) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2846.         return this.configurazionePdD.getPorteApplicative(connectionPdD, idServizio, ricercaPuntuale);
  2847.     }


  2848.     protected List<PortaApplicativa> getPorteApplicativeVirtuali(Connection connectionPdD,IDSoggetto idSoggettoVirtuale, IDServizio idServizio, boolean ricercaPuntuale) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2849.         return this.configurazionePdD.getPorteApplicativeVirtuali(connectionPdD, idSoggettoVirtuale, idServizio, ricercaPuntuale);
  2850.     }

  2851.     protected MTOMProcessorConfig getMTOMProcessorForSender(PortaApplicativa pa)throws DriverConfigurazioneException{

  2852.         MTOMProcessorConfig config = new MTOMProcessorConfig();
  2853.         List<MtomXomPackageInfo> list = new ArrayList<MtomXomPackageInfo>();
  2854.         config.setInfo(list);

  2855.         if(pa == null)
  2856.             return config;

  2857.         MtomProcessor mtomProcessor = pa.getMtomProcessor();
  2858.         if(mtomProcessor == null)
  2859.             return config;

  2860.         if(mtomProcessor.getResponseFlow()!=null){
  2861.             MtomProcessorFlow mtomFlow = mtomProcessor.getResponseFlow();
  2862.             config.setMtomProcessorType(mtomFlow.getMode());
  2863.             for(int i=0 ; i<mtomFlow.sizeParameterList() ; i++){
  2864.                 String nome = mtomFlow.getParameter(i).getNome();
  2865.                 if(nome!=null){
  2866.                     MtomXomPackageInfo info = new MtomXomPackageInfo();
  2867.                     info.setName(nome);
  2868.                     info.setXpathExpression(mtomFlow.getParameter(i).getPattern());
  2869.                     info.setContentType(mtomFlow.getParameter(i).getContentType());
  2870.                     info.setRequired(mtomFlow.getParameter(i).getRequired());
  2871.                     list.add(info);
  2872.                 }
  2873.             }
  2874.         }

  2875.         return config;
  2876.     }

  2877.     protected MTOMProcessorConfig getMTOMProcessorForReceiver(PortaApplicativa pa)throws DriverConfigurazioneException{

  2878.         MTOMProcessorConfig config = new MTOMProcessorConfig();
  2879.         List<MtomXomPackageInfo> list = new ArrayList<MtomXomPackageInfo>();
  2880.         config.setInfo(list);

  2881.         if(pa == null)
  2882.             return config;

  2883.         MtomProcessor mtomProcessor = pa.getMtomProcessor();
  2884.         if(mtomProcessor == null)
  2885.             return config;

  2886.         if(mtomProcessor.getRequestFlow()!=null){
  2887.             MtomProcessorFlow mtomFlow = mtomProcessor.getRequestFlow();
  2888.             config.setMtomProcessorType(mtomFlow.getMode());
  2889.             for(int i=0 ; i<mtomFlow.sizeParameterList() ; i++){
  2890.                 String nome = mtomFlow.getParameter(i).getNome();
  2891.                 if(nome!=null){
  2892.                     MtomXomPackageInfo info = new MtomXomPackageInfo();
  2893.                     info.setName(nome);
  2894.                     info.setXpathExpression(mtomFlow.getParameter(i).getPattern());
  2895.                     info.setContentType(mtomFlow.getParameter(i).getContentType());
  2896.                     info.setRequired(mtomFlow.getParameter(i).getRequired());
  2897.                     list.add(info);
  2898.                 }
  2899.             }
  2900.         }

  2901.         return config;
  2902.     }

  2903.     protected MessageSecurityConfig getMessageSecurityForSender(PortaApplicativa pa)throws DriverConfigurazioneException{

  2904.         MessageSecurityConfig securityConfig = new MessageSecurityConfig();
  2905.         java.util.Map<String,Object> table = new java.util.HashMap<>();
  2906.         securityConfig.setFlowParameters(table);

  2907.         if(pa == null)
  2908.             return securityConfig;

  2909.         if(pa.getStatoMessageSecurity()!=null && CostantiConfigurazione.DISABILITATO.toString().equals(pa.getStatoMessageSecurity())){
  2910.             return securityConfig;
  2911.         }

  2912.         MessageSecurity messageSecurity = pa.getMessageSecurity();
  2913.         if(messageSecurity == null)
  2914.             return securityConfig;

  2915.         if(messageSecurity.getResponseFlow()!=null){
  2916.             MessageSecurityFlow securityFlow = messageSecurity.getResponseFlow();
  2917.             if(securityFlow.getApplyToMtom()!=null){
  2918.                 securityConfig.setApplyToMtom(StatoFunzionalita.ABILITATO.equals(securityFlow.getApplyToMtom()));
  2919.             }
  2920.             for(int i=0 ; i<securityFlow.sizeParameterList() ; i++){
  2921.                 String nome = securityFlow.getParameter(i).getNome();
  2922.                 if(nome!=null){
  2923.                     String valore = securityFlow.getParameter(i).getValore();
  2924.                     if("actor".equals(nome)){
  2925.                         // patch per header senza actor (dove non si vuole che venga assunto il default=openspcoop)
  2926.                         if(valore == null)
  2927.                             valore = "";
  2928.                         else if("notDefined".equals(valore)){
  2929.                             valore = "";
  2930.                         }
  2931.                     }
  2932.                     table.put(nome,valore);
  2933.                 }
  2934.             }
  2935.         }

  2936.         return securityConfig;
  2937.     }

  2938.     protected MessageSecurityConfig getMessageSecurityForReceiver(PortaApplicativa pa)throws DriverConfigurazioneException{

  2939.         MessageSecurityConfig securityConfig = new MessageSecurityConfig();
  2940.         java.util.Map<String,Object> table = new java.util.HashMap<>();
  2941.         securityConfig.setFlowParameters(table);

  2942.         if(pa == null)
  2943.             return securityConfig;

  2944.         if(pa.getStatoMessageSecurity()!=null && CostantiConfigurazione.DISABILITATO.toString().equals(pa.getStatoMessageSecurity())){
  2945.             return securityConfig;
  2946.         }

  2947.         MessageSecurity messageSecurity = pa.getMessageSecurity();
  2948.         if(messageSecurity == null)
  2949.             return securityConfig;

  2950.         if(messageSecurity.getRequestFlow()!=null){
  2951.             MessageSecurityFlow securityFlow = messageSecurity.getRequestFlow();
  2952.             if(securityFlow.getApplyToMtom()!=null){
  2953.                 securityConfig.setApplyToMtom(StatoFunzionalita.ABILITATO.equals(securityFlow.getApplyToMtom()));
  2954.             }
  2955.             for(int i=0 ; i<securityFlow.sizeParameterList() ; i++){
  2956.                 String nome = securityFlow.getParameter(i).getNome();
  2957.                 if(nome!=null){
  2958.                     String valore = securityFlow.getParameter(i).getValore();
  2959.                     if("actor".equals(nome)){
  2960.                         // patch per header senza actor (dove non si vuole che venga assunto il default=openspcoop)
  2961.                         if(valore == null)
  2962.                             valore = "";
  2963.                         else if("notDefined".equals(valore)){
  2964.                             valore = "";
  2965.                         }
  2966.                     }
  2967.                     table.put(nome,valore);
  2968.                 }
  2969.             }
  2970.         }

  2971.         return securityConfig;
  2972.     }


  2973.     protected String getAutenticazione(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2974.         if(pa==null){
  2975.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2976.         }

  2977.         if(pa.getAutenticazione() == null || "".equals(pa.getAutenticazione()))
  2978.             return CostantiConfigurazione.CREDENZIALE_SSL.toString();
  2979.         else
  2980.             return pa.getAutenticazione();
  2981.     }

  2982.     protected boolean isAutenticazioneOpzionale(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2983.         if(pa==null){
  2984.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  2985.         }

  2986.         if(pa.getAutenticazioneOpzionale() == null)
  2987.             return false;
  2988.         else{
  2989.             if(StatoFunzionalita.ABILITATO.equals(pa.getAutenticazioneOpzionale())){
  2990.                 return true;
  2991.             }
  2992.             else if(StatoFunzionalita.DISABILITATO.equals(pa.getAutenticazioneOpzionale())){
  2993.                 return false;
  2994.             }
  2995.             else{
  2996.                 return false;
  2997.             }
  2998.         }

  2999.     }

  3000.     protected String getGestioneToken(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3001.         if(pa==null){
  3002.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3003.         }

  3004.         if(pa.getGestioneToken()!=null && pa.getGestioneToken().getPolicy()!=null) {
  3005.             return pa.getGestioneToken().getPolicy();
  3006.         }
  3007.         return null;
  3008.     }

  3009.     protected PolicyGestioneToken getPolicyGestioneToken(Connection connectionPdD, PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3010.         if(pa==null){
  3011.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3012.         }

  3013.         if(pa.getGestioneToken()==null || pa.getGestioneToken().getPolicy()==null) {
  3014.             throw new DriverConfigurazioneException("Porta Applicativa senza una policy di gestione token");
  3015.         }

  3016.         GenericProperties gp = this.getGenericProperties(connectionPdD, org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA, pa.getGestioneToken().getPolicy());

  3017.         PolicyGestioneToken policy = null;
  3018.         try {
  3019.             policy = TokenUtilities.convertTo(gp, pa.getGestioneToken());
  3020.         }catch(Exception e) {
  3021.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3022.         }

  3023.         return policy;
  3024.     }

  3025.     protected String getAutorizzazione(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3026.         if(pa==null){
  3027.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3028.         }

  3029.         if(pa.getAutorizzazione() == null || "".equals(pa.getAutorizzazione()) )
  3030.             return CostantiConfigurazione.AUTORIZZAZIONE_AUTHENTICATED;
  3031.         else
  3032.             return pa.getAutorizzazione();
  3033.     }

  3034.     protected String getAutorizzazioneContenuto(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3035.         if(pa==null){
  3036.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3037.         }

  3038.         if(pa.getAutorizzazioneContenuto() == null || "".equals(pa.getAutorizzazioneContenuto()))
  3039.             return CostantiConfigurazione.NONE;
  3040.         else
  3041.             return pa.getAutorizzazioneContenuto();
  3042.     }

  3043.     public CorsConfigurazione getConfigurazioneCORS(Connection connectionPdD, PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3044.         if(pa==null){
  3045.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3046.         }

  3047.         CorsConfigurazione cors = pa.getGestioneCors();
  3048.         if(cors==null) {
  3049.             cors = this.getConfigurazioneCORS(connectionPdD);
  3050.         }
  3051.         return cors;
  3052.     }

  3053.     public ResponseCachingConfigurazione getConfigurazioneResponseCaching(Connection connectionPdD, PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3054.         if(pa==null){
  3055.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3056.         }

  3057.         ResponseCachingConfigurazione c = pa.getResponseCaching();
  3058.         if(c==null) {
  3059.             c = this.getConfigurazioneResponseCaching(connectionPdD);
  3060.         }
  3061.         return c;
  3062.     }

  3063.     protected boolean ricevutaAsincronaSimmetricaAbilitata(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3064.         if(pa==null)
  3065.             return true; // default Abilitata-CNIPA
  3066.         return !CostantiConfigurazione.DISABILITATO.equals(pa.getRicevutaAsincronaSimmetrica());
  3067.     }

  3068.     protected boolean ricevutaAsincronaAsimmetricaAbilitata(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3069.         if(pa==null)
  3070.             return true; // default Abilitata-CNIPA
  3071.         return !CostantiConfigurazione.DISABILITATO.equals(pa.getRicevutaAsincronaAsimmetrica());
  3072.     }

  3073.     protected ValidazioneContenutiApplicativi getTipoValidazioneContenutoApplicativo(Connection connectionPdD, PortaApplicativa pa,String implementazionePdDSoggetto, boolean request) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3074.         // default in configurazione
  3075.         ValidazioneContenutiApplicativi val = this.getTipoValidazioneContenutoApplicativo(connectionPdD,implementazionePdDSoggetto);

  3076.         if( pa==null || pa.getValidazioneContenutiApplicativi() == null ){
  3077.             return val;
  3078.         }

  3079.         ValidazioneContenutiApplicativi valPA = new ValidazioneContenutiApplicativi();

  3080.         if( CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.equals(pa.getValidazioneContenutiApplicativi().getStato())  )
  3081.             valPA.setStato(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO);
  3082.         else if( CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(pa.getValidazioneContenutiApplicativi().getStato())  )
  3083.             valPA.setStato(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY);
  3084.         else if( CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.equals(pa.getValidazioneContenutiApplicativi().getStato())  )
  3085.             valPA.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);

  3086.         if( CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(pa.getValidazioneContenutiApplicativi().getTipo())  )
  3087.             valPA.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP);
  3088.         else if( CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(pa.getValidazioneContenutiApplicativi().getTipo())  )
  3089.             valPA.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE);
  3090.         else if( CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.equals(pa.getValidazioneContenutiApplicativi().getTipo())  )
  3091.             valPA.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);

  3092.         if( CostantiConfigurazione.ABILITATO.equals(pa.getValidazioneContenutiApplicativi().getAcceptMtomMessage())  )
  3093.             valPA.setAcceptMtomMessage(CostantiConfigurazione.ABILITATO);
  3094.         else if( CostantiConfigurazione.DISABILITATO.equals(pa.getValidazioneContenutiApplicativi().getAcceptMtomMessage())  )
  3095.             valPA.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);

  3096.         refreshByProperties(pa.getProprietaList(), request, valPA);
  3097.        
  3098.         return valPA;
  3099.     }

  3100.     protected CorrelazioneApplicativa getCorrelazioneApplicativa(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3101.         if(pa==null){
  3102.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3103.         }
  3104.         return pa.getCorrelazioneApplicativa();

  3105.     }

  3106.     protected CorrelazioneApplicativaRisposta getCorrelazioneApplicativaRisposta(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3107.         if(pa==null){
  3108.             throw new DriverConfigurazioneException("Porta Applicativa non fornita");
  3109.         }
  3110.         return pa.getCorrelazioneApplicativaRisposta();

  3111.     }

  3112.     protected String[] getTipiIntegrazione(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {

  3113.         String[]tipi = null;
  3114.         if(pa!=null){
  3115.             if(pa.getIntegrazione() != null && ("".equals(pa.getIntegrazione())==false) ){
  3116.                 tipi = pa.getIntegrazione().trim().split(",");
  3117.             }  
  3118.         }

  3119.         return tipi;
  3120.     }

  3121.     protected boolean isGestioneManifestAttachments(Connection connectionPdD, PortaApplicativa pa, IProtocolFactory<?> protocolFactory) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3122.         if(pa==null){
  3123.             try{
  3124.                 if(protocolFactory.createProtocolConfiguration().isSupportato(ServiceBinding.SOAP,FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)){
  3125.                     // Bug: 286: devo usare il default della configurazione SOLO SE il protocollo lo supporta.
  3126.                     return this.isGestioneManifestAttachments(connectionPdD); //configurazione di default
  3127.                 }
  3128.                 else{
  3129.                     return false;
  3130.                 }
  3131.             }catch(Exception e){
  3132.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  3133.             }
  3134.         }

  3135.         if( CostantiConfigurazione.ABILITATO.equals(pa.getGestioneManifest())  ){
  3136.             return true;
  3137.         }else if( CostantiConfigurazione.DISABILITATO.equals(pa.getGestioneManifest())  ){
  3138.             return false;
  3139.         }else {
  3140.             try{
  3141.                 if(protocolFactory.createProtocolConfiguration().isSupportato(ServiceBinding.SOAP,FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)){
  3142.                     // Bug: 286: devo usare il default della configurazione SOLO SE il protocollo lo supporta.
  3143.                     return this.isGestioneManifestAttachments(connectionPdD); //configurazione di default
  3144.                 }
  3145.                 else{
  3146.                     return false;
  3147.                 }
  3148.             }catch(Exception e){
  3149.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  3150.             }
  3151.         }
  3152.     }

  3153.     protected boolean isAllegaBody(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3154.         if(pa==null)
  3155.             return false; //configurazione di default
  3156.         if( CostantiConfigurazione.ABILITATO.equals(pa.getAllegaBody())  )
  3157.             return true;
  3158.         else if( CostantiConfigurazione.DISABILITATO.equals(pa.getAllegaBody())  )
  3159.             return false;
  3160.         else
  3161.             return false; //configurazione di default
  3162.     }

  3163.     protected boolean isScartaBody(PortaApplicativa pa) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3164.         if(pa==null){
  3165.             return false; //configurazione di default
  3166.         }

  3167.         if( CostantiConfigurazione.ABILITATO.equals(pa.getScartaBody())  )
  3168.             return true;
  3169.         else if( CostantiConfigurazione.DISABILITATO.equals(pa.getScartaBody())  )
  3170.             return false;
  3171.         else
  3172.             return false; //configurazione di default
  3173.     }

  3174.     protected boolean isModalitaStateless(PortaApplicativa pa, ProfiloDiCollaborazione profiloCollaborazione) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  3175.         if(this.serverJ2EE==false){
  3176.             // Stateless obbligatorio in server di tipo web (non j2ee)
  3177.             return true;
  3178.         }

  3179.         if(pa==null){
  3180.             //configurazione di default
  3181.             if(ProfiloDiCollaborazione.ONEWAY.equals(profiloCollaborazione))
  3182.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessOneWay());
  3183.             else if(ProfiloDiCollaborazione.SINCRONO.equals(profiloCollaborazione))
  3184.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessSincrono());
  3185.             else
  3186.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessAsincroni());
  3187.         }

  3188.         if( CostantiConfigurazione.ABILITATO.equals(pa.getStateless())  )
  3189.             return true;
  3190.         else if( CostantiConfigurazione.DISABILITATO.equals(pa.getStateless())  )
  3191.             return false;
  3192.         else {
  3193.             //configurazione di default
  3194.             if(ProfiloDiCollaborazione.ONEWAY.equals(profiloCollaborazione))
  3195.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessOneWay());
  3196.             else if(ProfiloDiCollaborazione.SINCRONO.equals(profiloCollaborazione))
  3197.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessSincrono());
  3198.             else
  3199.                 return CostantiConfigurazione.ABILITATO.equals(this.openspcoopProperties.getStatelessAsincroni());
  3200.         }
  3201.     }

  3202.     protected boolean autorizzazione(PortaApplicativa pa, IDSoggetto soggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3203.         if( (pa == null) || (pa.getSoggetti()==null) )
  3204.             return false;
  3205.         if( (soggetto == null) || (soggetto.getTipo()==null) || (soggetto.getNome()==null) )
  3206.             return false;

  3207.         for(int j=0; j<pa.getSoggetti().sizeSoggettoList(); j++){
  3208.             if(soggetto.getTipo().equals(pa.getSoggetti().getSoggetto(j).getTipo()) &&
  3209.                     soggetto.getNome().equals(pa.getSoggetti().getSoggetto(j).getNome())) {
  3210.                 return true;
  3211.             }
  3212.         }

  3213.         return false;
  3214.     }

  3215.     protected boolean autorizzazione(PortaApplicativa pa, IDServizioApplicativo servizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3216.         if( (pa == null) || (pa.getServiziApplicativiAutorizzati()==null) )
  3217.             return false;
  3218.         if( (servizioApplicativo == null) || (servizioApplicativo.getNome()==null) ||
  3219.                 (servizioApplicativo.getIdSoggettoProprietario()==null) ||
  3220.                 (servizioApplicativo.getIdSoggettoProprietario().getTipo()==null) ||
  3221.                 (servizioApplicativo.getIdSoggettoProprietario().getNome()==null) )
  3222.             return false;

  3223.         for(int j=0; j<pa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList(); j++){
  3224.             if(servizioApplicativo.getNome().equals(pa.getServiziApplicativiAutorizzati().getServizioApplicativo(j).getNome()) &&
  3225.                     servizioApplicativo.getIdSoggettoProprietario().getTipo().equals(pa.getServiziApplicativiAutorizzati().getServizioApplicativo(j).getTipoSoggettoProprietario()) &&
  3226.                     servizioApplicativo.getIdSoggettoProprietario().getNome().equals(pa.getServiziApplicativiAutorizzati().getServizioApplicativo(j).getNomeSoggettoProprietario())) {
  3227.                 return true;
  3228.             }
  3229.         }

  3230.         return false;
  3231.     }

  3232.     protected boolean autorizzazioneTrasportoRoles(RegistroServiziManager registroServiziManager,
  3233.             PortaApplicativa pa, org.openspcoop2.core.registry.Soggetto soggetto, ServizioApplicativo sa, InfoConnettoreIngresso infoConnettoreIngresso,
  3234.             PdDContext pddContext, RequestInfo requestInfo,
  3235.             boolean checkRuoloRegistro, boolean checkRuoloEsterno,
  3236.             StringBuilder details) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3237.         if( (pa == null) || pa.getRuoli()==null || pa.getRuoli().sizeRuoloList()<=0 ){
  3238.             throw new DriverConfigurazioneNotFound("Non sono stati definiti i ruoli necessari a fruire della porta applicativa");
  3239.         }

  3240.         if(checkRuoloRegistro && !checkRuoloEsterno){
  3241.             if(soggetto==null && sa==null){
  3242.                 throw new DriverConfigurazioneException("Identità soggetto e/o applicativo non disponibile; tale informazione è richiesta dall'autorizzazione");
  3243.             }
  3244.         }

  3245.         return _autorizzazioneRoles(registroServiziManager,
  3246.                 soggetto, sa,
  3247.                 infoConnettoreIngresso, true,
  3248.                 pddContext, requestInfo,
  3249.                 checkRuoloRegistro, checkRuoloEsterno,
  3250.                 details,
  3251.                 pa.getRuoli().getMatch(), pa.getRuoli(),
  3252.                 false);
  3253.     }
  3254.    
  3255.     protected boolean autorizzazioneTokenRoles(RegistroServiziManager registroServiziManager,
  3256.             PortaApplicativa pa, ServizioApplicativo sa, InfoConnettoreIngresso infoConnettoreIngresso,
  3257.             PdDContext pddContext,  RequestInfo requestInfo,
  3258.             boolean checkRuoloRegistro, boolean checkRuoloEsterno,
  3259.             StringBuilder details) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3260.         if( (pa == null) || (pa.getAutorizzazioneToken()==null) ||
  3261.                 pa.getAutorizzazioneToken().getRuoli()==null ||
  3262.                 pa.getAutorizzazioneToken().getRuoli().sizeRuoloList()<=0 ){
  3263.             throw new DriverConfigurazioneNotFound("Non sono stati definiti i ruoli necessari a fruire della porta applicativa");
  3264.         }

  3265.         if(checkRuoloRegistro && !checkRuoloEsterno){
  3266.             if(sa==null){
  3267.                 throw new DriverConfigurazioneException("Identità soggetto e/o applicativo non disponibile; tale informazione è richiesta dall'autorizzazione");
  3268.             }
  3269.         }

  3270.         return _autorizzazioneRoles(registroServiziManager,
  3271.                 null, sa,
  3272.                 infoConnettoreIngresso, true,
  3273.                 pddContext, requestInfo,
  3274.                 checkRuoloRegistro, checkRuoloEsterno,
  3275.                 details,
  3276.                 pa.getAutorizzazioneToken().getRuoli().getMatch(), pa.getAutorizzazioneToken().getRuoli(),
  3277.                 false);
  3278.     }
  3279.    
  3280.     public static boolean _autorizzazioneRoles(RegistroServiziManager registroServiziManager,
  3281.             org.openspcoop2.core.registry.Soggetto soggetto, ServizioApplicativo sa,
  3282.             InfoConnettoreIngresso infoConnettoreIngresso, boolean readInfoConnettoreIngresso,
  3283.             Context pddContext, RequestInfo requestInfo,
  3284.             boolean checkRuoloRegistro, boolean checkRuoloEsterno,
  3285.             StringBuilder details,
  3286.             RuoloTipoMatch ruoloMatch, AutorizzazioneRuoli autorizzazioneRuoli,
  3287.             boolean modiCheck) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3288.         HttpServletRequest httpServletRequest = null;
  3289.         List<String> tokenRoles = null;
  3290.         if(checkRuoloEsterno){

  3291.             InformazioniToken informazioniTokenNormalizzate = null;
  3292.             Object oInformazioniTokenNormalizzate = pddContext.getObject(org.openspcoop2.pdd.core.token.Costanti.PDD_CONTEXT_TOKEN_INFORMAZIONI_NORMALIZZATE);
  3293.             if(oInformazioniTokenNormalizzate!=null) {
  3294.                 informazioniTokenNormalizzate = (InformazioniToken) oInformazioniTokenNormalizzate;
  3295.             }
  3296.             if(informazioniTokenNormalizzate!=null) {
  3297.                 tokenRoles = informazioniTokenNormalizzate.getRoles();
  3298.             }

  3299.             if(readInfoConnettoreIngresso) {
  3300.                 if(infoConnettoreIngresso==null ||
  3301.                         infoConnettoreIngresso.getUrlProtocolContext()==null ||
  3302.                         infoConnettoreIngresso.getUrlProtocolContext().getHttpServletRequest()==null){
  3303.                     if(tokenRoles==null) {
  3304.                         throw new DriverConfigurazioneException("HttpServletRequest non disponibile; risorsa richiesta dall'autorizzazione");
  3305.                     }
  3306.                 }
  3307.                 if(infoConnettoreIngresso!=null && infoConnettoreIngresso.getUrlProtocolContext()!=null) {
  3308.                     httpServletRequest = infoConnettoreIngresso.getUrlProtocolContext().getHttpServletRequest();
  3309.                 }
  3310.             }
  3311.         }

  3312.         if(ruoloMatch==null){
  3313.             ruoloMatch = RuoloTipoMatch.ALL;
  3314.         }

  3315.         String searchIn = "";
  3316.         if(checkRuoloRegistro) {
  3317.             if(sa!=null) {
  3318.                 try {
  3319.                     if(modiCheck) {
  3320.                         searchIn = " nell'applicativo";
  3321.                     }
  3322.                     else {
  3323.                         searchIn = " in application '"+sa.getNome()+NamingUtils.LABEL_DOMINIO+NamingUtils.getLabelSoggetto(new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario()))+"'";
  3324.                     }
  3325.                 }catch(Exception t) {}
  3326.             }
  3327.         }
  3328.         if(checkRuoloEsterno) {
  3329.             if(checkRuoloRegistro && sa!=null) {
  3330.                 if(modiCheck) {
  3331.                     searchIn = searchIn + " e";
  3332.                 }
  3333.                 else {
  3334.                     searchIn = searchIn + " and";
  3335.                 }
  3336.             }
  3337.             if(modiCheck) {
  3338.                 searchIn = searchIn + " nel contesto della richiesta";
  3339.             }
  3340.             else {
  3341.                 searchIn = searchIn + " in request context";
  3342.             }
  3343.         }
  3344.        
  3345.         for(int j=0; j<autorizzazioneRuoli.sizeRuoloList(); j++){
  3346.             Ruolo ruolo = autorizzazioneRuoli.getRuolo(j);

  3347.             boolean trovato = false;

  3348.             if(checkRuoloRegistro) {
  3349.                 if(sa!=null) {
  3350.                     if(sa.getInvocazionePorta()!=null && sa.getInvocazionePorta().getRuoli()!=null){
  3351.                         ServizioApplicativoRuoli ruoliSA = sa.getInvocazionePorta().getRuoli();
  3352.                         for (int i = 0; i < ruoliSA.sizeRuoloList(); i++) {
  3353.                             if(ruolo.getNome().equals(ruoliSA.getRuolo(i).getNome())){
  3354.                                 trovato = true;
  3355.                                 break;
  3356.                             }
  3357.                         }
  3358.                     }
  3359.                 }
  3360.                 else if(soggetto!=null) {
  3361.                     if(soggetto.getRuoli()!=null){
  3362.                         RuoliSoggetto ruoliSoggetto = soggetto.getRuoli();
  3363.                         for (int i = 0; i < ruoliSoggetto.sizeRuoloList(); i++) {
  3364.                             if(ruolo.getNome().equals(ruoliSoggetto.getRuolo(i).getNome())){
  3365.                                 trovato = true;
  3366.                                 break;
  3367.                             }
  3368.                         }
  3369.                     }
  3370.                 }
  3371.             }

  3372.             if(!trovato && checkRuoloEsterno){
  3373.                 String nomeRuoloDaVerificare = ruolo.getNome();
  3374.                 try {
  3375.                     org.openspcoop2.core.registry.Ruolo ruoloRegistro = registroServiziManager.getRuolo(ruolo.getNome(), null, requestInfo);
  3376.                     if( (RuoloTipologia.ESTERNO.equals(ruoloRegistro.getTipologia()) || RuoloTipologia.QUALSIASI.equals(ruoloRegistro.getTipologia())) &&
  3377.                             ruoloRegistro.getNomeEsterno()!=null &&
  3378.                             !"".equals(ruoloRegistro.getNomeEsterno())) {
  3379.                         nomeRuoloDaVerificare = ruoloRegistro.getNomeEsterno();
  3380.                     }
  3381.                 }catch(Exception e) {
  3382.                     throw new DriverConfigurazioneException("Recupero del ruolo '"+ruolo.getNome()+"' fallito: "+e.getMessage(),e);
  3383.                 }
  3384.                 boolean foundInHttpServlet = false;
  3385.                 boolean foundInToken = false;
  3386.                 if(httpServletRequest!=null) {
  3387.                     foundInHttpServlet = httpServletRequest.isUserInRole(nomeRuoloDaVerificare);
  3388.                 }
  3389.                 if(tokenRoles!=null && tokenRoles.size()>0) {
  3390.                     foundInToken = tokenRoles.contains(nomeRuoloDaVerificare);
  3391.                 }
  3392.                 if(foundInHttpServlet || foundInToken){
  3393.                     trovato = true;
  3394.                 }
  3395.             }

  3396.             if(trovato){
  3397.                 if(RuoloTipoMatch.ANY.equals(ruoloMatch)){
  3398.                     return true; // basta un ruolo
  3399.                 }
  3400.             }
  3401.             else{
  3402.                 if(RuoloTipoMatch.ALL.equals(ruoloMatch)){
  3403.                     if(details!=null) {
  3404.                         if(modiCheck) {
  3405.                             details.append("Ruolo '"+ruolo.getNome()+"' non trovato").append(searchIn);
  3406.                         }
  3407.                         else {
  3408.                             details.append("Role '"+ruolo.getNome()+"' not found").append(searchIn);
  3409.                         }
  3410.                     }
  3411.                     return false; // deve possedere tutti i ruoli
  3412.                 }
  3413.             }
  3414.         }

  3415.         if(RuoloTipoMatch.ANY.equals(ruoloMatch)){
  3416.             if(details!=null) {
  3417.                 if(modiCheck) {
  3418.                     details.append("Ruoli non trovati").append(searchIn);
  3419.                 }
  3420.                 else {
  3421.                     details.append("Roles not found").append(searchIn);
  3422.                 }
  3423.             }
  3424.             return false; // non è stato trovato alcun ruolo
  3425.         }
  3426.         else{
  3427.             return true; // tutti i ruoli trovati
  3428.         }

  3429.     }

  3430.     protected boolean isPortaAbilitata(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  3431.         if(pa==null){
  3432.             //configurazione di default
  3433.             return true;
  3434.         }

  3435.         if( CostantiConfigurazione.ABILITATO.equals(pa.getStato())  )
  3436.             return true;
  3437.         else if( CostantiConfigurazione.DISABILITATO.equals(pa.getStato())  )
  3438.             return false;
  3439.         else {
  3440.             //configurazione di default
  3441.             return true;
  3442.         }
  3443.     }

  3444.     protected DumpConfigurazione getDumpConfigurazione(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3445.         if(pa==null){
  3446.             //configurazione di default
  3447.             return getDumpConfigurazionePortaApplicativa(connectionPdD);
  3448.         }

  3449.         if(pa.getDump()!=null) {
  3450.             return pa.getDump();
  3451.         }
  3452.         else {
  3453.             //configurazione di default
  3454.             return getDumpConfigurazionePortaApplicativa(connectionPdD);
  3455.         }
  3456.     }

  3457.     protected boolean isTransazioniFileTraceEnabled(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3458.        
  3459.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceEnabled();
  3460.         if(pa==null){
  3461.             //configurazione di default
  3462.             return defaultValue;
  3463.         }
  3464.         try {
  3465.             return CostantiProprieta.isFileTraceEnabled(pa.getProprietaList(), defaultValue);
  3466.         }catch(Exception e) {
  3467.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3468.         }

  3469.     }
  3470.    
  3471.     protected boolean isTransazioniFileTraceDumpBinarioHeadersEnabled(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3472.        
  3473.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAHeadersEnabled();
  3474.         if(pa==null){
  3475.             //configurazione di default
  3476.             return defaultValue;
  3477.         }
  3478.         try {
  3479.             return CostantiProprieta.isFileTraceDumpBinarioHeadersEnabled(pa.getProprietaList(), defaultValue);
  3480.         }catch(Exception e) {
  3481.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3482.         }

  3483.     }
  3484.     protected boolean isTransazioniFileTraceDumpBinarioPayloadEnabled(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3485.        
  3486.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAPayloadEnabled();
  3487.         if(pa==null){
  3488.             //configurazione di default
  3489.             return defaultValue;
  3490.         }
  3491.         try {
  3492.             return CostantiProprieta.isFileTraceDumpBinarioPayloadEnabled(pa.getProprietaList(), defaultValue);
  3493.         }catch(Exception e) {
  3494.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3495.         }

  3496.     }

  3497.     protected boolean isTransazioniFileTraceDumpBinarioConnettoreHeadersEnabled(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3498.    
  3499.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAConnettoreEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAConnettoreHeadersEnabled();
  3500.         if(pa==null){
  3501.             //configurazione di default
  3502.             return defaultValue;
  3503.         }
  3504.         try {
  3505.             return CostantiProprieta.isFileTraceDumpBinarioConnettoreHeadersEnabled(pa.getProprietaList(), defaultValue);
  3506.         }catch(Exception e) {
  3507.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3508.         }

  3509.     }
  3510.     protected boolean isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3511.        
  3512.         boolean defaultValue = this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAConnettoreEnabled() && this.openspcoopProperties.isTransazioniFileTraceDumpBinarioPAConnettorePayloadEnabled();
  3513.         if(pa==null){
  3514.             //configurazione di default
  3515.             return defaultValue;
  3516.         }
  3517.         try {
  3518.             return CostantiProprieta.isFileTraceDumpBinarioConnettorePayloadEnabled(pa.getProprietaList(), defaultValue);
  3519.         }catch(Exception e) {
  3520.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3521.         }

  3522.     }
  3523.    
  3524.     protected File getFileTraceConfig(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{

  3525.         try {
  3526.             File defaultValue = this.openspcoopProperties.getTransazioniFileTraceConfig();
  3527.             if(pa==null){
  3528.                 //configurazione di default
  3529.                 return defaultValue;
  3530.             }
  3531.             return CostantiProprieta.getFileTraceConfig(pa.getProprietaList(), defaultValue);
  3532.         }catch(Exception e) {
  3533.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3534.         }

  3535.     }
  3536.    
  3537.     protected SoglieDimensioneMessaggi getSoglieLimitedInputStream(Connection connectionPdD,PortaApplicativa pa, String azione, String idModulo,
  3538.             PdDContext pddContext, RequestInfo requestInfo,
  3539.             IProtocolFactory<?> protocolFactory, Logger log) throws DriverConfigurazioneException{
  3540.        
  3541.         if(!this.openspcoopProperties.isControlloTrafficoEnabled()){
  3542.             return null;
  3543.         }
  3544.        
  3545.         URLProtocolContext urlProtocolContext = null;
  3546.         if(requestInfo!=null) {
  3547.             urlProtocolContext = requestInfo.getProtocolContext();
  3548.         }
  3549.        
  3550.         TipoPdD tipoPdD = null;
  3551.         String nomePorta = null;
  3552.         IDSoggetto idDominio = null;
  3553.         IDSoggetto soggettoFruitore = null;
  3554.         IDServizio idServizio = null;
  3555.         IDPortaDelegata idPD = null;
  3556.         IDPortaApplicativa idPA = null;
  3557.         if(pa!=null) {
  3558.             tipoPdD = TipoPdD.APPLICATIVA;
  3559.             nomePorta = pa.getNome();
  3560.             idDominio = new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario());
  3561.             try {
  3562.                 idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  3563.                         pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario(),
  3564.                         pa.getServizio().getVersione());
  3565.                 idServizio.setAzione(azione);
  3566.             }catch(Exception e) {
  3567.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  3568.             }
  3569.             idPA = new IDPortaApplicativa();
  3570.             idPA.setNome(nomePorta);
  3571.         }
  3572.         else {
  3573.             idDominio = OpenSPCoop2Properties.getInstance().getIdentitaPortaDefault(protocolFactory!=null ? protocolFactory.getProtocol() : null, requestInfo);
  3574.         }
  3575.          
  3576.         IState state = null;
  3577.         IDAccordo idAccordo = null; // viene calcolato all'interno del metodo
  3578.         String servizioApplicativoFruitore = null;
  3579.         List<String> serviziApplicativiErogatori = null;
  3580.         try {
  3581.             DatiTransazione datiTransazione = InterceptorPolicyUtilities.readDatiTransazione(tipoPdD, idModulo,
  3582.                     pddContext, urlProtocolContext,
  3583.                     protocolFactory, state, log,
  3584.                     idDominio, soggettoFruitore, idServizio, idAccordo,
  3585.                     idPD, idPA,
  3586.                     servizioApplicativoFruitore, serviziApplicativiErogatori);
  3587.             return DimensioneMessaggiConfigurationUtils.readSoglieDimensioneMessaggi(tipoPdD, nomePorta, datiTransazione, log, urlProtocolContext, requestInfo, pddContext, protocolFactory);
  3588.         }catch(Exception e) {
  3589.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3590.         }
  3591.     }
  3592.    
  3593.     protected boolean isConnettoriUseTimeoutInputStream(Connection connectionPdD,PortaApplicativa pa) throws DriverConfigurazioneException{
  3594.        
  3595.         boolean defaultValue = this.openspcoopProperties.isConnettoriUseTimeoutInputStream();
  3596.         if(pa==null){
  3597.             //configurazione di default
  3598.             return defaultValue;
  3599.         }
  3600.         try {
  3601.             return CostantiProprieta.isConnettoriUseTimeoutInputStream(pa.getProprietaList(), defaultValue);
  3602.         }catch(Exception e) {
  3603.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3604.         }

  3605.     }
  3606.     protected SogliaReadTimeout getRequestReadTimeout(PortaApplicativa pa,
  3607.             RequestInfo requestInfo,
  3608.             IProtocolFactory<?> protocolFactory,
  3609.             Context context,
  3610.             IState state) throws DriverConfigurazioneException{

  3611.         int defaultValue = this.openspcoopProperties.getReadConnectionTimeout_ricezioneBuste();
  3612.         if(pa==null){
  3613.             //configurazione di default
  3614.             return ReadTimeoutConfigurationUtils.buildSogliaRequestTimeout(defaultValue, false, protocolFactory);
  3615.         }
  3616.         try {
  3617.             boolean configurazioneGlobale = !CostantiProprieta.existsConnettoriRequestTimeout(pa.getProprietaList());
  3618.             int sogliaMs = defaultValue;
  3619.             if(!configurazioneGlobale) {
  3620.                 sogliaMs = CostantiProprieta.getConnettoriRequestTimeout(pa.getProprietaList(), defaultValue);
  3621.             }
  3622.             return ReadTimeoutConfigurationUtils.buildSogliaRequestTimeout(sogliaMs, configurazioneGlobale, pa,
  3623.                     new ReadTimeoutContextParam(requestInfo, protocolFactory, context, state));
  3624.         }catch(Exception e) {
  3625.             throw new DriverConfigurazioneException(e.getMessage(),e);
  3626.         }

  3627.     }
  3628.    
  3629.    
  3630.     protected Trasformazioni getTrasformazioni(PortaApplicativa pa) throws DriverConfigurazioneException{
  3631.         if(pa!=null && pa.getTrasformazioni()!=null) {
  3632.             return pa.getTrasformazioni();
  3633.         }
  3634.         return null;
  3635.     }
  3636.    
  3637.     protected List<String> getPreInRequestHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3638.         List<String> list = new ArrayList<>();
  3639.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3640.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3641.             if(confPorta.getRequest()!=null) {
  3642.                 fillListHandlers(confPorta.getRequest().getPreInList(), list);
  3643.             }
  3644.         }
  3645.         return list;
  3646.     }
  3647.     protected List<String> getInRequestHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3648.         List<String> list = new ArrayList<>();
  3649.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3650.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3651.             if(confPorta.getRequest()!=null) {
  3652.                 fillListHandlers(confPorta.getRequest().getInList(), list);
  3653.             }
  3654.         }
  3655.         return list;
  3656.     }
  3657.     protected List<String> getInRequestProtocolHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3658.         List<String> list = new ArrayList<>();
  3659.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3660.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3661.             if(confPorta.getRequest()!=null) {
  3662.                 fillListHandlers(confPorta.getRequest().getInProtocolInfoList(), list);
  3663.             }
  3664.         }
  3665.         return list;
  3666.     }
  3667.     protected List<String> getOutRequestHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3668.         List<String> list = new ArrayList<>();
  3669.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3670.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3671.             if(confPorta.getRequest()!=null) {
  3672.                 fillListHandlers(confPorta.getRequest().getOutList(), list);
  3673.             }
  3674.         }
  3675.         return list;
  3676.     }
  3677.     protected List<String> getPostOutRequestHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3678.         List<String> list = new ArrayList<>();
  3679.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3680.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3681.             if(confPorta.getRequest()!=null) {
  3682.                 fillListHandlers(confPorta.getRequest().getPostOutList(), list);
  3683.             }
  3684.         }
  3685.         return list;
  3686.     }
  3687.     protected List<String> getPreInResponseHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3688.         List<String> list = new ArrayList<>();
  3689.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3690.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3691.             if(confPorta.getResponse()!=null) {
  3692.                 fillListHandlers(confPorta.getResponse().getPreInList(), list);
  3693.             }
  3694.         }
  3695.         return list;
  3696.     }
  3697.     protected List<String> getInResponseHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3698.         List<String> list = new ArrayList<>();
  3699.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3700.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3701.             if(confPorta.getResponse()!=null) {
  3702.                 fillListHandlers(confPorta.getResponse().getInList(), list);
  3703.             }
  3704.         }
  3705.         return list;
  3706.     }
  3707.     protected List<String> getOutResponseHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3708.         List<String> list = new ArrayList<>();
  3709.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3710.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3711.             if(confPorta.getResponse()!=null) {
  3712.                 fillListHandlers(confPorta.getResponse().getOutList(), list);
  3713.             }
  3714.         }
  3715.         return list;
  3716.     }
  3717.     protected List<String> getPostOutResponseHandlers(PortaApplicativa pa) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  3718.         List<String> list = new ArrayList<>();
  3719.         if(pa!=null && pa.getConfigurazioneHandler()!=null) {
  3720.             ConfigurazionePortaHandler confPorta = pa.getConfigurazioneHandler();
  3721.             if(confPorta.getResponse()!=null) {
  3722.                 fillListHandlers(confPorta.getResponse().getPostOutList(), list);
  3723.             }
  3724.         }
  3725.         return list;
  3726.     }
  3727.    
  3728.     protected List<Object> getExtendedInfo(PortaApplicativa pa)throws DriverConfigurazioneException{

  3729.         if(pa == null || pa.sizeExtendedInfoList()<=0)
  3730.             return null;

  3731.         return pa.getExtendedInfoList();
  3732.     }

  3733.     protected Template getTemplateTrasformazioneRichiesta(Connection connectionPdD,IDPortaApplicativa idPA, String nomeTrasformazione, TrasformazioneRegolaRichiesta richiesta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3734.         return this.configurazionePdD.getTemplateTrasformazioneRichiesta(connectionPdD, idPA, nomeTrasformazione, richiesta, requestInfo);
  3735.     }
  3736.     protected Template getTemplateTrasformazioneSoapRichiesta(Connection connectionPdD,IDPortaApplicativa idPA, String nomeTrasformazione, TrasformazioneRegolaRichiesta richiesta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3737.         return this.configurazionePdD.getTemplateTrasformazioneSoapRichiesta(connectionPdD, idPA, nomeTrasformazione, richiesta, requestInfo);
  3738.     }
  3739.     protected Template getTemplateTrasformazioneRisposta(Connection connectionPdD,IDPortaApplicativa idPA, String nomeTrasformazione, TrasformazioneRegolaRisposta risposta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3740.         return this.configurazionePdD.getTemplateTrasformazioneRisposta(connectionPdD, idPA, nomeTrasformazione, risposta, requestInfo);
  3741.     }
  3742.     protected Template getTemplateTrasformazioneSoapRisposta(Connection connectionPdD,IDPortaApplicativa idPA, String nomeTrasformazione, TrasformazioneRegolaRisposta risposta, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3743.         return this.configurazionePdD.getTemplateTrasformazioneSoapRisposta(connectionPdD, idPA, nomeTrasformazione, risposta, requestInfo);
  3744.     }
  3745.    
  3746.     protected Template getTemplateConnettoreMultiploSticky(Connection connectionPdD,IDPortaApplicativa idPA, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3747.         return this.configurazionePdD.getTemplateConnettoreMultiploSticky(connectionPdD, idPA, template, requestInfo);
  3748.     }
  3749.     protected Template getTemplateConnettoreMultiploCondizionale(Connection connectionPdD,IDPortaApplicativa idPA, String nomeRegola, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3750.         return this.configurazionePdD.getTemplateConnettoreMultiploCondizionale(connectionPdD, idPA, nomeRegola, template, requestInfo);
  3751.     }
  3752.    
  3753.     public Template getTemplateCorrelazioneApplicativaRichiesta(Connection connectionPdD,IDPortaApplicativa idPA, String nomeRegola, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3754.         return this.configurazionePdD.getTemplateCorrelazioneApplicativaRichiesta(connectionPdD, idPA, nomeRegola, template, requestInfo);
  3755.     }
  3756.     public Template getTemplateCorrelazioneApplicativaRisposta(Connection connectionPdD,IDPortaApplicativa idPA, String nomeRegola, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3757.         return this.configurazionePdD.getTemplateCorrelazioneApplicativaRisposta(connectionPdD, idPA, nomeRegola, template, requestInfo);
  3758.     }
  3759.    
  3760.     protected Template getTemplateIntegrazione(Connection connectionPdD,IDPortaApplicativa idPA, File file, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3761.         return this.configurazionePdD.getTemplateIntegrazione(connectionPdD, idPA, file, requestInfo);
  3762.     }
  3763.    
  3764.    





  3765.     /* ********  Servizi Applicativi (Interfaccia)  ******** */

  3766.     protected boolean existsServizioApplicativo(Connection connectionPdD,IDServizioApplicativo idSA) throws DriverConfigurazioneException{

  3767.         ServizioApplicativo servizioApplicativo = null;
  3768.         try{
  3769.             servizioApplicativo = this.configurazionePdD.getServizioApplicativo(connectionPdD,idSA);
  3770.         }catch(DriverConfigurazioneNotFound e){
  3771.             return false;
  3772.         }

  3773.         return servizioApplicativo!=null;

  3774.     }

  3775.     protected ServizioApplicativo getServizioApplicativo(Connection connectionPdD,IDServizioApplicativo idSA) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  3776.         return this.configurazionePdD.getServizioApplicativo(connectionPdD, idSA);
  3777.     }

  3778.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiBasic(Connection connectionPdD,String aUser,String aPassword, CryptConfig config) throws DriverConfigurazioneException{
  3779.         return getIdServizioApplicativoByCredenzialiBasic(connectionPdD, aUser, aPassword, config, null);
  3780.     }
  3781.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiBasic(Connection connectionPdD,String aUser,String aPassword, CryptConfig config,
  3782.             List<String> tipiSoggetto) throws DriverConfigurazioneException{
  3783.         ServizioApplicativo servizioApplicativo = null;
  3784.         try{
  3785.             if(tipiSoggetto!=null) {
  3786.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiBasic(connectionPdD, aUser, aPassword, config, tipiSoggetto);
  3787.             }
  3788.             else {
  3789.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiBasic(connectionPdD, aUser, aPassword, config);
  3790.             }
  3791.         }catch(DriverConfigurazioneNotFound e){
  3792.             /**this.logDebug("autenticazioneHTTP (not found): "+e.getMessage());*/
  3793.         }

  3794.         if(servizioApplicativo!=null){
  3795.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  3796.             idSA.setNome(servizioApplicativo.getNome());
  3797.             if(servizioApplicativo.getTipoSoggettoProprietario()!=null && servizioApplicativo.getNomeSoggettoProprietario()!=null){
  3798.                 idSA.setIdSoggettoProprietario(new IDSoggetto(servizioApplicativo.getTipoSoggettoProprietario(), servizioApplicativo.getNomeSoggettoProprietario()));
  3799.             }
  3800.             return idSA;
  3801.         }
  3802.         else
  3803.             return null;
  3804.     }
  3805.    
  3806.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiApiKey(Connection connectionPdD,String aUser,String aPassword, boolean appId, CryptConfig config) throws DriverConfigurazioneException{
  3807.         return getIdServizioApplicativoByCredenzialiApiKey(connectionPdD, aUser, aPassword, appId, config, null);
  3808.     }
  3809.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiApiKey(Connection connectionPdD,String aUser,String aPassword, boolean appId, CryptConfig config,
  3810.             List<String> tipiSoggetto) throws DriverConfigurazioneException{
  3811.         ServizioApplicativo servizioApplicativo = null;
  3812.         try{
  3813.             if(tipiSoggetto!=null) {
  3814.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiApiKey(connectionPdD, aUser, aPassword, appId, config, tipiSoggetto);
  3815.             }
  3816.             else {
  3817.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiApiKey(connectionPdD, aUser, aPassword, appId, config);
  3818.             }
  3819.         }catch(DriverConfigurazioneNotFound e){
  3820.             /**this.logDebug("autenticazioneHTTP (not found): "+e.getMessage());*/
  3821.         }

  3822.         if(servizioApplicativo!=null){
  3823.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  3824.             idSA.setNome(servizioApplicativo.getNome());
  3825.             if(servizioApplicativo.getTipoSoggettoProprietario()!=null && servizioApplicativo.getNomeSoggettoProprietario()!=null){
  3826.                 idSA.setIdSoggettoProprietario(new IDSoggetto(servizioApplicativo.getTipoSoggettoProprietario(), servizioApplicativo.getNomeSoggettoProprietario()));
  3827.             }
  3828.             return idSA;
  3829.         }
  3830.         else
  3831.             return null;
  3832.     }

  3833.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiSsl(Connection connectionPdD,String aSubject, String aIssuer) throws DriverConfigurazioneException{
  3834.         return getIdServizioApplicativoByCredenzialiSsl(connectionPdD, aSubject, aIssuer,
  3835.                 null);
  3836.     }
  3837.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiSsl(Connection connectionPdD,String aSubject, String aIssuer,
  3838.             List<String> tipiSoggetto) throws DriverConfigurazioneException{
  3839.         return getIdServizioApplicativoByCredenzialiSsl(connectionPdD, aSubject, aIssuer,
  3840.                 tipiSoggetto,
  3841.                 false, false, false);
  3842.     }
  3843.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiSsl(Connection connectionPdD,String aSubject, String aIssuer,
  3844.             List<String> tipiSoggetto,
  3845.             boolean includiApplicativiNonModI, boolean includiApplicativiModIEsterni, boolean includiApplicativiModIInterni) throws DriverConfigurazioneException{
  3846.         ServizioApplicativo servizioApplicativo = null;
  3847.         try{
  3848.             if(tipiSoggetto!=null) {
  3849.                 if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  3850.                     servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiSsl(connectionPdD, aSubject, aIssuer, tipiSoggetto,
  3851.                             includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  3852.                 }
  3853.                 else {
  3854.                     servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiSsl(connectionPdD, aSubject, aIssuer, tipiSoggetto);
  3855.                 }
  3856.             }
  3857.             else {
  3858.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiSsl(connectionPdD, aSubject, aIssuer);
  3859.             }
  3860.         }catch(DriverConfigurazioneNotFound e){
  3861.             /**this.logDebug("autenticazioneHTTP (not found): "+e.getMessage());*/
  3862.         }

  3863.         if(servizioApplicativo!=null){
  3864.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  3865.             idSA.setNome(servizioApplicativo.getNome());
  3866.             if(servizioApplicativo.getTipoSoggettoProprietario()!=null && servizioApplicativo.getNomeSoggettoProprietario()!=null){
  3867.                 idSA.setIdSoggettoProprietario(new IDSoggetto(servizioApplicativo.getTipoSoggettoProprietario(), servizioApplicativo.getNomeSoggettoProprietario()));
  3868.             }
  3869.             return idSA;
  3870.         }
  3871.         else
  3872.             return null;
  3873.     }

  3874.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiSsl(Connection connectionPdD,CertificateInfo certificate, boolean strictVerifier) throws DriverConfigurazioneException{
  3875.         return getIdServizioApplicativoByCredenzialiSsl(connectionPdD, certificate, strictVerifier,
  3876.                 null);
  3877.     }
  3878.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiSsl(Connection connectionPdD,CertificateInfo certificate, boolean strictVerifier,
  3879.             List<String> tipiSoggetto) throws DriverConfigurazioneException{
  3880.         return getIdServizioApplicativoByCredenzialiSsl(connectionPdD, certificate, strictVerifier,
  3881.                 tipiSoggetto,
  3882.                 false, false, false);
  3883.     }
  3884.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiSsl(Connection connectionPdD,CertificateInfo certificate, boolean strictVerifier,
  3885.             List<String> tipiSoggetto,
  3886.             boolean includiApplicativiNonModI, boolean includiApplicativiModIEsterni, boolean includiApplicativiModIInterni) throws DriverConfigurazioneException{
  3887.         ServizioApplicativo servizioApplicativo = null;
  3888.         try{
  3889.             if(tipiSoggetto!=null) {
  3890.                 if(includiApplicativiNonModI || includiApplicativiModIEsterni || includiApplicativiModIInterni) {
  3891.                     servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiSsl(connectionPdD, certificate, strictVerifier, tipiSoggetto,
  3892.                             includiApplicativiNonModI, includiApplicativiModIEsterni, includiApplicativiModIInterni);
  3893.                 }
  3894.                 else {
  3895.                     servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiSsl(connectionPdD, certificate, strictVerifier, tipiSoggetto);
  3896.                 }
  3897.             }
  3898.             else {
  3899.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiSsl(connectionPdD, certificate, strictVerifier);
  3900.             }
  3901.         }catch(DriverConfigurazioneNotFound e){
  3902.             /**this.logDebug("autenticazioneHTTP (not found): "+e.getMessage());*/
  3903.         }

  3904.         if(servizioApplicativo!=null){
  3905.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  3906.             idSA.setNome(servizioApplicativo.getNome());
  3907.             if(servizioApplicativo.getTipoSoggettoProprietario()!=null && servizioApplicativo.getNomeSoggettoProprietario()!=null){
  3908.                 idSA.setIdSoggettoProprietario(new IDSoggetto(servizioApplicativo.getTipoSoggettoProprietario(), servizioApplicativo.getNomeSoggettoProprietario()));
  3909.             }
  3910.             return idSA;
  3911.         }
  3912.         else
  3913.             return null;
  3914.     }

  3915.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiPrincipal(Connection connectionPdD,String principal) throws DriverConfigurazioneException{
  3916.         return getIdServizioApplicativoByCredenzialiPrincipal(connectionPdD, principal, null);
  3917.     }
  3918.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiPrincipal(Connection connectionPdD,String principal,
  3919.             List<String> tipiSoggetto) throws DriverConfigurazioneException{
  3920.         ServizioApplicativo servizioApplicativo = null;
  3921.         try{
  3922.             if(tipiSoggetto!=null) {
  3923.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiPrincipal(connectionPdD, principal, tipiSoggetto);
  3924.             }
  3925.             else {
  3926.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiPrincipal(connectionPdD, principal);
  3927.             }
  3928.         }catch(DriverConfigurazioneNotFound e){
  3929.             /**this.logDebug("autenticazioneHTTP (not found): "+e.getMessage());*/
  3930.         }

  3931.         if(servizioApplicativo!=null){
  3932.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  3933.             idSA.setNome(servizioApplicativo.getNome());
  3934.             if(servizioApplicativo.getTipoSoggettoProprietario()!=null && servizioApplicativo.getNomeSoggettoProprietario()!=null){
  3935.                 idSA.setIdSoggettoProprietario(new IDSoggetto(servizioApplicativo.getTipoSoggettoProprietario(), servizioApplicativo.getNomeSoggettoProprietario()));
  3936.             }
  3937.             return idSA;
  3938.         }
  3939.         else
  3940.             return null;
  3941.     }
  3942.    
  3943.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiToken(Connection connectionPdD,String tokenPolicy, String tokenClientId) throws DriverConfigurazioneException{
  3944.         return getIdServizioApplicativoByCredenzialiToken(connectionPdD, tokenPolicy, tokenClientId, null);
  3945.     }
  3946.     protected IDServizioApplicativo getIdServizioApplicativoByCredenzialiToken(Connection connectionPdD,String tokenPolicy, String tokenClientId,
  3947.             List<String> tipiSoggetto) throws DriverConfigurazioneException{
  3948.         ServizioApplicativo servizioApplicativo = null;
  3949.         try{
  3950.             if(tipiSoggetto!=null) {
  3951.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiToken(connectionPdD, tokenPolicy, tokenClientId, tipiSoggetto);
  3952.             }
  3953.             else {
  3954.                 servizioApplicativo = this.configurazionePdD.getServizioApplicativoByCredenzialiToken(connectionPdD, tokenPolicy, tokenClientId);
  3955.             }
  3956.         }catch(DriverConfigurazioneNotFound e){
  3957.             /**this.logDebug("autenticazioneHTTP (not found): "+e.getMessage());*/
  3958.         }

  3959.         if(servizioApplicativo!=null){
  3960.             IDServizioApplicativo idSA = new IDServizioApplicativo();
  3961.             idSA.setNome(servizioApplicativo.getNome());
  3962.             if(servizioApplicativo.getTipoSoggettoProprietario()!=null && servizioApplicativo.getNomeSoggettoProprietario()!=null){
  3963.                 idSA.setIdSoggettoProprietario(new IDSoggetto(servizioApplicativo.getTipoSoggettoProprietario(), servizioApplicativo.getNomeSoggettoProprietario()));
  3964.             }
  3965.             return idSA;
  3966.         }
  3967.         else
  3968.             return null;
  3969.     }

  3970.     protected boolean autorizzazione(PortaDelegata pd, String servizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  3971.         if( (pd == null) || (servizioApplicativo==null) )
  3972.             return false;

  3973.         for(int j=0; j<pd.sizeServizioApplicativoList(); j++){
  3974.             if(servizioApplicativo.equals(pd.getServizioApplicativo(j).getNome()))
  3975.                 return true;
  3976.         }

  3977.         return false;

  3978.     }

  3979.     protected boolean autorizzazioneTrasportoRoles(RegistroServiziManager registroServiziManager,
  3980.             PortaDelegata pd, ServizioApplicativo sa, InfoConnettoreIngresso infoConnettoreIngresso,
  3981.             PdDContext pddContext, RequestInfo requestInfo,
  3982.             boolean checkRuoloRegistro, boolean checkRuoloEsterno,
  3983.             StringBuilder details) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  3984.         if( (pd == null) || pd.getRuoli()==null || pd.getRuoli().sizeRuoloList()<=0 ){
  3985.             throw new DriverConfigurazioneNotFound("Non sono stati definiti i ruoli necessari a fruire della porta delegata");
  3986.         }

  3987.         if(checkRuoloRegistro && !checkRuoloEsterno){
  3988.             if(sa==null){
  3989.                 throw new DriverConfigurazioneException("Identità servizio applicativo non disponibile; tale informazione è richiesta dall'autorizzazione");
  3990.             }
  3991.         }
  3992.        
  3993.         return _autorizzazioneRoles(registroServiziManager,
  3994.                 null, sa,
  3995.                 infoConnettoreIngresso, true,
  3996.                 pddContext, requestInfo,
  3997.                 checkRuoloRegistro, checkRuoloEsterno,
  3998.                 details,
  3999.                 pd.getRuoli().getMatch(), pd.getRuoli(),
  4000.                 false);

  4001.     }
  4002.    
  4003.     protected boolean autorizzazioneTokenRoles(RegistroServiziManager registroServiziManager,
  4004.             PortaDelegata pd, ServizioApplicativo sa, InfoConnettoreIngresso infoConnettoreIngresso,
  4005.             PdDContext pddContext, RequestInfo requestInfo,
  4006.             boolean checkRuoloRegistro, boolean checkRuoloEsterno,
  4007.             StringBuilder details) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  4008.         if( (pd == null) || pd.getAutorizzazioneToken()==null ||
  4009.                 pd.getAutorizzazioneToken().getRuoli()==null ||
  4010.                 pd.getAutorizzazioneToken().getRuoli().sizeRuoloList()<=0 ){
  4011.             throw new DriverConfigurazioneNotFound("Non sono stati definiti i ruoli necessari a fruire della porta delegata");
  4012.         }

  4013.         if(checkRuoloRegistro && !checkRuoloEsterno){
  4014.             if(sa==null){
  4015.                 throw new DriverConfigurazioneException("Identità servizio applicativo non disponibile; tale informazione è richiesta dall'autorizzazione");
  4016.             }
  4017.         }
  4018.        
  4019.         return _autorizzazioneRoles(registroServiziManager,
  4020.                 null, sa,
  4021.                 infoConnettoreIngresso, true,
  4022.                 pddContext, requestInfo,
  4023.                 checkRuoloRegistro, checkRuoloEsterno,
  4024.                 details,
  4025.                 pd.getAutorizzazioneToken().getRuoli().getMatch(), pd.getAutorizzazioneToken().getRuoli(),
  4026.                 false);

  4027.     }

  4028.     protected void aggiornaProprietaGestioneErrorePD(ProprietaErroreApplicativo gestioneErrore, ServizioApplicativo sa) throws DriverConfigurazioneException {

  4029.         if(sa==null)
  4030.             return;
  4031.         if(sa.getInvocazionePorta()==null)
  4032.             return;
  4033.         if(sa.getInvocazionePorta().getGestioneErrore()==null)
  4034.             return;
  4035.         InvocazionePortaGestioneErrore proprietaSA = sa.getInvocazionePorta().getGestioneErrore();


  4036.         // Aggiornamento proprieta
  4037.         // tipo di fault xml/soap
  4038.         if(CostantiConfigurazione.ERRORE_APPLICATIVO_SOAP.equals(proprietaSA.getFault()))
  4039.             gestioneErrore.setFaultAsXML(false);
  4040.         else if(CostantiConfigurazione.ERRORE_APPLICATIVO_XML.equals(proprietaSA.getFault()))
  4041.             gestioneErrore.setFaultAsXML(true);
  4042.         // fault actor
  4043.         if(proprietaSA.getFaultActor()!=null && StringUtils.isNotEmpty(proprietaSA.getFaultActor()))
  4044.             gestioneErrore.setFaultActor(proprietaSA.getFaultActor());
  4045.         // fault generic code abilitato/disabilitato
  4046.         if(CostantiConfigurazione.ABILITATO.equals(proprietaSA.getGenericFaultCode()))
  4047.             gestioneErrore.setFaultAsGenericCode(true);
  4048.         else if(CostantiConfigurazione.DISABILITATO.equals(proprietaSA.getGenericFaultCode()))
  4049.             gestioneErrore.setFaultAsGenericCode(false);
  4050.         // fault prefix code
  4051.         if(proprietaSA.getPrefixFaultCode()!=null && StringUtils.isNotEmpty(proprietaSA.getPrefixFaultCode()))
  4052.             gestioneErrore.setFaultPrefixCode(proprietaSA.getPrefixFaultCode());

  4053.         return;
  4054.     }

  4055.     protected boolean invocazionePortaDelegataPerRiferimento(ServizioApplicativo sa) throws DriverConfigurazioneException{
  4056.         if(sa==null)
  4057.             return false;
  4058.         if(sa.getInvocazionePorta()==null)
  4059.             return false;
  4060.         return CostantiConfigurazione.ABILITATO.equals(sa.getInvocazionePorta().getInvioPerRiferimento());
  4061.     }

  4062.     protected boolean invocazionePortaDelegataSbustamentoInformazioniProtocollo(ServizioApplicativo sa) throws DriverConfigurazioneException{
  4063.         if(sa==null)
  4064.             return true;
  4065.         if(sa.getInvocazionePorta()==null)
  4066.             return true;
  4067.         return !CostantiConfigurazione.DISABILITATO.equals(sa.getInvocazionePorta().getSbustamentoInformazioniProtocollo());
  4068.     }

  4069.     public List<String> getServiziApplicativiConsegnaNotifichePrioritarie(Connection connectionPdD, String queue) throws DriverConfigurazioneException{
  4070.         try {
  4071.             List<IDConnettore> list = this.configurazionePdD.getConnettoriConsegnaNotifichePrioritarie(connectionPdD, queue);
  4072.             if(list==null || list.isEmpty()) {
  4073.                 throw new DriverConfigurazioneNotFound();
  4074.             }
  4075.             List<String> l = new ArrayList<>();
  4076.             for (IDServizioApplicativo idSA : list) {
  4077.                 if(l.contains(idSA.getNome())==false) {
  4078.                     l.add(idSA.getNome());
  4079.                 }
  4080.             }
  4081.             return l;
  4082.         }catch(DriverConfigurazioneNotFound notFound) {
  4083.             return new ArrayList<>();
  4084.         }
  4085.     }
  4086.    
  4087.     public List<IDConnettore> getConnettoriConsegnaNotifichePrioritarie(Connection connectionPdD, String queue) throws DriverConfigurazioneException{
  4088.         try {
  4089.             return this.configurazionePdD.getConnettoriConsegnaNotifichePrioritarie(connectionPdD, queue);
  4090.         }catch(DriverConfigurazioneNotFound notFound) {
  4091.             return new ArrayList<IDConnettore>();
  4092.         }
  4093.     }
  4094.    
  4095.     public void resetConnettoriConsegnaNotifichePrioritarie(Connection connectionPdD, String queue) throws DriverConfigurazioneException{
  4096.         this.configurazionePdD.resetConnettoriConsegnaNotifichePrioritarie(connectionPdD, queue);
  4097.     }
  4098.    
  4099.     public Map<String, String> getProprietaConfigurazione(ServizioApplicativo sa) throws DriverConfigurazioneException {
  4100.         if (sa == null) {
  4101.             throw new DriverConfigurazioneException("ServizioApplicativo non fornito");
  4102.         } else if (sa.sizeProprietaList() <= 0) {
  4103.             return null;
  4104.         } else {
  4105.             Map<String, String> properties = new HashMap<>();

  4106.             for(int i = 0; i < sa.sizeProprietaList(); ++i) {
  4107.                 Proprieta p = sa.getProprieta(i);
  4108.                 properties.put(p.getNome(), p.getValore());
  4109.             }

  4110.             return properties;
  4111.         }
  4112.     }










  4113.     // INVOCAZIONE SERVIZIO

  4114.     protected boolean invocazioneServizioConGetMessage(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4115.         // Servizio applicativo
  4116.         if(sa==null)
  4117.             return false;
  4118.         if(sa.getInvocazioneServizio()==null)
  4119.             return false;
  4120.         InvocazioneServizio serv = sa.getInvocazioneServizio();
  4121.         return CostantiConfigurazione.ABILITATO.equals(serv.getGetMessage());
  4122.     }

  4123.     protected boolean invocazioneServizioConSbustamento(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4124.         // Servizio applicativo
  4125.         if(sa==null)
  4126.             return false;
  4127.         if(sa.getInvocazioneServizio()==null)
  4128.             return false;
  4129.         InvocazioneServizio serv = sa.getInvocazioneServizio();
  4130.         return CostantiConfigurazione.ABILITATO.equals(serv.getSbustamentoSoap());
  4131.     }

  4132.     protected boolean invocazioneServizioConSbustamentoInformazioniProtocollo(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4133.         // Servizio applicativo
  4134.         if(sa==null)
  4135.             return true;
  4136.         if(sa.getInvocazioneServizio()==null)
  4137.             return true;
  4138.         InvocazioneServizio serv = sa.getInvocazioneServizio();
  4139.         return !CostantiConfigurazione.DISABILITATO.equals(serv.getSbustamentoInformazioniProtocollo());
  4140.     }

  4141.     protected boolean invocazioneServizioConConnettore(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4142.         // Servizio applicativo
  4143.         if(sa==null)
  4144.             return false;
  4145.         if(sa.getInvocazioneServizio()==null)
  4146.             return false;

  4147.         InvocazioneServizio serv = sa.getInvocazioneServizio();
  4148.         Connettore connettore = serv.getConnettore();
  4149.         if(connettore!=null &&
  4150.                 !CostantiConfigurazione.NONE.equals(connettore.getTipo()) &&
  4151.                 !CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo()))
  4152.             return true;
  4153.         else
  4154.             return false;
  4155.     }

  4156.     protected ConnettoreMsg getInvocazioneServizio(Connection connectionPdD,ServizioApplicativo sa,RichiestaApplicativa richiestaApplicativa, RequestInfo requestInfo)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  4157.         // Servizio applicativo
  4158.         if(sa.getInvocazioneServizio()==null)
  4159.             throw new DriverConfigurazioneNotFound("Servizio applicativo ["+richiestaApplicativa.getServizioApplicativo()+"] del soggetto["+richiestaApplicativa.getIDServizio().getSoggettoErogatore()+"] non possieder l'elemento invocazione servizio");
  4160.         InvocazioneServizio serv = sa.getInvocazioneServizio();


  4161.         // Soggetto Erogatore
  4162.         IDSoggetto aSoggetto = richiestaApplicativa.getIDServizio().getSoggettoErogatore();
  4163.         Soggetto soggetto = null;
  4164.         if( requestInfo!=null && requestInfo.getRequestConfig()!=null && aSoggetto!=null) {
  4165.             if(requestInfo.getRequestConfig().getSoggettoErogatoreConfig()!=null &&
  4166.                     aSoggetto.getTipo().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getTipo()) &&
  4167.                     aSoggetto.getNome().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getNome())   ) {
  4168.                 soggetto = requestInfo.getRequestConfig().getSoggettoErogatoreConfig();
  4169.             }
  4170.             else if( requestInfo.getRequestConfig().getSoggettoFruitoreConfig()!=null &&
  4171.                     aSoggetto.getTipo().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getTipo()) &&
  4172.                     aSoggetto.getNome().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getNome())    ) {
  4173.                 soggetto = requestInfo.getRequestConfig().getSoggettoFruitoreConfig();
  4174.             }
  4175.         }
  4176.         if(soggetto==null) {
  4177.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo()!=null) {
  4178.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig()!=null && aSoggetto!=null &&
  4179.                         aSoggetto.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getTipo()) &&
  4180.                         aSoggetto.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getNome())) {
  4181.                     soggetto = requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig();
  4182.                 }
  4183.             }
  4184.         }
  4185.         if(soggetto==null) {
  4186.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo()!=null) {
  4187.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig()!=null && aSoggetto!=null &&
  4188.                         aSoggetto.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getTipo()) &&
  4189.                         aSoggetto.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getNome())) {
  4190.                     soggetto = requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig();
  4191.                 }
  4192.             }
  4193.         }
  4194.         if(soggetto==null) {
  4195.             soggetto = this.configurazionePdD.getSoggetto(connectionPdD,aSoggetto);
  4196.         }
  4197.         if(soggetto==null)
  4198.             throw new DriverConfigurazioneNotFound("[getInvocazioneServizio] Soggetto erogatore non trovato");


  4199.         // Porta Applicativa
  4200.         PortaApplicativa pa = null;
  4201.         if(requestInfo!=null && requestInfo.getRequestConfig()!=null && richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null) {
  4202.             if( requestInfo.getRequestConfig().getPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome().equals(requestInfo.getRequestConfig().getPortaApplicativa().getNome())) {
  4203.                 pa = requestInfo.getRequestConfig().getPortaApplicativa();
  4204.             }
  4205.             else if( requestInfo.getRequestConfig().getPortaApplicativaDefault()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome().equals(requestInfo.getRequestConfig().getPortaApplicativaDefault().getNome())) {
  4206.                 pa = requestInfo.getRequestConfig().getPortaApplicativaDefault();
  4207.             }
  4208.         }
  4209.         if(pa==null) {
  4210.             pa = this.configurazionePdD.getPortaApplicativa(connectionPdD,richiestaApplicativa.getIdPortaApplicativa());
  4211.         }


  4212.         // CONNETTORE
  4213.         Connettore connettore = serv.getConnettore();
  4214.         java.util.Map<String,String> properties = null;
  4215.         if(connettore != null && CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo())==false){
  4216.             String nome = connettore.getNome();
  4217.             if(connettore.getTipo() == null){
  4218.                 // la definizione nel servizio applicativo e' un puntatore, lo cerca nel soggetto.
  4219.                 for(int i=0;i<soggetto.sizeConnettoreList();i++){
  4220.                     if(nome.equals(soggetto.getConnettore(i).getNome())){
  4221.                         connettore = soggetto.getConnettore(i);
  4222.                         break;
  4223.                     }
  4224.                 }
  4225.             }

  4226.             // urlPrefixRewriter
  4227.             setPAUrlPrefixRewriter(connectionPdD,connettore, aSoggetto, requestInfo);

  4228.             // Properties connettore
  4229.             properties = new java.util.HashMap<>();
  4230.             for(int i=0;i<connettore.sizePropertyList();i++){
  4231.                 properties.put(connettore.getProperty(i).getNome(),connettore.getProperty(i).getValore());
  4232.             }
  4233.         }


  4234.         // PROTOCOL-PROPERTIES
  4235.         Map<String, List<String>> protocol_properties = new HashMap<>();
  4236.         for(int i=0;i<pa.sizeProprietaList();i++){
  4237.             TransportUtils.put(protocol_properties, pa.getProprieta(i).getNome(),pa.getProprieta(i).getValore(), false);
  4238.         }

  4239.         // Autenticazione
  4240.         String autenticazione = CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_NONE.toString();
  4241.         String tmp = null;
  4242.         if(serv.getAutenticazione()!=null){
  4243.             tmp = serv.getAutenticazione().toString();
  4244.         }
  4245.         if(CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString().equalsIgnoreCase(tmp)){
  4246.             autenticazione = CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString();
  4247.         }


  4248.         // Credenziali
  4249.         InvocazioneCredenziali credenziali = null;
  4250.         if(serv.getCredenziali()!=null){
  4251.             credenziali = new InvocazioneCredenziali();
  4252.             credenziali.setUser(serv.getCredenziali().getUser());
  4253.             credenziali.setPassword(serv.getCredenziali().getPassword());
  4254.         }

  4255.         // Costruisco connettoreMsg
  4256.         ConnettoreMsg connettoreMsg = null;
  4257.         if(connettore != null){
  4258.             connettoreMsg = new ConnettoreMsg();
  4259.             connettoreMsg.setTipoConnettore(connettore.getTipo());
  4260.             connettoreMsg.setConnectorProperties(properties);
  4261.             connettoreMsg.setSbustamentoSOAP(CostantiConfigurazione.ABILITATO.equals(serv.getSbustamentoSoap()));
  4262.             connettoreMsg.setSbustamentoInformazioniProtocollo(!CostantiConfigurazione.DISABILITATO.equals(serv.getSbustamentoInformazioniProtocollo()));
  4263.             connettoreMsg.setPropertiesTrasporto(protocol_properties);
  4264.             connettoreMsg.setPropertiesUrlBased(protocol_properties);
  4265.             connettoreMsg.setAutenticazione(autenticazione);
  4266.             connettoreMsg.setCredenziali(credenziali);
  4267.         }


  4268.         return connettoreMsg;
  4269.     }

  4270.     protected GestioneErrore getGestioneErroreConnettoreInvocazioneServizio(IProtocolFactory<?> protocolFactory, ServiceBinding serviceBinding, Connection connectionPdD,ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  4271.         //  Servizio applicativo
  4272.         if(sa.getInvocazioneServizio()==null ||
  4273.                 sa.getInvocazioneServizio().getGestioneErrore()==null)
  4274.             return getGestioneErroreConnettoreComponenteIntegrazione(protocolFactory, serviceBinding, connectionPdD);
  4275.         InvocazioneServizio invocazione = sa.getInvocazioneServizio();
  4276.         return invocazione.getGestioneErrore();
  4277.     }

  4278.     protected boolean invocazioneServizioPerRiferimento(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4279.         //    Servizio applicativo
  4280.         if(sa==null)
  4281.             return false;
  4282.         if(sa.getInvocazioneServizio()==null)
  4283.             return false;
  4284.         return CostantiConfigurazione.ABILITATO.equals(sa.getInvocazioneServizio().getInvioPerRiferimento());
  4285.     }

  4286.     protected boolean invocazioneServizioRispostaPerRiferimento(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4287.         //        Servizio applicativo
  4288.         if(sa==null)
  4289.             return false;
  4290.         if(sa.getInvocazioneServizio()==null)
  4291.             return false;
  4292.         return CostantiConfigurazione.ABILITATO.equals(sa.getInvocazioneServizio().getRispostaPerRiferimento());
  4293.     }








  4294.     // RICEZIONE RISPOSTA ASINCRONA

  4295.     protected boolean existsConsegnaRispostaAsincrona(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound {

  4296.         if(sa==null)
  4297.             return false;
  4298.         if(sa.getRispostaAsincrona()==null)
  4299.             return false;

  4300.         if(CostantiConfigurazione.ABILITATO.equals(sa.getRispostaAsincrona().getGetMessage()))
  4301.             return true;
  4302.         if( sa.getRispostaAsincrona().getConnettore()!=null
  4303.                 && !CostantiConfigurazione.DISABILITATO.equals(sa.getRispostaAsincrona().getConnettore().getTipo()) )
  4304.             return true;

  4305.         return false;

  4306.     }

  4307.     protected boolean consegnaRispostaAsincronaConGetMessage(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4308.         // Servizio applicativo
  4309.         if(sa==null)
  4310.             return false;
  4311.         if(sa.getRispostaAsincrona()==null)
  4312.             return false;
  4313.         RispostaAsincrona serv = sa.getRispostaAsincrona();
  4314.         return CostantiConfigurazione.ABILITATO.equals(serv.getGetMessage());
  4315.     }

  4316.     protected boolean consegnaRispostaAsincronaConSbustamento(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4317.         // Servizio applicativo
  4318.         if(sa==null)
  4319.             return false;
  4320.         if(sa.getRispostaAsincrona()==null)
  4321.             return false;
  4322.         RispostaAsincrona serv = sa.getRispostaAsincrona();
  4323.         return CostantiConfigurazione.ABILITATO.equals(serv.getSbustamentoSoap());
  4324.     }

  4325.     protected boolean consegnaRispostaAsincronaConSbustamentoInformazioniProtocollo(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4326.         // Servizio applicativo
  4327.         if(sa==null)
  4328.             return true;
  4329.         if(sa.getRispostaAsincrona()==null)
  4330.             return true;
  4331.         RispostaAsincrona serv = sa.getRispostaAsincrona();
  4332.         return !CostantiConfigurazione.DISABILITATO.equals(serv.getSbustamentoInformazioniProtocollo());
  4333.     }

  4334.     protected boolean consegnaRispostaAsincronaConConnettore(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4335.         // Servizio applicativo
  4336.         if(sa==null)
  4337.             return false;
  4338.         if(sa.getRispostaAsincrona()==null)
  4339.             return false;
  4340.         RispostaAsincrona serv = sa.getRispostaAsincrona();
  4341.         Connettore connettore = serv.getConnettore();
  4342.         if(connettore!=null &&
  4343.                 !CostantiConfigurazione.NONE.equals(connettore.getTipo()) &&
  4344.                 !CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo()))
  4345.             return true;
  4346.         else
  4347.             return false;
  4348.     }

  4349.     protected ConnettoreMsg getConsegnaRispostaAsincrona(Connection connectionPdD,ServizioApplicativo sa,RichiestaDelegata idPD, RequestInfo requestInfo)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  4350.         // Servizio applicativo
  4351.         if(sa.getRispostaAsincrona()==null)
  4352.             throw new DriverConfigurazioneNotFound("Servizio applicativo ["+idPD.getServizioApplicativo()+"] del soggetto["+idPD.getIdSoggettoFruitore()+"] non possiede una risposta Asincrona");
  4353.         RispostaAsincrona serv = sa.getRispostaAsincrona();


  4354.         // Soggetto che possiede il connettore
  4355.         IDSoggetto aSoggetto = idPD.getIdSoggettoFruitore();
  4356.         Soggetto soggetto = null;
  4357.         if( requestInfo!=null && requestInfo.getRequestConfig()!=null && aSoggetto!=null) {
  4358.             if(requestInfo.getRequestConfig().getSoggettoErogatoreConfig()!=null &&
  4359.                     aSoggetto.getTipo().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getTipo()) &&
  4360.                     aSoggetto.getNome().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getNome())   ) {
  4361.                 soggetto = requestInfo.getRequestConfig().getSoggettoErogatoreConfig();
  4362.             }
  4363.             else if( requestInfo.getRequestConfig().getSoggettoFruitoreConfig()!=null &&
  4364.                     aSoggetto.getTipo().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getTipo()) &&
  4365.                     aSoggetto.getNome().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getNome())    ) {
  4366.                 soggetto = requestInfo.getRequestConfig().getSoggettoFruitoreConfig();
  4367.             }
  4368.         }
  4369.         if(soggetto==null) {
  4370.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo()!=null) {
  4371.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig()!=null && aSoggetto!=null &&
  4372.                         aSoggetto.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getTipo()) &&
  4373.                         aSoggetto.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getNome())) {
  4374.                     soggetto = requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig();
  4375.                 }
  4376.             }
  4377.         }
  4378.         if(soggetto==null) {
  4379.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo()!=null) {
  4380.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig()!=null && aSoggetto!=null &&
  4381.                         aSoggetto.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getTipo()) &&
  4382.                         aSoggetto.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getNome())) {
  4383.                     soggetto = requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig();
  4384.                 }
  4385.             }
  4386.         }
  4387.         if(soggetto==null) {
  4388.             soggetto = this.configurazionePdD.getSoggetto(connectionPdD,aSoggetto);
  4389.         }
  4390.         if(soggetto==null)
  4391.             throw new DriverConfigurazioneNotFound("[getConsegnaRispostaAsincrona] Soggetto non trovato");


  4392.         // CONNETTORE
  4393.         Connettore connettore = serv.getConnettore();
  4394.         java.util.Map<String,String> properties = null;
  4395.         if(connettore != null && CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo())==false){
  4396.             String nome = connettore.getNome();
  4397.             if(connettore.getTipo() == null){
  4398.                 // la definizione nel servizio applicativo e' un puntatore, lo cerca nel soggetto.
  4399.                 for(int i=0;i<soggetto.sizeConnettoreList();i++){
  4400.                     if(nome.equals(soggetto.getConnettore(i).getNome())){
  4401.                         connettore = soggetto.getConnettore(i);
  4402.                         break;
  4403.                     }
  4404.                 }
  4405.             }

  4406.             // urlPrefixRewriter
  4407.             setPAUrlPrefixRewriter(connectionPdD,connettore, aSoggetto, requestInfo);

  4408.             // set properties
  4409.             properties = new java.util.HashMap<>();
  4410.             for(int i=0;i<connettore.sizePropertyList();i++){
  4411.                 properties.put(connettore.getProperty(i).getNome(),connettore.getProperty(i).getValore());
  4412.             }
  4413.         }


  4414.         // Autenticazione
  4415.         String autenticazione = CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_NONE.toString();
  4416.         String tmp = null;
  4417.         if(serv.getAutenticazione()!=null){
  4418.             tmp = serv.getAutenticazione().toString();
  4419.         }
  4420.         if(CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString().equalsIgnoreCase(tmp))
  4421.             autenticazione = CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString();


  4422.         // Credenziali
  4423.         InvocazioneCredenziali credenziali = null;
  4424.         if(serv.getCredenziali()!=null){
  4425.             credenziali = new InvocazioneCredenziali();
  4426.             credenziali.setUser(serv.getCredenziali().getUser());
  4427.             credenziali.setPassword(serv.getCredenziali().getPassword());
  4428.         }

  4429.         // Costruisco connettoreMsg
  4430.         ConnettoreMsg connettoreMsg = null;
  4431.         if(connettore != null){
  4432.             connettoreMsg = new ConnettoreMsg();
  4433.             connettoreMsg.setTipoConnettore(connettore.getTipo());
  4434.             connettoreMsg.setConnectorProperties(properties);

  4435.             connettoreMsg.setSbustamentoSOAP(CostantiConfigurazione.ABILITATO.equals(serv.getSbustamentoSoap()));
  4436.             connettoreMsg.setSbustamentoInformazioniProtocollo(!CostantiConfigurazione.DISABILITATO.equals(serv.getSbustamentoInformazioniProtocollo()));
  4437.             connettoreMsg.setAutenticazione(autenticazione);
  4438.             connettoreMsg.setCredenziali(credenziali);
  4439.         }


  4440.         return connettoreMsg;
  4441.     }

  4442.     protected ConnettoreMsg getConsegnaRispostaAsincrona(Connection connectionPdD,ServizioApplicativo sa,RichiestaApplicativa richiestaApplicativa, RequestInfo requestInfo)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  4443.         //       Servizio applicativo
  4444.         if(sa.getRispostaAsincrona()==null)
  4445.             throw new DriverConfigurazioneNotFound("Servizio applicativo ["+richiestaApplicativa.getServizioApplicativo()+"] del soggetto["+richiestaApplicativa.getSoggettoFruitore()+"] non possiede l'elemento invocazione servizio");
  4446.         RispostaAsincrona serv = sa.getRispostaAsincrona();


  4447.         // Soggetto che contiene il connettore
  4448.         IDSoggetto aSoggetto = richiestaApplicativa.getIDServizio().getSoggettoErogatore();
  4449.         Soggetto soggetto = null;
  4450.         if( requestInfo!=null && requestInfo.getRequestConfig()!=null && aSoggetto!=null) {
  4451.             if(requestInfo.getRequestConfig().getSoggettoErogatoreConfig()!=null &&
  4452.                     aSoggetto.getTipo().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getTipo()) &&
  4453.                     aSoggetto.getNome().equals(requestInfo.getRequestConfig().getSoggettoErogatoreConfig().getNome())   ) {
  4454.                 soggetto = requestInfo.getRequestConfig().getSoggettoErogatoreConfig();
  4455.             }
  4456.             else if( requestInfo.getRequestConfig().getSoggettoFruitoreConfig()!=null &&
  4457.                     aSoggetto.getTipo().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getTipo()) &&
  4458.                     aSoggetto.getNome().equals(requestInfo.getRequestConfig().getSoggettoFruitoreConfig().getNome())    ) {
  4459.                 soggetto = requestInfo.getRequestConfig().getSoggettoFruitoreConfig();
  4460.             }
  4461.         }
  4462.         if(soggetto==null) {
  4463.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo()!=null) {
  4464.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig()!=null && aSoggetto!=null &&
  4465.                         aSoggetto.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getTipo()) &&
  4466.                         aSoggetto.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig().getNome())) {
  4467.                     soggetto = requestInfo.getRequestThreadContext().getRequestFruitoreTrasportoInfo().getSoggettoFruitoreConfig();
  4468.                 }
  4469.             }
  4470.         }
  4471.         if(soggetto==null) {
  4472.             if(requestInfo!=null && requestInfo.getRequestThreadContext()!=null && requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo()!=null) {
  4473.                 if(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig()!=null && aSoggetto!=null &&
  4474.                         aSoggetto.getTipo().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getTipo()) &&
  4475.                         aSoggetto.getNome().equals(requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig().getNome())) {
  4476.                     soggetto = requestInfo.getRequestThreadContext().getRequestFruitoreTokenInfo().getSoggettoFruitoreConfig();
  4477.                 }
  4478.             }
  4479.         }
  4480.         if(soggetto==null) {
  4481.             soggetto = this.configurazionePdD.getSoggetto(connectionPdD,aSoggetto);
  4482.         }
  4483.         if(soggetto==null)
  4484.             throw new DriverConfigurazioneNotFound("[getConsegnaRispostaAsincrona] Soggetto non trovato");


  4485.         // Porta Applicativa
  4486.         PortaApplicativa pa = null;
  4487.         if(requestInfo!=null && requestInfo.getRequestConfig()!=null && richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null) {
  4488.             if( requestInfo.getRequestConfig().getPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome().equals(requestInfo.getRequestConfig().getPortaApplicativa().getNome())) {
  4489.                 pa = requestInfo.getRequestConfig().getPortaApplicativa();
  4490.             }
  4491.             else if( requestInfo.getRequestConfig().getPortaApplicativaDefault()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome().equals(requestInfo.getRequestConfig().getPortaApplicativaDefault().getNome())) {
  4492.                 pa = requestInfo.getRequestConfig().getPortaApplicativaDefault();
  4493.             }
  4494.         }
  4495.         if(pa==null) {
  4496.             pa = this.configurazionePdD.getPortaApplicativa(connectionPdD,richiestaApplicativa.getIdPortaApplicativa());
  4497.         }


  4498.         // CONNETTORE
  4499.         Connettore connettore = serv.getConnettore();
  4500.         java.util.Map<String,String> properties = null;
  4501.         if(connettore != null && CostantiConfigurazione.DISABILITATO.equals(connettore.getTipo())==false){
  4502.             String nome = connettore.getNome();
  4503.             if(connettore.getTipo() == null){
  4504.                 // la definizione nel servizio applicativo e' un puntatore, lo cerca nel soggetto.
  4505.                 for(int i=0;i<soggetto.sizeConnettoreList();i++){
  4506.                     if(nome.equals(soggetto.getConnettore(i).getNome())){
  4507.                         connettore = soggetto.getConnettore(i);
  4508.                         break;
  4509.                     }
  4510.                 }
  4511.             }

  4512.             // urlPrefixRewriter
  4513.             setPAUrlPrefixRewriter(connectionPdD,connettore, aSoggetto, requestInfo);

  4514.             // Properties connettore
  4515.             properties = new java.util.HashMap<>();
  4516.             for(int i=0;i<connettore.sizePropertyList();i++){
  4517.                 properties.put(connettore.getProperty(i).getNome(),connettore.getProperty(i).getValore());
  4518.             }
  4519.         }


  4520.         // PROTOCOL-PROPERTIES
  4521.         Map<String, List<String>> protocol_properties = new HashMap<>();
  4522.         for(int i=0;i<pa.sizeProprietaList();i++){
  4523.             TransportUtils.put(protocol_properties, pa.getProprieta(i).getNome(),pa.getProprieta(i).getValore(), false);
  4524.         }

  4525.         // Autenticazione
  4526.         String autenticazione = CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_NONE.toString();
  4527.         String tmp = null;
  4528.         if(serv.getAutenticazione()!=null){
  4529.             tmp = serv.getAutenticazione().toString();
  4530.         }
  4531.         if(CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString().equalsIgnoreCase(tmp))
  4532.             autenticazione = CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString();


  4533.         // Credenziali
  4534.         InvocazioneCredenziali credenziali = null;
  4535.         if(serv.getCredenziali()!=null){
  4536.             credenziali = new InvocazioneCredenziali();
  4537.             credenziali.setUser(serv.getCredenziali().getUser());
  4538.             credenziali.setPassword(serv.getCredenziali().getPassword());
  4539.         }

  4540.         // Costruisco connettoreMsg
  4541.         ConnettoreMsg connettoreMsg = null;
  4542.         if(connettore != null){
  4543.             connettoreMsg = new ConnettoreMsg();
  4544.             connettoreMsg.setTipoConnettore(connettore.getTipo());
  4545.             connettoreMsg.setConnectorProperties(properties);
  4546.             connettoreMsg.setSbustamentoSOAP(CostantiConfigurazione.ABILITATO.equals(serv.getSbustamentoSoap()));
  4547.             connettoreMsg.setSbustamentoInformazioniProtocollo(!CostantiConfigurazione.DISABILITATO.equals(serv.getSbustamentoInformazioniProtocollo()));
  4548.             connettoreMsg.setPropertiesTrasporto(protocol_properties);
  4549.             connettoreMsg.setPropertiesUrlBased(protocol_properties);
  4550.             connettoreMsg.setAutenticazione(autenticazione);
  4551.             connettoreMsg.setCredenziali(credenziali);
  4552.         }


  4553.         return connettoreMsg;
  4554.     }

  4555.     protected GestioneErrore getGestioneErroreConnettoreRispostaAsincrona(IProtocolFactory<?> protocolFactory, ServiceBinding serviceBinding, Connection connectionPdD,ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  4556.         //  Servizio applicativo
  4557.         if(sa.getRispostaAsincrona()==null ||
  4558.                 sa.getRispostaAsincrona().getGestioneErrore()==null )
  4559.             return getGestioneErroreConnettoreComponenteIntegrazione(protocolFactory, serviceBinding, connectionPdD);
  4560.         RispostaAsincrona asincrona = sa.getRispostaAsincrona();
  4561.         return asincrona.getGestioneErrore();

  4562.     }

  4563.     protected boolean consegnaRispostaAsincronaPerRiferimento(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4564.         //    Servizio applicativo
  4565.         if(sa==null)
  4566.             return false;
  4567.         if(sa.getRispostaAsincrona()==null)
  4568.             return false;
  4569.         return CostantiConfigurazione.ABILITATO.equals(sa.getRispostaAsincrona().getInvioPerRiferimento());
  4570.     }

  4571.     protected boolean consegnaRispostaAsincronaRispostaPerRiferimento(ServizioApplicativo sa)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  4572.         // Servizio applicativo
  4573.         if(sa==null)
  4574.             return false;
  4575.         if(sa.getRispostaAsincrona()==null)
  4576.             return false;
  4577.         return CostantiConfigurazione.ABILITATO.equals(sa.getRispostaAsincrona().getRispostaPerRiferimento());
  4578.     }





  4579.     // CHECK CERTIFICATI
  4580.    
  4581.     protected CertificateCheck checkCertificatoApplicativo(Connection connectionPdD,boolean useCache,
  4582.             long idSA, int sogliaWarningGiorni,
  4583.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4584.        
  4585.         if(useCache) {
  4586.             throw new DriverConfigurazioneException("Not Implemented");
  4587.         }
  4588.        
  4589.         ServizioApplicativo sa = null;
  4590.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  4591.         if(driver instanceof DriverConfigurazioneDB) {
  4592.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  4593.             sa = driverDB.getServizioApplicativo(idSA);
  4594.         }
  4595.         else {
  4596.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  4597.         }
  4598.         return checkCertificatoApplicativo(sa,sogliaWarningGiorni,
  4599.                 addCertificateDetails, separator, newLine,
  4600.                 this.logger);
  4601.     }
  4602.     protected CertificateCheck checkCertificatoApplicativo(Connection connectionPdD,boolean useCache,
  4603.             IDServizioApplicativo idSA, int sogliaWarningGiorni,
  4604.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4605.        
  4606.         ServizioApplicativo sa = null;
  4607.         if(useCache) {
  4608.             sa = this.configurazionePdD.getServizioApplicativo(connectionPdD, idSA);
  4609.         }
  4610.         else {
  4611.             sa = this.configurazionePdD.getDriverConfigurazionePdD().getServizioApplicativo(idSA);
  4612.         }
  4613.         return checkCertificatoApplicativo(sa, sogliaWarningGiorni,
  4614.                 addCertificateDetails, separator, newLine,
  4615.                 this.logger);
  4616.     }
  4617.     public static CertificateCheck checkCertificatoApplicativo(ServizioApplicativo sa, int sogliaWarningGiorni,
  4618.             boolean addCertificateDetails, String separator, String newLine,
  4619.             Logger log) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4620.        
  4621.         if(sa==null) {
  4622.             throw new DriverConfigurazioneException("Applicativo non fornito");
  4623.         }
  4624.         if(sa.getInvocazionePorta()==null || sa.getInvocazionePorta().sizeCredenzialiList()<=0) {
  4625.             throw new DriverConfigurazioneException("Nessuna credenziale risulta associata all'applicativo");
  4626.         }
  4627.         List<byte[]> certs = new ArrayList<>();
  4628.         List<Boolean> strictValidation = new ArrayList<>();
  4629.         for (int i = 0; i < sa.getInvocazionePorta().sizeCredenzialiList(); i++) {
  4630.             Credenziali c = sa.getInvocazionePorta().getCredenziali(i);
  4631.             if(!org.openspcoop2.core.config.constants.CredenzialeTipo.SSL.equals(c.getTipo())) {
  4632.                 throw new DriverConfigurazioneException("La credenziale ("+c.getTipo()+") associata all'applicativo non è un certificato x509");
  4633.             }
  4634.             if(c.getCertificate()!=null) {
  4635.                 certs.add(c.getCertificate());
  4636.                 strictValidation.add(c.isCertificateStrictVerification());
  4637.             }
  4638.         }
  4639.         if(certs.isEmpty()) {
  4640.             throw new DriverConfigurazioneException("Nessun certificato risulta associata all'applicativo");
  4641.         }
  4642.         else {
  4643.             try {
  4644.                 return CertificateUtils.checkCertificateClient(certs, strictValidation, sogliaWarningGiorni,  
  4645.                         addCertificateDetails, separator, newLine,
  4646.                         log);
  4647.             }catch(Exception t) {
  4648.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  4649.             }
  4650.         }

  4651.     }

  4652.     protected CertificateCheck checkCertificatoModiApplicativo(Connection connectionPdD,boolean useCache,
  4653.             long idSA, int sogliaWarningGiorni,
  4654.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4655.        
  4656.         if(useCache) {
  4657.             throw new DriverConfigurazioneException("Not Implemented");
  4658.         }
  4659.        
  4660.         ServizioApplicativo sa = null;
  4661.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  4662.         if(driver instanceof DriverConfigurazioneDB) {
  4663.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  4664.             sa = driverDB.getServizioApplicativo(idSA);
  4665.         }
  4666.         else {
  4667.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  4668.         }
  4669.         return checkCertificatoModiApplicativo(sa,sogliaWarningGiorni,
  4670.                 addCertificateDetails, separator, newLine,
  4671.                 this.logger);
  4672.     }
  4673.     protected CertificateCheck checkCertificatoModiApplicativo(Connection connectionPdD,boolean useCache,
  4674.             IDServizioApplicativo idSA, int sogliaWarningGiorni,
  4675.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4676.        
  4677.         ServizioApplicativo sa = null;
  4678.         if(useCache) {
  4679.             sa = this.configurazionePdD.getServizioApplicativo(connectionPdD, idSA);
  4680.         }
  4681.         else {
  4682.             sa = this.configurazionePdD.getDriverConfigurazionePdD().getServizioApplicativo(idSA);
  4683.         }
  4684.         return checkCertificatoModiApplicativo(sa, sogliaWarningGiorni,
  4685.                 addCertificateDetails, separator, newLine,
  4686.                 this.logger);
  4687.     }
  4688.     public static CertificateCheck checkCertificatoModiApplicativo(ServizioApplicativo sa, int sogliaWarningGiorni,
  4689.             boolean addCertificateDetails, String separator, String newLine,
  4690.             Logger log) throws DriverConfigurazioneException {
  4691.        
  4692.         String protocollo = null;
  4693.         try {
  4694.             protocollo = ProtocolFactoryManager.getInstance().getProtocolByOrganizationType(sa.getTipoSoggettoProprietario());
  4695.         }catch(Exception e) {
  4696.             throw new DriverConfigurazioneException(e.getMessage(),e);
  4697.         }
  4698.         boolean modi = CostantiLabel.MODIPA_PROTOCOL_NAME.equals(protocollo);
  4699.         if(!modi) {
  4700.             throw new DriverConfigurazioneException("Il profilo di interoperabilità dell'applicativo non è "+CostantiLabel.MODIPA_PROTOCOL_LABEL);
  4701.         }
  4702.        
  4703.         KeystoreParams keystoreParams = ModIUtils.getApplicativoKeystoreParams(sa.getProtocolPropertyList());
  4704.         if(keystoreParams==null) {
  4705.             throw new DriverConfigurazioneException("Non risulta alcun keystore, da utilizzare per la firma "+CostantiLabel.MODIPA_PROTOCOL_LABEL+", associato all'applicativo");
  4706.         }
  4707.        
  4708.         CertificateCheck check = null;
  4709.         boolean classpathSupported = false;
  4710.         try {
  4711.             if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  4712.                 IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  4713.                
  4714.                 check = CertificateUtils.checkKeyPair(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairPublicKeyPath(), keystoreParams.getKeyPassword(), keystoreParams.getKeyPairAlgorithm(),
  4715.                         byokUnwrapManager,
  4716.                         false, //addCertificateDetails,  
  4717.                         separator, newLine);
  4718.             }
  4719.             else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  4720.                 throw new DriverConfigurazioneException("Nell'Applicativo "+sa.getNome()+" la configurazione ModI utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_LABEL+" non compatibile la firma dei messaggi");
  4721.             }
  4722.             else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  4723.                 IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  4724.                
  4725.                 check = CertificateUtils.checkKeystoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(), byokUnwrapManager,
  4726.                         false, //addCertificateDetails,  
  4727.                         separator, newLine);
  4728.             }
  4729.             else {
  4730.                 IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  4731.                
  4732.                 if(keystoreParams.getStore()!=null) {
  4733.                     check = CertificateUtils.checkKeyStore(CostantiLabel.STORE_CARICATO_BASEDATI, keystoreParams.getStore(), keystoreParams.getType(), keystoreParams.getPassword(),
  4734.                             byokUnwrapManager,
  4735.                             keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  4736.                             sogliaWarningGiorni,
  4737.                             addCertificateDetails, separator, newLine,
  4738.                             log);
  4739.                 }
  4740.                 else {
  4741.                     check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(), keystoreParams.getPassword(),
  4742.                             byokUnwrapManager,
  4743.                             keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  4744.                             sogliaWarningGiorni,
  4745.                             addCertificateDetails, separator, newLine,
  4746.                             log);
  4747.                 }
  4748.             }
  4749.         }catch(Exception t) {
  4750.             throw new DriverConfigurazioneException(t.getMessage(),t);
  4751.         }

  4752.         if(check==null || StatoCheck.OK.equals(check.getStatoCheck())) {
  4753.             byte[] cert = ModIUtils.getApplicativoKeystoreCertificate(sa.getProtocolPropertyList());
  4754.             if(cert!=null && cert.length>0) {
  4755.                 try {
  4756.                     return CertificateUtils.checkSingleCertificate("Certificato associato al keystore ModI", cert,
  4757.                             sogliaWarningGiorni,
  4758.                             separator, newLine);
  4759.                 }catch(Exception t) {
  4760.                     throw new DriverConfigurazioneException(t.getMessage(),t);
  4761.                 }
  4762.             }
  4763.         }
  4764.        
  4765.         return check;
  4766.     }

  4767.    
  4768.     protected CertificateCheck checkCertificatiConnettoreHttpsById(Connection connectionPdD,boolean useCache,
  4769.             long idConnettore, int sogliaWarningGiorni,
  4770.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4771.        
  4772.         if(connectionPdD!=null) {
  4773.             // nop
  4774.         }
  4775.        
  4776.         if(useCache) {
  4777.             throw new DriverConfigurazioneException("Not Implemented");
  4778.         }
  4779.        
  4780.         Connettore connettore = null;
  4781.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  4782.         if(driver instanceof DriverConfigurazioneDB) {
  4783.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  4784.             connettore = driverDB.getConnettore(idConnettore);
  4785.         }
  4786.         else {
  4787.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  4788.         }
  4789.         return checkCertificatiConnettoreHttpsById(connettore,sogliaWarningGiorni,
  4790.                 addCertificateDetails, separator, newLine,
  4791.                 this.logger);
  4792.     }
  4793.     public static CertificateCheck checkCertificatiConnettoreHttpsById(Connettore connettore, int sogliaWarningGiorni,
  4794.             boolean addCertificateDetails, String separator, String newLine,
  4795.             Logger log) throws DriverConfigurazioneException {
  4796.        
  4797.         TipiConnettore tipo = TipiConnettore.toEnumFromName(connettore.getTipo());
  4798.         if( !TipiConnettore.HTTPS.equals(tipo)) {
  4799.             throw new DriverConfigurazioneException("Il connettore indicato non è di tipo https");
  4800.         }
  4801.        
  4802.         SSLConfig httpsProp = null;
  4803.         Map<String,Object> dynamicMap = null;
  4804.         try {
  4805.             httpsProp = ConnettoreHTTPSProperties.readProperties(connettore.getProperties());
  4806.             dynamicMap = DynamicMapBuilderUtils.buildDynamicMap(null, null, null,
  4807.                     log);
  4808.             httpsProp.setDynamicMap(dynamicMap);
  4809.         }catch(Exception t) {
  4810.             throw new DriverConfigurazioneException(t.getMessage(),t);
  4811.         }
  4812.         CertificateCheck check = null;
  4813.         boolean classpathSupported = false;
  4814.                
  4815.         String storeDetails = null; // per evitare duplicazione
  4816.        
  4817.         if(httpsProp.getKeyStoreLocation()!=null) {
  4818.             try {
  4819.                 IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapPolicyUtilities.getBYOKUnwrapManager(httpsProp.getKeyStoreBYOKPolicy(), dynamicMap);
  4820.                
  4821.                 check = CertificateUtils.checkKeyStore(httpsProp.getKeyStoreLocation(), classpathSupported, httpsProp.getKeyStoreType(),
  4822.                         httpsProp.getKeyStorePassword(),
  4823.                         byokUnwrapManager,
  4824.                         httpsProp.getKeyAlias(), httpsProp.getKeyPassword(),
  4825.                         sogliaWarningGiorni,
  4826.                         false, //addCertificateDetails,  
  4827.                         separator, newLine,
  4828.                         log);
  4829.                
  4830.                 if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  4831.                     storeDetails = CertificateUtils.toStringKeyStore(httpsProp.getKeyStoreLocation(), httpsProp.getKeyStoreType(),
  4832.                             httpsProp.getKeyStoreBYOKPolicy(),
  4833.                             httpsProp.getKeyAlias(),
  4834.                             separator, newLine);
  4835.                 }
  4836.             }catch(Exception t) {
  4837.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  4838.             }
  4839.         }
  4840.        
  4841.         if(check==null || StatoCheck.OK.equals(check.getStatoCheck())) {
  4842.             if(!httpsProp.isTrustAllCerts() && httpsProp.getTrustStoreLocation()!=null) {
  4843.                 try {
  4844.                     check = CertificateUtils.checkTrustStore(httpsProp.getTrustStoreLocation(), classpathSupported, httpsProp.getTrustStoreType(),
  4845.                             httpsProp.getTrustStorePassword(), httpsProp.getTrustStoreCRLsLocation(), httpsProp.getTrustStoreOCSPPolicy(),
  4846.                             sogliaWarningGiorni,
  4847.                             false, //addCertificateDetails,
  4848.                             separator, newLine,
  4849.                             log);
  4850.                    
  4851.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  4852.                         storeDetails = CertificateUtils.toStringTrustStore(httpsProp.getTrustStoreLocation(), httpsProp.getTrustStoreType(),
  4853.                                 httpsProp.getTrustStoreCRLsLocation(), httpsProp.getTrustStoreOCSPPolicy(),
  4854.                                 separator, newLine);
  4855.                     }
  4856.                 }catch(Exception t) {
  4857.                     throw new DriverConfigurazioneException(t.getMessage(),t);
  4858.                 }
  4859.             }
  4860.         }
  4861.        
  4862.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  4863.             String id = RegistroServiziReader.ID_CONFIGURAZIONE_CONNETTORE_HTTPS;
  4864.             if(addCertificateDetails && storeDetails!=null) {
  4865.                 id = id + newLine + storeDetails;
  4866.             }
  4867.             check.setConfigurationId(id);  
  4868.         }  
  4869.        
  4870.         if(check==null) {
  4871.             // connettore https con truststore 'all' senza client autentication
  4872.             check = new CertificateCheck();
  4873.             check.setStatoCheck(StatoCheck.OK);
  4874.         }
  4875.        
  4876.         return check;
  4877.     }

  4878.     public CertificateCheck checkCertificatiJvm(int sogliaWarningGiorni,
  4879.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException{
  4880.         return checkCertificatiJvm(sogliaWarningGiorni,
  4881.                 addCertificateDetails, separator, newLine,
  4882.                 this.logger);
  4883.     }
  4884.    
  4885.     public static CertificateCheck checkCertificatiJvm(int sogliaWarningGiorni,
  4886.             boolean addCertificateDetails, String separator, String newLine,
  4887.             Logger log) throws DriverConfigurazioneException {
  4888.        
  4889.         CertificateCheck check = null;
  4890.         boolean classpathSupported = false;
  4891.        
  4892.         String storeDetails = null; // per evitare duplicazione
  4893.        
  4894.         KeystoreParams keystoreParams = CertificateUtils.readKeyStoreParamsJVM();
  4895.         KeystoreParams truststoreParams = CertificateUtils.readTrustStoreParamsJVM();
  4896.        
  4897.         if(keystoreParams!=null) {
  4898.             try {
  4899.                 IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  4900.                
  4901.                 check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  4902.                         keystoreParams.getPassword(),
  4903.                         byokUnwrapManager,
  4904.                         keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  4905.                         sogliaWarningGiorni,
  4906.                         false, //addCertificateDetails,  
  4907.                         separator, newLine,
  4908.                         log);
  4909.                
  4910.                 if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  4911.                     storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  4912.                             separator, newLine);
  4913.                 }
  4914.             }catch(Exception t) {
  4915.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  4916.             }
  4917.         }
  4918.        
  4919.         if(check==null || StatoCheck.OK.equals(check.getStatoCheck())) {
  4920.             if(truststoreParams!=null) {
  4921.                 try {
  4922.                     check = CertificateUtils.checkTrustStore(truststoreParams.getPath(), classpathSupported, truststoreParams.getType(),
  4923.                             truststoreParams.getPassword(), truststoreParams.getCrls(), truststoreParams.getOcspPolicy(),
  4924.                             sogliaWarningGiorni,
  4925.                             false, //addCertificateDetails,
  4926.                             separator, newLine,
  4927.                             log);
  4928.                    
  4929.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  4930.                         storeDetails = CertificateUtils.toStringTrustStore(truststoreParams,
  4931.                                 separator, newLine);
  4932.                     }
  4933.                 }catch(Exception t) {
  4934.                     throw new DriverConfigurazioneException(t.getMessage(),t);
  4935.                 }
  4936.             }
  4937.         }
  4938.        
  4939.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  4940.             /**String id = "Configurazione https della JVM";*/
  4941.             String id = "";
  4942.             if(addCertificateDetails && storeDetails!=null) {
  4943.                 id = id + newLine + storeDetails;
  4944.             }
  4945.             check.setConfigurationId(id);  
  4946.         }  
  4947.        
  4948.         if(check==null) {
  4949.             // connettore https con truststore 'all' senza client autentication
  4950.             check = new CertificateCheck();
  4951.             check.setStatoCheck(StatoCheck.OK);
  4952.         }
  4953.        
  4954.         return check;
  4955.     }
  4956.    
  4957.     protected CertificateCheck checkCertificatiConnettoreHttpsTokenPolicyValidazione(Connection connectionPdD,boolean useCache,
  4958.             String nome, String tipo, int sogliaWarningGiorni,
  4959.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  4960.        
  4961.         if(connectionPdD!=null) {
  4962.             // nop
  4963.         }
  4964.         if(useCache) {
  4965.             throw new DriverConfigurazioneException("Not Implemented");
  4966.         }
  4967.        
  4968.         GenericProperties gp = null;
  4969.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  4970.         if(driver instanceof DriverConfigurazioneDB) {
  4971.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  4972.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA, nome);
  4973.         }
  4974.         else {
  4975.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  4976.         }
  4977.         return checkCertificatiConnettoreHttpsTokenPolicyValidazione(gp, tipo, sogliaWarningGiorni,
  4978.                 addCertificateDetails, separator, newLine,
  4979.                 this.logger);
  4980.     }
  4981.     public static CertificateCheck checkCertificatiConnettoreHttpsTokenPolicyValidazione(GenericProperties gp, String tipo, int sogliaWarningGiorni,
  4982.             boolean addCertificateDetails, String separator, String newLine,
  4983.             Logger log) throws DriverConfigurazioneException {
  4984.        
  4985.         GestioneToken gestioneToken = new GestioneToken();
  4986.         List<org.openspcoop2.core.config.Connettore> listConnettori = null;
  4987.         try {
  4988.             PolicyGestioneToken policy = TokenUtilities.convertTo(gp, gestioneToken);
  4989.            
  4990.             if( !policy.isEndpointHttps() ) {
  4991.                 throw new DriverConfigurazioneException("La configurazione della policy "+gp.getNome()+" non utilizza un connettore di tipo https");
  4992.             }
  4993.            
  4994.             listConnettori = ConnettoreCheck.convertTokenPolicyValidazioneToConnettore(gp, log);
  4995.         }catch(Exception t) {
  4996.             throw new DriverConfigurazioneException(t.getMessage(),t);
  4997.         }
  4998.        
  4999.         CertificateCheck check = _checkConnettori(listConnettori, tipo, sogliaWarningGiorni,
  5000.                 addCertificateDetails, separator, newLine,
  5001.                 log);
  5002.         if(check!=null) {
  5003.             return check;
  5004.         }
  5005.        
  5006.         throw new DriverConfigurazioneException("Nella policy "+gp.getNome()+" non risulta configurato un connettore per la funzionalità '"+tipo+"'");
  5007.        
  5008.     }
  5009.    
  5010.     protected CertificateCheck checkCertificatiValidazioneJwtTokenPolicyValidazione(Connection connectionPdD,boolean useCache,
  5011.             String nome, int sogliaWarningGiorni,
  5012.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5013.        
  5014.         if(connectionPdD!=null) {
  5015.             // nop
  5016.         }
  5017.        
  5018.         if(useCache) {
  5019.             throw new DriverConfigurazioneException("Not Implemented");
  5020.         }
  5021.        
  5022.         GenericProperties gp = null;
  5023.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5024.         if(driver instanceof DriverConfigurazioneDB) {
  5025.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5026.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA, nome);
  5027.         }
  5028.         else {
  5029.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5030.         }
  5031.         return checkCertificatiValidazioneJwtTokenPolicyValidazione(gp, sogliaWarningGiorni,
  5032.                 addCertificateDetails, separator, newLine,
  5033.                 this.logger);
  5034.     }
  5035.     public static final String ID_CONFIGURAZIONE_TOKEN_VALIDAZIONE_JWT = "Configurazione Validazione JWT";
  5036.     public static CertificateCheck checkCertificatiValidazioneJwtTokenPolicyValidazione(GenericProperties gp, int sogliaWarningGiorni,
  5037.             boolean addCertificateDetails, String separator, String newLine,
  5038.             Logger log) throws DriverConfigurazioneException {
  5039.        
  5040.         GestioneToken gestioneToken = new GestioneToken();
  5041.         KeystoreParams keystoreParams = null;
  5042.         KeystoreParams truststoreParams = null;
  5043.         PolicyGestioneToken policy = null;
  5044.         try {
  5045.             policy = TokenUtilities.convertTo(gp, gestioneToken);
  5046.             if(!TokenUtilities.isValidazioneEnabled(gp)) {
  5047.                 throw new DriverConfigurazioneException("La configurazione nella policy "+gp.getNome()+" non utilizza la funzionalità di validazione JWT");
  5048.             }
  5049.             String tokenType = policy.getTipoToken();
  5050.             if(org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_TYPE_JWS.equals(tokenType)) {
  5051.                 // JWS Compact              
  5052.                 truststoreParams = TokenUtilities.getValidazioneJwtKeystoreParams(policy);
  5053.             }
  5054.             else if(org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_TYPE_JWE.equals(tokenType)) {
  5055.                 // JWE Compact
  5056.                 keystoreParams = TokenUtilities.getValidazioneJwtKeystoreParams(policy);
  5057.             }
  5058.         }catch(Exception t) {
  5059.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5060.         }
  5061.        
  5062.         CertificateCheck check = null;
  5063.         boolean classpathSupported = true;
  5064.                
  5065.         String storeDetails = null; // per evitare duplicazione
  5066.        
  5067.         if(keystoreParams!=null) {
  5068.             try {
  5069.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5070.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di validazione JWT utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5071.                 }
  5072.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5073.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di validazione JWT utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5074.                    
  5075.                 }
  5076.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5077.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5078.                    
  5079.                     if(keystoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || keystoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5080.                         byte [] store = getStoreCertificatiTokenPolicy(policy, keystoreParams, log);
  5081.                         check = CertificateUtils.checkKeystoreJWKs(keystoreParams.getPath(), new String(store), keystoreParams.getKeyAlias(),
  5082.                                 byokUnwrapManager,
  5083.                                 false, //addCertificateDetails,  
  5084.                                 separator, newLine);
  5085.                     }
  5086.                     else{
  5087.                         check = CertificateUtils.checkKeystoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(),
  5088.                                 byokUnwrapManager,
  5089.                                 false, //addCertificateDetails,  
  5090.                                 separator, newLine);
  5091.                     }
  5092.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5093.                         storeDetails = CertificateUtils.toStringKeystoreJWKs(keystoreParams,
  5094.                                 separator, newLine);
  5095.                     }
  5096.                 }
  5097.                 else {  
  5098.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5099.                    
  5100.                     if(keystoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || keystoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5101.                         byte [] store = getStoreCertificatiTokenPolicy(policy, keystoreParams, log);
  5102.                         check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), store, keystoreParams.getType(),
  5103.                                 keystoreParams.getPassword(),
  5104.                                 byokUnwrapManager,
  5105.                                 keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  5106.                                 sogliaWarningGiorni,
  5107.                                 false, //addCertificateDetails,  
  5108.                                 separator, newLine,
  5109.                                 log);
  5110.                     }
  5111.                     else {
  5112.                         check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  5113.                                 keystoreParams.getPassword(),
  5114.                                 byokUnwrapManager,
  5115.                                 keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  5116.                                 sogliaWarningGiorni,
  5117.                                 false, //addCertificateDetails,  
  5118.                                 separator, newLine,
  5119.                                 log);
  5120.                     }
  5121.                    
  5122.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5123.                         storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  5124.                                 separator, newLine);
  5125.                     }
  5126.                 }
  5127.             }catch(Exception t) {
  5128.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5129.             }
  5130.         }
  5131.        
  5132.         if( (check==null || StatoCheck.OK.equals(check.getStatoCheck())) &&
  5133.             truststoreParams!=null
  5134.             ) {
  5135.             try {
  5136.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(truststoreParams.getType())) {
  5137.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di validazione JWT utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5138.                 }
  5139.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(truststoreParams.getType())) {
  5140.                     if(truststoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || truststoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5141.                         byte [] store = getStoreCertificatiTokenPolicy(policy, truststoreParams, log);
  5142.                         check = CertificateUtils.checkPublicKey(truststoreParams.getPath(), store, truststoreParams.getKeyPairAlgorithm(),
  5143.                                 false, //addCertificateDetails,  
  5144.                                 separator, newLine);
  5145.                     }
  5146.                     else {
  5147.                         check = CertificateUtils.checkPublicKey(classpathSupported, truststoreParams.getPath(), truststoreParams.getKeyPairAlgorithm(),
  5148.                                 false, //addCertificateDetails,  
  5149.                                 separator, newLine);
  5150.                     }
  5151.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5152.                         storeDetails = CertificateUtils.toStringPublicKey(truststoreParams,
  5153.                                 separator, newLine);
  5154.                     }
  5155.                 }
  5156.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(truststoreParams.getType())) {
  5157.                     if(truststoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || truststoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5158.                         byte [] store = getStoreCertificatiTokenPolicy(policy, truststoreParams, log);
  5159.                         check = CertificateUtils.checkTruststoreJWKs(truststoreParams.getPath(), new String(store), truststoreParams.getKeyAlias(),
  5160.                                 false, //addCertificateDetails,  
  5161.                                 separator, newLine);
  5162.                     }
  5163.                     else {
  5164.                         check = CertificateUtils.checkTruststoreJWKs(classpathSupported, truststoreParams.getPath(), truststoreParams.getKeyAlias(),
  5165.                                 false, //addCertificateDetails,  
  5166.                                 separator, newLine);
  5167.                     }
  5168.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5169.                         storeDetails = CertificateUtils.toStringTruststoreJWKs(truststoreParams,
  5170.                                 separator, newLine);
  5171.                     }
  5172.                 }
  5173.                 else {      
  5174.                     String alias = truststoreParams.getKeyAlias();
  5175.                     if(alias!=null &&
  5176.                             (
  5177.                                     alias.equals(Costanti.POLICY_VALIDAZIONE_SPECIAL_CASE_USE_X5C)
  5178.                                     ||
  5179.                                     alias.equals(Costanti.POLICY_VALIDAZIONE_SPECIAL_CASE_USE_X5T)
  5180.                                     ||
  5181.                                     alias.equals(Costanti.POLICY_VALIDAZIONE_SPECIAL_CASE_USE_X5C_X5T)
  5182.                             )
  5183.                         ) {
  5184.                         alias=null; // special case, valido tutti i certificati nel truststore con cui validero' il certificato presente in x5c o x5t
  5185.                     }
  5186.                    
  5187.                     if(truststoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || truststoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5188.                         byte [] store = getStoreCertificatiTokenPolicy(policy, truststoreParams, log);
  5189.                         check = CertificateUtils.checkTrustStore(truststoreParams.getPath(), store, truststoreParams.getType(),
  5190.                                 truststoreParams.getPassword(), truststoreParams.getCrls(), truststoreParams.getOcspPolicy(),
  5191.                                 alias,
  5192.                                 sogliaWarningGiorni,
  5193.                                 false, //addCertificateDetails,
  5194.                                 separator, newLine,
  5195.                                 log);
  5196.                     }
  5197.                     else {
  5198.                         check = CertificateUtils.checkTrustStore(truststoreParams.getPath(), classpathSupported, truststoreParams.getType(),
  5199.                                 truststoreParams.getPassword(), truststoreParams.getCrls(), truststoreParams.getOcspPolicy(),
  5200.                                 alias,
  5201.                                 sogliaWarningGiorni,
  5202.                                 false, //addCertificateDetails,
  5203.                                 separator, newLine,
  5204.                                 log);
  5205.                     }
  5206.                    
  5207.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5208.                         storeDetails = CertificateUtils.toStringTrustStore(truststoreParams,
  5209.                                 separator, newLine);
  5210.                     }
  5211.                 }
  5212.             }catch(Exception t) {
  5213.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5214.             }
  5215.         }
  5216.        
  5217.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5218.             String id = ID_CONFIGURAZIONE_TOKEN_VALIDAZIONE_JWT;
  5219.             if(addCertificateDetails && storeDetails!=null) {
  5220.                 id = id + newLine + storeDetails;
  5221.             }
  5222.             check.setConfigurationId(id);  
  5223.         }  
  5224.        
  5225.         if(check==null) {
  5226.             // connettore https con truststore 'all' senza client autentication
  5227.             check = new CertificateCheck();
  5228.             check.setStatoCheck(StatoCheck.OK);
  5229.         }
  5230.        
  5231.         return check;
  5232.     }
  5233.    
  5234.    
  5235.     private static byte[] getStoreCertificatiTokenPolicy(AbstractPolicyToken policy,KeystoreParams truststoreParams, Logger log) throws TokenException, SecurityException {
  5236.         Properties p = new Properties();
  5237.         p.put(SecurityConstants.JOSE_KEYSTORE_FILE, truststoreParams.getPath());
  5238.         p.put(SecurityConstants.JOSE_KEYSTORE_TYPE, truststoreParams.getType());
  5239.         if(truststoreParams.getPassword()!=null) {
  5240.             p.put(SecurityConstants.JOSE_KEYSTORE_PSWD, truststoreParams.getPassword());
  5241.         }
  5242.         TokenUtilities.injectJOSEConfigSsl(p, policy,
  5243.                 null, null);
  5244.         boolean throwError = true;
  5245.         boolean forceNoCache = true;
  5246.         return JOSEUtils.readHttpStore(p, null, truststoreParams.getPath(), log, throwError, forceNoCache);
  5247.     }
  5248.    
  5249.    
  5250.     protected CertificateCheck checkCertificatiForwardToJwtTokenPolicyValidazione(Connection connectionPdD,boolean useCache,
  5251.             String nome, int sogliaWarningGiorni,
  5252.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5253.        
  5254.         if(connectionPdD!=null) {
  5255.             // nop
  5256.         }
  5257.        
  5258.         if(useCache) {
  5259.             throw new DriverConfigurazioneException("Not Implemented");
  5260.         }
  5261.        
  5262.         GenericProperties gp = null;
  5263.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5264.         if(driver instanceof DriverConfigurazioneDB) {
  5265.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5266.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA, nome);
  5267.         }
  5268.         else {
  5269.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5270.         }
  5271.         return checkCertificatiForwardToJwtTokenPolicyValidazione(gp, sogliaWarningGiorni,
  5272.                 addCertificateDetails, separator, newLine,
  5273.                 this.logger);
  5274.     }
  5275.     public static final String ID_CONFIGURAZIONE_TOKEN_VALIDAZIONE_FORWARD_TO_JWT = "Configurazione ForwardTo JWT";
  5276.     public static CertificateCheck checkCertificatiForwardToJwtTokenPolicyValidazione(GenericProperties gp, int sogliaWarningGiorni,
  5277.             boolean addCertificateDetails, String separator, String newLine,
  5278.             Logger log) throws DriverConfigurazioneException {
  5279.        
  5280.         GestioneToken gestioneToken = new GestioneToken();
  5281.         KeystoreParams keystoreParams = null;
  5282.         KeystoreParams truststoreParams = null;
  5283.         try {
  5284.             PolicyGestioneToken policy = TokenUtilities.convertTo(gp, gestioneToken);
  5285.             if(!TokenUtilities.isTokenForwardEnabled(gp) || !policy.isForwardTokenInformazioniRaccolte()) {
  5286.                 throw new DriverConfigurazioneException("La configurazione nella policy "+gp.getNome()+" non utilizza la funzionalità di forward delle informazioni raccolte del token");
  5287.             }
  5288.             String forwardInformazioniRaccolteMode = policy.getForwardTokenInformazioniRaccolteMode();
  5289.            
  5290.             if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_JWS.equals(forwardInformazioniRaccolteMode) ||
  5291.                     Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWS.equals(forwardInformazioniRaccolteMode)) {
  5292.                 // JWS Compact              
  5293.                 keystoreParams = TokenUtilities.getForwardToJwtKeystoreParams(policy);
  5294.             }
  5295.             else if(Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWE.equals(forwardInformazioniRaccolteMode)) {
  5296.                 // JWE Compact
  5297.                 truststoreParams = TokenUtilities.getForwardToJwtKeystoreParams(policy);
  5298.                 keystoreParams = TokenUtilities.getForwardToJwtKeystoreParams(policy); // verifico con keystoreParams per adesso poichè cifro con chiave privata
  5299.                 if(keystoreParams!=null) {
  5300.                     truststoreParams=null;
  5301.                 }
  5302.             }
  5303.         }catch(Exception t) {
  5304.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5305.         }
  5306.        
  5307.         CertificateCheck check = null;
  5308.         boolean classpathSupported = true;
  5309.        
  5310.         String storeDetails = null; // per evitare duplicazione
  5311.        
  5312.         if(keystoreParams!=null) {
  5313.             try {
  5314.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5315.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5316.                    
  5317.                     check = CertificateUtils.checkKeyPair(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairPublicKeyPath(), keystoreParams.getKeyPassword(), keystoreParams.getKeyPairAlgorithm(),
  5318.                             byokUnwrapManager,
  5319.                             false, //addCertificateDetails,  
  5320.                             separator, newLine);
  5321.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5322.                         storeDetails = CertificateUtils.toStringKeyPair(keystoreParams,
  5323.                                 separator, newLine);
  5324.                     }
  5325.                 }
  5326.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5327.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di forward delle informazioni raccolte come JWT utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5328.                    
  5329.                 }
  5330.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5331.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5332.                    
  5333.                     check = CertificateUtils.checkKeystoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(),
  5334.                             byokUnwrapManager,
  5335.                             false, //addCertificateDetails,  
  5336.                             separator, newLine);
  5337.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5338.                         storeDetails = CertificateUtils.toStringKeystoreJWKs(keystoreParams,
  5339.                                 separator, newLine);
  5340.                     }
  5341.                 }
  5342.                 else {
  5343.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5344.                    
  5345.                     check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  5346.                             keystoreParams.getPassword(),
  5347.                             byokUnwrapManager,
  5348.                             keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  5349.                             sogliaWarningGiorni,
  5350.                             false, //addCertificateDetails,  
  5351.                             separator, newLine,
  5352.                             log);
  5353.                    
  5354.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5355.                         storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  5356.                                 separator, newLine);
  5357.                     }
  5358.                 }
  5359.             }catch(Exception t) {
  5360.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5361.             }
  5362.         }
  5363.        
  5364.         if( (check==null || StatoCheck.OK.equals(check.getStatoCheck())) &&
  5365.             truststoreParams!=null
  5366.             ) {
  5367.             try {
  5368.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(truststoreParams.getType())) {
  5369.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di forward delle informazioni raccolte come JWT utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5370.                 }
  5371.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(truststoreParams.getType())) {
  5372.                     check = CertificateUtils.checkPublicKey(classpathSupported, truststoreParams.getPath(), truststoreParams.getKeyPairAlgorithm(),
  5373.                             false, //addCertificateDetails,  
  5374.                             separator, newLine);
  5375.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5376.                         storeDetails = CertificateUtils.toStringPublicKey(truststoreParams,
  5377.                                 separator, newLine);
  5378.                     }
  5379.                 }
  5380.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(truststoreParams.getType())) {
  5381.                     check = CertificateUtils.checkTruststoreJWKs(classpathSupported, truststoreParams.getPath(), truststoreParams.getKeyAlias(),
  5382.                             false, //addCertificateDetails,  
  5383.                             separator, newLine);
  5384.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5385.                         storeDetails = CertificateUtils.toStringTruststoreJWKs(truststoreParams,
  5386.                                 separator, newLine);
  5387.                     }
  5388.                 }
  5389.                 else {      
  5390.                     check = CertificateUtils.checkTrustStore(truststoreParams.getPath(), classpathSupported, truststoreParams.getType(),
  5391.                             truststoreParams.getPassword(), truststoreParams.getCrls(), truststoreParams.getOcspPolicy(),
  5392.                             truststoreParams.getKeyAlias(),
  5393.                             sogliaWarningGiorni,
  5394.                             false, //addCertificateDetails,
  5395.                             separator, newLine,
  5396.                             log);
  5397.                    
  5398.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5399.                         storeDetails = CertificateUtils.toStringTrustStore(truststoreParams,
  5400.                                 separator, newLine);
  5401.                     }
  5402.                 }
  5403.             }catch(Exception t) {
  5404.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5405.             }
  5406.         }
  5407.        
  5408.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5409.             String id = ID_CONFIGURAZIONE_TOKEN_VALIDAZIONE_FORWARD_TO_JWT;
  5410.             if(addCertificateDetails && storeDetails!=null) {
  5411.                 id = id + newLine + storeDetails;
  5412.             }
  5413.             check.setConfigurationId(id);  
  5414.         }  
  5415.        
  5416.         if(check==null) {
  5417.             // connettore https con truststore 'all' senza client autentication
  5418.             check = new CertificateCheck();
  5419.             check.setStatoCheck(StatoCheck.OK);
  5420.         }
  5421.        
  5422.         return check;
  5423.     }


  5424.     protected CertificateCheck checkCertificatiConnettoreHttpsTokenPolicyNegoziazione(Connection connectionPdD,boolean useCache,
  5425.             String nome, int sogliaWarningGiorni,
  5426.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5427.        
  5428.         if(connectionPdD!=null) {
  5429.             // nop
  5430.         }
  5431.        
  5432.         if(useCache) {
  5433.             throw new DriverConfigurazioneException("Not Implemented");
  5434.         }
  5435.        
  5436.         GenericProperties gp = null;
  5437.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5438.         if(driver instanceof DriverConfigurazioneDB) {
  5439.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5440.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA_RETRIEVE, nome);
  5441.         }
  5442.         else {
  5443.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5444.         }
  5445.         return checkCertificatiConnettoreHttpsTokenPolicyNegoziazione(gp, sogliaWarningGiorni,
  5446.                 addCertificateDetails, separator, newLine,
  5447.                 this.logger);
  5448.     }
  5449.     public static CertificateCheck checkCertificatiConnettoreHttpsTokenPolicyNegoziazione(GenericProperties gp, int sogliaWarningGiorni,
  5450.             boolean addCertificateDetails, String separator, String newLine,
  5451.             Logger log) throws DriverConfigurazioneException {
  5452.        
  5453.         List<org.openspcoop2.core.config.Connettore> listConnettori = null;
  5454.         try {
  5455.             PolicyNegoziazioneToken policy = TokenUtilities.convertTo(gp);
  5456.            
  5457.             if( !policy.isEndpointHttps() ) {
  5458.                 throw new DriverConfigurazioneException("La configurazione della policy "+gp.getNome()+" non utilizza un connettore di tipo https");
  5459.             }
  5460.            
  5461.             listConnettori = ConnettoreCheck.convertTokenPolicyNegoziazioneToConnettore(gp, log); // sarà solo uno
  5462.         }catch(Exception t) {
  5463.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5464.         }
  5465.        
  5466.         CertificateCheck check = _checkConnettori(listConnettori, null, sogliaWarningGiorni,
  5467.                 addCertificateDetails, separator, newLine,
  5468.                 log);
  5469.         if(check!=null) {
  5470.             return check;
  5471.         }
  5472.         throw new DriverConfigurazioneException("Nella policy "+gp.getNome()+" non risulta configurato un connettore https");
  5473.        
  5474.     }
  5475.    
  5476.     protected CertificateCheck checkCertificatiSignedJwtTokenPolicyNegoziazione(Connection connectionPdD,boolean useCache,
  5477.             String nome, int sogliaWarningGiorni,
  5478.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5479.        
  5480.         if(connectionPdD!=null) {
  5481.             // nop
  5482.         }
  5483.        
  5484.         if(useCache) {
  5485.             throw new DriverConfigurazioneException("Not Implemented");
  5486.         }
  5487.        
  5488.         GenericProperties gp = null;
  5489.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5490.         if(driver instanceof DriverConfigurazioneDB) {
  5491.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5492.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA_RETRIEVE, nome);
  5493.         }
  5494.         else {
  5495.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5496.         }
  5497.         return checkCertificatiSignedJwtTokenPolicyNegoziazione(gp, sogliaWarningGiorni,
  5498.                 addCertificateDetails, separator, newLine,
  5499.                 this.logger);
  5500.     }
  5501.     public static final String ID_CONFIGURAZIONE_TOKEN_NEGOZIAZIONE_SIGNED_JWT = "Configurazione SignedJWT";
  5502.     public static CertificateCheck checkCertificatiSignedJwtTokenPolicyNegoziazione(GenericProperties gp, int sogliaWarningGiorni,
  5503.             boolean addCertificateDetails, String separator, String newLine,
  5504.             Logger log) throws DriverConfigurazioneException {
  5505.        
  5506.         KeystoreParams keystoreParams = null;
  5507.         try {
  5508.             PolicyNegoziazioneToken policy = TokenUtilities.convertTo(gp);
  5509.             if(!policy.isRfc7523x509Grant()) {
  5510.                 throw new DriverConfigurazioneException("La configurazione nella policy "+gp.getNome()+" non utilizza la funzionalità SignedJWT (RFC 7523)");
  5511.             }
  5512.             // JWS Compact              
  5513.             keystoreParams = TokenUtilities.getSignedJwtKeystoreParams(policy);
  5514.         }catch(Exception t) {
  5515.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5516.         }
  5517.        
  5518.         CertificateCheck check = null;
  5519.         boolean classpathSupported = true;
  5520.        
  5521.         String storeDetails = null; // per evitare duplicazione
  5522.        
  5523.         if(keystoreParams!=null) {
  5524.             try {

  5525.                 if(Costanti.KEYSTORE_TYPE_APPLICATIVO_MODI_VALUE.equalsIgnoreCase(keystoreParams.getPath())) {
  5526.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di SignedJWT utilizza la modalità '"+Costanti.KEYSTORE_TYPE_APPLICATIVO_MODI_LABEL+"'; la validazione dei certificati verrà effettuata su ogni singolo applicativo");
  5527.                 }
  5528.                 if(Costanti.KEYSTORE_TYPE_FRUIZIONE_MODI_VALUE.equalsIgnoreCase(keystoreParams.getPath())) {
  5529.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di SignedJWT utilizza la modalità '"+Costanti.KEYSTORE_TYPE_FRUIZIONE_MODI_LABEL+"'; la validazione dei certificati verrà effettuata sulla fruizione");
  5530.                 }
  5531.                
  5532.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5533.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5534.                    
  5535.                     check = CertificateUtils.checkKeyPair(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairPublicKeyPath(), keystoreParams.getKeyPassword(), keystoreParams.getKeyPairAlgorithm(),
  5536.                             byokUnwrapManager,
  5537.                             false, //addCertificateDetails,  
  5538.                             separator, newLine);
  5539.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5540.                         storeDetails = CertificateUtils.toStringKeyPair(keystoreParams,
  5541.                                 separator, newLine);
  5542.                     }
  5543.                 }
  5544.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5545.                     throw new DriverConfigurazioneException("Nella configurazione della policy "+gp.getNome()+" la funzionalità di SignedJWT utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5546.                 }
  5547.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5548.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5549.                    
  5550.                     check = CertificateUtils.checkKeystoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(),
  5551.                             byokUnwrapManager,
  5552.                             false, //addCertificateDetails,  
  5553.                             separator, newLine);
  5554.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5555.                         storeDetails = CertificateUtils.toStringKeystoreJWKs(keystoreParams,
  5556.                                 separator, newLine);
  5557.                     }
  5558.                 }
  5559.                 else {
  5560.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5561.                    
  5562.                     check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  5563.                             keystoreParams.getPassword(),
  5564.                             byokUnwrapManager,
  5565.                             keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  5566.                             sogliaWarningGiorni,
  5567.                             false, //addCertificateDetails,  
  5568.                             separator, newLine,
  5569.                             log);
  5570.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5571.                         storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  5572.                                 separator, newLine);
  5573.                     }
  5574.                 }
  5575.                
  5576.             }catch(Exception t) {
  5577.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5578.             }
  5579.         }
  5580.        
  5581.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5582.             String id = ID_CONFIGURAZIONE_TOKEN_NEGOZIAZIONE_SIGNED_JWT;
  5583.             if(addCertificateDetails && storeDetails!=null) {
  5584.                 id = id + newLine + storeDetails;
  5585.             }
  5586.             check.setConfigurationId(id);  
  5587.         }  
  5588.        
  5589.         if(check==null) {
  5590.             // connettore https con truststore 'all' senza client autentication
  5591.             check = new CertificateCheck();
  5592.             check.setStatoCheck(StatoCheck.OK);
  5593.         }
  5594.        
  5595.         return check;
  5596.     }


  5597.     protected CertificateCheck checkCertificatiConnettoreHttpsAttributeAuthority(Connection connectionPdD,boolean useCache,
  5598.             String nome, int sogliaWarningGiorni,
  5599.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5600.        
  5601.         if(connectionPdD!=null) {
  5602.             // nop
  5603.         }
  5604.        
  5605.         if(useCache) {
  5606.             throw new DriverConfigurazioneException("Not Implemented");
  5607.         }
  5608.        
  5609.         GenericProperties gp = null;
  5610.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5611.         if(driver instanceof DriverConfigurazioneDB) {
  5612.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5613.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.ATTRIBUTE_AUTHORITY, nome);
  5614.         }
  5615.         else {
  5616.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5617.         }
  5618.         return checkCertificatiConnettoreHttpsAttributeAuthority(gp, sogliaWarningGiorni,
  5619.                 addCertificateDetails, separator, newLine,
  5620.                 this.logger);
  5621.     }
  5622.     public static CertificateCheck checkCertificatiConnettoreHttpsAttributeAuthority(GenericProperties gp, int sogliaWarningGiorni,
  5623.             boolean addCertificateDetails, String separator, String newLine,
  5624.             Logger log) throws DriverConfigurazioneException {
  5625.        
  5626.         List<org.openspcoop2.core.config.Connettore> listConnettori = null;
  5627.         try {
  5628.             PolicyAttributeAuthority policy = AttributeAuthorityUtilities.convertTo(gp);
  5629.            
  5630.             if( !policy.isEndpointHttps() ) {
  5631.                 throw new DriverConfigurazioneException("La configurazione della policy "+gp.getNome()+" non utilizza un connettore di tipo https");
  5632.             }
  5633.            
  5634.             listConnettori = ConnettoreCheck.convertAttributeAuthorityToConnettore(gp, log); // sarà solo uno
  5635.         }catch(Exception t) {
  5636.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5637.         }
  5638.        
  5639.         CertificateCheck check = _checkConnettori(listConnettori, null, sogliaWarningGiorni,
  5640.                 addCertificateDetails, separator, newLine,
  5641.                 log);
  5642.         if(check!=null) {
  5643.             return check;
  5644.         }
  5645.         throw new DriverConfigurazioneException("Nell'AttributeAuthority "+gp.getNome()+" non risulta configurato un connettore https");
  5646.        
  5647.     }
  5648.        
  5649.     protected CertificateCheck checkCertificatiAttributeAuthorityJwtRichiesta(Connection connectionPdD,boolean useCache,
  5650.             String nome, int sogliaWarningGiorni,
  5651.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5652.        
  5653.         if(connectionPdD!=null) {
  5654.             // nop
  5655.         }
  5656.        
  5657.         if(useCache) {
  5658.             throw new DriverConfigurazioneException("Not Implemented");
  5659.         }
  5660.        
  5661.         GenericProperties gp = null;
  5662.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5663.         if(driver instanceof DriverConfigurazioneDB) {
  5664.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5665.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.ATTRIBUTE_AUTHORITY, nome);
  5666.         }
  5667.         else {
  5668.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5669.         }
  5670.         return checkCertificatiAttributeAuthorityJwtRichiesta(gp, sogliaWarningGiorni,
  5671.                 addCertificateDetails, separator, newLine,
  5672.                 this.logger);
  5673.     }
  5674.     public static final String ID_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY_JWT_RICHIESTA = "Configurazione JWS Richiesta";
  5675.     public static CertificateCheck checkCertificatiAttributeAuthorityJwtRichiesta(GenericProperties gp, int sogliaWarningGiorni,
  5676.             boolean addCertificateDetails, String separator, String newLine,
  5677.             Logger log) throws DriverConfigurazioneException {
  5678.        
  5679.         KeystoreParams keystoreParams = null;
  5680.         try {
  5681.             PolicyAttributeAuthority policy = AttributeAuthorityUtilities.convertTo(gp);
  5682.             if(!policy.isRequestJws()) {
  5683.                 throw new DriverConfigurazioneException("La configurazione nell'AttributeAuthority "+gp.getNome()+" non definisce il tipo di richiesta come JWS");
  5684.             }
  5685.             // JWS Compact              
  5686.             keystoreParams = AttributeAuthorityUtilities.getRequestJwsKeystoreParams(policy);
  5687.         }catch(Exception t) {
  5688.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5689.         }
  5690.        
  5691.         CertificateCheck check = null;
  5692.         boolean classpathSupported = true;
  5693.        
  5694.         String storeDetails = null; // per evitare duplicazione
  5695.        
  5696.         if(keystoreParams!=null) {
  5697.             try {
  5698.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5699.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5700.                    
  5701.                     check = CertificateUtils.checkKeyPair(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairPublicKeyPath(), keystoreParams.getKeyPassword(), keystoreParams.getKeyPairAlgorithm(),
  5702.                             byokUnwrapManager,
  5703.                             false, //addCertificateDetails,  
  5704.                             separator, newLine);
  5705.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5706.                         storeDetails = CertificateUtils.toStringKeyPair(keystoreParams,
  5707.                                 separator, newLine);
  5708.                     }
  5709.                 }
  5710.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5711.                     throw new DriverConfigurazioneException("Nell'Attribute Authority "+gp.getNome()+" la configurazione della richiesta JWS utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5712.                 }
  5713.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5714.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5715.                    
  5716.                     check = CertificateUtils.checkKeystoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(),
  5717.                             byokUnwrapManager,
  5718.                             false, //addCertificateDetails,  
  5719.                             separator, newLine);
  5720.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5721.                         storeDetails = CertificateUtils.toStringKeystoreJWKs(keystoreParams,
  5722.                                 separator, newLine);
  5723.                     }
  5724.                 }
  5725.                 else {
  5726.                    
  5727.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  5728.                    
  5729.                     check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  5730.                             keystoreParams.getPassword(),
  5731.                             byokUnwrapManager,
  5732.                             keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  5733.                             sogliaWarningGiorni,
  5734.                             false, //addCertificateDetails,  
  5735.                             separator, newLine,
  5736.                             log);
  5737.                    
  5738.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5739.                         storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  5740.                                 separator, newLine);
  5741.                     }
  5742.                 }
  5743.             }catch(Exception t) {
  5744.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5745.             }
  5746.         }
  5747.        
  5748.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5749.             String id = ID_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY_JWT_RICHIESTA;
  5750.             if(addCertificateDetails && storeDetails!=null) {
  5751.                 id = id + newLine + storeDetails;
  5752.             }
  5753.             check.setConfigurationId(id);  
  5754.         }  
  5755.        
  5756.         if(check==null) {
  5757.             // connettore https con truststore 'all' senza client autentication
  5758.             check = new CertificateCheck();
  5759.             check.setStatoCheck(StatoCheck.OK);
  5760.         }
  5761.        
  5762.         return check;
  5763.     }
  5764.    
  5765.     public static final String ID_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY_JWT_RISPOSTA = "Configurazione JWS Risposta";
  5766.     protected CertificateCheck checkCertificatiAttributeAuthorityJwtRisposta(Connection connectionPdD,boolean useCache,
  5767.             String nome, int sogliaWarningGiorni,
  5768.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  5769.        
  5770.         if(connectionPdD!=null) {
  5771.             // nop
  5772.         }
  5773.        
  5774.         if(useCache) {
  5775.             throw new DriverConfigurazioneException("Not Implemented");
  5776.         }
  5777.        
  5778.         GenericProperties gp = null;
  5779.         IDriverConfigurazioneGet driver = this.configurazionePdD.getDriverConfigurazionePdD();
  5780.         if(driver instanceof DriverConfigurazioneDB) {
  5781.             DriverConfigurazioneDB driverDB = (DriverConfigurazioneDB) driver;
  5782.             gp = driverDB.getGenericProperties(org.openspcoop2.pdd.core.token.Costanti.ATTRIBUTE_AUTHORITY, nome);
  5783.         }
  5784.         else {
  5785.             throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5786.         }
  5787.         return checkCertificatiAttributeAuthorityJwtRisposta(gp, sogliaWarningGiorni,
  5788.                 addCertificateDetails, separator, newLine,
  5789.                 this.logger);
  5790.     }
  5791.     public static CertificateCheck checkCertificatiAttributeAuthorityJwtRisposta(GenericProperties gp, int sogliaWarningGiorni,
  5792.             boolean addCertificateDetails, String separator, String newLine,
  5793.             Logger log) throws DriverConfigurazioneException {
  5794.        
  5795.         KeystoreParams keystoreParams = null;
  5796.         PolicyAttributeAuthority policy = null;
  5797.         try {
  5798.             policy = AttributeAuthorityUtilities.convertTo(gp);
  5799.             if(!policy.isResponseJws()) {
  5800.                 throw new DriverConfigurazioneException("La configurazione nell'AttributeAuthority "+gp.getNome()+" non definisce il tipo di risposta come JWS");
  5801.             }
  5802.             // JWS Compact              
  5803.             keystoreParams = AttributeAuthorityUtilities.getResponseJwsKeystoreParams(policy);
  5804.         }catch(Exception t) {
  5805.             throw new DriverConfigurazioneException(t.getMessage(),t);
  5806.         }
  5807.        
  5808.         CertificateCheck check = null;
  5809.         boolean classpathSupported = true;
  5810.        
  5811.         String storeDetails = null; // per evitare duplicazione
  5812.        
  5813.         if(keystoreParams!=null) {
  5814.             try {
  5815.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5816.                     throw new DriverConfigurazioneException("Nell'Attribute Authority "+gp.getNome()+" la configurazione della risposta JWS utilizza un keystore "+SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_LABEL+" non compatibile con il criterio di validazione dei certificati");
  5817.                 }
  5818.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5819.                     if(keystoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || keystoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5820.                         byte [] store = getStoreCertificatiTokenPolicy(policy, keystoreParams, log);
  5821.                         check = CertificateUtils.checkPublicKey(keystoreParams.getPath(), store, keystoreParams.getKeyPairAlgorithm(),
  5822.                                 false, //addCertificateDetails,  
  5823.                                 separator, newLine);
  5824.                     }
  5825.                     else {
  5826.                         check = CertificateUtils.checkPublicKey(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairAlgorithm(),
  5827.                                 false, //addCertificateDetails,  
  5828.                                 separator, newLine);
  5829.                     }
  5830.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5831.                         storeDetails = CertificateUtils.toStringPublicKey(keystoreParams,
  5832.                                 separator, newLine);
  5833.                     }
  5834.                 }
  5835.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  5836.                     if(keystoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || keystoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5837.                         byte [] store = getStoreCertificatiTokenPolicy(policy, keystoreParams, log);
  5838.                         check = CertificateUtils.checkTruststoreJWKs(keystoreParams.getPath(), new String(store), keystoreParams.getKeyAlias(),
  5839.                                 false, //addCertificateDetails,  
  5840.                                 separator, newLine);
  5841.                     }
  5842.                     else {
  5843.                         check = CertificateUtils.checkTruststoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(),
  5844.                                 false, //addCertificateDetails,  
  5845.                                 separator, newLine);
  5846.                     }
  5847.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5848.                         storeDetails = CertificateUtils.toStringTruststoreJWKs(keystoreParams,
  5849.                                 separator, newLine);
  5850.                     }
  5851.                 }
  5852.                 else {  
  5853.                     if(keystoreParams.getPath().startsWith(JOSEUtils.HTTP_PROTOCOL) || keystoreParams.getPath().startsWith(JOSEUtils.HTTPS_PROTOCOL)) {
  5854.                         byte [] store = getStoreCertificatiTokenPolicy(policy, keystoreParams, log);
  5855.                         check = CertificateUtils.checkTrustStore(keystoreParams.getPath(), store, keystoreParams.getType(),
  5856.                                 keystoreParams.getPassword(), keystoreParams.getCrls(), keystoreParams.getOcspPolicy(),keystoreParams.getKeyAlias(),
  5857.                                 sogliaWarningGiorni,
  5858.                                 false, //addCertificateDetails,
  5859.                                 separator, newLine,
  5860.                                 log);
  5861.                     }
  5862.                     else {
  5863.                         check = CertificateUtils.checkTrustStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  5864.                                 keystoreParams.getPassword(), keystoreParams.getCrls(), keystoreParams.getOcspPolicy(),keystoreParams.getKeyAlias(),
  5865.                                 sogliaWarningGiorni,
  5866.                                 false, //addCertificateDetails,
  5867.                                 separator, newLine,
  5868.                                 log);
  5869.                     }
  5870.                    
  5871.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5872.                         storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  5873.                                 separator, newLine);
  5874.                     }
  5875.                 }
  5876.             }catch(Exception t) {
  5877.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  5878.             }
  5879.         }
  5880.        
  5881.         if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  5882.             String id = ID_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY_JWT_RISPOSTA;
  5883.             if(addCertificateDetails && storeDetails!=null) {
  5884.                 id = id + newLine + storeDetails;
  5885.             }
  5886.             check.setConfigurationId(id);  
  5887.         }  
  5888.        
  5889.         if(check==null) {
  5890.             // connettore https con truststore 'all' senza client autentication
  5891.             check = new CertificateCheck();
  5892.             check.setStatoCheck(StatoCheck.OK);
  5893.         }
  5894.        
  5895.         return check;
  5896.     }
  5897.    
  5898.     public static final String ID_CONFIGURAZIONE_RICHIESTA_MESSAGE_SECURITY = "Configurazione Richiesta 'Message Security'";
  5899.     public static final String ID_CONFIGURAZIONE_RISPOSTA_MESSAGE_SECURITY = "Configurazione Risposta 'Message Security'";
  5900.     protected CertificateCheck checkCertificatiMessageSecurityErogazioneById(Connection connectionPdD,boolean useCache,
  5901.             long idAsps, int sogliaWarningGiorni,
  5902.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  5903.        
  5904.         if(connectionPdD!=null) {
  5905.             // nop
  5906.         }
  5907.        
  5908.         if(useCache) {
  5909.             throw new DriverConfigurazioneException("Not Implemented");
  5910.         }
  5911.        
  5912.         AccordoServizioParteSpecifica asps = null;
  5913.         IDServizio idServizio = null;
  5914.         for (IDriverRegistroServiziGet driver : RegistroServiziReader.getDriverRegistroServizi().values()) {
  5915.             if(driver instanceof DriverRegistroServiziDB) {
  5916.                 try {
  5917.                     DriverRegistroServiziDB driverDB = (DriverRegistroServiziDB) driver;
  5918.                     asps = driverDB.getAccordoServizioParteSpecifica(idAsps);
  5919.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);
  5920.                 }catch(Exception e) {
  5921.                     throw new DriverConfigurazioneException(e.getMessage(),e);
  5922.                 }
  5923.                 break;
  5924.             }
  5925.             else {
  5926.                 throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  5927.             }
  5928.         }
  5929.        
  5930.         DriverConfigurazioneDB driver = null;
  5931.         if(this.configurazionePdD.getDriverConfigurazionePdD() instanceof DriverConfigurazioneDB) {
  5932.             driver = (DriverConfigurazioneDB) this.configurazionePdD.getDriverConfigurazionePdD();
  5933.         }
  5934.         else {
  5935.             throw new DriverConfigurazioneException("Not Implemented with driver '"+this.configurazionePdD.getDriverConfigurazionePdD().getClass().getName()+"'");
  5936.         }
  5937.        
  5938.         List<MappingErogazionePortaApplicativa> list = this.configurazionePdD._getMappingErogazionePortaApplicativaList(idServizio, connectionPdD); // usa direttamente, senza cache, DriverConfigurazioneDB
  5939.         List<PortaApplicativa> listPorta = new ArrayList<>();
  5940.         if(list!=null && !list.isEmpty()) {
  5941.             for (MappingErogazionePortaApplicativa mappingErogazionePortaApplicativa : list) {
  5942.                 listPorta.add(driver.getPortaApplicativa(mappingErogazionePortaApplicativa.getIdPortaApplicativa()));
  5943.             }
  5944.         }
  5945.        
  5946.         return checkCertificatiMessageSecurityErogazioneById(list, listPorta,
  5947.                 sogliaWarningGiorni,
  5948.                 addCertificateDetails, separator, newLine,
  5949.                 this.logger);
  5950.     }
  5951.     public static CertificateCheck checkCertificatiMessageSecurityErogazioneById(List<MappingErogazionePortaApplicativa> listMapping, List<PortaApplicativa> listPorta,
  5952.             int sogliaWarningGiorni,
  5953.             boolean addCertificateDetails, String separator, String newLine,
  5954.             Logger log) throws DriverConfigurazioneException {
  5955.                
  5956.         if(listPorta==null || listPorta.isEmpty()) {
  5957.             throw new DriverConfigurazioneException("Param listPorta is null or empty");
  5958.         }
  5959.         if(listMapping==null || listMapping.isEmpty()) {
  5960.             throw new DriverConfigurazioneException("Param listMapping is null or empty");
  5961.         }
  5962.         if(listMapping.size()!=listPorta.size()) {
  5963.             throw new DriverConfigurazioneException("Param listPorta and listMapping are different");
  5964.         }
  5965.        
  5966.         CertificateCheck check = null;
  5967.        
  5968.         for (int i = 0; i < listPorta.size(); i++) {
  5969.             PortaApplicativa portaApplicativa = listPorta.get(i);
  5970.             MappingErogazionePortaApplicativa mapping = listMapping.get(i);
  5971.            
  5972.             List<KeystoreParams> listKeystoreParams = SecurityUtils.readRequestKeystoreParams(portaApplicativa);
  5973.             check = checkCertificatiMessageSecurityErogazioneById(true, mapping, listKeystoreParams,
  5974.                     sogliaWarningGiorni,
  5975.                     addCertificateDetails, separator, newLine,
  5976.                     log);
  5977.             if(check!=null) {
  5978.                 return check;
  5979.             }
  5980.            
  5981.             listKeystoreParams = SecurityUtils.readResponseKeystoreParams(portaApplicativa);
  5982.             check = checkCertificatiMessageSecurityErogazioneById(false, mapping, listKeystoreParams,
  5983.                     sogliaWarningGiorni,
  5984.                     addCertificateDetails, separator, newLine,
  5985.                     log);
  5986.             if(check!=null) {
  5987.                 return check;
  5988.             }
  5989.            
  5990.         }
  5991.                
  5992.         check = new CertificateCheck();
  5993.         check.setStatoCheck(StatoCheck.OK);
  5994.        
  5995.         return check;
  5996.     }
  5997.     public static CertificateCheck checkCertificatiMessageSecurityErogazioneById(boolean request, MappingErogazionePortaApplicativa mapping, List<KeystoreParams> listKeystoreParams,
  5998.             int sogliaWarningGiorni,
  5999.             boolean addCertificateDetails, String separator, String newLine,
  6000.             Logger log) throws DriverConfigurazioneException {
  6001.        
  6002.         CertificateCheck check = null;
  6003.        
  6004.         if(listKeystoreParams!=null && !listKeystoreParams.isEmpty()) {
  6005.             for (KeystoreParams keystoreParams : listKeystoreParams) {
  6006.                
  6007.                 String descrizioneGruppo = null;
  6008.                 if(!mapping.isDefault() || (mapping.getDescrizione()!=null && StringUtils.isNotEmpty(mapping.getDescrizione()) )) {
  6009.                     descrizioneGruppo = mapping.getDescrizione();
  6010.                 }
  6011.                
  6012.                 check = checkCertificatiMessageSecurity(request, descrizioneGruppo, keystoreParams,
  6013.                         sogliaWarningGiorni,
  6014.                         addCertificateDetails, separator, newLine,
  6015.                         log);
  6016.                 if(check!=null) {
  6017.                     return check;
  6018.                 }
  6019.             }
  6020.         }
  6021.        
  6022.         return null;
  6023.     }
  6024.    
  6025.     protected CertificateCheck checkCertificatiMessageSecurityFruizioneById(Connection connectionPdD,boolean useCache,
  6026.             long idFruitore,
  6027.             int sogliaWarningGiorni,
  6028.             boolean addCertificateDetails, String separator, String newLine) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  6029.        
  6030.         if(connectionPdD!=null) {
  6031.             // nop
  6032.         }
  6033.        
  6034.         if(useCache) {
  6035.             throw new DriverConfigurazioneException("Not Implemented");
  6036.         }
  6037.        
  6038.         IDServizio idServizio = null;
  6039.         AccordoServizioParteSpecifica asps = null;
  6040.         IDSoggetto idFruitoreObject = null;
  6041.         Fruitore fruitore = null;
  6042.         for (IDriverRegistroServiziGet driver : RegistroServiziReader.getDriverRegistroServizi().values()) {
  6043.             if(driver instanceof DriverRegistroServiziDB) {
  6044.                 try {
  6045.                     DriverRegistroServiziDB driverDB = (DriverRegistroServiziDB) driver;
  6046.                     fruitore = driverDB.getServizioFruitore(idFruitore);
  6047.                     idFruitoreObject = new IDSoggetto(fruitore.getTipo(), fruitore.getNome());
  6048.                     asps = driverDB.getAccordoServizioParteSpecifica(fruitore.getIdServizio());
  6049.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromAccordo(asps);        
  6050.                 }catch(Exception e) {
  6051.                     throw new DriverConfigurazioneException(e.getMessage(),e);
  6052.                 }
  6053.                 break;
  6054.             }
  6055.             else {
  6056.                 throw new DriverConfigurazioneException("Not Implemented with driver '"+driver.getClass().getName()+"'");
  6057.             }
  6058.         }
  6059.         if(fruitore==null) {
  6060.             throw new DriverConfigurazioneException("Fruitore con id '"+idFruitore+"' non trovato");
  6061.         }
  6062.        
  6063.         DriverConfigurazioneDB driver = null;
  6064.         if(this.configurazionePdD.getDriverConfigurazionePdD() instanceof DriverConfigurazioneDB) {
  6065.             driver = (DriverConfigurazioneDB) this.configurazionePdD.getDriverConfigurazionePdD();
  6066.         }
  6067.         else {
  6068.             throw new DriverConfigurazioneException("Not Implemented with driver '"+this.configurazionePdD.getDriverConfigurazionePdD().getClass().getName()+"'");
  6069.         }
  6070.        
  6071.         List<MappingFruizionePortaDelegata> list = this.configurazionePdD._getMappingFruizionePortaDelegataList(idFruitoreObject, idServizio, connectionPdD); // usa direttamente, senza cache, DriverConfigurazioneDB
  6072.         List<PortaDelegata> listPorta = new ArrayList<>();
  6073.         if(list!=null && !list.isEmpty()) {
  6074.             for (MappingFruizionePortaDelegata mappingFruizionePortaDelegata : list) {
  6075.                 listPorta.add(driver.getPortaDelegata(mappingFruizionePortaDelegata.getIdPortaDelegata()));
  6076.             }
  6077.         }
  6078.        
  6079.         return checkCertificatiMessageSecurityFruizioneById(list, listPorta,
  6080.                 sogliaWarningGiorni,
  6081.                 addCertificateDetails, separator, newLine,
  6082.                 this.logger);
  6083.     }
  6084.     public static CertificateCheck checkCertificatiMessageSecurityFruizioneById(List<MappingFruizionePortaDelegata> listMapping, List<PortaDelegata> listPorta,
  6085.             int sogliaWarningGiorni,
  6086.             boolean addCertificateDetails, String separator, String newLine,
  6087.             Logger log) throws DriverConfigurazioneException {
  6088.                
  6089.         if(listPorta==null || listPorta.isEmpty()) {
  6090.             throw new DriverConfigurazioneException("Param listPorta is null or empty");
  6091.         }
  6092.         if(listMapping==null || listMapping.isEmpty()) {
  6093.             throw new DriverConfigurazioneException("Param listMapping is null or empty");
  6094.         }
  6095.         if(listMapping.size()!=listPorta.size()) {
  6096.             throw new DriverConfigurazioneException("Param listPorta and listMapping are different");
  6097.         }
  6098.        
  6099.         CertificateCheck check = null;
  6100.        
  6101.         for (int i = 0; i < listPorta.size(); i++) {
  6102.             PortaDelegata portaDelegata = listPorta.get(i);
  6103.             MappingFruizionePortaDelegata mapping = listMapping.get(i);
  6104.            
  6105.             List<KeystoreParams> listKeystoreParams = SecurityUtils.readRequestKeystoreParams(portaDelegata);
  6106.             check = checkCertificatiMessageSecurityFruizioneById(true, mapping, listKeystoreParams,
  6107.                     sogliaWarningGiorni,
  6108.                     addCertificateDetails, separator, newLine,
  6109.                     log);
  6110.             if(check!=null) {
  6111.                 return check;
  6112.             }
  6113.            
  6114.             listKeystoreParams = SecurityUtils.readResponseKeystoreParams(portaDelegata);
  6115.             check = checkCertificatiMessageSecurityFruizioneById(false, mapping, listKeystoreParams,
  6116.                     sogliaWarningGiorni,
  6117.                     addCertificateDetails, separator, newLine,
  6118.                     log);
  6119.             if(check!=null) {
  6120.                 return check;
  6121.             }
  6122.            
  6123.         }
  6124.                
  6125.         check = new CertificateCheck();
  6126.         check.setStatoCheck(StatoCheck.OK);
  6127.        
  6128.         return check;
  6129.     }
  6130.     public static CertificateCheck checkCertificatiMessageSecurityFruizioneById(boolean request, MappingFruizionePortaDelegata mapping, List<KeystoreParams> listKeystoreParams,
  6131.             int sogliaWarningGiorni,
  6132.             boolean addCertificateDetails, String separator, String newLine,
  6133.             Logger log) throws DriverConfigurazioneException {
  6134.        
  6135.         CertificateCheck check = null;
  6136.        
  6137.         if(listKeystoreParams!=null && !listKeystoreParams.isEmpty()) {
  6138.             for (KeystoreParams keystoreParams : listKeystoreParams) {
  6139.                
  6140.                 String descrizioneGruppo = null;
  6141.                 if(!mapping.isDefault() || (mapping.getDescrizione()!=null && StringUtils.isNotEmpty(mapping.getDescrizione()) )) {
  6142.                     descrizioneGruppo = mapping.getDescrizione();
  6143.                 }
  6144.                
  6145.                 check = checkCertificatiMessageSecurity(request, descrizioneGruppo, keystoreParams,
  6146.                         sogliaWarningGiorni,
  6147.                         addCertificateDetails, separator, newLine,
  6148.                         log);
  6149.                 if(check!=null) {
  6150.                     return check;
  6151.                 }
  6152.             }
  6153.         }
  6154.        
  6155.         return null;
  6156.     }
  6157.        
  6158.    
  6159.    
  6160.     private static CertificateCheck checkCertificatiMessageSecurity(boolean request, String descrizioneGruppo, KeystoreParams keystoreParams,
  6161.             int sogliaWarningGiorni,
  6162.             boolean addCertificateDetails, String separator, String newLine,
  6163.             Logger log) throws DriverConfigurazioneException {
  6164.        
  6165.         boolean classpathSupported = true;
  6166.        
  6167.         String storeDetails = null;
  6168.        
  6169.         if(keystoreParams!=null) {
  6170.             try {
  6171.                 CertificateCheck check = null;
  6172.                 if(SecurityConstants.KEYSTORE_TYPE_KEY_PAIR_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  6173.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  6174.                    
  6175.                     check = CertificateUtils.checkKeyPair(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairPublicKeyPath(), keystoreParams.getKeyPassword(), keystoreParams.getKeyPairAlgorithm(),
  6176.                             byokUnwrapManager,
  6177.                             false, //addCertificateDetails,  
  6178.                             separator, newLine);
  6179.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6180.                         storeDetails = CertificateUtils.toStringKeyPair(keystoreParams,
  6181.                                 separator, newLine);
  6182.                     }
  6183.                 }
  6184.                 else if(SecurityConstants.KEYSTORE_TYPE_PUBLIC_KEY_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  6185.                     check = CertificateUtils.checkPublicKey(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyPairAlgorithm(),
  6186.                                 false, //addCertificateDetails,  
  6187.                                 separator, newLine);
  6188.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6189.                         storeDetails = CertificateUtils.toStringPublicKey(keystoreParams,
  6190.                                 separator, newLine);
  6191.                     }
  6192.                 }
  6193.                 else if(SecurityConstants.KEYSTORE_TYPE_JWK_VALUE.equalsIgnoreCase(keystoreParams.getType())) {
  6194.                    
  6195.                     IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  6196.                    
  6197.                     check = CertificateUtils.checkKeystoreJWKs(classpathSupported, keystoreParams.getPath(), keystoreParams.getKeyAlias(),
  6198.                             byokUnwrapManager,
  6199.                             false, //addCertificateDetails,  
  6200.                             separator, newLine);
  6201.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6202.                         storeDetails = CertificateUtils.toStringTruststoreJWKs(keystoreParams,
  6203.                                 separator, newLine);
  6204.                     }
  6205.                 }
  6206.                 else {  
  6207.                     if(keystoreParams.getKeyPassword()!=null) {
  6208.                         IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapFactory.getBYOKUnwrapManager(keystoreParams.getByokPolicy(), log);
  6209.                        
  6210.                         check = CertificateUtils.checkKeyStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  6211.                                 keystoreParams.getPassword(),
  6212.                                 byokUnwrapManager,
  6213.                                 keystoreParams.getKeyAlias(), keystoreParams.getKeyPassword(),
  6214.                                 sogliaWarningGiorni,
  6215.                                 false, //addCertificateDetails,  
  6216.                                 separator, newLine,
  6217.                                 log);
  6218.                     }
  6219.                     else {
  6220.                         check = CertificateUtils.checkTrustStore(keystoreParams.getPath(), classpathSupported, keystoreParams.getType(),
  6221.                                 keystoreParams.getPassword(), keystoreParams.getCrls(), keystoreParams.getOcspPolicy(),keystoreParams.getKeyAlias(),
  6222.                                 sogliaWarningGiorni,
  6223.                                 false, //addCertificateDetails,
  6224.                                 separator, newLine,
  6225.                                 log);
  6226.                     }
  6227.                    
  6228.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6229.                         storeDetails = CertificateUtils.toStringKeyStore(keystoreParams,
  6230.                                 separator, newLine);
  6231.                     }
  6232.                 }
  6233.                
  6234.                 if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6235.                     String id = request ? ID_CONFIGURAZIONE_RICHIESTA_MESSAGE_SECURITY : ID_CONFIGURAZIONE_RISPOSTA_MESSAGE_SECURITY;
  6236.                     if(descrizioneGruppo!=null && !org.openspcoop2.core.constants.Costanti.MAPPING_DESCRIZIONE_DEFAULT.equals(descrizioneGruppo)) {
  6237.                         id = id + " (" +descrizioneGruppo+")";
  6238.                     }
  6239.                     if(keystoreParams.getDescription()!=null && StringUtils.isNotEmpty(keystoreParams.getDescription())) {
  6240.                         id = id + " - " +keystoreParams.getDescription();
  6241.                     }
  6242.                     if(addCertificateDetails && storeDetails!=null) {
  6243.                         id = id + newLine + storeDetails;
  6244.                     }
  6245.                     check.setConfigurationId(id);  
  6246.                    
  6247.                     return check;
  6248.                 }  
  6249.                
  6250.             }catch(Exception t) {
  6251.                 throw new DriverConfigurazioneException(t.getMessage(),t);
  6252.             }
  6253.         }
  6254.        
  6255.         return null;
  6256.     }

  6257.    
  6258.     private static CertificateCheck _checkConnettori(List<org.openspcoop2.core.config.Connettore> listConnettori, String tipo, int sogliaWarningGiorni,
  6259.             boolean addCertificateDetails, String separator, String newLine,
  6260.             Logger log) throws DriverConfigurazioneException {

  6261.         boolean classpathSupported = true;
  6262.        
  6263.         if(listConnettori!=null && !listConnettori.isEmpty()) {
  6264.             for (org.openspcoop2.core.config.Connettore connettore : listConnettori) {
  6265.                    
  6266.                 String tipoC = ConnettoreCheck.getPropertyValue(connettore, ConnettoreCheck.POLICY_TIPO_ENDPOINT);
  6267.                 if(tipo==null || tipo.equalsIgnoreCase(tipoC)) {
  6268.                
  6269.                     SSLConfig httpsProp = null;
  6270.                     Map<String,Object> dynamicMap = null;
  6271.                     try {
  6272.                         httpsProp = ConnettoreHTTPSProperties.readProperties(connettore.getProperties());
  6273.                         dynamicMap = DynamicMapBuilderUtils.buildDynamicMap(null, null, null,
  6274.                                 log);
  6275.                         httpsProp.setDynamicMap(dynamicMap);
  6276.                     }catch(Exception t) {
  6277.                         throw new DriverConfigurazioneException(t.getMessage(),t);
  6278.                     }
  6279.                     CertificateCheck check = null;
  6280.                            
  6281.                     String storeDetails = null; // per evitare duplicazione
  6282.                    
  6283.                     if(httpsProp.getKeyStoreLocation()!=null) {
  6284.                         try {
  6285.                             IBYOKUnwrapManager byokUnwrapManager = BYOKUnwrapPolicyUtilities.getBYOKUnwrapManager(httpsProp.getKeyStoreBYOKPolicy(), dynamicMap);
  6286.                            
  6287.                             check = CertificateUtils.checkKeyStore(httpsProp.getKeyStoreLocation(), classpathSupported, httpsProp.getKeyStoreType(),
  6288.                                     httpsProp.getKeyStorePassword(),
  6289.                                     byokUnwrapManager,
  6290.                                     httpsProp.getKeyAlias(), httpsProp.getKeyPassword(),
  6291.                                     sogliaWarningGiorni,
  6292.                                     false, //addCertificateDetails,  
  6293.                                     separator, newLine,
  6294.                                     log);
  6295.                            
  6296.                             if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6297.                                 storeDetails = CertificateUtils.toStringKeyStore(httpsProp.getKeyStoreLocation(), httpsProp.getKeyStoreType(),
  6298.                                         httpsProp.getKeyStoreBYOKPolicy(),
  6299.                                         httpsProp.getKeyAlias(),
  6300.                                         separator, newLine);
  6301.                             }
  6302.                         }catch(Exception t) {
  6303.                             throw new DriverConfigurazioneException(t.getMessage(),t);
  6304.                         }
  6305.                     }
  6306.                    
  6307.                     if(check==null || StatoCheck.OK.equals(check.getStatoCheck())) {
  6308.                         if(!httpsProp.isTrustAllCerts() && httpsProp.getTrustStoreLocation()!=null) {
  6309.                             try {
  6310.                                 check = CertificateUtils.checkTrustStore(httpsProp.getTrustStoreLocation(), classpathSupported, httpsProp.getTrustStoreType(),
  6311.                                         httpsProp.getTrustStorePassword(), httpsProp.getTrustStoreCRLsLocation(), httpsProp.getTrustStoreOCSPPolicy(),
  6312.                                         sogliaWarningGiorni,
  6313.                                         false, //addCertificateDetails,
  6314.                                         separator, newLine,
  6315.                                         log);
  6316.                                
  6317.                                 if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6318.                                     storeDetails = CertificateUtils.toStringTrustStore(httpsProp.getTrustStoreLocation(), httpsProp.getTrustStoreType(),
  6319.                                             httpsProp.getTrustStoreCRLsLocation(), httpsProp.getTrustStoreOCSPPolicy(),
  6320.                                             separator, newLine);
  6321.                                 }
  6322.                             }catch(Exception t) {
  6323.                                 throw new DriverConfigurazioneException(t.getMessage(),t);
  6324.                             }
  6325.                         }
  6326.                     }
  6327.                    
  6328.                     if(check!=null && !StatoCheck.OK.equals(check.getStatoCheck())) {
  6329.                         String id = RegistroServiziReader.ID_CONFIGURAZIONE_CONNETTORE_HTTPS;
  6330.                         if(addCertificateDetails && storeDetails!=null) {
  6331.                             id = id + newLine + storeDetails;
  6332.                         }
  6333.                         check.setConfigurationId(id);  
  6334.                     }  
  6335.                    
  6336.                     if(check==null) {
  6337.                         // connettore https con truststore 'all' senza client autentication
  6338.                         check = new CertificateCheck();
  6339.                         check.setStatoCheck(StatoCheck.OK);
  6340.                     }
  6341.                    
  6342.                     return check;
  6343.                 }
  6344.                    
  6345.             }
  6346.         }
  6347.         return null;
  6348.     }



  6349.     /* ********  CONFIGURAZIONE  ******** */

  6350.     /**
  6351.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai registri di servizio.
  6352.      *
  6353.      * @return informazioni sui registri di servizio.
  6354.      *
  6355.      */
  6356.     private static AccessoRegistro accessoRegistroServizi = null;
  6357.     private static Boolean accessoRegistroServiziLetto = false;
  6358.     public static void setAccessoRegistroServizi(AccessoRegistro accessoRegistroServizi) {
  6359.         ConfigurazionePdDReader.accessoRegistroServizi = accessoRegistroServizi;
  6360.     }
  6361.     public static void setAccessoRegistroServiziLetto(Boolean accessoRegistroServiziLetto) {
  6362.         ConfigurazionePdDReader.accessoRegistroServiziLetto = accessoRegistroServiziLetto;
  6363.     }
  6364.     protected AccessoRegistro getAccessoRegistroServizi(Connection connectionPdD){

  6365.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoRegistroServiziLetto.booleanValue()){
  6366.             AccessoRegistro configRegistro = null;
  6367.             try{
  6368.                 configRegistro = this.configurazionePdD.getAccessoRegistro(connectionPdD);
  6369.             }catch(DriverConfigurazioneNotFound e){
  6370.                 this.logDebug("getAccessoRegistroServizi (not found): "+e.getMessage());
  6371.             }catch(Exception e){
  6372.                 this.logError("getAccessoRegistroServizi",e);
  6373.             }

  6374.             ConfigurazionePdDReader.setAccessoRegistroServizi(configRegistro);
  6375.             ConfigurazionePdDReader.setAccessoRegistroServiziLetto(true);
  6376.         }

  6377.         /**
  6378.         if(ConfigurazionePdDReader.accessoRegistroServizi.getCache()==null){
  6379.             System.out.println("REGISTRO CACHE DISABILITATA");
  6380.         }else{
  6381.             System.out.println("REGISTRO CACHE ABILITATA");
  6382.             System.out.println("REGISTRO CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoRegistroServizi.getCache().getAlgoritmo());
  6383.             System.out.println("REGISTRO CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoRegistroServizi.getCache().getDimensione());
  6384.             System.out.println("REGISTRO CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoRegistroServizi.getCache().getItemIdleTime());
  6385.             System.out.println("REGISTRO CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoRegistroServizi.getCache().getItemLifeSecond());
  6386.         }

  6387.         for(int i=0; i<ConfigurazionePdDReader.accessoRegistroServizi.sizeRegistroList(); i++){
  6388.             System.out.println("REGISTRO ["+i+"] NOME ["+ConfigurazionePdDReader.accessoRegistroServizi.getRegistro(i).getNome()+"]");
  6389.             System.out.println("REGISTRO ["+i+"] TIPO ["+ConfigurazionePdDReader.accessoRegistroServizi.getRegistro(i).getTipo()+"]");
  6390.             System.out.println("REGISTRO ["+i+"] LOCATION ["+ConfigurazionePdDReader.accessoRegistroServizi.getRegistro(i).getLocation()+"]");
  6391.             System.out.println("REGISTRO ["+i+"] USER ["+ConfigurazionePdDReader.accessoRegistroServizi.getRegistro(i).getUser()+"]");
  6392.             System.out.println("REGISTRO ["+i+"] PASSWORD ["+ConfigurazionePdDReader.accessoRegistroServizi.getRegistro(i).getPassword()+"]");
  6393.         }*/

  6394.         return ConfigurazionePdDReader.accessoRegistroServizi;
  6395.     }

  6396.     /**
  6397.      * Restituisce le informazioni necessarie alla porta di dominio per accedere alla configurazione
  6398.      *
  6399.      * @return informazioni
  6400.      *
  6401.      */
  6402.     private static AccessoConfigurazione accessoConfigurazione = null;
  6403.     private static Boolean accessoConfigurazioneLetto = false;
  6404.     public static void setAccessoConfigurazione(AccessoConfigurazione accessoConfigurazione) {
  6405.         ConfigurazionePdDReader.accessoConfigurazione = accessoConfigurazione;
  6406.     }
  6407.     public static void setAccessoConfigurazioneLetto(Boolean accessoConfigurazioneLetto) {
  6408.         ConfigurazionePdDReader.accessoConfigurazioneLetto = accessoConfigurazioneLetto;
  6409.     }
  6410.     protected AccessoConfigurazione getAccessoConfigurazione(Connection connectionPdD){

  6411.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoConfigurazioneLetto.booleanValue()){
  6412.             AccessoConfigurazione tmp = null;
  6413.             try{
  6414.                 tmp = this.configurazionePdD.getAccessoConfigurazione(connectionPdD);
  6415.             }catch(DriverConfigurazioneNotFound e){
  6416.                 this.logDebug("getAccessoConfigurazione (not found): "+e.getMessage());
  6417.             }catch(Exception e){
  6418.                 this.logError("getAccessoConfigurazione",e);
  6419.             }

  6420.             ConfigurazionePdDReader.setAccessoConfigurazione(tmp);
  6421.             ConfigurazionePdDReader.setAccessoConfigurazioneLetto(true);
  6422.         }

  6423.         /**
  6424.         if(ConfigurazionePdDReader.accessoConfigurazione.getCache()==null){
  6425.             System.out.println("ACCESSO_CONFIG CACHE DISABILITATA");
  6426.         }else{
  6427.             System.out.println("ACCESSO_CONFIG CACHE ABILITATA");
  6428.             System.out.println("ACCESSO_CONFIG CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoConfigurazione.getCache().getAlgoritmo());
  6429.             System.out.println("ACCESSO_CONFIG CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoConfigurazione.getCache().getDimensione());
  6430.             System.out.println("ACCESSO_CONFIG CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoConfigurazione.getCache().getItemIdleTime());
  6431.             System.out.println("ACCESSO_CONFIG CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoConfigurazione.getCache().getItemLifeSecond());
  6432.         }
  6433.          */

  6434.         return ConfigurazionePdDReader.accessoConfigurazione;
  6435.     }

  6436.     /**
  6437.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai dati di autorizzazione
  6438.      *
  6439.      * @return informazioni
  6440.      *
  6441.      */
  6442.     private static AccessoDatiAutorizzazione accessoDatiAutorizzazione = null;
  6443.     private static Boolean accessoDatiAutorizzazioneLetto = false;
  6444.     public static void setAccessoDatiAutorizzazione(AccessoDatiAutorizzazione accessoDatiAutorizzazione) {
  6445.         ConfigurazionePdDReader.accessoDatiAutorizzazione = accessoDatiAutorizzazione;
  6446.     }
  6447.     public static void setAccessoDatiAutorizzazioneLetto(Boolean accessoDatiAutorizzazioneLetto) {
  6448.         ConfigurazionePdDReader.accessoDatiAutorizzazioneLetto = accessoDatiAutorizzazioneLetto;
  6449.     }
  6450.     protected AccessoDatiAutorizzazione getAccessoDatiAutorizzazione(Connection connectionPdD){

  6451.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoDatiAutorizzazioneLetto.booleanValue()){
  6452.             AccessoDatiAutorizzazione tmp = null;
  6453.             try{
  6454.                 tmp = this.configurazionePdD.getAccessoDatiAutorizzazione(connectionPdD);
  6455.             }catch(DriverConfigurazioneNotFound e){
  6456.                 this.logDebug("getAccessoDatiAutorizzazione (not found): "+e.getMessage());
  6457.             }catch(Exception e){
  6458.                 this.logError("getAccessoDatiAutorizzazione",e);
  6459.             }

  6460.             ConfigurazionePdDReader.setAccessoDatiAutorizzazione(tmp);
  6461.             ConfigurazionePdDReader.setAccessoDatiAutorizzazioneLetto(true);
  6462.         }

  6463.         /**
  6464.         if(ConfigurazionePdDReader.accessoDatiAutorizzazione.getCache()==null){
  6465.             System.out.println("ACCESSO_DATI_AUTH CACHE DISABILITATA");
  6466.         }else{
  6467.             System.out.println("ACCESSO_DATI_AUTH CACHE ABILITATA");
  6468.             System.out.println("ACCESSO_DATI_AUTH CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoDatiAutorizzazione.getCache().getAlgoritmo());
  6469.             System.out.println("ACCESSO_DATI_AUTH CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoDatiAutorizzazione.getCache().getDimensione());
  6470.             System.out.println("ACCESSO_DATI_AUTH CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoDatiAutorizzazione.getCache().getItemIdleTime());
  6471.             System.out.println("ACCESSO_DATI_AUTH CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiAutorizzazione.getCache().getItemLifeSecond());
  6472.         }
  6473.          */

  6474.         return ConfigurazionePdDReader.accessoDatiAutorizzazione;
  6475.     }

  6476.     /**
  6477.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai dati di autorizzazione
  6478.      *
  6479.      * @return informazioni
  6480.      *
  6481.      */
  6482.     private static AccessoDatiAutenticazione accessoDatiAutenticazione = null;
  6483.     private static Boolean accessoDatiAutenticazioneLetto = false;
  6484.     public static void setAccessoDatiAutenticazione(AccessoDatiAutenticazione accessoDatiAutenticazione) {
  6485.         ConfigurazionePdDReader.accessoDatiAutenticazione = accessoDatiAutenticazione;
  6486.     }
  6487.     public static void setAccessoDatiAutenticazioneLetto(Boolean accessoDatiAutenticazioneLetto) {
  6488.         ConfigurazionePdDReader.accessoDatiAutenticazioneLetto = accessoDatiAutenticazioneLetto;
  6489.     }
  6490.     protected AccessoDatiAutenticazione getAccessoDatiAutenticazione(Connection connectionPdD){

  6491.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoDatiAutenticazioneLetto.booleanValue()){
  6492.             AccessoDatiAutenticazione tmp = null;
  6493.             try{
  6494.                 tmp = this.configurazionePdD.getAccessoDatiAutenticazione(connectionPdD);
  6495.             }catch(DriverConfigurazioneNotFound e){
  6496.                 this.logDebug("getAccessoDatiAutenticazione (not found): "+e.getMessage());
  6497.             }catch(Exception e){
  6498.                 this.logError("getAccessoDatiAutenticazione",e);
  6499.             }

  6500.             ConfigurazionePdDReader.setAccessoDatiAutenticazione(tmp);
  6501.             ConfigurazionePdDReader.setAccessoDatiAutenticazioneLetto(true);
  6502.         }

  6503.         /**
  6504.         if(ConfigurazionePdDReader.accessoDatiAutenticazione.getCache()==null){
  6505.             System.out.println("ACCESSO_DATI_AUTHN CACHE DISABILITATA");
  6506.         }else{
  6507.             System.out.println("ACCESSO_DATI_AUTHN CACHE ABILITATA");
  6508.             System.out.println("ACCESSO_DATI_AUTHN CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoDatiAutenticazione.getCache().getAlgoritmo());
  6509.             System.out.println("ACCESSO_DATI_AUTHN CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoDatiAutenticazione.getCache().getDimensione());
  6510.             System.out.println("ACCESSO_DATI_AUTHN CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoDatiAutenticazione.getCache().getItemIdleTime());
  6511.             System.out.println("ACCESSO_DATI_AUTHN CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiAutenticazione.getCache().getItemLifeSecond());
  6512.         }
  6513.          */

  6514.         return ConfigurazionePdDReader.accessoDatiAutenticazione;
  6515.     }

  6516.     /**
  6517.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai dati di gestione dei token
  6518.      *
  6519.      * @return informazioni
  6520.      *
  6521.      */
  6522.     private static AccessoDatiGestioneToken accessoDatiGestioneToken = null;
  6523.     private static Boolean accessoDatiGestioneTokenLetto = false;
  6524.     public static void setAccessoDatiGestioneToken(AccessoDatiGestioneToken accessoDatiGestioneToken) {
  6525.         ConfigurazionePdDReader.accessoDatiGestioneToken = accessoDatiGestioneToken;
  6526.     }
  6527.     public static void setAccessoDatiGestioneTokenLetto(Boolean accessoDatiGestioneTokenLetto) {
  6528.         ConfigurazionePdDReader.accessoDatiGestioneTokenLetto = accessoDatiGestioneTokenLetto;
  6529.     }
  6530.     protected AccessoDatiGestioneToken getAccessoDatiGestioneToken(Connection connectionPdD){

  6531.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoDatiGestioneTokenLetto.booleanValue()){
  6532.             AccessoDatiGestioneToken tmp = null;
  6533.             try{
  6534.                 tmp = this.configurazionePdD.getAccessoDatiGestioneToken(connectionPdD);
  6535.             }catch(DriverConfigurazioneNotFound e){
  6536.                 this.logDebug("getAccessoDatiGestioneToken (not found): "+e.getMessage());
  6537.             }catch(Exception e){
  6538.                 this.logError("getAccessoDatiGestioneToken",e);
  6539.             }

  6540.             ConfigurazionePdDReader.setAccessoDatiGestioneToken(tmp);
  6541.             ConfigurazionePdDReader.setAccessoDatiGestioneTokenLetto(true);
  6542.         }

  6543.         /**
  6544.         if(ConfigurazionePdDReader.accessoDatiGestioneToken.getCache()==null){
  6545.             System.out.println("ACCESSO_DATI_TOKEN CACHE DISABILITATA");
  6546.         }else{
  6547.             System.out.println("ACCESSO_DATI_TOKEN CACHE ABILITATA");
  6548.             System.out.println("ACCESSO_DATI_TOKEN CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoDatiGestioneToken.getCache().getAlgoritmo());
  6549.             System.out.println("ACCESSO_DATI_TOKEN CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoDatiGestioneToken.getCache().getDimensione());
  6550.             System.out.println("ACCESSO_DATI_TOKEN CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoDatiGestioneToken.getCache().getItemIdleTime());
  6551.             System.out.println("ACCESSO_DATI_TOKEN CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiGestioneToken.getCache().getItemLifeSecond());
  6552.         }
  6553.          */

  6554.         return ConfigurazionePdDReader.accessoDatiGestioneToken;
  6555.     }
  6556.    
  6557.     /**
  6558.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai dati raccolti via attribute authority
  6559.      *
  6560.      * @return informazioni
  6561.      *
  6562.      */
  6563.     private static AccessoDatiAttributeAuthority accessoDatiAttributeAuthority = null;
  6564.     private static Boolean accessoDatiAttributeAuthorityLetto = false;
  6565.     public static void setAccessoDatiAttributeAuthority(AccessoDatiAttributeAuthority accessoDatiAttributeAuthority) {
  6566.         ConfigurazionePdDReader.accessoDatiAttributeAuthority = accessoDatiAttributeAuthority;
  6567.     }
  6568.     public static void setAccessoDatiAttributeAuthorityLetto(Boolean accessoDatiAttributeAuthorityLetto) {
  6569.         ConfigurazionePdDReader.accessoDatiAttributeAuthorityLetto = accessoDatiAttributeAuthorityLetto;
  6570.     }
  6571.     protected AccessoDatiAttributeAuthority getAccessoDatiAttributeAuthority(Connection connectionPdD){

  6572.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoDatiAttributeAuthorityLetto.booleanValue()){
  6573.             AccessoDatiAttributeAuthority tmp = null;
  6574.             try{
  6575.                 tmp = this.configurazionePdD.getAccessoDatiAttributeAuthority(connectionPdD);
  6576.             }catch(DriverConfigurazioneNotFound e){
  6577.                 this.logDebug("getAccessoDatiAttributeAuthority (not found): "+e.getMessage());
  6578.             }catch(Exception e){
  6579.                 this.logError("getAccessoDatiAttributeAuthority",e);
  6580.             }

  6581.             ConfigurazionePdDReader.setAccessoDatiAttributeAuthority(tmp);
  6582.             ConfigurazionePdDReader.setAccessoDatiAttributeAuthorityLetto(true);
  6583.         }

  6584.         /**
  6585.         if(ConfigurazionePdDReader.accessoDatiAttributeAuthority.getCache()==null){
  6586.             System.out.println("ACCESSO_DATI_ATTRIBUTE_AUTHORITY CACHE DISABILITATA");
  6587.         }else{
  6588.             System.out.println("ACCESSO_DATI_ATTRIBUTE_AUTHORITY CACHE ABILITATA");
  6589.             System.out.println("ACCESSO_DATI_ATTRIBUTE_AUTHORITY CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoDatiAttributeAuthority.getCache().getAlgoritmo());
  6590.             System.out.println("ACCESSO_DATI_ATTRIBUTE_AUTHORITY CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoDatiAttributeAuthority.getCache().getDimensione());
  6591.             System.out.println("ACCESSO_DATI_ATTRIBUTE_AUTHORITY CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoDatiAttributeAuthority.getCache().getItemIdleTime());
  6592.             System.out.println("ACCESSO_DATI_ATTRIBUTE_AUTHORITY CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiAttributeAuthority.getCache().getItemLifeSecond());
  6593.         }
  6594.          */

  6595.         return ConfigurazionePdDReader.accessoDatiAttributeAuthority;
  6596.     }

  6597.     /**
  6598.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai dati di gestione dei keystore
  6599.      *
  6600.      * @return informazioni
  6601.      *
  6602.      */
  6603.     private static AccessoDatiKeystore accessoDatiKeystore = null;
  6604.     private static Boolean accessoDatiKeystoreLetto = false;
  6605.     public static void setAccessoDatiKeystore(AccessoDatiKeystore accessoDatiKeystore) {
  6606.         ConfigurazionePdDReader.accessoDatiKeystore = accessoDatiKeystore;
  6607.     }
  6608.     public static void setAccessoDatiKeystoreLetto(Boolean accessoDatiKeystoreLetto) {
  6609.         ConfigurazionePdDReader.accessoDatiKeystoreLetto = accessoDatiKeystoreLetto;
  6610.     }
  6611.     protected AccessoDatiKeystore getAccessoDatiKeystore(Connection connectionPdD){

  6612.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoDatiKeystoreLetto.booleanValue()){
  6613.             AccessoDatiKeystore tmp = null;
  6614.             try{
  6615.                 tmp = this.configurazionePdD.getAccessoDatiKeystore(connectionPdD);
  6616.             }catch(DriverConfigurazioneNotFound e){
  6617.                 this.logDebug("getAccessoDatiKeystore (not found): "+e.getMessage());
  6618.             }catch(Exception e){
  6619.                 this.logError("getAccessoDatiKeystore",e);
  6620.             }

  6621.             ConfigurazionePdDReader.setAccessoDatiKeystore(tmp);
  6622.             ConfigurazionePdDReader.setAccessoDatiKeystoreLetto(true);
  6623.         }

  6624.         /**
  6625.         if(ConfigurazionePdDReader.accessoDatiKeystore.getCache()==null){
  6626.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE DISABILITATA");
  6627.         }else{
  6628.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE ABILITATA");
  6629.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoDatiKeystore.getCache().getAlgoritmo());
  6630.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoDatiKeystore.getCache().getDimensione());
  6631.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoDatiKeystore.getCache().getItemIdleTime());
  6632.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiKeystore.getCache().getItemLifeSecond());
  6633.             System.out.println("ACCESSO_DATI_KEYSTORE CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiKeystore.getCrlItemLifeSecond());
  6634.         }
  6635.          */

  6636.         return ConfigurazionePdDReader.accessoDatiKeystore;
  6637.     }
  6638.    
  6639.     /**
  6640.      * Restituisce le informazioni necessarie alla porta di dominio per accedere ai dati di gestione delle richieste
  6641.      *
  6642.      * @return informazioni
  6643.      *
  6644.      */
  6645.     private static AccessoDatiRichieste accessoDatiRichieste = null;
  6646.     private static Boolean accessoDatiRichiesteLetto = false;
  6647.     public static void setAccessoDatiRichieste(AccessoDatiRichieste accessoDatiRichieste) {
  6648.         ConfigurazionePdDReader.accessoDatiRichieste = accessoDatiRichieste;
  6649.     }
  6650.     public static void setAccessoDatiRichiesteLetto(Boolean accessoDatiRichiesteLetto) {
  6651.         ConfigurazionePdDReader.accessoDatiRichiesteLetto = accessoDatiRichiesteLetto;
  6652.     }
  6653.     protected AccessoDatiRichieste getAccessoDatiRichieste(Connection connectionPdD){

  6654.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.accessoDatiRichiesteLetto.booleanValue()){
  6655.             AccessoDatiRichieste tmp = null;
  6656.             try{
  6657.                 tmp = this.configurazionePdD.getAccessoDatiRichieste(connectionPdD);
  6658.             }catch(DriverConfigurazioneNotFound e){
  6659.                 this.logDebug("getAccessoDatiRichieste (not found): "+e.getMessage());
  6660.             }catch(Exception e){
  6661.                 this.logError("getAccessoDatiRichieste",e);
  6662.             }

  6663.             ConfigurazionePdDReader.setAccessoDatiRichieste(tmp);
  6664.             ConfigurazionePdDReader.setAccessoDatiRichiesteLetto(true);
  6665.         }

  6666.         /**
  6667.         if(ConfigurazionePdDReader.accessoDatiRichieste.getCache()==null){
  6668.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE DISABILITATA");
  6669.         }else{
  6670.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE ABILITATA");
  6671.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE ALGORITMO: "+ConfigurazionePdDReader.accessoDatiRichieste.getCache().getAlgoritmo());
  6672.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE DIMENSIONE: "+ConfigurazionePdDReader.accessoDatiRichieste.getCache().getDimensione());
  6673.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE ITEM IDLE: "+ConfigurazionePdDReader.accessoDatiRichieste.getCache().getItemIdleTime());
  6674.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiRichieste.getCache().getItemLifeSecond());
  6675.             System.out.println("ACCESSO_DATI_RICHIESTE CACHE ITEM LIFE SECOND: "+ConfigurazionePdDReader.accessoDatiRichieste.getCrlItemLifeSecond());
  6676.         }
  6677.          */

  6678.         return ConfigurazionePdDReader.accessoDatiRichieste;
  6679.     }

  6680.     /**
  6681.      * Restituisce il tipo di validazione richiesta alla porta di dominio.
  6682.      * Se un valore non viene impostato, il tipo ritornato sara' 'attivo'.
  6683.      *
  6684.      * @return la validazione richiesta a OpenSPCoop.
  6685.      *
  6686.      */
  6687.     private static StatoFunzionalitaConWarning tipoValidazione = null;
  6688.     protected StatoFunzionalitaConWarning getTipoValidazione(Connection connectionPdD,String implementazionePdDSoggetto){

  6689.         // ovverriding per implementazione porta di dominio
  6690.         String tipo = this.pddProperties.getValidazioneBuste_Stato(implementazionePdDSoggetto);
  6691.         if(tipo!=null && (
  6692.                 CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.toString().equals(tipo) ||
  6693.                 CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.toString().equals(tipo) ||
  6694.                 CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.toString().equals(tipo) )
  6695.                 ){
  6696.             if(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.toString().equals(tipo))
  6697.                 return CostantiConfigurazione.STATO_CON_WARNING_ABILITATO;
  6698.             else if(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.toString().equals(tipo))
  6699.                 return CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO;
  6700.             else
  6701.                 return CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY;
  6702.         }

  6703.         if( this.configurazioneDinamica || ConfigurazionePdDReader.tipoValidazione==null){

  6704.             Configurazione configurazione = null;
  6705.             try{
  6706.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  6707.                 /*if(configurazione.getValidazioneBuste()!=null){
  6708.                     System.out.println("VALIDAZIONE tipo["+configurazione.getValidazioneBuste().getStato()+"] Controllo["+
  6709.                             configurazione.getValidazioneBuste().getControllo()+"] Profilo["+
  6710.                             configurazione.getValidazioneBuste().getProfiloCollaborazione()+"] Manifest["+
  6711.                             configurazione.getValidazioneBuste().getManifestAttachments()+"]");
  6712.                 }*/


  6713.             }catch(DriverConfigurazioneNotFound e){
  6714.                 this.logDebug("getTipoValidazione (not found): "+e.getMessage());
  6715.             }catch(Exception e){
  6716.                 this.logError("getTipoValidazione",e);
  6717.             }
  6718.             if( configurazione  == null || configurazione.getValidazioneBuste()==null){
  6719.                 ConfigurazionePdDReader.tipoValidazione = CostantiConfigurazione.STATO_CON_WARNING_ABILITATO;
  6720.             }else if( CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.equals(configurazione.getValidazioneBuste().getStato())  )
  6721.                 ConfigurazionePdDReader.tipoValidazione = CostantiConfigurazione.STATO_CON_WARNING_ABILITATO;
  6722.             else if( CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.equals(configurazione.getValidazioneBuste().getStato())  )
  6723.                 ConfigurazionePdDReader.tipoValidazione = CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO;
  6724.             else if( CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(configurazione.getValidazioneBuste().getStato())  )
  6725.                 ConfigurazionePdDReader.tipoValidazione = CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY;
  6726.             else
  6727.                 ConfigurazionePdDReader.tipoValidazione = CostantiConfigurazione.STATO_CON_WARNING_ABILITATO;

  6728.         }

  6729.         return ConfigurazionePdDReader.tipoValidazione;
  6730.     }

  6731.     /**
  6732.      * Restituisce true se il livello di validazione richiesta alla porta di dominio e' normale.
  6733.      * False se il livello di validazione e' rigido.
  6734.      * Se un valore non e' stato impostato, il livello scelto sara' 'normale' (return true).
  6735.      *
  6736.      * @return true se il livello di validazione richiesta a OpenSPCoop e 'normale'.
  6737.      *
  6738.      */
  6739.     private static Boolean isLivelloValidazioneNormale = null;
  6740.     protected boolean isLivelloValidazioneNormale(Connection connectionPdD,String implementazionePdDSoggetto){

  6741.         // ovverriding per implementazione porta di dominio
  6742.         String value = this.pddProperties.getValidazioneBuste_Controllo(implementazionePdDSoggetto);
  6743.         if(value!=null && (
  6744.                 CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_NORMALE.toString().equalsIgnoreCase(value) ||
  6745.                 CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_RIGIDO.toString().equalsIgnoreCase(value) )
  6746.                 ){
  6747.             if(CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_NORMALE.toString().equalsIgnoreCase(value))
  6748.                 return true;
  6749.             else
  6750.                 return false;
  6751.         }

  6752.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isLivelloValidazioneNormale==null){

  6753.             Configurazione configurazione = null;
  6754.             try{
  6755.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  6756.             }catch(DriverConfigurazioneNotFound e){
  6757.                 this.logDebug("isLivelloValidazioneNormale (not found): "+e.getMessage());
  6758.             }catch(Exception e){
  6759.                 this.logError("isLivelloValidazioneNormale",e);
  6760.             }
  6761.             if( configurazione  == null  || configurazione.getValidazioneBuste()==null){
  6762.                 ConfigurazionePdDReader.isLivelloValidazioneNormale = true; // default is normale
  6763.             }else if( CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_NORMALE.equals(configurazione.getValidazioneBuste().getControllo())  )
  6764.                 ConfigurazionePdDReader.isLivelloValidazioneNormale = true;
  6765.             else
  6766.                 ConfigurazionePdDReader.isLivelloValidazioneNormale = false;        

  6767.         }

  6768.         return ConfigurazionePdDReader.isLivelloValidazioneNormale;

  6769.     }

  6770.     /**
  6771.      * Restituisce true se il livello di validazione richiesta alla porta di dominio e' rigido.
  6772.      * False se il livello di validazione e' normale.
  6773.      * Se un valore non e' stato impostato, il livello scelto sara' 'normale' (return false).
  6774.      *
  6775.      * @return true se il livello di validazione richiesta a OpenSPCoop e 'rigido'.
  6776.      *
  6777.      */
  6778.     private static Boolean isLivelloValidazioneRigido = null;
  6779.     protected boolean isLivelloValidazioneRigido(Connection connectionPdD, String implementazionePdDSoggetto){

  6780.         // ovverriding per implementazione porta di dominio
  6781.         String value = this.pddProperties.getValidazioneBuste_Controllo(implementazionePdDSoggetto);
  6782.         if(value!=null && (
  6783.                 CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_NORMALE.toString().equalsIgnoreCase(value) ||
  6784.                 CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_RIGIDO.toString().equalsIgnoreCase(value) )
  6785.                 ){
  6786.             if(CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_RIGIDO.toString().equalsIgnoreCase(value))
  6787.                 return true;
  6788.             else
  6789.                 return false;
  6790.         }

  6791.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isLivelloValidazioneRigido==null){

  6792.             Configurazione configurazione = null;
  6793.             try{
  6794.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  6795.             }catch(DriverConfigurazioneNotFound e){
  6796.                 this.logDebug("isLivelloValidazioneRigido (not found): "+e.getMessage());
  6797.             }catch(Exception e){
  6798.                 this.logError("isLivelloValidazioneRigido",e);
  6799.             }
  6800.             if( configurazione  == null  || configurazione.getValidazioneBuste()==null){
  6801.                 ConfigurazionePdDReader.isLivelloValidazioneRigido = false; // default is normale
  6802.             }else if( CostantiConfigurazione.VALIDAZIONE_PROTOCOL_LIVELLO_RIGIDO.equals(configurazione.getValidazioneBuste().getControllo())  )
  6803.                 ConfigurazionePdDReader.isLivelloValidazioneRigido = true;
  6804.             else
  6805.                 ConfigurazionePdDReader.isLivelloValidazioneRigido = false;

  6806.         }

  6807.         return ConfigurazionePdDReader.isLivelloValidazioneRigido;
  6808.     }

  6809.     /**
  6810.      * Restituisce l'indicazione se il profilo di collaborazione deve essere validato controllando
  6811.      * il profilo registrato nel registro.
  6812.      * Se un valore non viene impostato, il tipo ritornato sara' 'disabilitato'.
  6813.      *
  6814.      * @return la validazione del profilo di collaborazione richiesta a OpenSPCoop.
  6815.      *
  6816.      */
  6817.     private static Boolean validazioneProfiloCollaborazione = null;
  6818.     protected boolean isValidazioneProfiloCollaborazione(Connection connectionPdD, String implementazionePdDSoggetto){

  6819.         // ovverriding per implementazione porta di dominio
  6820.         String value = this.pddProperties.getValidazioneBuste_ProfiloCollaborazione(implementazionePdDSoggetto);
  6821.         if(value!=null && (
  6822.                 CostantiConfigurazione.ABILITATO.toString().equalsIgnoreCase(value) ||
  6823.                 CostantiConfigurazione.DISABILITATO.toString().equalsIgnoreCase(value) )
  6824.                 ){
  6825.             if(CostantiConfigurazione.ABILITATO.toString().equalsIgnoreCase(value))
  6826.                 return true;
  6827.             else
  6828.                 return false;
  6829.         }

  6830.         if( this.configurazioneDinamica || ConfigurazionePdDReader.validazioneProfiloCollaborazione==null){

  6831.             Configurazione configurazione = null;
  6832.             try{
  6833.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  6834.             }catch(DriverConfigurazioneNotFound e){
  6835.                 this.logDebug("isValidazioneProfiloCollaborazione (not found): "+e.getMessage());
  6836.             }catch(Exception e){
  6837.                 this.logError("isValidazioneProfiloCollaborazione",e);
  6838.             }
  6839.             if(configurazione == null || configurazione.getValidazioneBuste()==null)
  6840.                 ConfigurazionePdDReader.validazioneProfiloCollaborazione = false; //default: CostantiConfigurazione.DISABILITATO;
  6841.             else if(CostantiConfigurazione.ABILITATO.equals(configurazione.getValidazioneBuste().getProfiloCollaborazione()))
  6842.                 ConfigurazionePdDReader.validazioneProfiloCollaborazione = true;
  6843.             else
  6844.                 ConfigurazionePdDReader.validazioneProfiloCollaborazione = false; //default: CostantiConfigurazione.DISABILITATO;

  6845.         }

  6846.         return ConfigurazionePdDReader.validazioneProfiloCollaborazione;
  6847.     }

  6848.     /**
  6849.      * Restituisce true se la porta di dominio deve validare il manifest di eventuali messaggi con attachments.
  6850.      *
  6851.      * @return Restituisce true se la porta di dominio deve validare il manifest di eventuali messaggi con attachments.
  6852.      *
  6853.      */
  6854.     private static Boolean validazioneManifestAttachments = null;
  6855.     protected boolean isValidazioneManifestAttachments(Connection connectionPdD, String implementazionePdDSoggetto){

  6856.         // ovverriding per implementazione porta di dominio
  6857.         String value = this.pddProperties.getValidazioneBuste_ManifestAttachments(implementazionePdDSoggetto);
  6858.         if(value!=null && (
  6859.                 CostantiConfigurazione.ABILITATO.toString().equalsIgnoreCase(value) ||
  6860.                 CostantiConfigurazione.DISABILITATO.toString().equalsIgnoreCase(value) )
  6861.                 ){
  6862.             if(CostantiConfigurazione.ABILITATO.toString().equalsIgnoreCase(value))
  6863.                 return true;
  6864.             else
  6865.                 return false;
  6866.         }

  6867.         if( this.configurazioneDinamica || ConfigurazionePdDReader.validazioneManifestAttachments==null){

  6868.             Configurazione configurazione = null;
  6869.             try{
  6870.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  6871.             }catch(DriverConfigurazioneNotFound e){
  6872.                 this.logDebug("isValidazioneManifestAttachments (not found): "+e.getMessage());
  6873.             }catch(Exception e){
  6874.                 this.logDebug("isValidazioneManifestAttachments",e);
  6875.             }
  6876.             if(configurazione == null || configurazione.getValidazioneBuste()==null)
  6877.                 ConfigurazionePdDReader.validazioneManifestAttachments = true; //default: CostantiConfigurazione.ABILITATO;
  6878.             else if(CostantiConfigurazione.DISABILITATO.equals(configurazione.getValidazioneBuste().getManifestAttachments()))
  6879.                 ConfigurazionePdDReader.validazioneManifestAttachments = false;
  6880.             else
  6881.                 ConfigurazionePdDReader.validazioneManifestAttachments = true; //default: CostantiConfigurazione.ABILITATO;

  6882.         }

  6883.         return ConfigurazionePdDReader.validazioneManifestAttachments;
  6884.     }

  6885.     /**
  6886.      * Restituisce l'indicazione sulla connettivita' della PdD, in particolar modo sulla modalita'
  6887.      * di invio di risposte, la quale puo' variare da invio
  6888.      * nella reply della connessione (return false) o su di una nuova connessione (return true)
  6889.      *
  6890.      * @return true se viene utilizzata una nuova connessione per effettuare l'invio di eventuali risposte.
  6891.      *
  6892.      */
  6893.     private static Boolean newConnectionForResponse = null;
  6894.     protected boolean newConnectionForResponse(Connection connectionPdD){

  6895.         if( this.configurazioneDinamica || ConfigurazionePdDReader.newConnectionForResponse==null){
  6896.             Configurazione configurazione = null;
  6897.             try{
  6898.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  6899.                 /*if(configurazione.getRisposte()!=null){
  6900.                     System.out.println("NEW CONNECTION FOR RESPONSE ["+configurazione.getRisposte().getConnessione()+"]");
  6901.                 }*/

  6902.             }catch(DriverConfigurazioneNotFound e){
  6903.                 this.logDebug("newConnectionForResponse (not found): "+e.getMessage());
  6904.             }catch(Exception e){
  6905.                 this.logError("newConnectionForResponse",e);
  6906.             }
  6907.             if(configurazione == null || configurazione.getRisposte()==null)
  6908.                 ConfigurazionePdDReader.newConnectionForResponse = false; //default: CostantiConfigurazione.CONNECTION_REPLY;
  6909.             else if(CostantiConfigurazione.NEW_CONNECTION.equals(configurazione.getRisposte().getConnessione()))
  6910.                 ConfigurazionePdDReader.newConnectionForResponse = true;
  6911.             else
  6912.                 ConfigurazionePdDReader.newConnectionForResponse = false; //default: CostantiConfigurazione.CONNECTION_REPLY;
  6913.         }

  6914.         return ConfigurazionePdDReader.newConnectionForResponse;
  6915.     }

  6916.     /**
  6917.      * Restituisce true se la porta di dominio deve utilizzare eventuali indirizzi telematici presenti nelle buste ricevute.
  6918.      *
  6919.      * @return true se la porta di dominio deve utilizzare eventuali indirizzi telematici presenti nelle buste.
  6920.      *
  6921.      */
  6922.     private static Boolean utilizzoIndirizzoRisposta = null;
  6923.     protected boolean isUtilizzoIndirizzoTelematico(Connection connectionPdD){

  6924.         if( this.configurazioneDinamica || ConfigurazionePdDReader.utilizzoIndirizzoRisposta==null){
  6925.             Configurazione configurazione = null;
  6926.             try{
  6927.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  6928.                 /*if(configurazione.getIndirizzoRisposta()!=null){
  6929.                     System.out.println("INDIRIZZO TELEMATICO ["+configurazione.getIndirizzoRisposta().getUtilizzo()+"]");
  6930.                 }*/

  6931.             }catch(DriverConfigurazioneNotFound e){
  6932.                 this.logDebug("isUtilizzoIndirizzoRisposta (not found): "+e.getMessage());
  6933.             }catch(Exception e){
  6934.                 this.logError("isUtilizzoIndirizzoRisposta",e);
  6935.             }
  6936.             if(configurazione == null || configurazione.getIndirizzoRisposta() == null)
  6937.                 ConfigurazionePdDReader.utilizzoIndirizzoRisposta = false; //default: CostantiConfigurazione.DISABILITATO;
  6938.             else if(CostantiConfigurazione.ABILITATO.equals(configurazione.getIndirizzoRisposta().getUtilizzo()))
  6939.                 ConfigurazionePdDReader.utilizzoIndirizzoRisposta = true;
  6940.             else
  6941.                 ConfigurazionePdDReader.utilizzoIndirizzoRisposta = false; //default: CostantiConfigurazione.DISABILITATO;
  6942.         }

  6943.         return ConfigurazionePdDReader.utilizzoIndirizzoRisposta;
  6944.     }

  6945.     /**
  6946.      * Restituisce true se la porta di dominio deve gestire (creare/eliminare) manifest di eventuali messaggi con attachments.
  6947.      *
  6948.      * @return Restituisce true se la porta di dominio deve gestire (creare/eliminare) manifest di eventuali messaggi con attachments.
  6949.      *
  6950.      */
  6951.     private static Boolean gestioneManifestAttachments = null;
  6952.     protected boolean isGestioneManifestAttachments(Connection connectionPdD){

  6953.         if( this.configurazioneDinamica || ConfigurazionePdDReader.gestioneManifestAttachments==null){
  6954.             Configurazione configurazione = null;
  6955.             try{
  6956.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  6957.                 /*if(configurazione.getAttachments()!=null){
  6958.                     System.out.println("GESTIONE MANIFEST ["+configurazione.getAttachments().getGestioneManifest()+"]");
  6959.                 }*/

  6960.             }catch(DriverConfigurazioneNotFound e){
  6961.                 this.logDebug("isGestioneManifestAttachments (not found): "+e.getMessage());
  6962.             }catch(Exception e){
  6963.                 this.logError("isGestioneManifestAttachments",e);
  6964.             }
  6965.             if(configurazione == null || configurazione.getAttachments()==null)
  6966.                 ConfigurazionePdDReader.gestioneManifestAttachments = false;  //default: CostantiConfigurazione.DISABILITATO;
  6967.             else if(CostantiConfigurazione.ABILITATO.equals(configurazione.getAttachments().getGestioneManifest()))
  6968.                 ConfigurazionePdDReader.gestioneManifestAttachments = true;
  6969.             else
  6970.                 ConfigurazionePdDReader.gestioneManifestAttachments = false;  //default: CostantiConfigurazione.DISABILITATO;
  6971.         }

  6972.         return ConfigurazionePdDReader.gestioneManifestAttachments;
  6973.     }

  6974.     /**
  6975.      * Restituisce i minuti dopo i quali una busta non riscontrata sara' rispedita.
  6976.      * (nel caso in cui nella busta sia richiesto una confermaRicezione)
  6977.      *
  6978.      * @return timeout riscontro.
  6979.      *
  6980.      */
  6981.     private static Long timeoutRiscontro = null;
  6982.     protected long getTimeoutRiscontro(Connection connectionPdD){

  6983.         if( this.configurazioneDinamica || ConfigurazionePdDReader.timeoutRiscontro==null){
  6984.             Configurazione configurazione = null;
  6985.             try{
  6986.                 configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  6987.                 /*if(configurazione.getInoltroBusteNonRiscontrate()!=null){
  6988.                     System.out.println("RISCONTRI ["+configurazione.getInoltroBusteNonRiscontrate().getCadenza()+"]");
  6989.                 }*/

  6990.             }catch(DriverConfigurazioneNotFound e){
  6991.                 this.logDebug("getTimeoutRiscontro (not found): "+e.getMessage());
  6992.             }catch(Exception e){
  6993.                 this.logError("getTimeoutRiscontro",e);
  6994.             }
  6995.             if(configurazione == null || configurazione.getInoltroBusteNonRiscontrate()==null)
  6996.                 ConfigurazionePdDReader.timeoutRiscontro = -1L;
  6997.             else if(configurazione.getInoltroBusteNonRiscontrate().getCadenza() == null)
  6998.                 ConfigurazionePdDReader.timeoutRiscontro = -1L;
  6999.             else{
  7000.                 Long longValue = null;
  7001.                 try{
  7002.                     longValue = Long.valueOf(configurazione.getInoltroBusteNonRiscontrate().getCadenza());
  7003.                 }catch(Exception e){
  7004.                     //  Conversione fallita
  7005.                 }

  7006.                 if(longValue == null)
  7007.                     ConfigurazionePdDReader.timeoutRiscontro = -1L;
  7008.                 else
  7009.                     ConfigurazionePdDReader.timeoutRiscontro = longValue;
  7010.             }
  7011.         }

  7012.         return ConfigurazionePdDReader.timeoutRiscontro;
  7013.     }


  7014.     /**
  7015.      * Restituisce il Livello per il logger dei messaggi diagnostici.
  7016.      *
  7017.      * @return Il livello di Log4J per il logger dei messaggi diagnostici (di default ritorna ALL).
  7018.      *
  7019.      */
  7020.     private static Level livelloMessaggiDiagnostici = null;
  7021.     public static Level livelloMessaggiDiagnosticiJMX = null;
  7022.     protected Level getLivelloMessaggiDiagnostici(Connection connectionPdD){

  7023.         if(ConfigurazionePdDReader.livelloMessaggiDiagnosticiJMX!=null)
  7024.             return ConfigurazionePdDReader.livelloMessaggiDiagnosticiJMX;

  7025.         if( this.configurazioneDinamica || ConfigurazionePdDReader.livelloMessaggiDiagnostici==null){
  7026.             try{
  7027.                 Configurazione configurazione = null;
  7028.                 try{
  7029.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);                  
  7030.                 }catch(DriverConfigurazioneNotFound e){
  7031.                     this.logDebug("getLivelloMessaggiDiagnostici (not found): "+e.getMessage());
  7032.                 }catch(Exception e){
  7033.                     this.logError("getLivelloMessaggiDiagnostici",e);
  7034.                 }

  7035.                 if(configurazione!=null && configurazione.getMessaggiDiagnostici()!=null){
  7036.                     String readLevel = configurazione.getMessaggiDiagnostici().getSeverita().toString();      
  7037.                     ConfigurazionePdDReader.livelloMessaggiDiagnostici = LogLevels.toLog4J(readLevel);
  7038.                 }else{
  7039.                     ConfigurazionePdDReader.livelloMessaggiDiagnostici = LogLevels.LOG_LEVEL_INFO_PROTOCOL;
  7040.                 }

  7041.             }catch(Exception e){
  7042.                 ConfigurazionePdDReader.livelloMessaggiDiagnostici = LogLevels.LOG_LEVEL_INFO_PROTOCOL;
  7043.             }
  7044.         }

  7045.         return ConfigurazionePdDReader.livelloMessaggiDiagnostici;
  7046.     }

  7047.     /**
  7048.      * Restituisce il Livello per il logger dei messaggi diagnostici in stile 'openspcoop'.
  7049.      *
  7050.      * @return Il livello di Log4J per il logger dei messaggi diagnostici 'openspcoop' (di default ritorna OFF).
  7051.      *
  7052.      */
  7053.     private static Level livelloLog4JMessaggiDiagnostici = null;
  7054.     public static Level livelloLog4JMessaggiDiagnosticiJMX = null;
  7055.     protected Level getLivelloLog4JMessaggiDiagnostici(Connection connectionPdD){

  7056.         if(ConfigurazionePdDReader.livelloLog4JMessaggiDiagnosticiJMX!=null){
  7057.             return ConfigurazionePdDReader.livelloLog4JMessaggiDiagnosticiJMX;
  7058.         }

  7059.         if( this.configurazioneDinamica || ConfigurazionePdDReader.livelloLog4JMessaggiDiagnostici==null){
  7060.             try{
  7061.                 Configurazione configurazione = null;
  7062.                 try{
  7063.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7064.                 }catch(DriverConfigurazioneNotFound e){
  7065.                     this.logDebug("getLivelloLog4JMessaggiDiagnostici (not found): "+e.getMessage());
  7066.                 }catch(Exception e){
  7067.                     this.logError("getLivelloLog4JMessaggiDiagnostici",e);
  7068.                 }

  7069.                 if(configurazione!=null && configurazione.getMessaggiDiagnostici()!=null){
  7070.                     String readLevel =  configurazione.getMessaggiDiagnostici().getSeveritaLog4j().toString();    
  7071.                     ConfigurazionePdDReader.livelloLog4JMessaggiDiagnostici = LogLevels.toLog4J(readLevel);
  7072.                 }else{
  7073.                     ConfigurazionePdDReader.livelloLog4JMessaggiDiagnostici = LogLevels.LOG_LEVEL_INFO_PROTOCOL;
  7074.                 }

  7075.             }catch(Exception e){
  7076.                 ConfigurazionePdDReader.livelloLog4JMessaggiDiagnostici = LogLevels.LOG_LEVEL_INFO_PROTOCOL;
  7077.             }
  7078.         }

  7079.         return ConfigurazionePdDReader.livelloLog4JMessaggiDiagnostici;
  7080.     }

  7081.     /**
  7082.      * Restituisce il Livello per il logger dei messaggi diagnostici .
  7083.      *
  7084.      * @return Il livello per il logger dei messaggi diagnostici  (di default ritorna ALL).
  7085.      *
  7086.      */
  7087.     private static Integer severitaMessaggiDiagnostici = null;
  7088.     public static Integer severitaMessaggiDiagnosticiJMX = null;
  7089.     protected int getSeveritaMessaggiDiagnostici(Connection connectionPdD){

  7090.         if(ConfigurazionePdDReader.severitaMessaggiDiagnosticiJMX!=null){
  7091.             return ConfigurazionePdDReader.severitaMessaggiDiagnosticiJMX;
  7092.         }

  7093.         if( this.configurazioneDinamica || ConfigurazionePdDReader.severitaMessaggiDiagnostici==null){
  7094.             try{
  7095.                 Configurazione configurazione = null;
  7096.                 try{
  7097.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  7098.                 }catch(DriverConfigurazioneNotFound e){
  7099.                     this.logDebug("getSeveritaMessaggiDiagnostici (not found): "+e.getMessage());
  7100.                 }catch(Exception e){
  7101.                     this.logError("getSeveritaMessaggiDiagnostici",e);
  7102.                 }

  7103.                 if(configurazione!=null && configurazione.getMessaggiDiagnostici()!=null){
  7104.                     String readLevel = configurazione.getMessaggiDiagnostici().getSeverita().toString();      
  7105.                     ConfigurazionePdDReader.severitaMessaggiDiagnostici = LogLevels.toOpenSPCoop2(readLevel);
  7106.                 }else{
  7107.                     ConfigurazionePdDReader.severitaMessaggiDiagnostici = LogLevels.SEVERITA_INFO_PROTOCOL;
  7108.                 }

  7109.             }catch(Exception e){
  7110.                 ConfigurazionePdDReader.severitaMessaggiDiagnostici = LogLevels.SEVERITA_INFO_PROTOCOL;
  7111.             }
  7112.         }

  7113.         return ConfigurazionePdDReader.severitaMessaggiDiagnostici;
  7114.     }

  7115.     /**
  7116.      * Restituisce il Livello per il logger dei messaggi diagnostici che finiscono su log4j
  7117.      *
  7118.      * @return Il livello per il logger dei messaggi diagnostici che finiscono su log4j (di default ritorna OFF).
  7119.      *
  7120.      */
  7121.     private static Integer severitaLog4JMessaggiDiagnostici = null;
  7122.     public static Integer severitaLog4JMessaggiDiagnosticiJMX = null;
  7123.     public static Integer getSeveritaLog4JMessaggiDiagnosticiJMX() {
  7124.         return severitaLog4JMessaggiDiagnosticiJMX;
  7125.     }
  7126.     public static void setSeveritaLog4JMessaggiDiagnosticiJMX(
  7127.             Integer severitaLog4JMessaggiDiagnosticiJMX) {
  7128.         ConfigurazionePdDReader.severitaLog4JMessaggiDiagnosticiJMX = severitaLog4JMessaggiDiagnosticiJMX;
  7129.     }
  7130.     protected int getSeveritaLog4JMessaggiDiagnostici(Connection connectionPdD){

  7131.         if(ConfigurazionePdDReader.severitaLog4JMessaggiDiagnosticiJMX!=null){
  7132.             return ConfigurazionePdDReader.severitaLog4JMessaggiDiagnosticiJMX;
  7133.         }

  7134.         if( this.configurazioneDinamica || ConfigurazionePdDReader.severitaLog4JMessaggiDiagnostici==null){
  7135.             try{

  7136.                 Configurazione configurazione = null;
  7137.                 try{
  7138.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7139.                 }catch(DriverConfigurazioneNotFound e){
  7140.                     this.logDebug("getSeveritaLog4JMessaggiDiagnostici (not found): "+e.getMessage());
  7141.                 }catch(Exception e){
  7142.                     this.logError("getSeveritaLog4JMessaggiDiagnostici",e);
  7143.                 }

  7144.                 if(configurazione!=null && configurazione.getMessaggiDiagnostici()!=null){
  7145.                     String readLevel = configurazione.getMessaggiDiagnostici().getSeveritaLog4j().toString();      
  7146.                     ConfigurazionePdDReader.severitaLog4JMessaggiDiagnostici = LogLevels.toOpenSPCoop2(readLevel);
  7147.                 }else{
  7148.                     ConfigurazionePdDReader.severitaLog4JMessaggiDiagnostici = LogLevels.SEVERITA_INFO_PROTOCOL;
  7149.                 }

  7150.             }catch(Exception e){
  7151.                 ConfigurazionePdDReader.severitaLog4JMessaggiDiagnostici = LogLevels.SEVERITA_INFO_PROTOCOL;
  7152.             }
  7153.         }

  7154.         return ConfigurazionePdDReader.severitaLog4JMessaggiDiagnostici;
  7155.     }

  7156.     /**
  7157.      * Restituisce gli appender personalizzati per la registrazione dei messaggi diagnostici.
  7158.      *
  7159.      * @return Restituisce gli appender personalizzati per la registrazione dei messaggi diagnostici.
  7160.      */
  7161.     private static MessaggiDiagnostici openSPCoopAppenderMessaggiDiagnostici = null;
  7162.     private static Boolean openSPCoopAppenderMessaggiDiagnosticiLetto = false;
  7163.     protected MessaggiDiagnostici getOpenSPCoopAppenderMessaggiDiagnostici(Connection connectionPdD){

  7164.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.openSPCoopAppenderMessaggiDiagnosticiLetto){
  7165.             try{

  7166.                 Configurazione configurazione = null;
  7167.                 try{
  7168.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7169.                 }catch(DriverConfigurazioneNotFound e){
  7170.                     this.logDebug("getOpenSPCoopAppenderMessaggiDiagnostici (not found): "+e.getMessage());
  7171.                 }catch(Exception e){
  7172.                     this.logError("getOpenSPCoopAppenderMessaggiDiagnostici",e);
  7173.                 }
  7174.                 if(configurazione!=null)
  7175.                     ConfigurazionePdDReader.openSPCoopAppenderMessaggiDiagnostici = configurazione.getMessaggiDiagnostici();
  7176.                 else
  7177.                     ConfigurazionePdDReader.openSPCoopAppenderMessaggiDiagnostici = null;

  7178.             }catch(Exception e){
  7179.                 ConfigurazionePdDReader.openSPCoopAppenderMessaggiDiagnostici = null;
  7180.             }
  7181.             ConfigurazionePdDReader.openSPCoopAppenderMessaggiDiagnosticiLetto = true;
  7182.         }

  7183.         return ConfigurazionePdDReader.openSPCoopAppenderMessaggiDiagnostici;
  7184.     }


  7185.     public static Boolean tracciamentoBusteJMX = null;
  7186.     private static Boolean tracciamentoBuste = null;
  7187.     /**
  7188.      * Restituisce l'indicazione se effettuare o meno il tracciamento delle buste.
  7189.      *
  7190.      * @return Restituisce l'indicazione se effettuare o meno il tracciamento delle buste.  (di default ritorna 'abilitato').
  7191.      *
  7192.      */
  7193.     protected boolean tracciamentoBuste(Connection connectionPdD){

  7194.         if(ConfigurazionePdDReader.tracciamentoBusteJMX!=null)
  7195.             return ConfigurazionePdDReader.tracciamentoBusteJMX;

  7196.         if( this.configurazioneDinamica || ConfigurazionePdDReader.tracciamentoBuste==null){
  7197.             try{

  7198.                 Configurazione configurazione = null;
  7199.                 try{
  7200.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  7201.                     /*if(configurazione.getTracciamento()!=null){
  7202.                         System.out.println("TRACCIAMENTO BUSTE ["+configurazione.getTracciamento().getBuste()+"]");
  7203.                         System.out.println("TRACCIAMENTO DUMP ["+configurazione.getTracciamento().getDump()+"]");
  7204.                         for(int i=0;i<configurazione.getTracciamento().sizeOpenspcoopAppenderList();i++){
  7205.                             System.out.println("TRACCIAMENTO APPENDER ["+i+"] tipo["+configurazione.getTracciamento().getOpenspcoopAppender(i).getTipo()+"]");
  7206.                             List<org.openspcoop2.core.config.Property> properties = configurazione.getTracciamento().getOpenspcoopAppender(i).getPropertyList();
  7207.                             if(properties!=null){
  7208.                                 for (int j = 0; j < properties.size(); j++) {
  7209.                                     System.out.println("TRACCIAMENTO APPENDER ["+i+"] NOME["+properties.get(j).getNome()+"]=VALORE["+properties.get(j).getValore()+"]");
  7210.                                 }
  7211.                             }
  7212.                         }
  7213.                     }*/

  7214.                 }catch(DriverConfigurazioneNotFound e){
  7215.                     this.logDebug("tracciamentoBuste (not found): "+e.getMessage());
  7216.                 }catch(Exception e){
  7217.                     this.logError("tracciamentoBuste",e);
  7218.                 }

  7219.                 if(configurazione!=null && configurazione.getTracciamento()!=null){
  7220.                     StatoFunzionalita read = configurazione.getTracciamento().getStato();      
  7221.                     if(CostantiConfigurazione.DISABILITATO.equals(read))
  7222.                         ConfigurazionePdDReader.tracciamentoBuste = false;
  7223.                     else
  7224.                         ConfigurazionePdDReader.tracciamentoBuste = true;
  7225.                 }else{
  7226.                     ConfigurazionePdDReader.tracciamentoBuste = true; // default ConfigReader.ABILITATO
  7227.                 }
  7228.             }catch(Exception e){
  7229.                 ConfigurazionePdDReader.tracciamentoBuste = true; // default ConfigReader.ABILITATO
  7230.             }
  7231.         }

  7232.         return ConfigurazionePdDReader.tracciamentoBuste;
  7233.     }

  7234.     /**
  7235.      * Restituisce gli appender personalizzati per la registrazione delle buste.
  7236.      *
  7237.      * @return Restituisce gli appender personalizzati per la registrazione delle buste.
  7238.      */
  7239.     private static Tracciamento openSPCoopAppenderTracciamento = null;
  7240.     private static Boolean openSPCoopAppenderTracciamentoLetto = false;
  7241.     protected Tracciamento getOpenSPCoopAppenderTracciamento(Connection connectionPdD){

  7242.         if( this.configurazioneDinamica || ConfigurazionePdDReader.openSPCoopAppenderTracciamentoLetto==false){
  7243.             try{

  7244.                 Configurazione configurazione = null;
  7245.                 try{
  7246.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7247.                 }catch(DriverConfigurazioneNotFound e){
  7248.                     this.logDebug("getOpenSPCoopAppenderTracciamento (not found): "+e.getMessage());
  7249.                 }catch(Exception e){
  7250.                     this.logError("getOpenSPCoopAppenderTracciamento",e);
  7251.                 }

  7252.                 if(configurazione!=null)
  7253.                     ConfigurazionePdDReader.openSPCoopAppenderTracciamento = configurazione.getTracciamento();    

  7254.             }catch(Exception e){
  7255.                 ConfigurazionePdDReader.openSPCoopAppenderTracciamento = null;
  7256.             }
  7257.             ConfigurazionePdDReader.openSPCoopAppenderTracciamentoLetto = true;
  7258.         }

  7259.         return ConfigurazionePdDReader.openSPCoopAppenderTracciamento;
  7260.     }


  7261.     private static Transazioni transazioniConfigurazione = null;
  7262.     public Transazioni getTransazioniConfigurazione(Connection connectionPdD) {

  7263.         if( this.configurazioneDinamica || ConfigurazionePdDReader.transazioniConfigurazione==null){
  7264.             try{
  7265.                 Configurazione configurazione = null;
  7266.                 try{
  7267.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7268.                 }catch(DriverConfigurazioneNotFound e){
  7269.                     this.logDebug("getTransazioniConfigurazione (not found): "+e.getMessage());
  7270.                 }catch(Exception e){
  7271.                     this.logError("getTransazioniConfigurazione",e);
  7272.                 }

  7273.                 if(configurazione!=null && configurazione.getTransazioni()!=null){
  7274.                     ConfigurazionePdDReader.transazioniConfigurazione = configurazione.getTransazioni();
  7275.                 }else{
  7276.                     ConfigurazionePdDReader.transazioniConfigurazione = new Transazioni(); // default
  7277.                 }

  7278.             }catch(Exception e){
  7279.                 ConfigurazionePdDReader.transazioniConfigurazione = new Transazioni(); // default
  7280.             }
  7281.         }

  7282.         return ConfigurazionePdDReader.transazioniConfigurazione;

  7283.     }

  7284.     private static DumpConfigurazione dumpConfigurazionePortaApplicativa = null;
  7285.     public DumpConfigurazione getDumpConfigurazionePortaApplicativa(Connection connectionPdD) {

  7286.         if( this.configurazioneDinamica || ConfigurazionePdDReader.dumpConfigurazionePortaApplicativa==null){
  7287.             try{
  7288.                 Configurazione configurazione = null;
  7289.                 try{
  7290.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7291.                 }catch(DriverConfigurazioneNotFound e){
  7292.                     this.logDebug("getDumpConfigurazione (not found): "+e.getMessage());
  7293.                 }catch(Exception e){
  7294.                     this.logError("getDumpConfigurazione",e);
  7295.                 }

  7296.                 if(configurazione!=null && configurazione.getDump()!=null){
  7297.                     ConfigurazionePdDReader.dumpConfigurazionePortaApplicativa = configurazione.getDump().getConfigurazionePortaApplicativa();
  7298.                 }else{
  7299.                     ConfigurazionePdDReader.dumpConfigurazionePortaApplicativa = new DumpConfigurazione(); // default tutto abilitato
  7300.                 }

  7301.             }catch(Exception e){
  7302.                 ConfigurazionePdDReader.dumpConfigurazionePortaApplicativa = new DumpConfigurazione(); // default tutto abilitato
  7303.             }
  7304.         }

  7305.         return ConfigurazionePdDReader.dumpConfigurazionePortaApplicativa;

  7306.     }
  7307.    
  7308.     private static DumpConfigurazione dumpConfigurazionePortaDelegata = null;
  7309.     public DumpConfigurazione getDumpConfigurazionePortaDelegata(Connection connectionPdD) {

  7310.         if( this.configurazioneDinamica || ConfigurazionePdDReader.dumpConfigurazionePortaDelegata==null){
  7311.             try{
  7312.                 Configurazione configurazione = null;
  7313.                 try{
  7314.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7315.                 }catch(DriverConfigurazioneNotFound e){
  7316.                     this.logDebug("getDumpConfigurazione (not found): "+e.getMessage());
  7317.                 }catch(Exception e){
  7318.                     this.logError("getDumpConfigurazione",e);
  7319.                 }

  7320.                 if(configurazione!=null && configurazione.getDump()!=null){
  7321.                     ConfigurazionePdDReader.dumpConfigurazionePortaDelegata = configurazione.getDump().getConfigurazionePortaDelegata();
  7322.                 }else{
  7323.                     ConfigurazionePdDReader.dumpConfigurazionePortaDelegata = new DumpConfigurazione(); // default tutto abilitato
  7324.                 }

  7325.             }catch(Exception e){
  7326.                 ConfigurazionePdDReader.dumpConfigurazionePortaDelegata = new DumpConfigurazione(); // default tutto abilitato
  7327.             }
  7328.         }

  7329.         return ConfigurazionePdDReader.dumpConfigurazionePortaDelegata;

  7330.     }

  7331.     private static Boolean dumpBinarioPD = null;
  7332.     public static Boolean dumpBinarioPDJMX = null;
  7333.     protected boolean dumpBinarioPD(Connection connectionPdD){

  7334.         if(ConfigurazionePdDReader.dumpBinarioPDJMX!=null)
  7335.             return ConfigurazionePdDReader.dumpBinarioPDJMX;

  7336.         if( this.configurazioneDinamica || ConfigurazionePdDReader.dumpBinarioPD==null){
  7337.             try{
  7338.                 Configurazione configurazione = null;
  7339.                 try{
  7340.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7341.                 }catch(DriverConfigurazioneNotFound e){
  7342.                     this.logDebug("dumpBinarioPD (not found): "+e.getMessage());
  7343.                 }catch(Exception e){
  7344.                     this.logError("dumpBinarioPD",e);
  7345.                 }

  7346.                 if(configurazione!=null && configurazione.getDump()!=null){
  7347.                     StatoFunzionalita read = configurazione.getDump().getDumpBinarioPortaDelegata();      
  7348.                     if(CostantiConfigurazione.ABILITATO.equals(read))
  7349.                         ConfigurazionePdDReader.dumpBinarioPD = true;
  7350.                     else
  7351.                         ConfigurazionePdDReader.dumpBinarioPD = false;
  7352.                 }else{
  7353.                     ConfigurazionePdDReader.dumpBinarioPD = false; // default CostantiConfigurazione.DISABILITATO
  7354.                 }

  7355.             }catch(Exception e){
  7356.                 ConfigurazionePdDReader.dumpBinarioPD = false; // default CostantiConfigurazione.DISABILITATO
  7357.             }
  7358.         }

  7359.         return ConfigurazionePdDReader.dumpBinarioPD;
  7360.     }


  7361.     private static Boolean dumpBinarioPA = null;
  7362.     public static Boolean dumpBinarioPAJMX = null;
  7363.     protected boolean dumpBinarioPA(Connection connectionPdD){

  7364.         if(ConfigurazionePdDReader.dumpBinarioPAJMX!=null)
  7365.             return ConfigurazionePdDReader.dumpBinarioPAJMX;

  7366.         if( this.configurazioneDinamica || ConfigurazionePdDReader.dumpBinarioPA==null){
  7367.             try{
  7368.                 Configurazione configurazione = null;
  7369.                 try{
  7370.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7371.                 }catch(DriverConfigurazioneNotFound e){
  7372.                     this.logDebug("dumpBinarioPA (not found): "+e.getMessage());
  7373.                 }catch(Exception e){
  7374.                     this.logError("dumpBinarioPA",e);
  7375.                 }

  7376.                 if(configurazione!=null && configurazione.getDump()!=null){
  7377.                     StatoFunzionalita read = configurazione.getDump().getDumpBinarioPortaApplicativa();    
  7378.                     if(CostantiConfigurazione.ABILITATO.equals(read))
  7379.                         ConfigurazionePdDReader.dumpBinarioPA = true;
  7380.                     else
  7381.                         ConfigurazionePdDReader.dumpBinarioPA = false;
  7382.                 }else{
  7383.                     ConfigurazionePdDReader.dumpBinarioPA = false; // default CostantiConfigurazione.DISABILITATO
  7384.                 }

  7385.             }catch(Exception e){
  7386.                 ConfigurazionePdDReader.dumpBinarioPA = false; // default CostantiConfigurazione.DISABILITATO
  7387.             }
  7388.         }

  7389.         return ConfigurazionePdDReader.dumpBinarioPA;
  7390.     }

  7391.     /**
  7392.      * Restituisce gli appender personalizzati per la registrazione dei contenuti
  7393.      *
  7394.      * @return Restituisce gli appender personalizzati per la registrazione dei contenuti
  7395.      */
  7396.     private static Dump openSPCoopAppenderDump = null;
  7397.     private static Boolean openSPCoopAppenderDumpLetto = false;
  7398.     protected Dump getOpenSPCoopAppenderDump(Connection connectionPdD){

  7399.         if( this.configurazioneDinamica || ConfigurazionePdDReader.openSPCoopAppenderDumpLetto==false){
  7400.             try{

  7401.                 Configurazione configurazione = null;
  7402.                 try{
  7403.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  7404.                 }catch(DriverConfigurazioneNotFound e){
  7405.                     this.logDebug("getOpenSPCoopAppenderDump (not found): "+e.getMessage());
  7406.                 }catch(Exception e){
  7407.                     this.logError("getOpenSPCoopAppenderDump",e);
  7408.                 }

  7409.                 if(configurazione!=null)
  7410.                     ConfigurazionePdDReader.openSPCoopAppenderDump = configurazione.getDump();    

  7411.             }catch(Exception e){
  7412.                 ConfigurazionePdDReader.openSPCoopAppenderDump = null;
  7413.             }
  7414.             ConfigurazionePdDReader.openSPCoopAppenderDumpLetto = true;
  7415.         }

  7416.         return ConfigurazionePdDReader.openSPCoopAppenderDump;
  7417.     }

  7418.     /**
  7419.      * Restituisce la politica di gestione della consegna tramite connettore per il componente di cooperazione
  7420.      *
  7421.      * @return la politica di gestione della consegna tramite connettore per il componente di cooperazione
  7422.      *
  7423.      */
  7424.     private static HashMap<String, GestioneErrore> gestioneErroreConnettoreComponenteCooperazioneMap = new HashMap<>();
  7425.     private static org.openspcoop2.utils.Semaphore semaphore_erroreConnettoreCooperazione = new org.openspcoop2.utils.Semaphore("ConfigurazionePdDReader_erroreConnettoreCooperazione");
  7426.     protected GestioneErrore getGestioneErroreConnettoreComponenteCooperazione(IProtocolFactory<?> protocolFactory, ServiceBinding serviceBinding, Connection connectionPdD){

  7427.         String key = protocolFactory.getProtocol()+"_"+serviceBinding;
  7428.        
  7429.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.gestioneErroreConnettoreComponenteCooperazioneMap.containsKey(key)){
  7430.             GestioneErrore gestione = null;
  7431.             try{
  7432.                 try{
  7433.                     gestione = this.configurazionePdD.getGestioneErroreComponenteCooperazione(connectionPdD);

  7434.                     /*if(gestione!=null){
  7435.                         System.out.println("GESTIONE COOPERAZIONE PRESENTE");
  7436.                         System.out.println("COMPORTAMENTO: "+gestione.getComportamento());      
  7437.                         System.out.println("CADENZA: "+gestione.getCadenzaRispedizione());
  7438.                         for(int i=0;i<gestione.sizeCodiceTrasportoList();i++){
  7439.                             System.out.println("TRASPORTO MIN["+gestione.getCodiceTrasporto(i).getValoreMinimo()
  7440.                                     +"] MAX["+gestione.getCodiceTrasporto(i).getValoreMassimo()
  7441.                                     +"] COMPORTMANETO["+gestione.getCodiceTrasporto(i).getComportamento()
  7442.                                     +"] CADENZA["+gestione.getCodiceTrasporto(i).getCadenzaRispedizione()
  7443.                                     +"]" );
  7444.                         }
  7445.                         for(int i=0;i<gestione.sizeSoapFaultList();i++){
  7446.                             System.out.println("SOAP CODE["+gestione.getSoapFault(i).getFaultCode()
  7447.                                     +"] ACTOR["+gestione.getSoapFault(i).getFaultActor()
  7448.                                     +"] STRING["+gestione.getSoapFault(i).getFaultString()
  7449.                                     +"] COMPORTMANETO["+gestione.getSoapFault(i).getComportamento()
  7450.                                     +"] CADENZA["+gestione.getSoapFault(i).getCadenzaRispedizione()
  7451.                                     +"]" );
  7452.                         }
  7453.                     }*/

  7454.                 }catch(DriverConfigurazioneNotFound e){
  7455.                     this.logDebug("getGestioneErroreConnettoreComponenteCooperazione (not found): "+e.getMessage());
  7456.                 }catch(Exception e){
  7457.                     this.logError("getGestioneErroreConnettoreComponenteCooperazione",e);
  7458.                 }
  7459.                 if(gestione == null)
  7460.                     gestione = GestoreErroreConnettore.getGestioneErroreDefaultComponenteCooperazione(protocolFactory, serviceBinding);
  7461.                
  7462.             }catch(Exception e){
  7463.                 gestione = GestoreErroreConnettore.getGestioneErroreDefaultComponenteCooperazione(protocolFactory, serviceBinding);
  7464.             }
  7465.            
  7466.             if(this.configurazioneDinamica) {
  7467.                 return gestione;
  7468.             }
  7469.             else {
  7470.                 //synchronized (ConfigurazionePdDReader.gestioneErroreConnettoreComponenteCooperazioneMap) {
  7471.                 SemaphoreLock lock = semaphore_erroreConnettoreCooperazione.acquireThrowRuntime("getGestioneErroreConnettoreComponenteCooperazione");
  7472.                 try {              
  7473.                     if(!ConfigurazionePdDReader.gestioneErroreConnettoreComponenteCooperazioneMap.containsKey(key)) {
  7474.                         ConfigurazionePdDReader.gestioneErroreConnettoreComponenteCooperazioneMap.put(key, gestione);
  7475.                     }
  7476.                 }finally {
  7477.                     semaphore_erroreConnettoreCooperazione.release(lock, "getGestioneErroreConnettoreComponenteCooperazione");
  7478.                 }
  7479.             }
  7480.            
  7481.         }

  7482.         return ConfigurazionePdDReader.gestioneErroreConnettoreComponenteCooperazioneMap.get(key);

  7483.     }

  7484.     /**
  7485.      * Restituisce la politica di gestione della consegna tramite connettore per il componente di integrazione
  7486.      *
  7487.      * @return la politica di gestione della consegna tramite connettore per il componente di integrazione
  7488.      *
  7489.      */
  7490.     private static HashMap<String, GestioneErrore> gestioneErroreConnettoreComponenteIntegrazioneMap = new HashMap<>();
  7491.     private static org.openspcoop2.utils.Semaphore semaphore_erroreConnettoreIntegrazione = new org.openspcoop2.utils.Semaphore("ConfigurazionePdDReader_erroreConnettoreIntegrazione");
  7492.     protected GestioneErrore getGestioneErroreConnettoreComponenteIntegrazione(IProtocolFactory<?> protocolFactory, ServiceBinding serviceBinding, Connection connectionPdD){

  7493.         String key = protocolFactory.getProtocol()+"_"+serviceBinding;
  7494.        
  7495.         if( this.configurazioneDinamica || !ConfigurazionePdDReader.gestioneErroreConnettoreComponenteIntegrazioneMap.containsKey(key)){
  7496.             GestioneErrore gestione = null;
  7497.             try{
  7498.                 try{
  7499.                     gestione = this.configurazionePdD.getGestioneErroreComponenteIntegrazione(connectionPdD);

  7500.                     /*if(gestione!=null){
  7501.                         System.out.println("GESTIONE INTEGRAZIONE PRESENTE");
  7502.                         System.out.println("COMPORTAMENTO: "+gestione.getComportamento());      
  7503.                         System.out.println("CADENZA: "+gestione.getCadenzaRispedizione());
  7504.                         for(int i=0;i<gestione.sizeCodiceTrasportoList();i++){
  7505.                             System.out.println("TRASPORTO MIN["+gestione.getCodiceTrasporto(i).getValoreMinimo()
  7506.                                     +"] MAX["+gestione.getCodiceTrasporto(i).getValoreMassimo()
  7507.                                     +"] COMPORTMANETO["+gestione.getCodiceTrasporto(i).getComportamento()
  7508.                                     +"] CADENZA["+gestione.getCodiceTrasporto(i).getCadenzaRispedizione()
  7509.                                     +"]" );
  7510.                         }
  7511.                         for(int i=0;i<gestione.sizeSoapFaultList();i++){
  7512.                             System.out.println("SOAP CODE["+gestione.getSoapFault(i).getFaultCode()
  7513.                                     +"] ACTOR["+gestione.getSoapFault(i).getFaultActor()
  7514.                                     +"] STRING["+gestione.getSoapFault(i).getFaultString()
  7515.                                     +"] COMPORTMANETO["+gestione.getSoapFault(i).getComportamento()
  7516.                                     +"] CADENZA["+gestione.getSoapFault(i).getCadenzaRispedizione()
  7517.                                     +"]" );
  7518.                         }
  7519.                     }*/

  7520.                 }catch(DriverConfigurazioneNotFound e){
  7521.                     this.logDebug("getGestioneErroreConnettoreComponenteIntegrazione (not found): "+e.getMessage());
  7522.                 }catch(Exception e){
  7523.                     this.logError("getGestioneErroreConnettoreComponenteIntegrazione",e);
  7524.                 }
  7525.                 if(gestione == null)
  7526.                     gestione = GestoreErroreConnettore.getGestioneErroreDefaultComponenteIntegrazione(protocolFactory, serviceBinding);

  7527.             }catch(Exception e){
  7528.                 gestione = GestoreErroreConnettore.getGestioneErroreDefaultComponenteIntegrazione(protocolFactory, serviceBinding);
  7529.             }
  7530.            
  7531.             if(this.configurazioneDinamica) {
  7532.                 return gestione;
  7533.             }
  7534.             else {
  7535.                 //synchronized (ConfigurazionePdDReader.gestioneErroreConnettoreComponenteIntegrazioneMap) {
  7536.                 SemaphoreLock lock = semaphore_erroreConnettoreIntegrazione.acquireThrowRuntime("getGestioneErroreConnettoreComponenteIntegrazione");
  7537.                 try {
  7538.                     if(!ConfigurazionePdDReader.gestioneErroreConnettoreComponenteIntegrazioneMap.containsKey(key)) {
  7539.                         ConfigurazionePdDReader.gestioneErroreConnettoreComponenteIntegrazioneMap.put(key, gestione);
  7540.                     }
  7541.                 }finally {
  7542.                     semaphore_erroreConnettoreIntegrazione.release(lock, "getGestioneErroreConnettoreComponenteIntegrazione");
  7543.                 }
  7544.             }
  7545.         }

  7546.         return ConfigurazionePdDReader.gestioneErroreConnettoreComponenteIntegrazioneMap.get(key);

  7547.     }



  7548.     /**
  7549.      * Restituisce il tipo di autenticazione associato al servizio IntegrationManager
  7550.      *
  7551.      * @return Restituisce il tipo di autenticazione associato al servizio IntegrationManager (di default ritorna 'ssl').
  7552.      *
  7553.      */
  7554.     private static String[] integrationManagerAuthentication = null;
  7555.     protected String[] getIntegrationManagerAuthentication(Connection connectionPdD){

  7556.         if( this.configurazioneDinamica || ConfigurazionePdDReader.integrationManagerAuthentication==null){
  7557.             try{
  7558.                 Configurazione configurazione = null;
  7559.                 try{
  7560.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  7561.                     /*if(configurazione.getIntegrationManager()!=null){
  7562.                         System.out.println("IM ["+configurazione.getIntegrationManager().getAutenticazione()+"]");
  7563.                     }*/

  7564.                 }catch(DriverConfigurazioneNotFound e){
  7565.                     this.logDebug("getIntegrationManagerAuthentication (not found): "+e.getMessage());
  7566.                 }catch(Exception e){
  7567.                     this.logError("getIntegrationManagerAuthentication",e);
  7568.                 }
  7569.                 if(configurazione == null || configurazione.getIntegrationManager()==null || configurazione.getIntegrationManager().getAutenticazione()==null){
  7570.                     ConfigurazionePdDReader.integrationManagerAuthentication = new String [] { CostantiConfigurazione.CREDENZIALE_BASIC.toString(),
  7571.                             CostantiConfigurazione.CREDENZIALE_SSL.toString() };
  7572.                 }else {

  7573.                     String [] values =  configurazione.getIntegrationManager().getAutenticazione().split(",");
  7574.                     List<String> v = new ArrayList<>();
  7575.                     ClassNameProperties classNameProperties = ClassNameProperties.getInstance();
  7576.                     for(int i=0; i<values.length; i++){
  7577.                         values[i] = values[i].trim();
  7578.                         if(classNameProperties.getAutenticazionePortaDelegata(values[i])==null){
  7579.                             this.logError("Meccanismo di autenticazione ["+values[i]+"] non registrato in GovWay");
  7580.                         }else{
  7581.                             v.add(values[i]);
  7582.                         }
  7583.                     }
  7584.                     if(v.size()>0)
  7585.                         ConfigurazionePdDReader.integrationManagerAuthentication = v.toArray(new String[1]);
  7586.                     else
  7587.                         throw new Exception("Nessun meccanismo di autenticazione valido tra quelli esistenti");
  7588.                 }

  7589.             }catch(Exception e){
  7590.                 this.logError("Errore durante la lettura del tipo di autenticazione associato al servizio di IntegrationManager: "+e.getMessage());
  7591.                 ConfigurazionePdDReader.integrationManagerAuthentication = new String [] { CostantiConfigurazione.INVOCAZIONE_SERVIZIO_AUTENTICAZIONE_BASIC.toString(),
  7592.                         CostantiConfigurazione.CREDENZIALE_SSL.toString() };
  7593.             }
  7594.         }

  7595.         return ConfigurazionePdDReader.integrationManagerAuthentication;

  7596.     }


  7597.     /**
  7598.      * Restituisce il tipo di validazione xsd  attiva nella porta
  7599.      *
  7600.      * @return Restituisce il tipo di validazione xsd attiva nella porta
  7601.      *
  7602.      */
  7603.     private static ValidazioneContenutiApplicativi validazioneContenutiApplicativi = null;
  7604.     protected ValidazioneContenutiApplicativi getTipoValidazioneContenutoApplicativo(Connection connectionPdD, String implementazionePdDSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  7605.         ValidazioneContenutiApplicativi valDefault = new ValidazioneContenutiApplicativi();
  7606.         valDefault.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);
  7607.         valDefault.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);

  7608.         // ovverriding per implementazione porta di dominio
  7609.         String stato = this.pddProperties.getValidazioneContenutiApplicativi_Stato(implementazionePdDSoggetto);
  7610.         String tipo = this.pddProperties.getValidazioneContenutiApplicativi_Tipo(implementazionePdDSoggetto);
  7611.         String acceptMtomMessage = this.pddProperties.getValidazioneContenutiApplicativi_AcceptMtomMessage(implementazionePdDSoggetto);
  7612.         boolean pddPropertiesPresente = false;
  7613.         if(stato!=null  && (
  7614.                 CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.toString().equalsIgnoreCase(stato) ||
  7615.                 CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.toString().equalsIgnoreCase(stato) ||
  7616.                 CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.toString().equalsIgnoreCase(stato) ) ){
  7617.             if(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.toString().equalsIgnoreCase(stato))
  7618.                 valDefault.setStato(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO);
  7619.             else if(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO.toString().equalsIgnoreCase(stato))
  7620.                 valDefault.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);
  7621.             else
  7622.                 valDefault.setStato(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY);
  7623.             pddPropertiesPresente = true;
  7624.         }
  7625.         if(tipo!=null  && (
  7626.                 CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.toString().equalsIgnoreCase(stato) ||
  7627.                 CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.toString().equalsIgnoreCase(stato) ||
  7628.                 CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.toString().equalsIgnoreCase(stato) ) ){
  7629.             if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.toString().equalsIgnoreCase(stato))
  7630.                 valDefault.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE);
  7631.             else if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.toString().equalsIgnoreCase(stato))
  7632.                 valDefault.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);
  7633.             else
  7634.                 valDefault.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP);
  7635.             pddPropertiesPresente = true;
  7636.         }
  7637.         if(acceptMtomMessage!=null  && (
  7638.                 CostantiConfigurazione.ABILITATO.toString().equalsIgnoreCase(acceptMtomMessage) ||
  7639.                 CostantiConfigurazione.DISABILITATO.toString().equalsIgnoreCase(acceptMtomMessage) ) ){
  7640.             if(CostantiConfigurazione.ABILITATO.toString().equalsIgnoreCase(stato))
  7641.                 valDefault.setAcceptMtomMessage(CostantiConfigurazione.ABILITATO);
  7642.             else if(CostantiConfigurazione.DISABILITATO.toString().equalsIgnoreCase(stato))
  7643.                 valDefault.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);
  7644.             else
  7645.                 valDefault.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);
  7646.             pddPropertiesPresente = true;
  7647.         }
  7648.         if(pddPropertiesPresente)
  7649.             return valDefault;


  7650.         if( this.configurazioneDinamica || ConfigurazionePdDReader.validazioneContenutiApplicativi==null){

  7651.             try{
  7652.                 Configurazione configurazione = null;
  7653.                 try{
  7654.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  7655.                     /*if(configurazione.getValidazioneContenutiApplicativi()!=null){
  7656.                         System.out.println("VALIDAZIONE CONTENUTI STATO["+configurazione.getValidazioneContenutiApplicativi().getStato()+"]");
  7657.                         System.out.println("VALIDAZIONE CONTENUTI TIPO["+configurazione.getValidazioneContenutiApplicativi().getTipo()+"]");
  7658.                     }*/

  7659.                 }catch(DriverConfigurazioneNotFound e){
  7660.                     this.logDebug("getTipoValidazioneContenutoApplicativo (not found): "+e.getMessage());
  7661.                 }catch(Exception e){
  7662.                     this.logError("getTipoValidazioneContenutoApplicativo",e);
  7663.                 }
  7664.                 if(configurazione == null || configurazione.getValidazioneContenutiApplicativi()==null){
  7665.                     ConfigurazionePdDReader.validazioneContenutiApplicativi = valDefault;
  7666.                 }else{
  7667.                     ValidazioneContenutiApplicativi val = new ValidazioneContenutiApplicativi();
  7668.                     // Stato
  7669.                     if(configurazione.getValidazioneContenutiApplicativi().getStato()==null){
  7670.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);
  7671.                     }else if(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.equals(configurazione.getValidazioneContenutiApplicativi().getStato())){
  7672.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO);
  7673.                     }else if(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(configurazione.getValidazioneContenutiApplicativi().getStato())){
  7674.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY);
  7675.                     }else{
  7676.                         val.setStato(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO);
  7677.                     }
  7678.                     // Tipo
  7679.                     if(configurazione.getValidazioneContenutiApplicativi().getTipo()==null){
  7680.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);
  7681.                     }else if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(configurazione.getValidazioneContenutiApplicativi().getTipo())){
  7682.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE);
  7683.                     }else if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(configurazione.getValidazioneContenutiApplicativi().getTipo())){
  7684.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP);
  7685.                     }else{
  7686.                         val.setTipo(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD);
  7687.                     }
  7688.                     // AcceptMtomMessage
  7689.                     if(configurazione.getValidazioneContenutiApplicativi().getAcceptMtomMessage()==null){
  7690.                         val.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);
  7691.                     }else if(CostantiConfigurazione.ABILITATO.equals(configurazione.getValidazioneContenutiApplicativi().getAcceptMtomMessage())){
  7692.                         val.setAcceptMtomMessage(CostantiConfigurazione.ABILITATO);
  7693.                     }else if(CostantiConfigurazione.DISABILITATO.equals(configurazione.getValidazioneContenutiApplicativi().getAcceptMtomMessage())){
  7694.                         val.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);
  7695.                     }else{
  7696.                         val.setAcceptMtomMessage(CostantiConfigurazione.DISABILITATO);
  7697.                     }

  7698.                     ConfigurazionePdDReader.validazioneContenutiApplicativi = val;
  7699.                 }
  7700.             }catch(Throwable e){
  7701.                 ConfigurazionePdDReader.validazioneContenutiApplicativi = valDefault;
  7702.             }
  7703.         }
  7704.         return ConfigurazionePdDReader.validazioneContenutiApplicativi;
  7705.     }




  7706.     /**
  7707.      * Restituisce l'indicazione se il servizio porta delegata e' attivo
  7708.      *
  7709.      * @return Restituisce l'indicazione se il servizio porta delegata e' attivo
  7710.      *
  7711.      */
  7712.     private static Boolean isPDServiceActive = null;
  7713.     protected Boolean isPDServiceActive(){

  7714.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isPDServiceActive==null){
  7715.             try{
  7716.                 StatoServiziPdd stato = null;
  7717.                 try{
  7718.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7719.                 }catch(DriverConfigurazioneNotFound e){
  7720.                     this.logDebug("isPDServiceActive (not found): "+e.getMessage());
  7721.                 }catch(Exception e){
  7722.                     this.logError("isPDServiceActive",e);
  7723.                 }
  7724.                 if(stato == null || stato.getPortaDelegata()==null || stato.getPortaDelegata().getStato()==null){
  7725.                     ConfigurazionePdDReader.isPDServiceActive = true;
  7726.                 }else {                
  7727.                     ConfigurazionePdDReader.isPDServiceActive = !CostantiConfigurazione.DISABILITATO.equals(stato.getPortaDelegata().getStato());
  7728.                 }

  7729.             }catch(Exception e){
  7730.                 this.logError("Errore durante la lettura dell'indicazione se il servizio porta delegata e' attivo: "+e.getMessage());
  7731.                 ConfigurazionePdDReader.isPDServiceActive = false;
  7732.             }
  7733.         }

  7734.         return ConfigurazionePdDReader.isPDServiceActive;

  7735.     }

  7736.     private static List<TipoFiltroAbilitazioneServizi> getFiltriAbilitazionePDService = null;
  7737.     protected List<TipoFiltroAbilitazioneServizi> getFiltriAbilitazionePDService(){

  7738.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isPDServiceActive==null){
  7739.             try{
  7740.                 StatoServiziPdd stato = null;
  7741.                 try{
  7742.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7743.                 }catch(DriverConfigurazioneNotFound e){
  7744.                     this.logDebug("getFiltriAbilitazionePDService (not found): "+e.getMessage());
  7745.                 }catch(Exception e){
  7746.                     this.logError("getFiltriAbilitazionePDService",e);
  7747.                 }
  7748.                 if(stato == null || stato.getPortaDelegata()==null || stato.getPortaDelegata().sizeFiltroAbilitazioneList()<=0){
  7749.                     ConfigurazionePdDReader.getFiltriAbilitazionePDService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7750.                 }else {                
  7751.                     ConfigurazionePdDReader.getFiltriAbilitazionePDService = stato.getPortaDelegata().getFiltroAbilitazioneList();
  7752.                 }

  7753.             }catch(Exception e){
  7754.                 this.logError("Errore durante la raccolta dei filtri di abilitazione PD: "+e.getMessage());
  7755.                 ConfigurazionePdDReader.getFiltriAbilitazionePDService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7756.             }
  7757.         }

  7758.         return ConfigurazionePdDReader.getFiltriAbilitazionePDService;

  7759.     }

  7760.     private static List<TipoFiltroAbilitazioneServizi> getFiltriDisabilitazionePDService = null;
  7761.     protected List<TipoFiltroAbilitazioneServizi> getFiltriDisabilitazionePDService(){

  7762.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isPDServiceActive==null){
  7763.             try{
  7764.                 StatoServiziPdd stato = null;
  7765.                 try{
  7766.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7767.                 }catch(DriverConfigurazioneNotFound e){
  7768.                     this.logDebug("getFiltriDisabilitazionePDService (not found): "+e.getMessage());
  7769.                 }catch(Exception e){
  7770.                     this.logError("getFiltriDisabilitazionePDService",e);
  7771.                 }
  7772.                 if(stato == null || stato.getPortaDelegata()==null || stato.getPortaDelegata().sizeFiltroDisabilitazioneList()<=0){
  7773.                     ConfigurazionePdDReader.getFiltriDisabilitazionePDService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7774.                 }else {                
  7775.                     ConfigurazionePdDReader.getFiltriDisabilitazionePDService = stato.getPortaDelegata().getFiltroDisabilitazioneList();
  7776.                 }

  7777.             }catch(Exception e){
  7778.                 this.logError("Errore durante la raccolta dei filtri di disabilitazione PD: "+e.getMessage());
  7779.                 ConfigurazionePdDReader.getFiltriDisabilitazionePDService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7780.             }
  7781.         }

  7782.         return ConfigurazionePdDReader.getFiltriDisabilitazionePDService;

  7783.     }



  7784.     /**
  7785.      * Restituisce l'indicazione se il servizio porta applicativa e' attivo
  7786.      *
  7787.      * @return Restituisce l'indicazione se il servizio porta applicativa e' attivo
  7788.      *
  7789.      */
  7790.     private static Boolean isPAServiceActive = null;
  7791.     protected Boolean isPAServiceActive(){

  7792.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isPAServiceActive==null){
  7793.             try{
  7794.                 StatoServiziPdd stato = null;
  7795.                 try{
  7796.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7797.                 }catch(DriverConfigurazioneNotFound e){
  7798.                     this.logDebug("isPAServiceActive (not found): "+e.getMessage());
  7799.                 }catch(Exception e){
  7800.                     this.logError("isPAServiceActive",e);
  7801.                 }
  7802.                 if(stato == null || stato.getPortaApplicativa()==null || stato.getPortaApplicativa().getStato()==null){
  7803.                     ConfigurazionePdDReader.isPAServiceActive = true;
  7804.                 }else {                
  7805.                     ConfigurazionePdDReader.isPAServiceActive = !CostantiConfigurazione.DISABILITATO.equals(stato.getPortaApplicativa().getStato());
  7806.                 }

  7807.             }catch(Exception e){
  7808.                 this.logError("Errore durante la lettura dell'indicazione se il servizio porta applicativa e' attivo: "+e.getMessage());
  7809.                 ConfigurazionePdDReader.isPAServiceActive = false;
  7810.             }
  7811.         }

  7812.         return ConfigurazionePdDReader.isPAServiceActive;

  7813.     }

  7814.     private static List<TipoFiltroAbilitazioneServizi> getFiltriAbilitazionePAService = null;
  7815.     protected List<TipoFiltroAbilitazioneServizi> getFiltriAbilitazionePAService(){

  7816.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isPAServiceActive==null){
  7817.             try{
  7818.                 StatoServiziPdd stato = null;
  7819.                 try{
  7820.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7821.                 }catch(DriverConfigurazioneNotFound e){
  7822.                     this.logDebug("getFiltriAbilitazionePAService (not found): "+e.getMessage());
  7823.                 }catch(Exception e){
  7824.                     this.logError("getFiltriAbilitazionePAService",e);
  7825.                 }
  7826.                 if(stato == null || stato.getPortaApplicativa()==null || stato.getPortaApplicativa().sizeFiltroAbilitazioneList()<=0){
  7827.                     ConfigurazionePdDReader.getFiltriAbilitazionePAService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7828.                 }else {                
  7829.                     ConfigurazionePdDReader.getFiltriAbilitazionePAService = stato.getPortaApplicativa().getFiltroAbilitazioneList();
  7830.                 }

  7831.             }catch(Exception e){
  7832.                 this.logError("Errore durante la raccolta dei filtri di abilitazione PA: "+e.getMessage());
  7833.                 ConfigurazionePdDReader.getFiltriAbilitazionePAService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7834.             }
  7835.         }

  7836.         return ConfigurazionePdDReader.getFiltriAbilitazionePAService;

  7837.     }

  7838.     private static List<TipoFiltroAbilitazioneServizi> getFiltriDisabilitazionePAService = null;
  7839.     protected List<TipoFiltroAbilitazioneServizi> getFiltriDisabilitazionePAService(){

  7840.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isPAServiceActive==null){
  7841.             try{
  7842.                 StatoServiziPdd stato = null;
  7843.                 try{
  7844.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7845.                 }catch(DriverConfigurazioneNotFound e){
  7846.                     this.logDebug("getFiltriDisabilitazionePAService (not found): "+e.getMessage());
  7847.                 }catch(Exception e){
  7848.                     this.logError("getFiltriDisabilitazionePAService",e);
  7849.                 }
  7850.                 if(stato == null || stato.getPortaApplicativa()==null || stato.getPortaApplicativa().sizeFiltroDisabilitazioneList()<=0){
  7851.                     ConfigurazionePdDReader.getFiltriDisabilitazionePAService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7852.                 }else {                
  7853.                     ConfigurazionePdDReader.getFiltriDisabilitazionePAService = stato.getPortaApplicativa().getFiltroDisabilitazioneList();
  7854.                 }

  7855.             }catch(Exception e){
  7856.                 this.logError("Errore durante la raccolta dei filtri di disabilitazione PA: "+e.getMessage());
  7857.                 ConfigurazionePdDReader.getFiltriDisabilitazionePAService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  7858.             }
  7859.         }

  7860.         return ConfigurazionePdDReader.getFiltriDisabilitazionePAService;

  7861.     }


  7862.     /**
  7863.      * Restituisce l'indicazione se il servizio integration manager e' attivo
  7864.      *
  7865.      * @return Restituisce l'indicazione se il servizio integration manager e' attivo
  7866.      *
  7867.      */
  7868.     private static Boolean isIMServiceActive = null;
  7869.     protected Boolean isIMServiceActive(){

  7870.         if( this.configurazioneDinamica || ConfigurazionePdDReader.isIMServiceActive==null){
  7871.             try{
  7872.                 StatoServiziPdd stato = null;
  7873.                 try{
  7874.                     stato = this.configurazionePdD.getStatoServiziPdD();
  7875.                 }catch(DriverConfigurazioneNotFound e){
  7876.                     this.logDebug("isIMServiceActive (not found): "+e.getMessage());
  7877.                 }catch(Exception e){
  7878.                     this.logError("isIMServiceActive",e);
  7879.                 }
  7880.                 if(stato == null || stato.getIntegrationManager()==null || stato.getIntegrationManager().getStato()==null){
  7881.                     ConfigurazionePdDReader.isIMServiceActive = true;
  7882.                 }else {                
  7883.                     ConfigurazionePdDReader.isIMServiceActive = !CostantiConfigurazione.DISABILITATO.equals(stato.getIntegrationManager().getStato());
  7884.                 }

  7885.             }catch(Exception e){
  7886.                 this.logError("Errore durante la lettura dell'indicazione se il servizio porta applicativa e' attivo: "+e.getMessage());
  7887.                 ConfigurazionePdDReader.isIMServiceActive = false;
  7888.             }
  7889.         }

  7890.         return ConfigurazionePdDReader.isIMServiceActive;

  7891.     }





  7892.     protected StatoServiziPdd getStatoServiziPdD() throws DriverConfigurazioneException{
  7893.         try{
  7894.             return this.configurazionePdD.getStatoServiziPdD();
  7895.         }catch(DriverConfigurazioneNotFound dNot){
  7896.             return null;
  7897.         }
  7898.     }

  7899.     protected void updateStatoServiziPdD(StatoServiziPdd servizi) throws DriverConfigurazioneException{
  7900.         this.configurazionePdD.updateStatoServiziPdD(servizi);
  7901.     }



  7902.     protected PolicyNegoziazioneToken getPolicyNegoziazioneToken(Connection connectionPdD, boolean forceNoCache, String policyName) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  7903.         if(policyName==null){
  7904.             throw new DriverConfigurazioneException("Policy non fornita");
  7905.         }

  7906.         GenericProperties gp = this.configurazionePdD.getGenericProperties(connectionPdD, forceNoCache, org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA_RETRIEVE, policyName);

  7907.         PolicyNegoziazioneToken policy = null;
  7908.         try {
  7909.             policy = TokenUtilities.convertTo(gp);
  7910.         }catch(Exception e) {
  7911.             throw new DriverConfigurazioneException(e.getMessage(),e);
  7912.         }

  7913.         return policy;
  7914.     }
  7915.    
  7916.     protected PolicyAttributeAuthority getPolicyAttributeAuthority(Connection connectionPdD, boolean forceNoCache, String policyName) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  7917.         if(policyName==null){
  7918.             throw new DriverConfigurazioneException("Policy non fornita");
  7919.         }

  7920.         GenericProperties gp = this.configurazionePdD.getGenericProperties(connectionPdD, forceNoCache, org.openspcoop2.pdd.core.token.Costanti.ATTRIBUTE_AUTHORITY, policyName);

  7921.         PolicyAttributeAuthority policy = null;
  7922.         try {
  7923.             policy = AttributeAuthorityUtilities.convertTo(gp);
  7924.         }catch(Exception e) {
  7925.             throw new DriverConfigurazioneException(e.getMessage(),e);
  7926.         }

  7927.         return policy;
  7928.     }

  7929.     public GenericProperties getGenericProperties(Connection connectionPdD, String tipologia, String nome) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  7930.         return this.configurazionePdD.getGenericProperties(connectionPdD, tipologia, nome);

  7931.     }

  7932.     public List<GenericProperties> getGenericProperties(Connection connectionPdD, String tipologia) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  7933.         return this.configurazionePdD.getGenericProperties(connectionPdD, tipologia);

  7934.     }

  7935.     protected SystemProperties getSystemPropertiesPdDCached(Connection connectionPdD) throws DriverConfigurazioneException{
  7936.         try{
  7937.             return this.configurazionePdD.getSystemPropertiesPdDCached(connectionPdD);
  7938.         }catch(DriverConfigurazioneNotFound dNot){
  7939.             return null;
  7940.         }
  7941.     }

  7942.     protected List<String> getEncryptedSystemPropertiesPdD() throws DriverConfigurazioneException{
  7943.         return this.configurazionePdD.getEncryptedSystemPropertiesPdD();
  7944.     }
  7945.     protected SystemProperties getSystemPropertiesPdD(boolean forceDisableBYOKUse) throws DriverConfigurazioneException{
  7946.         try{
  7947.             return this.configurazionePdD.getSystemPropertiesPdD(forceDisableBYOKUse);
  7948.         }catch(DriverConfigurazioneNotFound dNot){
  7949.             return null;
  7950.         }
  7951.     }

  7952.     protected void updateSystemPropertiesPdD(SystemProperties systemProperties) throws DriverConfigurazioneException{
  7953.         this.configurazionePdD.updateSystemPropertiesPdD(systemProperties);
  7954.     }



  7955.     public CorsConfigurazione getConfigurazioneCORS(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  7956.         CorsConfigurazione cors = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getGestioneCors();
  7957.         if(cors==null) {
  7958.             return new CorsConfigurazione();
  7959.         }
  7960.         return cors;
  7961.     }

  7962.     public ConfigurazioneMultitenant getConfigurazioneMultitenant(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  7963.         ConfigurazioneMultitenant conf = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getMultitenant();
  7964.         if(conf==null) {
  7965.             return new ConfigurazioneMultitenant();
  7966.         }
  7967.         return conf;
  7968.     }

  7969.     public ResponseCachingConfigurazione getConfigurazioneResponseCaching(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  7970.         ResponseCachingConfigurazioneGenerale c = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getResponseCaching();
  7971.         if(c==null) {
  7972.             c = new ResponseCachingConfigurazioneGenerale();
  7973.         }
  7974.         if(c.getConfigurazione()==null) {
  7975.             c.setConfigurazione(new ResponseCachingConfigurazione());
  7976.         }
  7977.         return c.getConfigurazione();
  7978.     }

  7979.     public Cache getConfigurazioneResponseCachingCache(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  7980.         ResponseCachingConfigurazioneGenerale c = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getResponseCaching();
  7981.         if(c==null) {
  7982.             c = new ResponseCachingConfigurazioneGenerale();
  7983.         }
  7984.         return c.getCache();
  7985.     }

  7986.     public Cache getConfigurazioneConsegnaApplicativiCache(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  7987.         AccessoDatiConsegnaApplicativi c = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getAccessoDatiConsegnaApplicativi();
  7988.         if(c==null) {
  7989.             c = new AccessoDatiConsegnaApplicativi();
  7990.         }
  7991.         return c.getCache();
  7992.     }

  7993.     public CanaliConfigurazione getCanaliConfigurazione(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  7994.         CanaliConfigurazione c = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getGestioneCanali();
  7995.         if(c==null) {
  7996.             c = new CanaliConfigurazione();
  7997.             c.setStato(StatoFunzionalita.DISABILITATO);
  7998.         }
  7999.         return c;
  8000.     }
  8001.    
  8002.     public ConfigurazioneCanaliNodo getConfigurazioneCanaliNodo(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8003.         CanaliConfigurazione c = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getGestioneCanali();
  8004.         boolean isEnabled = (c!=null && StatoFunzionalita.ABILITATO.equals(c.getStato()));
  8005.        
  8006.         ConfigurazioneCanaliNodo ccn = new ConfigurazioneCanaliNodo();
  8007.         ccn.setEnabled(isEnabled);
  8008.         if(isEnabled) {
  8009.             OpenSPCoop2Properties op2Prop = OpenSPCoop2Properties.getInstance();
  8010.             String idNodo = null;
  8011.             if(op2Prop.isClusterDinamico()) {
  8012.                 idNodo = op2Prop.getGroupId(false);
  8013.             }
  8014.             else {
  8015.                 idNodo = op2Prop.getClusterId(false);
  8016.             }
  8017.             ccn.setIdNodo(idNodo);
  8018.            
  8019.             if(c.sizeCanaleList()<=0) {
  8020.                 throw new DriverConfigurazioneException("Non risultano canali registrati nella configurazione");
  8021.             }
  8022.             for (CanaleConfigurazione canale : c.getCanaleList()) {
  8023.                 if(canale.isCanaleDefault()) {
  8024.                     ccn.setCanaleDefault(canale.getNome());
  8025.                     break;
  8026.                 }
  8027.             }
  8028.             if(ccn.getCanaleDefault()==null || "".equals(ccn.getCanaleDefault())) {
  8029.                 throw new DriverConfigurazioneException("Non risulta definito un canale di default");
  8030.             }
  8031.            
  8032.             List<String> canaliNodo = new ArrayList<>();
  8033.             if(ccn.getIdNodo()==null || "".equals(ccn.getIdNodo())) {
  8034.                 canaliNodo.add(ccn.getCanaleDefault());
  8035.             }
  8036.             else if(c.sizeNodoList()<=0) {
  8037.                 canaliNodo.add(ccn.getCanaleDefault());
  8038.             }
  8039.             else {
  8040.                 for (CanaleConfigurazioneNodo nodo : c.getNodoList()) {
  8041.                     if(ccn.getIdNodo().equals(nodo.getNome())) {
  8042.                         if(nodo.sizeCanaleList()<=0) {
  8043.                             throw new DriverConfigurazioneException("Non risultano canali associati al nodo '"+ccn.getIdNodo()+"'");
  8044.                         }
  8045.                         for (String canale : nodo.getCanaleList()) {
  8046.                             canaliNodo.add(canale);
  8047.                         }
  8048.                         break;
  8049.                     }
  8050.                 }
  8051.                 if(canaliNodo.isEmpty()) {
  8052.                     canaliNodo.add(ccn.getCanaleDefault());
  8053.                 }
  8054.             }
  8055.             ccn.setCanaliNodo(canaliNodo);
  8056.         }
  8057.        
  8058.         return ccn;
  8059.     }
  8060.    
  8061.     public UrlInvocazioneAPI getConfigurazioneUrlInvocazione(Connection connectionPdD,
  8062.             IProtocolFactory<?> protocolFactory, RuoloContesto ruolo, ServiceBinding serviceBinding, String interfaceName, IDSoggetto soggettoOperativo,
  8063.             AccordoServizioParteComune aspc,
  8064.             RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8065.        
  8066.         List<String> tags = new ArrayList<>();
  8067.         if(aspc!=null && aspc.getGruppi()!=null && aspc.getGruppi().sizeGruppoList()>0) {
  8068.             for (int i = 0; i < aspc.getGruppi().sizeGruppoList(); i++) {
  8069.                 tags.add(aspc.getGruppi().getGruppo(i).getNome());
  8070.             }
  8071.         }
  8072.        
  8073.         String canaleApi = null;
  8074.         if(aspc!=null) {
  8075.             canaleApi = aspc.getCanale();
  8076.         }

  8077.         return getConfigurazioneUrlInvocazione(connectionPdD, protocolFactory, ruolo, serviceBinding, interfaceName, soggettoOperativo, tags, canaleApi, requestInfo);
  8078.     }  
  8079.     public UrlInvocazioneAPI getConfigurazioneUrlInvocazione(Connection connectionPdD,
  8080.             IProtocolFactory<?> protocolFactory, RuoloContesto ruolo, ServiceBinding serviceBinding, String interfaceName, IDSoggetto soggettoOperativo,
  8081.             List<String> tags,
  8082.             String canaleApi,
  8083.             RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  8084.         Configurazione config = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);

  8085.         ConfigurazioneUrlInvocazione configurazioneUrlInvocazione = null;
  8086.         if(config!=null && config.getUrlInvocazione()!=null) {
  8087.             configurazioneUrlInvocazione = config.getUrlInvocazione();
  8088.         }

  8089.         String canale = null;
  8090.         if(config!=null && config.getGestioneCanali()!=null && StatoFunzionalita.ABILITATO.equals(config.getGestioneCanali().getStato()) && config.getGestioneCanali().sizeCanaleList()>0) {
  8091.             if(RuoloContesto.PORTA_APPLICATIVA.equals(ruolo)) {
  8092.                 IDPortaApplicativa idPA = new IDPortaApplicativa();
  8093.                 idPA.setNome(interfaceName);
  8094.                 PortaApplicativa pa = null;
  8095.                 if(requestInfo!=null && requestInfo.getRequestConfig()!=null && interfaceName!=null) {
  8096.                     if( requestInfo.getRequestConfig().getPortaApplicativa()!=null && idPA.getNome().equals(requestInfo.getRequestConfig().getPortaApplicativa().getNome())) {
  8097.                         pa = requestInfo.getRequestConfig().getPortaApplicativa();
  8098.                     }
  8099.                     else if( requestInfo.getRequestConfig().getPortaApplicativaDefault()!=null && idPA.getNome().equals(requestInfo.getRequestConfig().getPortaApplicativaDefault().getNome())) {
  8100.                         pa = requestInfo.getRequestConfig().getPortaApplicativaDefault();
  8101.                     }
  8102.                 }
  8103.                 if(pa==null) {
  8104.                     try {
  8105.                         pa = this.configurazionePdD.getPortaApplicativa(connectionPdD, idPA);
  8106.                     }catch(DriverConfigurazioneNotFound notFound) {}
  8107.                 }
  8108.                 canale = CanaliUtils.getCanale(config.getGestioneCanali(), canaleApi, pa);
  8109.             }
  8110.             else {
  8111.                 IDPortaDelegata idPD = new IDPortaDelegata();
  8112.                 idPD.setNome(interfaceName);
  8113.                 PortaDelegata pd = null;
  8114.                 if(requestInfo!=null && requestInfo.getRequestConfig()!=null && interfaceName!=null) {
  8115.                     if( requestInfo.getRequestConfig().getPortaDelegata()!=null && idPD.getNome().equals(requestInfo.getRequestConfig().getPortaDelegata().getNome())) {
  8116.                         pd = requestInfo.getRequestConfig().getPortaDelegata();
  8117.                     }
  8118.                     else if( requestInfo.getRequestConfig().getPortaDelegataDefault()!=null && idPD.getNome().equals(requestInfo.getRequestConfig().getPortaDelegata().getNome())) {
  8119.                         pd = requestInfo.getRequestConfig().getPortaDelegata();
  8120.                     }
  8121.                 }
  8122.                 if(pd==null) {
  8123.                     try {
  8124.                         pd = this.configurazionePdD.getPortaDelegata(connectionPdD, idPD);
  8125.                     }catch(DriverConfigurazioneNotFound notFound) {}
  8126.                 }
  8127.                 canale = CanaliUtils.getCanale(config.getGestioneCanali(), canaleApi, pd);
  8128.             }
  8129.         }
  8130.        
  8131.         return UrlInvocazioneAPI.getConfigurazioneUrlInvocazione(configurazioneUrlInvocazione, protocolFactory, ruolo, serviceBinding, interfaceName, soggettoOperativo,
  8132.                 tags, canale);
  8133.     }

  8134.     protected List<PolicyGroupByActiveThreadsType> getTipiGestoreRateLimiting(Connection connectionPdD) throws DriverConfigurazioneException {
  8135.        
  8136.         List<PolicyGroupByActiveThreadsType> list = new ArrayList<PolicyGroupByActiveThreadsType>();
  8137.         try {
  8138.             PolicyConfiguration pc = this.configurazionePdD.getConfigurazionePolicyRateLimitingGlobali(connectionPdD);
  8139.             list.add(pc.getType()); // default
  8140.         }catch(Exception e) {
  8141.             throw new DriverConfigurazioneException(e.getMessage(),e);
  8142.         }
  8143.         if(this.configurazionePdD.getDriverConfigurazionePdD() instanceof DriverConfigurazioneDB) {
  8144.             DriverConfigurazioneDB driver = (DriverConfigurazioneDB) this.configurazionePdD.getDriverConfigurazionePdD();
  8145.            
  8146.             List<String> listPD =  driver.porteDelegateRateLimitingValoriUnivoci(org.openspcoop2.core.controllo_traffico.constants.Costanti.GESTORE);
  8147.             if(listPD!=null && !listPD.isEmpty()) {
  8148.                 for (String type : listPD) {
  8149.                     PolicyGroupByActiveThreadsType typeE = PolicyGroupByActiveThreadsType.valueOf(type);
  8150.                     if(!list.contains(typeE)) {
  8151.                         list.add(typeE);
  8152.                     }
  8153.                 }
  8154.             }
  8155.            
  8156.             List<String> listPA =  driver.porteApplicativeRateLimitingValoriUnivoci(org.openspcoop2.core.controllo_traffico.constants.Costanti.GESTORE);
  8157.             if(listPA!=null && !listPA.isEmpty()) {
  8158.                 for (String type : listPA) {
  8159.                     PolicyGroupByActiveThreadsType typeE = null;
  8160.                     // per backward
  8161.                     if(org.openspcoop2.core.controllo_traffico.constants.Costanti.GESTORE_HAZELCAST_MAP_BACKWARD_COMPATIBILITY.equalsIgnoreCase(type)) {
  8162.                         typeE = PolicyGroupByActiveThreadsType.HAZELCAST_MAP;
  8163.                     }
  8164.                     else {
  8165.                         typeE = PolicyGroupByActiveThreadsType.valueOf(type);
  8166.                     }
  8167.                     if(!list.contains(typeE)) {
  8168.                         list.add(typeE);
  8169.                     }
  8170.                 }
  8171.             }
  8172.         }
  8173.        
  8174.         return list;
  8175.     }
  8176.    
  8177.     protected List<String> getInitHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8178.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8179.         List<String> list = new ArrayList<>();
  8180.         if(confGenerale!=null && confGenerale.getService()!=null) {
  8181.             fillListHandlers(confGenerale.getService().getInitList(), list);
  8182.         }
  8183.         return list;
  8184.     }
  8185.     protected List<String> getExitHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8186.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8187.         List<String> list = new ArrayList<>();
  8188.         if(confGenerale!=null && confGenerale.getService()!=null) {
  8189.             fillListHandlers(confGenerale.getService().getExitList(), list);
  8190.         }
  8191.         return list;
  8192.     }
  8193.     protected List<String> getIntegrationManagerRequestHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8194.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8195.         List<String> list = new ArrayList<>();
  8196.         if(confGenerale!=null && confGenerale.getService()!=null) {
  8197.             fillListHandlers(confGenerale.getService().getIntegrationManagerRequestList(), list);
  8198.         }
  8199.         return list;
  8200.     }
  8201.     protected List<String> getIntegrationManagerResponseHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8202.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8203.         List<String> list = new ArrayList<>();
  8204.         if(confGenerale!=null && confGenerale.getService()!=null) {
  8205.             fillListHandlers(confGenerale.getService().getIntegrationManagerResponseList(), list);
  8206.         }
  8207.         return list;
  8208.     }
  8209.    
  8210.     protected List<String> getPreInRequestHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8211.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8212.         List<String> list = new ArrayList<>();
  8213.         if(confGenerale!=null && confGenerale.getRequest()!=null) {
  8214.             fillListHandlers(confGenerale.getRequest().getPreInList(), list);
  8215.         }
  8216.         return list;
  8217.     }
  8218.     protected List<String> getInRequestHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8219.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8220.         List<String> list = new ArrayList<>();
  8221.         if(confGenerale!=null && confGenerale.getRequest()!=null) {
  8222.             fillListHandlers(confGenerale.getRequest().getInList(), list);
  8223.         }
  8224.         return list;
  8225.     }
  8226.     protected List<String> getInRequestProtocolHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8227.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8228.         List<String> list = new ArrayList<>();
  8229.         if(confGenerale!=null && confGenerale.getRequest()!=null) {
  8230.             fillListHandlers(confGenerale.getRequest().getInProtocolInfoList(), list);
  8231.         }
  8232.         return list;
  8233.     }
  8234.     protected List<String> getOutRequestHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8235.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8236.         List<String> list = new ArrayList<>();
  8237.         if(confGenerale!=null && confGenerale.getRequest()!=null) {
  8238.             fillListHandlers(confGenerale.getRequest().getOutList(), list);
  8239.         }
  8240.         return list;
  8241.     }
  8242.     protected List<String> getPostOutRequestHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8243.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8244.         List<String> list = new ArrayList<>();
  8245.         if(confGenerale!=null && confGenerale.getRequest()!=null) {
  8246.             fillListHandlers(confGenerale.getRequest().getPostOutList(), list);
  8247.         }
  8248.         return list;
  8249.     }
  8250.     protected List<String> getPreInResponseHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8251.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8252.         List<String> list = new ArrayList<>();
  8253.         if(confGenerale!=null && confGenerale.getResponse()!=null) {
  8254.             fillListHandlers(confGenerale.getResponse().getPreInList(), list);
  8255.         }
  8256.         return list;
  8257.     }
  8258.     protected List<String> getInResponseHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8259.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8260.         List<String> list = new ArrayList<>();
  8261.         if(confGenerale!=null && confGenerale.getResponse()!=null) {
  8262.             fillListHandlers(confGenerale.getResponse().getInList(), list);
  8263.         }
  8264.         return list;
  8265.     }
  8266.     protected List<String> getOutResponseHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8267.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8268.         List<String> list = new ArrayList<>();
  8269.         if(confGenerale!=null && confGenerale.getResponse()!=null) {
  8270.             fillListHandlers(confGenerale.getResponse().getOutList(), list);
  8271.         }
  8272.         return list;
  8273.     }
  8274.     protected List<String> getPostOutResponseHandlers(Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8275.         ConfigurazioneGeneraleHandler confGenerale = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD).getConfigurazioneHandler();
  8276.         List<String> list = new ArrayList<>();
  8277.         if(confGenerale!=null && confGenerale.getResponse()!=null) {
  8278.             fillListHandlers(confGenerale.getResponse().getPostOutList(), list);
  8279.         }
  8280.         return list;
  8281.     }

  8282.     private void fillListHandlers(List<ConfigurazioneHandler> handlers, List<String> list) {
  8283.         if(handlers!=null && !handlers.isEmpty()) {
  8284.             for (ConfigurazioneHandler handler : handlers) {
  8285.                 if(StatoFunzionalita.ABILITATO.equals(handler.getStato())){
  8286.                     list.add(handler.getTipo());
  8287.                 }
  8288.             }
  8289.         }
  8290.     }


  8291.     // Per la configurazione realizzo due versioni.
  8292.     //
  8293.     // Il metodo 'getExtendedInfoConfigurazione' e 'getSingleExtendedInfoConfigurazione' implementa la logica classica della configurazione della PdD
  8294.     // dove le informazioni sulla policy vengono lette solamente all'avvio della PdD (se la configurazione non è dinamica)
  8295.     //
  8296.     // Il metodo 'getExtendedInfoConfigurazioneFromCache' e 'getSingleExtendedInfoConfigurazioneFromCache' implementa la logica di prelieve sempre dalla cache

  8297.     private static List<Object> getExtendedInfoConfigurazione = null;
  8298.     protected List<Object> getExtendedInfoConfigurazione(Connection connectionPdD) throws DriverConfigurazioneException{

  8299.         if( this.configurazioneDinamica || ConfigurazionePdDReader.getExtendedInfoConfigurazione==null){
  8300.             try{
  8301.                 Configurazione configurazione = null;
  8302.                 try{
  8303.                     configurazione = this.configurazionePdD.getConfigurazioneGenerale(connectionPdD);
  8304.                 }catch(DriverConfigurazioneNotFound e){
  8305.                     this.logDebug("getExtendedInfoConfigurazione (not found): "+e.getMessage());
  8306.                 }
  8307.                 //              }catch(Exception e){
  8308.                 //                  this.logError("getExtendedInfoConfigurazione",e);
  8309.                 //              }
  8310.                 if(configurazione!=null) {
  8311.                     ConfigurazionePdDReader.getExtendedInfoConfigurazione = configurazione.getExtendedInfoList();
  8312.                 }

  8313.             }catch(Exception e){
  8314.                 this.logError("Errore durante la lettura delle informazioni extra della configurazione: "+e.getMessage(),e);
  8315.                 throw new DriverConfigurazioneException("Errore durante la lettura delle informazioni extra della configurazione: "+e.getMessage(),e);
  8316.             }
  8317.         }

  8318.         return ConfigurazionePdDReader.getExtendedInfoConfigurazione;

  8319.     }

  8320.     private static Map<String, Object> getSingleExtendedInfoConfigurazione = new ConcurrentHashMap<String, Object>();
  8321.     protected Object getSingleExtendedInfoConfigurazione(String id, Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{

  8322.         if( this.configurazioneDinamica || ConfigurazionePdDReader.getSingleExtendedInfoConfigurazione.containsKey(id)==false){
  8323.             try{
  8324.                 Object result = null;
  8325.                 try{
  8326.                     result = this.configurazionePdD.getSingleExtendedInfoConfigurazione(id, connectionPdD);
  8327.                 }catch(DriverConfigurazioneNotFound e){
  8328.                     this.logDebug("getSingleExtendedInfoConfigurazione (not found): "+e.getMessage());
  8329.                 }
  8330.                 //              }catch(Exception e){
  8331.                 //                  this.logError("getExtendedInfoConfigurazione",e);
  8332.                 //              }

  8333.                 if(result!=null){
  8334.                     ConfigurazionePdDReader.getSingleExtendedInfoConfigurazione.put(id, result);
  8335.                 }

  8336.             }catch(Exception e){
  8337.                 this.logError("Errore durante la lettura delle informazioni extra con id '"+id+"' della configurazione: "+e.getMessage(),e);
  8338.                 throw new DriverConfigurazioneException("Errore durante la lettura delle informazioni extra con id '"+id+"' della configurazione: "+e.getMessage(),e);
  8339.             }
  8340.         }

  8341.         return ConfigurazionePdDReader.getSingleExtendedInfoConfigurazione.get(id);

  8342.     }

  8343.     protected List<Object> getExtendedInfoConfigurazioneFromCache(Connection connectionPdD) throws DriverConfigurazioneException{
  8344.         try{
  8345.             Configurazione configurazione = null;
  8346.             try{
  8347.                 configurazione = this.configurazionePdD.getConfigurazioneWithOnlyExtendedInfo(connectionPdD);
  8348.             }catch(DriverConfigurazioneNotFound e){
  8349.                 this.logDebug("getConfigurazioneWithOnlyExtendedInfo (not found): "+e.getMessage());
  8350.             }
  8351.             //          }catch(Exception e){
  8352.             //              this.logError("getExtendedInfoConfigurazione",e);
  8353.             //          }
  8354.             if(configurazione!=null) {
  8355.                 return configurazione.getExtendedInfoList();
  8356.             }
  8357.             return null;

  8358.         }catch(Exception e){
  8359.             this.logError("Errore durante la lettura delle informazioni extra della configurazione (via cache): "+e.getMessage(),e);
  8360.             throw new DriverConfigurazioneException("Errore durante la lettura delle informazioni extra della configurazione  (via cache): "+e.getMessage(),e);
  8361.         }
  8362.     }

  8363.     protected Object getSingleExtendedInfoConfigurazioneFromCache(String id, Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8364.         try{
  8365.             Object result = null;
  8366.             try{
  8367.                 result = this.configurazionePdD.getSingleExtendedInfoConfigurazione(id, connectionPdD);
  8368.             }catch(DriverConfigurazioneNotFound e){
  8369.                 this.logDebug("getSingleExtendedInfoConfigurazioneFromCache (not found): "+e.getMessage());
  8370.             }
  8371.             //          }catch(Exception e){
  8372.             //              this.logError("getExtendedInfoConfigurazione",e);
  8373.             //          }
  8374.             return result;

  8375.         }catch(Exception e){
  8376.             this.logError("Errore durante la lettura delle informazioni extra con id '"+id+"' della configurazione (via cache): "+e.getMessage(),e);
  8377.             throw new DriverConfigurazioneException("Errore durante la lettura delle informazioni extra con id '"+id+"' della configurazione  (via cache): "+e.getMessage(),e);
  8378.         }
  8379.     }

  8380.     protected Template getTemplatePolicyNegoziazioneRequest(Connection connectionPdD, String policyName, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8381.         return this.configurazionePdD.getTemplatePolicyNegoziazioneRequest(connectionPdD, policyName, template, requestInfo);
  8382.     }
  8383.    
  8384.     protected Template getTemplateAttributeAuthorityRequest(Connection connectionPdD, String attributeAuthorityName, byte[] template, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8385.         return this.configurazionePdD.getTemplateAttributeAuthorityRequest(connectionPdD, attributeAuthorityName, template, requestInfo);
  8386.     }
  8387.    
  8388.     protected Template getTemplateIntegrazione(Connection connectionPdD,File file, RequestInfo requestInfo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8389.         return this.configurazionePdD.getTemplateIntegrazione(connectionPdD, file, requestInfo);
  8390.     }



  8391.     /* ********  R I C E R C A  I D   E L E M E N T I   P R I M I T I V I  ******** */

  8392.     public List<IDPortaDelegata> getAllIdPorteDelegate(FiltroRicercaPorteDelegate filtroRicerca,Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8393.         return this.configurazionePdD.getAllIdPorteDelegate(filtroRicerca,connectionPdD);
  8394.     }

  8395.     public List<IDPortaApplicativa> getAllIdPorteApplicative(FiltroRicercaPorteApplicative filtroRicerca,Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8396.         return this.configurazionePdD.getAllIdPorteApplicative(filtroRicerca,connectionPdD);
  8397.     }

  8398.     public List<IDServizioApplicativo> getAllIdServiziApplicativi(FiltroRicercaServiziApplicativi filtroRicerca,Connection connectionPdD) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  8399.         return this.configurazionePdD.getAllIdServiziApplicativi(filtroRicerca,connectionPdD);
  8400.     }


  8401.     /* ******** CONTROLLO TRAFFICO ******** */

  8402.     public ConfigurazioneGenerale getConfigurazioneControlloTraffico(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8403.         return this.configurazionePdD.getConfigurazioneControlloTraffico(connectionPdD);
  8404.     }

  8405.     public PolicyConfiguration getConfigurazionePolicyRateLimitingGlobali(Connection connectionPdD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8406.         return this.configurazionePdD.getConfigurazionePolicyRateLimitingGlobali(connectionPdD);
  8407.     }
  8408.    
  8409.     public Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> getElencoIdPolicyAttiveAPI(Connection connectionPdD, boolean useCache, TipoPdD tipoPdD, String nomePorta) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8410.         return this.configurazionePdD.getElencoIdPolicyAttiveAPI(connectionPdD, useCache, tipoPdD, nomePorta);
  8411.     }

  8412.     public Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> getElencoIdPolicyAttiveGlobali(Connection connectionPdD, boolean useCache) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8413.         return this.configurazionePdD.getElencoIdPolicyAttiveGlobali(connectionPdD, useCache);
  8414.     }
  8415.    
  8416.     public Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> getElencoIdPolicyAttiveAPIDimensioneMessaggio(Connection connectionPdD, boolean useCache, TipoPdD tipoPdD, String nomePorta) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8417.         return this.configurazionePdD.getElencoIdPolicyAttiveAPIDimensioneMessaggio(connectionPdD, useCache, tipoPdD, nomePorta);
  8418.     }

  8419.     public Map<TipoRisorsaPolicyAttiva, ElencoIdPolicyAttive> getElencoIdPolicyAttiveGlobaliDimensioneMessaggio(Connection connectionPdD, boolean useCache) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8420.         return this.configurazionePdD.getElencoIdPolicyAttiveGlobaliDimensioneMessaggio(connectionPdD, useCache);
  8421.     }

  8422.     public AttivazionePolicy getAttivazionePolicy(Connection connectionPdD, boolean useCache, String id) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8423.         return this.configurazionePdD.getAttivazionePolicy(connectionPdD, useCache, id);
  8424.     }

  8425.     public ElencoIdPolicy getElencoIdPolicy(Connection connectionPdD, boolean useCache) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8426.         return this.configurazionePdD.getElencoIdPolicy(connectionPdD, useCache);
  8427.     }

  8428.     public ConfigurazionePolicy getConfigurazionePolicy(Connection connectionPdD, boolean useCache, String id) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8429.         return this.configurazionePdD.getConfigurazionePolicy(connectionPdD, useCache, id);
  8430.     }
  8431.    
  8432.    
  8433.     /* ******** PLUGINS ******** */
  8434.    
  8435.     public IRegistroPluginsReader getRegistroPluginsReader() {
  8436.         return this.configurazionePdD.getRegistroPluginsReader();
  8437.     }
  8438.    
  8439.     public String getPluginClassName(Connection connectionPdD, String tipoPlugin, String tipo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8440.         return this.configurazionePdD.getPluginClassName(connectionPdD, tipoPlugin, tipo);
  8441.     }
  8442.     public String getPluginClassNameByFilter(Connection connectionPdD, String tipoPlugin, String tipo, NameValue ... filtri) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8443.         return this.configurazionePdD.getPluginClassNameByFilter(connectionPdD, tipoPlugin, tipo, filtri);
  8444.     }
  8445.     public String getPluginTipo(Connection connectionPdD, String tipoPlugin, String className) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8446.         return this.configurazionePdD.getPluginTipo(connectionPdD, tipoPlugin, className);
  8447.     }
  8448.     public String getPluginTipoByFilter(Connection connectionPdD, String tipoPlugin, String className, NameValue ... filtri) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  8449.         return this.configurazionePdD.getPluginTipoByFilter(connectionPdD, tipoPlugin, className, filtri);
  8450.     }
  8451.    
  8452.    
  8453.     /* ******** ALLARMI ******** */

  8454.     public Allarme getAllarme(Connection connectionPdD, String nomeAllarme, boolean searchInCache) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  8455.         return this.configurazionePdD.getAllarme(connectionPdD, nomeAllarme, searchInCache);
  8456.     }
  8457.     public List<Allarme> searchAllarmi(Connection connectionPdD, FiltroRicercaAllarmi filtroRicerca, boolean searchInCache) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {
  8458.         return this.configurazionePdD.searchAllarmi(connectionPdD, filtroRicerca, searchInCache);
  8459.     }
  8460.     public List<IAlarm> instanceAllarmi(Connection connectionPdD, List<Allarme> listAllarmi) throws DriverConfigurazioneException {
  8461.         return this.configurazionePdD.instanceAllarmi(connectionPdD, listAllarmi);
  8462.     }
  8463.     public void changeStatus(Connection connectionPdD, IAlarm alarm, AlarmStatus nuovoStatoAllarme) throws DriverConfigurazioneException {
  8464.         this.configurazionePdD.changeStatus(connectionPdD, alarm, nuovoStatoAllarme);
  8465.     }


  8466.     /* ******** MAPPING ******** */

  8467.     public List<MappingErogazionePortaApplicativa> getMappingErogazionePortaApplicativaList(IDServizio idServizio,Connection connectionPdD) throws DriverConfigurazioneException{
  8468.         return this.configurazionePdD.getMappingErogazionePortaApplicativaList(idServizio, connectionPdD);
  8469.     }
  8470.     public List<MappingFruizionePortaDelegata> getMappingFruizionePortaDelegataList(IDSoggetto idFruitore, IDServizio idServizio,Connection connectionPdD) throws DriverConfigurazioneException{
  8471.         return this.configurazionePdD.getMappingFruizionePortaDelegataList(idFruitore, idServizio, connectionPdD);
  8472.     }
  8473.    
  8474.    
  8475.     /* ******** FORWARD PROXY ******** */
  8476.    
  8477.     public boolean isForwardProxyEnabled() {
  8478.         return this.configurazionePdD.isForwardProxyEnabled();
  8479.     }
  8480.     public ForwardProxy getForwardProxyConfigFruizione(IDSoggetto dominio, IDServizio idServizio, IDGenericProperties policy, RequestInfo requestInfo) throws DriverConfigurazioneException{
  8481.         return this.configurazionePdD.getForwardProxyConfigFruizione(dominio, idServizio, policy, requestInfo);
  8482.     }
  8483.     public ForwardProxy getForwardProxyConfigErogazione(IDSoggetto dominio, IDServizio idServizio, IDGenericProperties policy, RequestInfo requestInfo) throws DriverConfigurazioneException{
  8484.         return this.configurazionePdD.getForwardProxyConfigErogazione(dominio, idServizio, policy, requestInfo);
  8485.     }
  8486.    
  8487.    
  8488.     /* ********  GENERIC FILE  ******** */

  8489.     public ContentFile getContentFile(File file) throws DriverConfigurazioneException{
  8490.         return this.configurazionePdD.getContentFile(file);
  8491.     }

  8492. }