DriverConfigurazioneXML.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.core.config.driver.xml;

  21. import java.io.File;
  22. import java.io.FileInputStream;
  23. import java.io.InputStream;
  24. import java.net.HttpURLConnection;
  25. import java.net.URL;
  26. import java.net.URLConnection;
  27. import java.util.ArrayList;
  28. import java.util.HashMap;
  29. import java.util.HashSet;
  30. import java.util.List;
  31. import java.util.Map;

  32. import org.openspcoop2.core.commons.CoreException;
  33. import org.openspcoop2.core.commons.IMonitoraggioRisorsa;
  34. import org.openspcoop2.core.config.AccessoConfigurazione;
  35. import org.openspcoop2.core.config.AccessoDatiAttributeAuthority;
  36. import org.openspcoop2.core.config.AccessoDatiAutenticazione;
  37. import org.openspcoop2.core.config.AccessoDatiAutorizzazione;
  38. import org.openspcoop2.core.config.AccessoDatiConsegnaApplicativi;
  39. import org.openspcoop2.core.config.AccessoDatiGestioneToken;
  40. import org.openspcoop2.core.config.AccessoDatiKeystore;
  41. import org.openspcoop2.core.config.AccessoDatiRichieste;
  42. import org.openspcoop2.core.config.AccessoRegistro;
  43. import org.openspcoop2.core.config.CanaliConfigurazione;
  44. import org.openspcoop2.core.config.Configurazione;
  45. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazione;
  46. import org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola;
  47. import org.openspcoop2.core.config.GenericProperties;
  48. import org.openspcoop2.core.config.GestioneErrore;
  49. import org.openspcoop2.core.config.Openspcoop2;
  50. import org.openspcoop2.core.config.PortaApplicativa;
  51. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  52. import org.openspcoop2.core.config.PortaDelegata;
  53. import org.openspcoop2.core.config.RegistroPlugin;
  54. import org.openspcoop2.core.config.RegistroPluginArchivio;
  55. import org.openspcoop2.core.config.RegistroPlugins;
  56. import org.openspcoop2.core.config.RoutingTable;
  57. import org.openspcoop2.core.config.ServizioApplicativo;
  58. import org.openspcoop2.core.config.Soggetto;
  59. import org.openspcoop2.core.config.StatoServiziPdd;
  60. import org.openspcoop2.core.config.SystemProperties;
  61. import org.openspcoop2.core.config.TrasformazioneRegola;
  62. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaServizioApplicativo;
  63. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaSoggetto;
  64. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  65. import org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione;
  66. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  67. import org.openspcoop2.core.config.driver.BeanUtilities;
  68. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  69. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  70. import org.openspcoop2.core.config.driver.FiltroRicercaPorteApplicative;
  71. import org.openspcoop2.core.config.driver.FiltroRicercaPorteDelegate;
  72. import org.openspcoop2.core.config.driver.FiltroRicercaServiziApplicativi;
  73. import org.openspcoop2.core.config.driver.FiltroRicercaSoggetti;
  74. import org.openspcoop2.core.config.driver.IDServizioUtils;
  75. import org.openspcoop2.core.config.driver.IDriverConfigurazioneGet;
  76. import org.openspcoop2.core.config.driver.ValidazioneSemantica;
  77. import org.openspcoop2.core.id.IDConnettore;
  78. import org.openspcoop2.core.id.IDPortaApplicativa;
  79. import org.openspcoop2.core.id.IDPortaDelegata;
  80. import org.openspcoop2.core.id.IDServizio;
  81. import org.openspcoop2.core.id.IDServizioApplicativo;
  82. import org.openspcoop2.core.id.IDSoggetto;
  83. import org.openspcoop2.core.id.IdentificativiErogazione;
  84. import org.openspcoop2.core.id.IdentificativiFruizione;
  85. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  86. import org.openspcoop2.message.xml.ValidatoreXSD;
  87. import org.openspcoop2.utils.LoggerWrapperFactory;
  88. import org.openspcoop2.utils.certificate.ArchiveLoader;
  89. import org.openspcoop2.utils.certificate.ArchiveType;
  90. import org.openspcoop2.utils.certificate.Certificate;
  91. import org.openspcoop2.utils.certificate.CertificateInfo;
  92. import org.openspcoop2.utils.certificate.CertificateUtils;
  93. import org.openspcoop2.utils.certificate.PrincipalType;
  94. import org.openspcoop2.utils.crypt.CryptConfig;
  95. import org.openspcoop2.utils.crypt.CryptFactory;
  96. import org.openspcoop2.utils.crypt.ICrypt;
  97. import org.openspcoop2.utils.date.DateManager;
  98. import org.slf4j.Logger;

  99. /**
  100.  * Contiene un 'reader' della configurazione dell'infrastruttura OpenSPCoop.
  101.  * <p>
  102.  * Sono forniti metodi per la lettura della configurazione la quale contiene i seguenti soggetti :
  103.  * <ul>
  104.  * <li>Porte Delegate</li>
  105.  * <li>Porte Applicative</li>
  106.  * <li>SIL-Mittenti</li>
  107.  * <li>Porta di Dominio</li>
  108.  * <li>RoutingTable</li>
  109.  * <li>Altri aspetti di configurazione ...</li>
  110.  * </ul>
  111.  *
  112.  * @author Poli Andrea (apoli@link.it)
  113.  * @author $Author$
  114.  * @version $Rev$, $Date$
  115.  */

  116. public class DriverConfigurazioneXML extends BeanUtilities
  117. implements IDriverConfigurazioneGet,IMonitoraggioRisorsa{

  118.     /* ********  F I E L D S  P R I V A T I  ******** */

  119.     /** Indicazione di una corretta creazione */
  120.     public boolean create = false;

  121.     /** Path dove si trova il file xml che realizza la configurazione di OpenSPCoop. */
  122.     private String configuration_path;
  123.     /** 'Root' del servizio della configurazione di OpenSPCoop. */
  124.     private org.openspcoop2.core.config.Openspcoop2 openspcoop;

  125.     /** Validatore della configurazione */
  126.     private ValidatoreXSD validatoreConfigurazione = null;

  127.     /** Variabile che mantiene uno stato di ultima modifica della configurazione xml
  128.         od una variabile temporale che servira' per fare il refresh della configurazione
  129.     una volta scaduto un timeout, nel caso il file sia posto in remoto (HTTP) .*/
  130.     private long lastModified = 0;
  131.     /** Logger utilizzato per info. */
  132.     private Logger log = null;
  133.     /** Indica ogni quanto deve essere effettuato il refresh del file dei registri dei servizi,
  134.     nel caso sia posto in remoto (secondi)*/
  135.     private static final int timeoutRefresh = 30;




  136.     /** ************* parsing XML ************** */
  137.     private void parsingXMLConfigurazione() throws DriverConfigurazioneException{
  138.        
  139.         /* --- Validazione XSD -- */
  140.         if(buildXsdValidator) {
  141.             FileInputStream fXML = null;
  142.             try{
  143.                 if(this.configuration_path.startsWith("http://") || this.configuration_path.startsWith("file://")){
  144.                     this.validatoreConfigurazione.valida(this.configuration_path);  
  145.                 }else{
  146.                     fXML = new FileInputStream(this.configuration_path);
  147.                     this.validatoreConfigurazione.valida(fXML);
  148.                 }
  149.             }catch (Exception e) {
  150.                 throw new DriverConfigurazioneException("Riscontrato errore durante la validazione XSD della configurazione XML di OpenSPCoop: "+e.getMessage());
  151.             }finally{
  152.                 if(fXML!=null){
  153.                     try{
  154.                         fXML.close();
  155.                     }catch(Exception e){}
  156.                 }
  157.             }
  158.         }

  159.         /* ---- InputStream ---- */
  160.         InputStream iStream = null;
  161.         HttpURLConnection httpConn = null;
  162.         if(this.configuration_path.startsWith("http://") || this.configuration_path.startsWith("file://")){
  163.             try{
  164.                 URL url = new URL(this.configuration_path);
  165.                 URLConnection connection = url.openConnection();
  166.                 httpConn = (HttpURLConnection) connection;
  167.                 httpConn.setRequestMethod("GET");
  168.                 httpConn.setDoOutput(true);
  169.                 httpConn.setDoInput(true);
  170.                 iStream = httpConn.getInputStream();
  171.             }catch(Exception e) {
  172.                 try{  
  173. //                  if(iStream!=null)
  174. //                      iStream.close();
  175.                     if(httpConn !=null)
  176.                         httpConn.disconnect();
  177.                 } catch(Exception ef) {}
  178.                 throw new DriverConfigurazioneException("Riscontrato errore durante la creazione dell'inputStream della configurazione (HTTP) : \n\n"+e.getMessage());
  179.             }
  180.             this.lastModified = DateManager.getTimeMillis();
  181.         }else{
  182.             try{  
  183.                 iStream = new FileInputStream(this.configuration_path);
  184.             }catch(java.io.FileNotFoundException e) {
  185.                 throw new DriverConfigurazioneException("Riscontrato errore durante la creazione dell'inputStream della configurazione (FILE) : \n\n"+e.getMessage());
  186.             }
  187.             try{
  188.                 this.lastModified = (new File(this.configuration_path)).lastModified();
  189.             }catch(Exception e){
  190.                 try{  
  191.                     if(iStream!=null)
  192.                         iStream.close();
  193.                 } catch(java.io.IOException ef) {}
  194.                 throw new DriverConfigurazioneException("Riscontrato errore durante la lettura del file dove e' allocato la configurazione: "+e.getMessage());
  195.             }
  196.         }


  197.         /* ---- Unmarshall del file di configurazione ---- */
  198.         try{  
  199.             org.openspcoop2.core.config.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.config.utils.serializer.JaxbDeserializer();
  200.             this.openspcoop = deserializer.readOpenspcoop2(iStream);
  201.         } catch(Exception e) {
  202.             try{  
  203.                 if(iStream!=null)
  204.                     iStream.close();
  205.             } catch(Exception ef) {}
  206.             try{
  207.                 if(httpConn !=null)
  208.                     httpConn.disconnect();
  209.             } catch(Exception ef) {}
  210.             throw new DriverConfigurazioneException("Riscontrato errore durante l'unmarshall del file di configurazione: "+e.getMessage());
  211.         }
  212.        
  213.         try{  
  214.             // Chiusura dello Stream
  215.             if(iStream!=null)
  216.                 iStream.close();
  217.         } catch(Exception e) {
  218.             throw new DriverConfigurazioneException("Riscontrato errore durante la chiusura dell'Input Stream: "+e.getMessage());
  219.         }
  220.         try{
  221.             // Chiusura dell'eventuale connessione HTTP
  222.             if(httpConn !=null)
  223.                 httpConn.disconnect();
  224.         } catch(Exception e) {
  225.             throw new DriverConfigurazioneException("Riscontrato errore durante la chiusura dell'Input Stream (http): "+e.getMessage());
  226.         }
  227.     }




  228.     /* ********  COSTRUTTORI e METODI DI RELOAD  ******** */

  229.     private static boolean buildXsdValidator = true;
  230.     public static void disableBuildXsdValidator() {
  231.         buildXsdValidator = false;
  232.     }
  233.    
  234.     /**
  235.      * Costruttore.  Viene effettuato l'unmarshall del file di configurazione.
  236.      *
  237.      * @param path path dove si trova il file xml che realizza la configurazione di OpenSPCoop.
  238.      *
  239.      */
  240.     public DriverConfigurazioneXML(String path,Logger alog){

  241.         if(alog==null)
  242.             this.log = LoggerWrapperFactory.getLogger(DriverConfigurazioneXML.class);
  243.         else
  244.             this.log = alog;
  245.        
  246.         if(path == null){
  247.             this.log.error("DriverConfigurazione: Riscontrato errore durante la creazione: url/path is null");
  248.             this.create=false;
  249.             return;
  250.         }
  251.         this.configuration_path = path;

  252.         /* --- Costruzione Validatore XSD -- */
  253.         try{
  254.             if(buildXsdValidator) {
  255.                 this.validatoreConfigurazione = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverConfigurazioneXML.class.getResourceAsStream("/config.xsd"));
  256.             }
  257.         }catch (Exception e) {
  258.             this.log.info("Riscontrato errore durante l'inizializzazione dello schema della configurazione di OpenSPCoop: "+e.getMessage(),e);
  259.             return;
  260.         }

  261.         try{
  262.             this.parsingXMLConfigurazione();
  263.         }catch(Exception e){
  264.             this.log.error("DriverConfigurazione: "+e.getMessage(),e);
  265.             this.create=false;
  266.             return;
  267.         }
  268.         this.create = true;
  269.     }

  270.     /**
  271.      * Metodo che si occupa di effettuare il refresh dell'unmarshall del file di configurazione
  272.      * se il file di configurazione e' stato modificato dall'ultimo unmarshall.
  273.      *
  274.      *
  275.      */
  276.     private void forzaRefreshConfigurazioneXML() throws DriverConfigurazioneException{
  277.         refreshConfigurazioneXML(true);
  278.     }
  279.    
  280.     /**
  281.      * Metodo che si occupa di effettuare il refresh dell'unmarshall del file di configurazione
  282.      * se il file di configurazione e' stato modificato dall'ultimo unmarshall.
  283.      *
  284.      *
  285.      */
  286.     public void refreshConfigurazioneXML() throws DriverConfigurazioneException{
  287.         refreshConfigurazioneXML(false);
  288.     }

  289.     /**
  290.      * Metodo che si occupa di effettuare il refresh dell'unmarshall del file di configurazione
  291.      * se il file di configurazione e' stato modificato dall'ultimo unmarshall.
  292.      *
  293.      *
  294.      */
  295.     private synchronized void refreshConfigurazioneXML(boolean refreshForzato) throws DriverConfigurazioneException{

  296.         File fTest = null;
  297.         boolean refresh = refreshForzato;
  298.         if(refreshForzato==false){
  299.             if(this.configuration_path.startsWith("http://") || this.configuration_path.startsWith("file://")){
  300.                 long now = DateManager.getTimeMillis();
  301.                 if( (now-this.lastModified) > (DriverConfigurazioneXML.timeoutRefresh*1000) ){
  302.                     refresh=true;
  303.                 }
  304.             }else{
  305.                 fTest = new File(this.configuration_path);
  306.                 if(this.lastModified != fTest.lastModified()){
  307.                     refresh = true;
  308.                 }
  309.             }
  310.         }
  311.         if(refresh){
  312.             try{
  313.                 this.parsingXMLConfigurazione();
  314.             }catch(Exception e){
  315.                 this.log.error("DriverConfigurazione refreshError: "+e.getMessage());
  316.                 throw new DriverConfigurazioneException("DriverConfigurazione refreshError: "+e.getMessage());
  317.             }
  318.             if(this.configuration_path.startsWith("http://")==false &&
  319.                 this.configuration_path.startsWith("file://")==false){
  320.                 this.log.warn("Reloaded configuration context.");
  321.             }

  322.             if(this.validazioneSemanticaDuranteModificaXML){
  323.                 ValidazioneSemantica validazioneSemantica = new ValidazioneSemantica(this.openspcoop,this.tipiConnettori,
  324.                         this.tipiSoggetti,this.tipiServiziSoap,this.tipiServiziRest,
  325.                         this.tipoMsgDiagnosticiAppender,this.tipoTracciamentoAppender,this.tipoDumpAppender,
  326.                         this.tipoAutenticazionePortaDelegata,this.tipoAutenticazionePortaApplicativa,
  327.                         this.tipoAutorizzazionePortaDelegata,this.tipoAutorizzazionePortaApplicativa,
  328.                         this.tipoAutorizzazioneContenutoPortaDelegata,this.tipoAutorizzazioneContenutoPortaApplicativa,
  329.                         this.tipoIntegrazionePD,this.tipoIntegrazionePA,
  330.                         true,
  331.                         this.log);
  332.                 try{
  333.                     validazioneSemantica.validazioneSemantica(false);
  334.                 }catch(Exception e){
  335.                     this.log.error("DriverConfigurazione refreshError(ValidazioneSemantica): "+e.getMessage());
  336.                     throw new DriverConfigurazioneException("DriverConfigurazione refreshError(ValidazioneSemantica): "+e.getMessage());
  337.                 }              
  338.             }
  339.         }

  340.         if(this.openspcoop == null){
  341.             this.log.error("DriverConfigurazione refreshError: istanza della configurazione is null dopo il refresh");
  342.             throw new DriverConfigurazioneException("DriverConfigurazione refreshError: istanza della configurazione is null dopo il refresh");
  343.         }

  344.     }


  345.     private boolean validazioneSemanticaDuranteModificaXML = false;
  346.     private String[] tipiConnettori = null;
  347.     private String[] tipiSoggetti = null;
  348.     private String[] tipiServiziSoap = null;
  349.     private String[] tipiServiziRest = null;
  350.     private String[] tipoMsgDiagnosticiAppender = null;
  351.     private String[] tipoTracciamentoAppender = null;
  352.     private String[] tipoDumpAppender = null;
  353.     private String[] tipoAutenticazionePortaDelegata = null;
  354.     private String[] tipoAutenticazionePortaApplicativa = null;
  355.     private String[] tipoAutorizzazionePortaDelegata = null;
  356.     private String[] tipoAutorizzazionePortaApplicativa = null;
  357.     private String[] tipoAutorizzazioneContenutoPortaDelegata = null;
  358.     private String[] tipoAutorizzazioneContenutoPortaApplicativa = null;
  359.     private String[] tipoIntegrazionePD = null;
  360.     private String[] tipoIntegrazionePA = null;
  361.     public void abilitazioneValidazioneSemanticaDuranteModificaXML(String[] tipiConnettori,
  362.             String[] tipiSoggetti,String[] tipiServiziSoap,String[] tipiServiziRest,
  363.             String[]tipoMsgDiagnosticiAppender,String[]tipoTracciamentoAppender,String[]tipoDumpAppender,
  364.             String[]tipoAutenticazionePortaDelegata,String[]tipoAutenticazionePortaApplicativa,
  365.             String[]tipoAutorizzazionePortaDelegata,String[]tipoAutorizzazionePortaApplicativa,
  366.             String[]tipoAutorizzazioneContenutoPortaDelegata,String[]tipoAutorizzazioneContenutoPortaApplicativa,
  367.             String[]tipoIntegrazionePD,String[]tipoIntegrazionePA){
  368.         this.validazioneSemanticaDuranteModificaXML = true;
  369.        
  370.         this.tipiConnettori = tipiConnettori;
  371.         this.tipiSoggetti = tipiSoggetti;
  372.         this.tipiServiziSoap = tipiServiziSoap;
  373.         this.tipiServiziRest = tipiServiziRest;
  374.         this.tipoMsgDiagnosticiAppender= tipoMsgDiagnosticiAppender;
  375.         this.tipoTracciamentoAppender=tipoTracciamentoAppender;
  376.         this.tipoDumpAppender=tipoDumpAppender;
  377.         this.tipoAutenticazionePortaDelegata=tipoAutenticazionePortaDelegata;
  378.         this.tipoAutenticazionePortaApplicativa=tipoAutenticazionePortaApplicativa;
  379.         this.tipoAutorizzazionePortaDelegata=tipoAutorizzazionePortaDelegata;
  380.         this.tipoAutorizzazionePortaApplicativa=tipoAutorizzazionePortaApplicativa;
  381.         this.tipoAutorizzazioneContenutoPortaDelegata=tipoAutorizzazioneContenutoPortaDelegata;
  382.         this.tipoAutorizzazioneContenutoPortaApplicativa=tipoAutorizzazioneContenutoPortaApplicativa;
  383.         this.tipoIntegrazionePD=tipoIntegrazionePD;
  384.         this.tipoIntegrazionePA=tipoIntegrazionePA;
  385.     }
  386.    
  387.    
  388.    






  389.     // SOGGETTO
  390.    
  391.     /**
  392.      * Restituisce Il soggetto identificato da <var>idSoggetto</var>
  393.      *
  394.      * @param aSoggetto Identificatore di un soggetto
  395.      * @return Il Soggetto identificato dal parametro.
  396.      *
  397.      */
  398.     @Override
  399.     public Soggetto getSoggetto(IDSoggetto aSoggetto) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  400.         if( (aSoggetto == null) || (aSoggetto.getNome()==null) || (aSoggetto.getTipo()==null)){
  401.             throw new DriverConfigurazioneException("[getSoggetto] Parametri Non Validi");
  402.         }

  403.         refreshConfigurazioneXML();

  404.         for(int i=0;i<this.openspcoop.sizeSoggettoList();i++){
  405.             Soggetto soggetto = this.openspcoop.getSoggetto(i);

  406.             if( aSoggetto.getNome().equals(soggetto.getNome()) &&
  407.                     aSoggetto.getTipo().equals(soggetto.getTipo())){

  408.                 return soggetto;
  409.             }

  410.         }  

  411.         throw new DriverConfigurazioneNotFound("[getSoggetto] Soggetto "+aSoggetto.toString()+" non Esistente");
  412.     }

  413.     /**
  414.      * Restituisce il soggetto configurato come router, se esiste nella Porta di Dominio un soggetto registrato come Router
  415.      *
  416.      * @return il soggetto configurato come router, se esiste nella Porta di Dominio un soggetto registrato come Router
  417.      *
  418.      */
  419.     @Override
  420.     public Soggetto getRouter() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  421.         refreshConfigurazioneXML();

  422.         // Deve esistere un soggetto configurato come Router
  423.         for(int i=0; i<this.openspcoop.sizeSoggettoList();i++){
  424.             if(this.openspcoop.getSoggetto(i).getRouter())
  425.                 return this.openspcoop.getSoggetto(i);
  426.         }

  427.         throw new DriverConfigurazioneNotFound("[getRouter] Router non esistente");
  428.     }

  429.     /**
  430.      * Restituisce la lista dei soggetti virtuali gestiti dalla PdD
  431.      *
  432.      * @return Restituisce la lista dei soggetti virtuali gestiti dalla PdD
  433.      * @throws DriverConfigurazioneException
  434.      */
  435.     @Override
  436.     public List<IDSoggetto> getSoggettiVirtuali() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{    

  437.         refreshConfigurazioneXML();

  438.         List<IDSoggetto> lista = new ArrayList<IDSoggetto>();
  439.         try{
  440.             for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  441.                 Soggetto soggetto = this.openspcoop.getSoggetto(i);
  442.                 for(int j=0; j<soggetto.sizePortaApplicativaList(); j++){
  443.                     PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  444.                     if(pa.getSoggettoVirtuale()!=null &&
  445.                             pa.getSoggettoVirtuale().getTipo()!=null &&
  446.                             pa.getSoggettoVirtuale().getNome()!=null){
  447.                         IDSoggetto soggettoVirtuale = new IDSoggetto(pa.getSoggettoVirtuale().getTipo(),pa.getSoggettoVirtuale().getNome());
  448.                         if(lista.contains(soggettoVirtuale)==false){
  449.                             this.log.info("aggiunto Soggetto "+soggettoVirtuale+" alla lista dei Soggetti Virtuali");
  450.                             lista.add(soggettoVirtuale);
  451.                         }
  452.                     }
  453.                 }
  454.             }  
  455.         }catch(Exception e){
  456.             throw new DriverConfigurazioneException("[getSoggettiVirtuali] Inizializzazione lista dei soggetti virtuali non riuscita: "+e.getMessage());
  457.         }

  458.         if(lista.size()==0){
  459.             throw new DriverConfigurazioneNotFound("[getSoggettiVirtuali] Soggetti virtuali non esistenti");
  460.         }
  461.        
  462.         return lista;
  463.     }

  464.     /**
  465.      * Restituisce la lista dei soggetti virtuali gestiti dalla PdD
  466.      *
  467.      * @return Restituisce la lista dei servizi associati a soggetti virtuali gestiti dalla PdD
  468.      * @throws DriverConfigurazioneException
  469.      */
  470.     @Override
  471.     public List<IDServizio> getServiziSoggettiVirtuali() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  472.        
  473.         refreshConfigurazioneXML();

  474.         List<IDServizio> lista = new ArrayList<>();
  475.         HashSet<String> unique = new HashSet<>();
  476.         try{
  477.             for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  478.                 Soggetto soggetto = this.openspcoop.getSoggetto(i);
  479.                 for(int j=0; j<soggetto.sizePortaApplicativaList(); j++){
  480.                     PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  481.                     if(pa.getSoggettoVirtuale()!=null &&
  482.                             pa.getSoggettoVirtuale().getTipo()!=null &&
  483.                             pa.getSoggettoVirtuale().getNome()!=null){
  484.                         IDServizio s = IDServizioUtils.buildIDServizio(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  485.                                 new IDSoggetto(pa.getSoggettoVirtuale().getTipo(),pa.getSoggettoVirtuale().getNome()),
  486.                                 pa.getServizio().getVersione());
  487.                         if(!unique.contains(s.toString())){
  488.                             /**log.info("aggiunto Servizio "+s.toString()+" alla lista dei servizi erogati da Soggetti Virtuali");*/
  489.                             lista.add(s);
  490.                             unique.add(s.toString());
  491.                         }
  492.                     }
  493.                 }
  494.             }  
  495.         }catch(Exception e){
  496.             throw new DriverConfigurazioneException("[getServiziSoggettiVirtuali] Inizializzazione lista servizi dei soggetti virtuali non riuscita: "+e.getMessage());
  497.         }
  498.        
  499.        
  500.         if(lista.isEmpty()){
  501.             throw new DriverConfigurazioneNotFound("[getServiziSoggettiVirtuali] Servizi erogati da Soggetti virtuali non esistenti");
  502.         }
  503.    
  504.         return lista;
  505.        
  506.     }
  507.    
  508.     /**
  509.      * Restituisce la lista degli identificativi dei soggetti
  510.      *
  511.      * @param filtroRicerca
  512.      * @return lista degli identificativi dei soggetti
  513.      * @throws DriverConfigurazioneException
  514.      * @throws DriverConfigurazioneNotFound
  515.      */
  516.     @Override
  517.     public List<IDSoggetto> getAllIdSoggetti(
  518.             FiltroRicercaSoggetti filtroRicerca) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  519.    
  520.         refreshConfigurazioneXML();
  521.        
  522.         List<IDSoggetto> listIDSoggetti = new ArrayList<IDSoggetto>();
  523.        
  524.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  525.             Soggetto soggetto = this.openspcoop.getSoggetto(i);
  526.             if(filtroRicerca!=null){
  527.                 // Filtro By Data
  528.                 if(filtroRicerca.getMinDate()!=null){
  529.                     if(soggetto.getOraRegistrazione()==null){
  530.                         this.log.debug("[getAllIdSoggetti](FiltroByMinDate) Soggetto ["+soggetto.getTipo()+"/"+soggetto.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  531.                         continue;
  532.                     }else if(soggetto.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  533.                         continue;
  534.                     }
  535.                 }
  536.                 if(filtroRicerca.getMaxDate()!=null){
  537.                     if(soggetto.getOraRegistrazione()==null){
  538.                         this.log.debug("[getAllIdSoggetti](FiltroByMaxDate) Soggetto ["+soggetto.getTipo()+"/"+soggetto.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  539.                         continue;
  540.                     }else if(soggetto.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  541.                         continue;
  542.                     }
  543.                 }
  544.                 // Filtro By Tipo e Nome
  545.                 if(filtroRicerca.getTipo()!=null){
  546.                     if(soggetto.getTipo().equals(filtroRicerca.getTipo()) == false){
  547.                         continue;
  548.                     }
  549.                 }
  550.                 if(filtroRicerca.getNome()!=null){
  551.                     if(soggetto.getNome().equals(filtroRicerca.getNome()) == false){
  552.                         continue;
  553.                     }
  554.                 }
  555.             }
  556.             listIDSoggetti.add(new IDSoggetto(soggetto.getTipo(), soggetto.getNome()));
  557.         }
  558.        
  559.         if(listIDSoggetti.size()<=0){
  560.             if(filtroRicerca!=null)
  561.                 throw new DriverConfigurazioneNotFound("Soggetti non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  562.             else
  563.                 throw new DriverConfigurazioneNotFound("Soggetti non trovati");
  564.         }
  565.        
  566.         return listIDSoggetti;
  567.     }
  568.    
  569.    
  570.    
  571.    
  572.    
  573.    
  574.    
  575.    
  576.     // PORTA DELEGATA

  577.     private IDPortaDelegata convertToIDPortaDelegata(PortaDelegata pd) throws DriverConfigurazioneException{
  578.        
  579.         IDPortaDelegata idPD = new IDPortaDelegata();
  580.         idPD.setNome(pd.getNome());
  581.        
  582.         IdentificativiFruizione idFruizione = new IdentificativiFruizione();
  583.        
  584.         IDSoggetto soggettoFruitore = new IDSoggetto(pd.getTipoSoggettoProprietario(), pd.getNomeSoggettoProprietario());
  585.         idFruizione.setSoggettoFruitore(soggettoFruitore);
  586.        
  587.         try{
  588.             IDServizio idServizio = IDServizioUtils.buildIDServizio(pd.getServizio().getTipo(), pd.getServizio().getNome(),
  589.                     new IDSoggetto(pd.getSoggettoErogatore().getTipo(),pd.getSoggettoErogatore().getNome()),
  590.                     pd.getServizio().getVersione());
  591.             if(pd.getAzione()!=null && pd.getAzione().getNome()!=null && !"".equals(pd.getAzione().getNome())){
  592.                 idServizio.setAzione(pd.getAzione().getNome());
  593.             }
  594.             idFruizione.setIdServizio(idServizio);
  595.         }catch(Exception e){
  596.             throw new DriverConfigurazioneException(e.getMessage(),e);
  597.         }
  598.        
  599.         idPD.setIdentificativiFruizione(idFruizione);
  600.        
  601.         return idPD;
  602.     }
  603.    
  604.     @Override
  605.     public IDPortaDelegata getIDPortaDelegata(String nome) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  606.         if(nome == null)
  607.             throw new DriverConfigurazioneException("[getIDPortaDelegata] Parametro Non Validi");

  608.         refreshConfigurazioneXML();

  609.         for(int i=0;i<this.openspcoop.sizeSoggettoList();i++){
  610.             Soggetto soggetto = this.openspcoop.getSoggetto(i);

  611.             //  ricerca PD
  612.             for(int j=0; j<soggetto.sizePortaDelegataList() ; j++){
  613.                 PortaDelegata pd = soggetto.getPortaDelegata(j);
  614.                 if(nome.equals(pd.getNome())){
  615.                     pd.setTipoSoggettoProprietario(soggetto.getTipo());
  616.                     pd.setNomeSoggettoProprietario(soggetto.getNome());
  617.                     return convertToIDPortaDelegata(pd);
  618.                 }
  619.             }  
  620.         }  

  621.         throw new DriverConfigurazioneNotFound("Porta Delegata ["+nome+"] non esistente");
  622.     }
  623.    
  624.     @Override
  625.     public PortaDelegata getPortaDelegata(IDPortaDelegata idPD) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {

  626.         if(idPD == null)
  627.             throw new DriverConfigurazioneException("[getPortaDelegata] Parametro idPD Non Validi");

  628.         String nome = idPD.getNome();

  629.         if( (nome == null) )
  630.             throw new DriverConfigurazioneException("[getPortaDelegata] Parametri non Validi");

  631.         // Il getIDPortaDelegata effettua il REFRESH XML
  632.         IDPortaDelegata id = this.getIDPortaDelegata(nome);
  633.         IDSoggetto soggettoProprietario = id.getIdentificativiFruizione().getSoggettoFruitore();
  634.        
  635.         // Il getSoggetto effettua il REFRESH XML
  636.         Soggetto soggetto = null;
  637.         try{
  638.             soggetto = getSoggetto(soggettoProprietario);
  639.         }catch(Exception e){
  640.             // ignore
  641.         }
  642.         if(soggetto == null)
  643.             throw new DriverConfigurazioneException("[getPortaDelegata] Soggetto fruitore ["+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+"] non esistente");

  644.         // ricerca PD
  645.         for(int j=0; j<soggetto.sizePortaDelegataList() ; j++){

  646.             PortaDelegata pd = soggetto.getPortaDelegata(j);
  647.             if(nome.equals(pd.getNome())){
  648.                 pd.setTipoSoggettoProprietario(soggetto.getTipo());
  649.                 pd.setNomeSoggettoProprietario(soggetto.getNome());
  650.                 return pd;
  651.             }
  652.         }  

  653.         throw new DriverConfigurazioneNotFound("PortaDelegata ["+nome+"] non esistente");
  654.     }

  655.     @Override
  656.     public List<IDPortaDelegata> getAllIdPorteDelegate(
  657.             FiltroRicercaPorteDelegate filtroRicerca) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  658.    
  659.         refreshConfigurazioneXML();
  660.        
  661.         List<IDPortaDelegata> listIDPorteDelegate = new ArrayList<IDPortaDelegata>();
  662.        
  663.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  664.             Soggetto soggetto = this.openspcoop.getSoggetto(i);
  665.             for (int j = 0; j < soggetto.sizePortaDelegataList(); j++) {
  666.                 PortaDelegata pd = soggetto.getPortaDelegata(j);
  667.                
  668.                 String id = pd.getNome();
  669.                
  670.                 if(filtroRicerca!=null){
  671.                    
  672.                     boolean porteDelegatePerAzioni = false;
  673.                     if(filtroRicerca.getNomePortaDelegante()!=null) {
  674.                         porteDelegatePerAzioni = true;
  675.                     }
  676.                    
  677.                     // Filtro By Data
  678.                     if(filtroRicerca.getMinDate()!=null){
  679.                         if(pd.getOraRegistrazione()==null){
  680.                             this.log.debug("[getAllIdPorteDelegate](FiltroByMinDate) PortaDelegata ["+id+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  681.                             continue;
  682.                         }else if(pd.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  683.                             continue;
  684.                         }
  685.                     }
  686.                     if(filtroRicerca.getMaxDate()!=null){
  687.                         if(soggetto.getOraRegistrazione()==null){
  688.                             this.log.debug("[getAllIdPorteDelegate](FiltroByMaxDate) PortaDelegata ["+id+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  689.                             continue;
  690.                         }else if(soggetto.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  691.                             continue;
  692.                         }
  693.                     }
  694.                     // Filtro By Tipo e Nome
  695.                     if(filtroRicerca.getTipoSoggetto()!=null){
  696.                         if(soggetto.getTipo().equals(filtroRicerca.getTipoSoggetto()) == false){
  697.                             continue;
  698.                         }
  699.                     }
  700.                     if(filtroRicerca.getNomeSoggetto()!=null){
  701.                         if(soggetto.getNome().equals(filtroRicerca.getNomeSoggetto()) == false){
  702.                             continue;
  703.                         }
  704.                     }
  705.                     // Filtro By Tipo e Nome soggetto erogatore
  706.                     if(filtroRicerca.getTipoSoggettoErogatore()!=null){
  707.                         if(pd.getSoggettoErogatore().getTipo().equals(filtroRicerca.getTipoSoggettoErogatore()) == false){
  708.                             continue;
  709.                         }
  710.                     }
  711.                     if(filtroRicerca.getNomeSoggettoErogatore()!=null){
  712.                         if(pd.getSoggettoErogatore().getNome()==null){
  713.                             continue;
  714.                         }
  715.                         if(pd.getSoggettoErogatore().getNome().equals(filtroRicerca.getNomeSoggettoErogatore()) == false){
  716.                             continue;
  717.                         }
  718.                     }
  719.                     // Filtro By Tipo e Nome servizio
  720.                     if(filtroRicerca.getTipoServizio()!=null){
  721.                         if(pd.getServizio().getTipo().equals(filtroRicerca.getTipoServizio()) == false){
  722.                             continue;
  723.                         }
  724.                     }
  725.                     if(filtroRicerca.getNomeServizio()!=null){
  726.                         if(pd.getServizio().getNome()==null){
  727.                             continue;
  728.                         }
  729.                         if(pd.getServizio().getNome().equals(filtroRicerca.getNomeServizio()) == false){
  730.                             continue;
  731.                         }
  732.                     }
  733.                     if(filtroRicerca.getVersioneServizio()!=null){
  734.                         if(pd.getServizio().getVersione()==null){
  735.                             continue;
  736.                         }
  737.                         if(pd.getServizio().getVersione().intValue() != filtroRicerca.getVersioneServizio().intValue()){
  738.                             continue;
  739.                         }
  740.                     }
  741.                     // Filtro By azione
  742.                     if(!porteDelegatePerAzioni && filtroRicerca.getAzione()!=null){
  743.                         if(pd.getAzione().getNome()==null){
  744.                             continue;
  745.                         }
  746.                         if(pd.getAzione().getNome().equals(filtroRicerca.getAzione()) == false){
  747.                             continue;
  748.                         }
  749.                     }
  750.                     // Filtro By Ruoli
  751.                     if(filtroRicerca.getIdRuolo()!=null && filtroRicerca.getIdRuolo().getNome()!=null){
  752.                         if(pd.getRuoli()==null){
  753.                             continue;
  754.                         }
  755.                         boolean contains = false;
  756.                         for (int z = 0; z < pd.getRuoli().sizeRuoloList(); z++) {
  757.                             if(filtroRicerca.getIdRuolo().getNome().equals(pd.getRuoli().getRuolo(z).getNome())){
  758.                                 contains = true;
  759.                                 break;
  760.                             }
  761.                         }
  762.                         if(!contains){
  763.                             continue;
  764.                         }
  765.                     }
  766.                     // Filtro By Scope
  767.                     if(filtroRicerca.getIdScope()!=null && filtroRicerca.getIdScope().getNome()!=null){
  768.                         if(pd.getScope()==null){
  769.                             continue;
  770.                         }
  771.                         boolean contains = false;
  772.                         for (int z = 0; z < pd.getScope().sizeScopeList(); z++) {
  773.                             if(filtroRicerca.getIdScope().getNome().equals(pd.getScope().getScope(z).getNome())){
  774.                                 contains = true;
  775.                                 break;
  776.                             }
  777.                         }
  778.                         if(!contains){
  779.                             continue;
  780.                         }
  781.                     }
  782.                     // Filtro By Autorizzazione Servizio Applicativo
  783.                     if(filtroRicerca.getNomeServizioApplicativo()!=null) {
  784.                         if(pd.sizeServizioApplicativoList()<=0){
  785.                             continue;
  786.                         }
  787.                         boolean contains = false;
  788.                         for (int z = 0; z < pd.sizeServizioApplicativoList(); z++) {
  789.                             if(filtroRicerca.getNomeServizioApplicativo().equals(pd.getServizioApplicativo(z).getNome())){
  790.                                 contains = true;
  791.                                 break;
  792.                             }
  793.                         }
  794.                         if(!contains){
  795.                             continue;
  796.                         }
  797.                     }  
  798.                     // Filtro By Autorizzazione Token Servizio Applicativo
  799.                     if(filtroRicerca.getNomeServizioApplicativoToken()!=null) {
  800.                         if(pd.getAutorizzazioneToken()==null || pd.getAutorizzazioneToken().getServiziApplicativi()==null ||
  801.                                 pd.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList()<=0){
  802.                             continue;
  803.                         }
  804.                         boolean contains = false;
  805.                         for (int z = 0; z < pd.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList(); z++) {
  806.                             if(filtroRicerca.getNomeServizioApplicativoToken().equals(pd.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativo(z).getNome())){
  807.                                 contains = true;
  808.                                 break;
  809.                             }
  810.                         }
  811.                         if(!contains){
  812.                             continue;
  813.                         }
  814.                     }  
  815.                     // Filtro By Ruoli Token
  816.                     if(filtroRicerca.getIdRuoloToken()!=null && filtroRicerca.getIdRuoloToken().getNome()!=null){
  817.                         if(pd.getAutorizzazioneToken()==null || pd.getAutorizzazioneToken().getRuoli()==null ||
  818.                                 pd.getAutorizzazioneToken().getRuoli().sizeRuoloList()<=0){
  819.                             continue;
  820.                         }
  821.                         boolean contains = false;
  822.                         for (int z = 0; z < pd.getAutorizzazioneToken().getRuoli().sizeRuoloList(); z++) {
  823.                             if(filtroRicerca.getIdRuoloToken().getNome().equals(pd.getAutorizzazioneToken().getRuoli().getRuolo(z).getNome())){
  824.                                 contains = true;
  825.                                 break;
  826.                             }
  827.                         }
  828.                         if(!contains){
  829.                             continue;
  830.                         }
  831.                     }
  832.                     // Filtro By Applicabilita Trasformazione Servizio Applicativo
  833.                     if(filtroRicerca.getNomeServizioApplicativoRiferitoApplicabilitaTrasformazione()!=null) {
  834.                         if(pd.getTrasformazioni()==null || pd.getTrasformazioni().sizeRegolaList()<=0){
  835.                             continue;
  836.                         }
  837.                         boolean contains = false;
  838.                         for (int z = 0; z < pd.getTrasformazioni().sizeRegolaList(); z++) {
  839.                             TrasformazioneRegola regola = pd.getTrasformazioni().getRegola(z);
  840.                             if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeServizioApplicativoList()>0) {
  841.                                 for (TrasformazioneRegolaApplicabilitaServizioApplicativo tSA : regola.getApplicabilita().getServizioApplicativoList()) {
  842.                                     if(filtroRicerca.getNomeServizioApplicativoRiferitoApplicabilitaTrasformazione().equals(tSA.getNome())){
  843.                                         contains = true;
  844.                                         break;
  845.                                     }
  846.                                 }
  847.                                 if(contains){
  848.                                     break;
  849.                                 }
  850.                             }
  851.                         }
  852.                         if(!contains){
  853.                             continue;
  854.                         }
  855.                     }  
  856.                     // Filtro By Applicabilita Trasformazione Servizio Applicativo Token
  857.                     if(filtroRicerca.getNomeServizioApplicativoTokenRiferitoApplicabilitaTrasformazione()!=null) {
  858.                         if(pd.getTrasformazioni()==null || pd.getTrasformazioni().sizeRegolaList()<=0){
  859.                             continue;
  860.                         }
  861.                         boolean contains = false;
  862.                         for (int z = 0; z < pd.getTrasformazioni().sizeRegolaList(); z++) {
  863.                             TrasformazioneRegola regola = pd.getTrasformazioni().getRegola(z);
  864.                             if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeServizioApplicativoList()>0) {
  865.                                 for (TrasformazioneRegolaApplicabilitaServizioApplicativo tSA : regola.getApplicabilita().getServizioApplicativoList()) {
  866.                                     if(filtroRicerca.getNomeServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().equals(tSA.getNome())){
  867.                                         contains = true;
  868.                                         break;
  869.                                     }
  870.                                 }
  871.                                 if(contains){
  872.                                     break;
  873.                                 }
  874.                             }
  875.                         }
  876.                         if(!contains){
  877.                             continue;
  878.                         }
  879.                     }  
  880.                     // Filtro By Stato
  881.                     if(filtroRicerca.getStato()!=null){
  882.                         if(pd.getStato()==null){
  883.                             // equivale a abilitato
  884.                             if(!StatoFunzionalita.ABILITATO.equals(filtroRicerca.getStato())){
  885.                                 continue;
  886.                             }
  887.                         }              
  888.                         else if(!pd.getStato().equals(filtroRicerca.getStato())){
  889.                             continue;
  890.                         }
  891.                     }
  892.                     // Filtro By NomePortaDelegante
  893.                     if(porteDelegatePerAzioni) {
  894.                         if(pd.getAzione()==null || pd.getAzione().getNomePortaDelegante()==null){
  895.                             continue;
  896.                         }              
  897.                         else if(!pd.getAzione().getNomePortaDelegante().equals(filtroRicerca.getNomePortaDelegante())){
  898.                             continue;
  899.                         }
  900.                         if(filtroRicerca.getAzione()!=null) {
  901.                             if(pd.getAzione().getAzioneDelegataList().size()<=0){
  902.                                 continue;
  903.                             }
  904.                             if(pd.getAzione().getAzioneDelegataList().contains(filtroRicerca.getAzione()) == false){
  905.                                 continue;
  906.                             }
  907.                         }
  908.                     }
  909.                 }
  910.                
  911.                 pd.setTipoSoggettoProprietario(soggetto.getTipo());
  912.                 pd.setNomeSoggettoProprietario(soggetto.getNome());
  913.                 listIDPorteDelegate.add(this.convertToIDPortaDelegata(pd));
  914.             }
  915.         }
  916.        
  917.         if(listIDPorteDelegate.size()<=0){
  918.             if(filtroRicerca!=null)
  919.                 throw new DriverConfigurazioneNotFound("PorteDelegate non trovate che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  920.             else
  921.                 throw new DriverConfigurazioneNotFound("PorteDelegate non trovate");
  922.         }
  923.        
  924.         return listIDPorteDelegate;
  925.     }
  926.    
  927.    
  928.    
  929.    
  930.    
  931.    
  932.    
  933.     // PORTA APPLICATIVA
  934.    
  935.     private IDPortaApplicativa convertToIDPortaApplicativa(PortaApplicativa pa) throws DriverConfigurazioneException{
  936.        
  937.         IDPortaApplicativa idPA = new IDPortaApplicativa();
  938.         idPA.setNome(pa.getNome());
  939.        
  940.         IdentificativiErogazione idErogazione = new IdentificativiErogazione();
  941.        
  942.         if(pa.getSoggettoVirtuale()!=null){
  943.             IDSoggetto soggettoVirtuale = new IDSoggetto(pa.getSoggettoVirtuale().getTipo(),pa.getSoggettoVirtuale().getNome());
  944.             idErogazione.setSoggettoVirtuale(soggettoVirtuale);
  945.         }
  946.        
  947.         try{
  948.             IDServizio idServizio = IDServizioUtils.buildIDServizio(pa.getServizio().getTipo(), pa.getServizio().getNome(),
  949.                     new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario()),
  950.                     pa.getServizio().getVersione());
  951.             if(pa.getAzione()!=null && pa.getAzione().getNome()!=null && !"".equals(pa.getAzione().getNome())){
  952.                 idServizio.setAzione(pa.getAzione().getNome());
  953.             }
  954.             idErogazione.setIdServizio(idServizio);
  955.         }catch(Exception e){
  956.             throw new DriverConfigurazioneException(e.getMessage(),e);
  957.         }
  958.        
  959.         idPA.setIdentificativiErogazione(idErogazione);
  960.        
  961.         return idPA;
  962.     }
  963.    
  964.     @Override
  965.     public IDPortaApplicativa getIDPortaApplicativa(String nome) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  966.         if(nome == null)
  967.             throw new DriverConfigurazioneException("[getIDPortaApplicativa] Parametro Non Validi");

  968.         refreshConfigurazioneXML();

  969.         for(int i=0;i<this.openspcoop.sizeSoggettoList();i++){
  970.             Soggetto soggetto = this.openspcoop.getSoggetto(i);

  971.             //  ricerca PA
  972.             for(int j=0; j<soggetto.sizePortaApplicativaList() ; j++){
  973.                 PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  974.                 if(nome.equals(pa.getNome())){              
  975.                     pa.setTipoSoggettoProprietario(soggetto.getTipo());
  976.                     pa.setNomeSoggettoProprietario(soggetto.getNome());
  977.                     return convertToIDPortaApplicativa(pa);
  978.                 }
  979.             }  
  980.         }  

  981.         throw new DriverConfigurazioneNotFound("Porta Applicativa ["+nome+"] non esistente");
  982.     }
  983.    
  984.     @Override
  985.     public PortaApplicativa getPortaApplicativa(IDPortaApplicativa idPA) throws DriverConfigurazioneException,DriverConfigurazioneNotFound {

  986.         if(idPA == null)
  987.             throw new DriverConfigurazioneException("[getPortaApplicativa] Parametro idPA Non Validi");

  988.         String nome = idPA.getNome();

  989.         if( (nome == null) )
  990.             throw new DriverConfigurazioneException("[getPortaApplicativa] Parametri non Validi");

  991.         // Il getIDPortaApplicativa effettua il REFRESH XML
  992.         IDPortaApplicativa id = this.getIDPortaApplicativa(nome);
  993.         IDSoggetto soggettoProprietario = id.getIdentificativiErogazione().getIdServizio().getSoggettoErogatore();
  994.        
  995.         // Il getSoggetto effettua il REFRESH XML
  996.         Soggetto soggetto = null;
  997.         try{
  998.             soggetto = getSoggetto(soggettoProprietario);
  999.         }catch(Exception e){
  1000.             // ignore
  1001.         }
  1002.         if(soggetto == null)
  1003.             throw new DriverConfigurazioneException("[getPortaApplicativa] Soggetto fruitore ["+soggettoProprietario.getTipo()+"/"+soggettoProprietario.getNome()+"] non esistente");

  1004.         // ricerca PA
  1005.         for(int j=0; j<soggetto.sizePortaApplicativaList() ; j++){

  1006.             PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  1007.             if(nome.equals(pa.getNome())){
  1008.                 pa.setTipoSoggettoProprietario(soggetto.getTipo());
  1009.                 pa.setNomeSoggettoProprietario(soggetto.getNome());
  1010.                 return pa;
  1011.             }
  1012.         }  

  1013.         throw new DriverConfigurazioneNotFound("PortaApplicativa ["+nome+"] non esistente");
  1014.     }
  1015.    
  1016.     @Override
  1017.     public List<PortaApplicativa> getPorteApplicative(IDServizio idServizio, boolean ricercaPuntuale) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  1018.         return this.getEnginePorteApplicative_engine(idServizio, null, ricercaPuntuale);
  1019.     }
  1020.    
  1021.     @Override
  1022.     public List<PortaApplicativa> getPorteApplicativeVirtuali(IDSoggetto soggettoVirtuale,IDServizio idServizio, boolean ricercaPuntuale) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  1023.         return this.getEnginePorteApplicative_engine(idServizio, soggettoVirtuale, ricercaPuntuale);
  1024.     }
  1025.    
  1026.     private List<PortaApplicativa> getEnginePorteApplicative_engine(IDServizio service,IDSoggetto soggettoVirtuale,boolean ricercaPuntuale) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  1027.         if(service == null)
  1028.             throw new DriverConfigurazioneException("[getPortaApplicativa] Parametro idServizio non definito");
  1029.        
  1030.         IDSoggetto soggettoErogatore = service.getSoggettoErogatore();
  1031.         if(soggettoErogatore == null)
  1032.             throw new DriverConfigurazioneException("[getPortaApplicativa] Parametri non validi (Soggetto Erogatore is null)");
  1033.    
  1034.         String servizio = service.getNome();
  1035.         String tipoServizio = service.getTipo();
  1036.         Integer versioneServizio = service.getVersione();
  1037.         String azione = service.getAzione();
  1038.         if((servizio==null)||(tipoServizio==null)||versioneServizio==null)
  1039.             throw new DriverConfigurazioneException("[getPortaApplicativa] Parametri (Servizio) non validi");

  1040.         //  Il getSoggetto effettua il REFRESH XML
  1041.         Soggetto soggetto = null;
  1042.         try{
  1043.             soggetto = getSoggetto(soggettoErogatore);
  1044.         }catch(DriverConfigurazioneNotFound dn){
  1045.             throw new DriverConfigurazioneNotFound("[getPortaApplicativa] "+dn.getMessage(),dn);
  1046.         }
  1047.         catch(Exception e){}
  1048.         if(soggetto == null)
  1049.             throw new DriverConfigurazioneException("[getPortaApplicativa] Soggetto erogatore ["+soggettoErogatore.getTipo()+"/"+soggettoErogatore.getNome()+"] non esistente");

  1050.         if(soggettoVirtuale!=null){
  1051.             if(soggettoVirtuale.getTipo()==null || soggettoVirtuale.getNome()==null)
  1052.                 throw new DriverConfigurazioneException("[getPortaApplicativa] Parametri (Soggetto Virtuale) non validi");
  1053.         }
  1054.        
  1055.         // ricerca PA
  1056.         List<PortaApplicativa> paSenzaAzioneList = new ArrayList<PortaApplicativa>();
  1057.         List<PortaApplicativa> paList = new ArrayList<PortaApplicativa>();
  1058.         for(int j=0; j<soggetto.sizePortaApplicativaList() ; j++){

  1059.             PortaApplicativa pa = soggetto.getPortaApplicativa(j);

  1060.             boolean paMatchaCriteriDiRicerca = false;
  1061.             if(soggettoVirtuale==null){
  1062.                 paMatchaCriteriDiRicerca = servizio.equals(pa.getServizio().getNome()) &&
  1063.                                            tipoServizio.equals(pa.getServizio().getTipo()) &&
  1064.                                            versioneServizio.intValue() == pa.getServizio().getVersione().intValue();
  1065.             }else{
  1066.                 paMatchaCriteriDiRicerca = servizio.equals(pa.getServizio().getNome()) &&
  1067.                                            tipoServizio.equals(pa.getServizio().getTipo()) &&
  1068.                                            versioneServizio.intValue() == pa.getServizio().getVersione().intValue() &&
  1069.                                            pa.getSoggettoVirtuale()!=null &&
  1070.                                            soggettoVirtuale.getTipo().equals(pa.getSoggettoVirtuale().getTipo()) &&
  1071.                                            soggettoVirtuale.getNome().equals(pa.getSoggettoVirtuale().getNome());
  1072.             }
  1073.             if(paMatchaCriteriDiRicerca) {
  1074.                 if(pa.getAzione()!=null && PortaApplicativaAzioneIdentificazione.DELEGATED_BY.equals(pa.getAzione().getIdentificazione())) {
  1075.                     paMatchaCriteriDiRicerca = false;
  1076.                 }
  1077.             }
  1078.                
  1079.                
  1080.             if(paMatchaCriteriDiRicerca){

  1081.                 // ricerca di una porta applicativa senza azione
  1082.                 if(azione==null){
  1083.                     if(pa.getAzione() == null){
  1084.                         pa.setTipoSoggettoProprietario(soggetto.getTipo());
  1085.                         pa.setNomeSoggettoProprietario(soggetto.getNome());
  1086.                         paList.add(pa);
  1087.                     }
  1088.                 }
  1089.                 // ricerca di una porta applicativa con azione
  1090.                 else{
  1091.                     if(pa.getAzione() == null){
  1092.                         PortaApplicativa paSenzaAzione = pa; // potenziale porta applicativa che mappa solo il servizio (se non esiste)
  1093.                         paSenzaAzione.setTipoSoggettoProprietario(soggetto.getTipo());
  1094.                         paSenzaAzione.setNomeSoggettoProprietario(soggetto.getNome());
  1095.                         paSenzaAzioneList.add(paSenzaAzione);
  1096.                     }
  1097.                     else if(azione.equals(pa.getAzione().getNome())){
  1098.                         pa.setTipoSoggettoProprietario(soggetto.getTipo());
  1099.                         pa.setNomeSoggettoProprietario(soggetto.getNome());
  1100.                         paList.add(pa);
  1101.                     }
  1102.                 }
  1103.             }
  1104.         }  
  1105.        
  1106.         if(paList.size()>0){
  1107.             return paList;
  1108.         }
  1109.        
  1110.         if(paSenzaAzioneList.size()>0 && ricercaPuntuale==false)
  1111.             return paSenzaAzioneList;

  1112.         throw new DriverConfigurazioneNotFound("PorteApplicative non esistenti");
  1113.     }
  1114.    
  1115.     @Override
  1116.     public Map<IDSoggetto,PortaApplicativa> getPorteApplicativeSoggettiVirtuali(IDServizio idServizio)throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  1117.         if(idServizio==null)
  1118.             throw new DriverConfigurazioneException("[getPortaApplicativa_SoggettiVirtuali] Parametro idServizio non valido");
  1119.         if(idServizio.getSoggettoErogatore()==null)
  1120.             throw new DriverConfigurazioneException("[getPortaApplicativa_SoggettiVirtuali] Parametro Soggetto Erogatore non valido");

  1121.         refreshConfigurazioneXML();

  1122.         Map<IDSoggetto,PortaApplicativa> paConSoggetti = new HashMap<IDSoggetto,PortaApplicativa>();
  1123.         IDSoggetto soggettoVirtuale = idServizio.getSoggettoErogatore();    
  1124.         String servizio = idServizio.getNome();
  1125.         String tipoServizio = idServizio.getTipo();
  1126.         Integer versioneServizio = idServizio.getVersione();
  1127.         String azione = idServizio.getAzione();
  1128.         if((servizio==null)||(tipoServizio==null)||versioneServizio==null)
  1129.             throw new DriverConfigurazioneException("[getPortaApplicativa_SoggettiVirtuali] Parametri (Servizio) Non Validi");


  1130.         // Ricerca soggetti che possiedono porte applicative.... che hanno un soggetto virtuale
  1131.         for(int i=0; i<this.openspcoop.sizeSoggettoList();i++){

  1132.             Soggetto aSoggetto = this.openspcoop.getSoggetto(i);
  1133.             PortaApplicativa paSenzaAzione = null;

  1134.             // Ricerca tra le PA del soggetto...
  1135.             for(int j=0; j<aSoggetto.sizePortaApplicativaList() ; j++){

  1136.                 PortaApplicativa pa = aSoggetto.getPortaApplicativa(j);
  1137.                 if( pa.getSoggettoVirtuale()!= null  ){
  1138.                     if( (pa.getSoggettoVirtuale().getTipo().equals(soggettoVirtuale.getTipo())) &&
  1139.                             (pa.getSoggettoVirtuale().getNome().equals(soggettoVirtuale.getNome())) ){

  1140.                         // Porta applicativa con tale soggetto virtuale... guardo se possiede il servizio e l'azione della busta
  1141.                         if(servizio.equals(pa.getServizio().getNome()) &&
  1142.                                 tipoServizio.equals(pa.getServizio().getTipo()) &&
  1143.                                 versioneServizio.intValue() == pa.getServizio().getVersione().intValue()){

  1144.                             // ricerca di una porta applicativa senza azione
  1145.                             if(azione==null){
  1146.                                 if(pa.getAzione() == null){
  1147.                                     for(int k=0; k<pa.sizeServizioApplicativoList(); k++){
  1148.                                         paConSoggetti.put(new IDSoggetto(aSoggetto.getTipo(),aSoggetto.getNome()),
  1149.                                                 pa);
  1150.                                     }
  1151.                                     break; // ricerca in questo soggetto terminata.
  1152.                                 }
  1153.                             }
  1154.                             // ricerca di una porta applicativa con azione
  1155.                             else{
  1156.                                 if(pa.getAzione() == null){
  1157.                                     paSenzaAzione = pa; // potenziale porta applicativa che mappa solo il servizio (se non esiste)
  1158.                                     continue;
  1159.                                 }
  1160.                                 if(azione.equals(pa.getAzione().getNome())){
  1161.                                     for(int k=0; k<pa.sizeServizioApplicativoList(); k++){
  1162.                                         paConSoggetti.put(new IDSoggetto(aSoggetto.getTipo(),aSoggetto.getNome()),
  1163.                                                 pa);
  1164.                                         paSenzaAzione = null;
  1165.                                     }
  1166.                                     break; // ricerca in questo soggetto terminata.
  1167.                                 }
  1168.                             }
  1169.                         }
  1170.                     }
  1171.                 }
  1172.             }// Fine ricerca tra le PA del soggetto
  1173.             if(paSenzaAzione!=null){
  1174.                 // Trovata PA con solo match per azione
  1175.                 paConSoggetti.put(new IDSoggetto(aSoggetto.getTipo(),aSoggetto.getNome()),
  1176.                         paSenzaAzione);
  1177.             }

  1178.         }  // fine Ricerca

  1179.         if(paConSoggetti.size() == 0)
  1180.             throw new DriverConfigurazioneNotFound("[getPortaApplicativa_SoggettiVirtuali] Porte applicative di soggetti virtuali non esistenti.");
  1181.        
  1182.         return paConSoggetti;
  1183.     }

  1184.     @Override
  1185.     public List<IDPortaApplicativa> getAllIdPorteApplicative(
  1186.             FiltroRicercaPorteApplicative filtroRicerca) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  1187.        
  1188.         refreshConfigurazioneXML();
  1189.        
  1190.         List<IDPortaApplicativa> listIDPorteApplicative = new ArrayList<IDPortaApplicativa>();
  1191.        
  1192.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1193.             Soggetto soggetto = this.openspcoop.getSoggetto(i);
  1194.             for (int j = 0; j < soggetto.sizePortaApplicativaList(); j++) {
  1195.                 PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  1196.                
  1197.                 String id = pa.getNome();
  1198.                
  1199.                 if(filtroRicerca!=null){
  1200.                    
  1201.                     boolean porteDelegatePerAzioni = false;
  1202.                     if(filtroRicerca.getNomePortaDelegante()!=null) {
  1203.                         porteDelegatePerAzioni = true;
  1204.                     }
  1205.                    
  1206.                     // Filtro By Data
  1207.                     if(filtroRicerca.getMinDate()!=null){
  1208.                         if(pa.getOraRegistrazione()==null){
  1209.                             this.log.debug("[getAllIdPorteApplicative](FiltroByMinDate) PortaApplicativa ["+id+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1210.                             continue;
  1211.                         }else if(pa.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1212.                             continue;
  1213.                         }
  1214.                     }
  1215.                     if(filtroRicerca.getMaxDate()!=null){
  1216.                         if(soggetto.getOraRegistrazione()==null){
  1217.                             this.log.debug("[getAllIdPorteApplicative](FiltroByMaxDate) PortaApplicativa ["+id+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1218.                             continue;
  1219.                         }else if(soggetto.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1220.                             continue;
  1221.                         }
  1222.                     }
  1223.                     // Filtro By Tipo e Nome
  1224.                     if(filtroRicerca.getTipoSoggetto()!=null){
  1225.                         if(soggetto.getTipo().equals(filtroRicerca.getTipoSoggetto()) == false){
  1226.                             continue;
  1227.                         }
  1228.                     }
  1229.                     if(filtroRicerca.getNomeSoggetto()!=null){
  1230.                         if(soggetto.getNome().equals(filtroRicerca.getNomeSoggetto()) == false){
  1231.                             continue;
  1232.                         }
  1233.                     }
  1234.                     // Filtro By Tipo e Nome servizio
  1235.                     if(filtroRicerca.getTipoServizio()!=null){
  1236.                         if(pa.getServizio().getTipo().equals(filtroRicerca.getTipoServizio()) == false){
  1237.                             continue;
  1238.                         }
  1239.                     }
  1240.                     if(filtroRicerca.getNomeServizio()!=null){
  1241.                         if(pa.getServizio().getNome()==null){
  1242.                             continue;
  1243.                         }
  1244.                         if(pa.getServizio().getNome().equals(filtroRicerca.getNomeServizio()) == false){
  1245.                             continue;
  1246.                         }
  1247.                     }
  1248.                     if(filtroRicerca.getVersioneServizio()!=null){
  1249.                         if(pa.getServizio().getVersione()==null){
  1250.                             continue;
  1251.                         }
  1252.                         if(pa.getServizio().getVersione().intValue() != filtroRicerca.getVersioneServizio().intValue()){
  1253.                             continue;
  1254.                         }
  1255.                     }
  1256.                     // Filtro By azione
  1257.                     if(!porteDelegatePerAzioni && filtroRicerca.getAzione()!=null){
  1258.                         if(pa.getAzione().getNome()==null){
  1259.                             continue;
  1260.                         }
  1261.                         if(pa.getAzione().getNome().equals(filtroRicerca.getAzione()) == false){
  1262.                             continue;
  1263.                         }
  1264.                     }
  1265.                     // Filtro By Ruoli
  1266.                     if(filtroRicerca.getIdRuolo()!=null && filtroRicerca.getIdRuolo().getNome()!=null){
  1267.                         if(pa.getRuoli()==null){
  1268.                             continue;
  1269.                         }
  1270.                         boolean contains = false;
  1271.                         for (int z = 0; z < pa.getRuoli().sizeRuoloList(); z++) {
  1272.                             if(filtroRicerca.getIdRuolo().getNome().equals(pa.getRuoli().getRuolo(z).getNome())){
  1273.                                 contains = true;
  1274.                                 break;
  1275.                             }
  1276.                         }
  1277.                         if(!contains){
  1278.                             continue;
  1279.                         }
  1280.                     }
  1281.                     // Filtro By Scope
  1282.                     if(filtroRicerca.getIdScope()!=null && filtroRicerca.getIdScope().getNome()!=null){
  1283.                         if(pa.getScope()==null){
  1284.                             continue;
  1285.                         }
  1286.                         boolean contains = false;
  1287.                         for (int z = 0; z < pa.getScope().sizeScopeList(); z++) {
  1288.                             if(filtroRicerca.getIdScope().getNome().equals(pa.getScope().getScope(z).getNome())){
  1289.                                 contains = true;
  1290.                                 break;
  1291.                             }
  1292.                         }
  1293.                         if(!contains){
  1294.                             continue;
  1295.                         }
  1296.                     }
  1297.                     // Filtro By SoggettoAutorizzato
  1298.                     if(filtroRicerca.getIdSoggettoAutorizzato()!=null &&
  1299.                             (filtroRicerca.getIdSoggettoAutorizzato().getTipo()!=null ||
  1300.                             filtroRicerca.getIdSoggettoAutorizzato().getNome()!=null)){
  1301.                         if(pa.getSoggetti()==null || pa.getSoggetti().sizeSoggettoList()<=0) {
  1302.                             continue;
  1303.                         }
  1304.                         boolean contains = false;
  1305.                         for (int z = 0; z < pa.getSoggetti().sizeSoggettoList(); z++) {
  1306.                             if(filtroRicerca.getIdSoggettoAutorizzato().getTipo()!=null &&
  1307.                                     !filtroRicerca.getIdSoggettoAutorizzato().getTipo().equals(pa.getSoggetti().getSoggetto(z).getTipo())){
  1308.                                 continue;
  1309.                             }
  1310.                             if(filtroRicerca.getIdSoggettoAutorizzato().getNome()!=null &&
  1311.                                     !filtroRicerca.getIdSoggettoAutorizzato().getNome().equals(pa.getSoggetti().getSoggetto(z).getNome())){
  1312.                                 continue;
  1313.                             }
  1314.                             contains = true;
  1315.                             break;
  1316.                         }
  1317.                         if(!contains){
  1318.                             continue;
  1319.                         }
  1320.                     }
  1321.                     // Filtro By ServizioApplicativoAutorizzato (ricerca puntuale)
  1322.                     if(filtroRicerca.getIdServizioApplicativoAutorizzato()!=null &&
  1323.                             filtroRicerca.getIdServizioApplicativoAutorizzato().getNome()!=null &&
  1324.                             filtroRicerca.getIdServizioApplicativoAutorizzato().getIdSoggettoProprietario()!=null &&
  1325.                             filtroRicerca.getIdServizioApplicativoAutorizzato().getIdSoggettoProprietario().getTipo()!=null &&
  1326.                             filtroRicerca.getIdServizioApplicativoAutorizzato().getIdSoggettoProprietario().getNome()!=null
  1327.                             ){
  1328.                         if(pa.getServiziApplicativiAutorizzati()==null || pa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList()<=0) {
  1329.                             continue;
  1330.                         }
  1331.                         boolean contains = false;
  1332.                         for (int z = 0; z < pa.getServiziApplicativiAutorizzati().sizeServizioApplicativoList(); z++) {
  1333.                             if(!filtroRicerca.getIdServizioApplicativoAutorizzato().getNome().equals(pa.getServiziApplicativiAutorizzati().getServizioApplicativo(z).getNome())){
  1334.                                 continue;
  1335.                             }
  1336.                             if(!filtroRicerca.getIdServizioApplicativoAutorizzato().getIdSoggettoProprietario().getTipo().equals(pa.getServiziApplicativiAutorizzati().getServizioApplicativo(z).getTipoSoggettoProprietario())){
  1337.                                 continue;
  1338.                             }  
  1339.                             if(!filtroRicerca.getIdServizioApplicativoAutorizzato().getIdSoggettoProprietario().getNome().equals(pa.getServiziApplicativiAutorizzati().getServizioApplicativo(z).getNomeSoggettoProprietario())){
  1340.                                 continue;
  1341.                             }
  1342.                             contains = true;
  1343.                             break;
  1344.                         }
  1345.                         if(!contains){
  1346.                             continue;
  1347.                         }
  1348.                     }
  1349.                     // Filtro By SoggettoAutorizzato
  1350.                     if(filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione()!=null &&
  1351.                             (filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione().getTipo()!=null ||
  1352.                             filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione().getNome()!=null)){
  1353.                         if(pa.getTrasformazioni()==null || pa.getTrasformazioni().sizeRegolaList()<=0){
  1354.                             continue;
  1355.                         }
  1356.                         boolean contains = false;
  1357.                         for (int z = 0; z < pa.getTrasformazioni().sizeRegolaList(); z++) {
  1358.                             TrasformazioneRegola regola = pa.getTrasformazioni().getRegola(z);
  1359.                             if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeSoggettoList()>0) {
  1360.                                 for (TrasformazioneRegolaApplicabilitaSoggetto tSoggetto : regola.getApplicabilita().getSoggettoList()) {
  1361.                                     if(filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione().getTipo()!=null &&
  1362.                                             !filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione().getTipo().equals(tSoggetto.getTipo())){
  1363.                                         continue;
  1364.                                     }
  1365.                                     if(filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione().getNome()!=null &&
  1366.                                             !filtroRicerca.getIdSoggettoRiferitoApplicabilitaTrasformazione().getNome().equals(tSoggetto.getNome())){
  1367.                                         continue;
  1368.                                     }
  1369.                                     contains = true;
  1370.                                     break;
  1371.                                 }
  1372.                                 if(contains){
  1373.                                     break;
  1374.                                 }
  1375.                             }
  1376.                         }
  1377.                         if(!contains){
  1378.                             continue;
  1379.                         }
  1380.                     }
  1381.                     // Filtro By ServizioApplicativoAutorizzatoToken (ricerca puntuale)
  1382.                     if(filtroRicerca.getIdServizioApplicativoAutorizzatoToken()!=null &&
  1383.                             filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getNome()!=null &&
  1384.                             filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getIdSoggettoProprietario()!=null &&
  1385.                             filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getIdSoggettoProprietario().getTipo()!=null &&
  1386.                             filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getIdSoggettoProprietario().getNome()!=null
  1387.                             ){
  1388.                         if(pa.getAutorizzazioneToken()==null || pa.getAutorizzazioneToken().getServiziApplicativi()== null || pa.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList()<=0) {
  1389.                             continue;
  1390.                         }
  1391.                         boolean contains = false;
  1392.                         for (int z = 0; z < pa.getAutorizzazioneToken().getServiziApplicativi().sizeServizioApplicativoList(); z++) {
  1393.                             if(!filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getNome().equals(pa.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativo(z).getNome())){
  1394.                                 continue;
  1395.                             }
  1396.                             if(!filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getIdSoggettoProprietario().getTipo().equals(pa.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativo(z).getTipoSoggettoProprietario())){
  1397.                                 continue;
  1398.                             }  
  1399.                             if(!filtroRicerca.getIdServizioApplicativoAutorizzatoToken().getIdSoggettoProprietario().getNome().equals(pa.getAutorizzazioneToken().getServiziApplicativi().getServizioApplicativo(z).getNomeSoggettoProprietario())){
  1400.                                 continue;
  1401.                             }
  1402.                             contains = true;
  1403.                             break;
  1404.                         }
  1405.                         if(!contains){
  1406.                             continue;
  1407.                         }
  1408.                     }
  1409.                     // Filtro By Ruoli Token
  1410.                     if(filtroRicerca.getIdRuoloToken()!=null && filtroRicerca.getIdRuoloToken().getNome()!=null){
  1411.                         if(pa.getAutorizzazioneToken()==null || pa.getAutorizzazioneToken().getRuoli()== null || pa.getAutorizzazioneToken().getRuoli().sizeRuoloList()<=0) {
  1412.                             continue;
  1413.                         }
  1414.                         boolean contains = false;
  1415.                         for (int z = 0; z < pa.getAutorizzazioneToken().getRuoli().sizeRuoloList(); z++) {
  1416.                             if(filtroRicerca.getIdRuoloToken().getNome().equals(pa.getAutorizzazioneToken().getRuoli().getRuolo(z).getNome())){
  1417.                                 contains = true;
  1418.                                 break;
  1419.                             }
  1420.                         }
  1421.                         if(!contains){
  1422.                             continue;
  1423.                         }
  1424.                     }
  1425.                     // Filtro By Applicabilita Trasformazione Servizio Applicativo
  1426.                     if(filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione()!=null &&
  1427.                             filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getNome()!=null &&
  1428.                             filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario()!=null &&
  1429.                             filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getTipo()!=null &&
  1430.                             filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getNome()!=null
  1431.                             ){
  1432.                         if(pa.getTrasformazioni()==null || pa.getTrasformazioni().sizeRegolaList()<=0){
  1433.                             continue;
  1434.                         }
  1435.                         boolean contains = false;
  1436.                         for (int z = 0; z < pa.getTrasformazioni().sizeRegolaList(); z++) {
  1437.                             TrasformazioneRegola regola = pa.getTrasformazioni().getRegola(z);
  1438.                             if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeServizioApplicativoList()>0) {
  1439.                                 for (TrasformazioneRegolaApplicabilitaServizioApplicativo tSA : regola.getApplicabilita().getServizioApplicativoList()) {
  1440.                                     if(!filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getNome().equals(tSA.getNome())){
  1441.                                         continue;
  1442.                                     }
  1443.                                     if(!filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getTipo().equals(tSA.getTipoSoggettoProprietario())){
  1444.                                         continue;
  1445.                                     }  
  1446.                                     if(!filtroRicerca.getIdServizioApplicativoRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getNome().equals(tSA.getNomeSoggettoProprietario())){
  1447.                                         continue;
  1448.                                     }
  1449.                                     contains = true;
  1450.                                     break;
  1451.                                 }
  1452.                                 if(contains){
  1453.                                     break;
  1454.                                 }
  1455.                             }
  1456.                         }
  1457.                         if(!contains){
  1458.                             continue;
  1459.                         }
  1460.                     }
  1461.                     // Filtro By Applicabilita Trasformazione Servizio Applicativo Token
  1462.                     if(filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione()!=null &&
  1463.                             filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getNome()!=null &&
  1464.                             filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario()!=null &&
  1465.                             filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getTipo()!=null &&
  1466.                             filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getNome()!=null
  1467.                             ){
  1468.                         if(pa.getTrasformazioni()==null || pa.getTrasformazioni().sizeRegolaList()<=0){
  1469.                             continue;
  1470.                         }
  1471.                         boolean contains = false;
  1472.                         for (int z = 0; z < pa.getTrasformazioni().sizeRegolaList(); z++) {
  1473.                             TrasformazioneRegola regola = pa.getTrasformazioni().getRegola(z);
  1474.                             if(regola.getApplicabilita()!=null && regola.getApplicabilita().sizeServizioApplicativoList()>0) {
  1475.                                 for (TrasformazioneRegolaApplicabilitaServizioApplicativo tSA : regola.getApplicabilita().getServizioApplicativoList()) {
  1476.                                     if(!filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getNome().equals(tSA.getNome())){
  1477.                                         continue;
  1478.                                     }
  1479.                                     if(!filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getTipo().equals(tSA.getTipoSoggettoProprietario())){
  1480.                                         continue;
  1481.                                     }  
  1482.                                     if(!filtroRicerca.getIdServizioApplicativoTokenRiferitoApplicabilitaTrasformazione().getIdSoggettoProprietario().getNome().equals(tSA.getNomeSoggettoProprietario())){
  1483.                                         continue;
  1484.                                     }
  1485.                                     contains = true;
  1486.                                     break;
  1487.                                 }
  1488.                                 if(contains){
  1489.                                     break;
  1490.                                 }
  1491.                             }
  1492.                         }
  1493.                         if(!contains){
  1494.                             continue;
  1495.                         }
  1496.                     }
  1497.                     // Filtro By Stato
  1498.                     if(filtroRicerca.getStato()!=null){
  1499.                         if(pa.getStato()==null){
  1500.                             // equivale a abilitato
  1501.                             if(!StatoFunzionalita.ABILITATO.equals(filtroRicerca.getStato())){
  1502.                                 continue;
  1503.                             }
  1504.                         }              
  1505.                         else if(!pa.getStato().equals(filtroRicerca.getStato())){
  1506.                             continue;
  1507.                         }
  1508.                     }
  1509.                     // Filtro By NomePortaDelegante
  1510.                     if(porteDelegatePerAzioni) {
  1511.                         if(pa.getAzione()==null || pa.getAzione().getNomePortaDelegante()==null){
  1512.                             continue;
  1513.                         }              
  1514.                         else if(!pa.getAzione().getNomePortaDelegante().equals(filtroRicerca.getNomePortaDelegante())){
  1515.                             continue;
  1516.                         }
  1517.                         if(filtroRicerca.getAzione()!=null) {
  1518.                             if(pa.getAzione().getAzioneDelegataList().size()<=0){
  1519.                                 continue;
  1520.                             }
  1521.                             if(pa.getAzione().getAzioneDelegataList().contains(filtroRicerca.getAzione()) == false){
  1522.                                 continue;
  1523.                             }
  1524.                         }
  1525.                     }
  1526.                 }
  1527.                
  1528.                 pa.setTipoSoggettoProprietario(soggetto.getTipo());
  1529.                 pa.setNomeSoggettoProprietario(soggetto.getNome());
  1530.                 listIDPorteApplicative.add(this.convertToIDPortaApplicativa(pa));
  1531.                
  1532.             }
  1533.         }
  1534.        
  1535.         if(listIDPorteApplicative.size()<=0){
  1536.             if(filtroRicerca!=null)
  1537.                 throw new DriverConfigurazioneNotFound("PorteApplicative non trovate che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1538.             else
  1539.                 throw new DriverConfigurazioneNotFound("PorteApplicative non trovate");
  1540.         }
  1541.        
  1542.         return listIDPorteApplicative;
  1543.     }
  1544.    
  1545.    
  1546.    
  1547.    
  1548.    
  1549.    
  1550.    
  1551.     // SERVIZIO APPLICATIVO
  1552.    
  1553.     @Override
  1554.     public ServizioApplicativo getServizioApplicativo(IDServizioApplicativo idServizioApplicativo) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1555.        
  1556.         if(idServizioApplicativo==null){
  1557.             throw new DriverConfigurazioneException("IDServizioApplicativo non definito");
  1558.         }
  1559.         if(idServizioApplicativo.getIdSoggettoProprietario()==null){
  1560.             throw new DriverConfigurazioneException("IDServizioApplicativo.idSoggettoProprietario non definito");
  1561.         }
  1562.         if(idServizioApplicativo.getNome()==null){
  1563.             throw new DriverConfigurazioneException("IDServizioApplicativo.nome non definito");
  1564.         }
  1565.        
  1566.         Soggetto soggettoProprietario = this.getSoggetto(idServizioApplicativo.getIdSoggettoProprietario());
  1567.         for(int j=0; j<soggettoProprietario.sizeServizioApplicativoList(); j++){
  1568.             ServizioApplicativo sa = soggettoProprietario.getServizioApplicativo(j);
  1569.             if(idServizioApplicativo.getNome().equals(sa.getNome())){
  1570.                 sa.setTipoSoggettoProprietario(soggettoProprietario.getTipo());
  1571.                 sa.setNomeSoggettoProprietario(soggettoProprietario.getNome());
  1572.                 return sa;
  1573.             }
  1574.         }
  1575.        
  1576.         throw new DriverConfigurazioneNotFound("Servizio Applicativo non trovato");
  1577.     }
  1578.    
  1579.    
  1580.     @Override
  1581.     public ServizioApplicativo getServizioApplicativoByCredenzialiBasic(String aUser,String aPassword, CryptConfig config) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1582.        
  1583.         if(aUser==null){
  1584.             throw new DriverConfigurazioneException("Username non definito");
  1585.         }
  1586.         if(aPassword==null){
  1587.             throw new DriverConfigurazioneException("Password non definita");
  1588.         }
  1589.        
  1590.         boolean testInChiaro = false;
  1591.         ICrypt crypt = null;
  1592.         if(config==null || config.isBackwardCompatibility()) {
  1593.             testInChiaro = true;
  1594.         }
  1595.         if(config!=null) {
  1596.             try {
  1597.                 crypt = CryptFactory.getCrypt(this.log, config);
  1598.             }catch(Exception e) {
  1599.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  1600.             }
  1601.         }
  1602.                
  1603.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1604.             Soggetto soggettoSearch = this.openspcoop.getSoggetto(i);
  1605.             for(int j=0; j<soggettoSearch.sizeServizioApplicativoList(); j++){
  1606.                 ServizioApplicativo sa = soggettoSearch.getServizioApplicativo(j);
  1607.                 if(sa.getInvocazionePorta()!=null){
  1608.                     for(int z=0;z<sa.getInvocazionePorta().sizeCredenzialiList();z++){
  1609.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo()!=null &&
  1610.                                 CostantiConfigurazione.CREDENZIALE_BASIC.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo())){
  1611.                             if( (aUser.equals(sa.getInvocazionePorta().getCredenziali(z).getUser())) ){
  1612.                                
  1613.                                 String passwordSaved = sa.getInvocazionePorta().getCredenziali(z).getPassword();
  1614.                                
  1615.                                 boolean found = false;
  1616.                                 if(testInChiaro) {
  1617.                                     found = aPassword.equals(passwordSaved);
  1618.                                 }
  1619.                                 if(!found && crypt!=null) {
  1620.                                     found = crypt.check(aPassword, passwordSaved);
  1621.                                 }
  1622.                                
  1623.                                 if( found ) {
  1624.                                     sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1625.                                     sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1626.                                     return sa;
  1627.                                 }
  1628.                             }
  1629.                         }
  1630.                     }
  1631.                 }
  1632.             }
  1633.         }
  1634.        
  1635.         throw new DriverConfigurazioneNotFound("Servizio Applicativo cercato con credenziali basic non trovato");
  1636.     }
  1637.    
  1638.     @Override
  1639.     public ServizioApplicativo getServizioApplicativoByCredenzialiApiKey(String aUser,String aPassword, boolean appId, CryptConfig config) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1640.        
  1641.         if(aUser==null){
  1642.             throw new DriverConfigurazioneException("Username non definito");
  1643.         }
  1644.         if(aPassword==null){
  1645.             throw new DriverConfigurazioneException("Password non definita");
  1646.         }
  1647.        
  1648.         boolean testInChiaro = false;
  1649.         ICrypt crypt = null;
  1650.         if(config!=null) {
  1651.             try {
  1652.                 crypt = CryptFactory.getCrypt(this.log, config);
  1653.             }catch(Exception e) {
  1654.                 throw new DriverConfigurazioneException(e.getMessage(),e);
  1655.             }
  1656.         }
  1657.         else {
  1658.             testInChiaro = true;
  1659.         }
  1660.                
  1661.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1662.             Soggetto soggettoSearch = this.openspcoop.getSoggetto(i);
  1663.             for(int j=0; j<soggettoSearch.sizeServizioApplicativoList(); j++){
  1664.                 ServizioApplicativo sa = soggettoSearch.getServizioApplicativo(j);
  1665.                 if(sa.getInvocazionePorta()!=null){
  1666.                     for(int z=0;z<sa.getInvocazionePorta().sizeCredenzialiList();z++){
  1667.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo()!=null &&
  1668.                                 CostantiConfigurazione.CREDENZIALE_APIKEY.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo())){
  1669.                             if( (aUser.equals(sa.getInvocazionePorta().getCredenziali(z).getUser())) ){
  1670.                                
  1671.                                 if(appId) {
  1672.                                     if(!sa.getInvocazionePorta().getCredenziali(z).isAppId()) {
  1673.                                         continue;
  1674.                                     }
  1675.                                 }
  1676.                                 else {
  1677.                                     if(sa.getInvocazionePorta().getCredenziali(z).isAppId()) {
  1678.                                         continue;
  1679.                                     }
  1680.                                 }
  1681.                                
  1682.                                 String passwordSaved = sa.getInvocazionePorta().getCredenziali(z).getPassword();
  1683.                                
  1684.                                 boolean found = false;
  1685.                                 if(testInChiaro) {
  1686.                                     found = aPassword.equals(passwordSaved);
  1687.                                 }
  1688.                                 if(!found && crypt!=null) {
  1689.                                     found = crypt.check(aPassword, passwordSaved);
  1690.                                 }
  1691.                                
  1692.                                 if( found ) {
  1693.                                     sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1694.                                     sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1695.                                     return sa;
  1696.                                 }
  1697.                             }
  1698.                         }
  1699.                     }
  1700.                 }
  1701.             }
  1702.         }
  1703.        
  1704.         throw new DriverConfigurazioneNotFound("Servizio Applicativo cercato con credenziali basic non trovato");
  1705.     }
  1706.    
  1707.     @Override
  1708.     public ServizioApplicativo getServizioApplicativoByCredenzialiToken(String tokenPolicy, String tokenClientId, boolean tokenWithHttpsEnabled) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1709.         if(tokenPolicy==null){
  1710.             throw new DriverConfigurazioneException("TokenPolicy non definita");
  1711.         }
  1712.         if(tokenClientId==null){
  1713.             throw new DriverConfigurazioneException("TokenClientId non definito");
  1714.         }
  1715.        
  1716.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1717.             Soggetto soggettoSearch = this.openspcoop.getSoggetto(i);
  1718.             for(int j=0; j<soggettoSearch.sizeServizioApplicativoList(); j++){
  1719.                 ServizioApplicativo sa = soggettoSearch.getServizioApplicativo(j);
  1720.                 if(sa.getInvocazionePorta()!=null){
  1721.                     for(int z=0;z<sa.getInvocazionePorta().sizeCredenzialiList();z++){
  1722.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo()!=null &&
  1723.                                 (
  1724.                                         CostantiConfigurazione.CREDENZIALE_TOKEN.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo())
  1725.                                         ||
  1726.                                         (tokenWithHttpsEnabled && CostantiConfigurazione.CREDENZIALE_SSL.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo()))
  1727.                                 )
  1728.                                 ){
  1729.                             if( tokenClientId.equals(sa.getInvocazionePorta().getCredenziali(z).getUser()) &&
  1730.                                     tokenPolicy.equals(sa.getInvocazionePorta().getCredenziali(z).getTokenPolicy())){
  1731.                                 sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1732.                                 sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1733.                                 return sa;
  1734.                             }
  1735.                         }
  1736.                     }
  1737.                 }
  1738.             }
  1739.         }
  1740.        
  1741.         throw new DriverConfigurazioneNotFound("Servizio Applicativo cercato con credenziali principal non trovato");
  1742.     }
  1743.    
  1744.     @Override
  1745.     public ServizioApplicativo getServizioApplicativoByCredenzialiSsl(String aSubject, String aIssuer) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1746.        
  1747.         if(aSubject==null){
  1748.             throw new DriverConfigurazioneException("Subject non definito");
  1749.         }
  1750.        
  1751.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1752.             Soggetto soggettoSearch = this.openspcoop.getSoggetto(i);
  1753.             for(int j=0; j<soggettoSearch.sizeServizioApplicativoList(); j++){
  1754.                 ServizioApplicativo sa = soggettoSearch.getServizioApplicativo(j);
  1755.                 if(sa.getInvocazionePorta()!=null){
  1756.                     for(int z=0;z<sa.getInvocazionePorta().sizeCredenzialiList();z++){
  1757.                         //  Default: SSL
  1758.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo() == null){
  1759.                             try{
  1760.                                 if(sa.getInvocazionePorta().getCredenziali(z).getSubject()==null) {
  1761.                                     continue;
  1762.                                 }
  1763.                                 boolean subjectValid = CertificateUtils.sslVerify(sa.getInvocazionePorta().getCredenziali(z).getSubject(), aSubject, PrincipalType.SUBJECT, this.log);
  1764.                                 boolean issuerValid = true;
  1765.                                 if(aIssuer!=null) {
  1766.                                     if(sa.getInvocazionePorta().getCredenziali(z).getIssuer()==null) {
  1767.                                         issuerValid = false;
  1768.                                     }else {
  1769.                                         issuerValid = CertificateUtils.sslVerify(sa.getInvocazionePorta().getCredenziali(z).getIssuer(), aIssuer, PrincipalType.ISSUER, this.log);
  1770.                                     }
  1771.                                 }
  1772.                                 else {
  1773.                                     issuerValid = (sa.getInvocazionePorta().getCredenziali(z).getIssuer() == null);
  1774.                                 }
  1775.                                 if(subjectValid && issuerValid){
  1776.                                     sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1777.                                     sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1778.                                     return sa;
  1779.                                 }  
  1780.                             }catch(Exception e){
  1781.                                 throw new DriverConfigurazioneException(e.getMessage(),e);
  1782.                             }
  1783.                         }
  1784.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo()!=null &&
  1785.                                 CostantiConfigurazione.CREDENZIALE_SSL.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo())){
  1786.                             try{
  1787.                                 if(sa.getInvocazionePorta().getCredenziali(z).getSubject()==null) {
  1788.                                     continue;
  1789.                                 }
  1790.                                 boolean subjectValid = CertificateUtils.sslVerify(sa.getInvocazionePorta().getCredenziali(z).getSubject(), aSubject, PrincipalType.SUBJECT, this.log);
  1791.                                 boolean issuerValid = true;
  1792.                                 if(aIssuer!=null) {
  1793.                                     if(sa.getInvocazionePorta().getCredenziali(z).getIssuer()==null) {
  1794.                                         issuerValid = false;
  1795.                                     }else {
  1796.                                         issuerValid = CertificateUtils.sslVerify(sa.getInvocazionePorta().getCredenziali(z).getIssuer(), aIssuer, PrincipalType.ISSUER, this.log);
  1797.                                     }
  1798.                                 }
  1799.                                 else {
  1800.                                     issuerValid = (sa.getInvocazionePorta().getCredenziali(z).getIssuer() == null);
  1801.                                 }
  1802.                                 if(subjectValid && issuerValid){
  1803.                                     sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1804.                                     sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1805.                                     return sa;
  1806.                                 }  
  1807.                             }catch(Exception e){
  1808.                                 throw new DriverConfigurazioneException(e.getMessage(),e);
  1809.                             }
  1810.                         }
  1811.                     }
  1812.                 }
  1813.             }
  1814.         }
  1815.        
  1816.         throw new DriverConfigurazioneNotFound("Servizio Applicativo cercato con credenziali ssl non trovato");
  1817.     }
  1818.    
  1819.     @Override
  1820.     public ServizioApplicativo getServizioApplicativoByCredenzialiSsl(CertificateInfo aCertificate, boolean aStrictVerifier) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1821.        
  1822.         if(aCertificate==null){
  1823.             throw new DriverConfigurazioneException("Certificato non definito");
  1824.         }
  1825.        
  1826.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1827.             Soggetto soggettoSearch = this.openspcoop.getSoggetto(i);
  1828.             for(int j=0; j<soggettoSearch.sizeServizioApplicativoList(); j++){
  1829.                 ServizioApplicativo sa = soggettoSearch.getServizioApplicativo(j);
  1830.                 if(sa.getInvocazionePorta()!=null){
  1831.                     for(int z=0;z<sa.getInvocazionePorta().sizeCredenzialiList();z++){
  1832.                         //  Default: SSL
  1833.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo() == null){
  1834.                             try{
  1835.                                 if(sa.getInvocazionePorta().getCredenziali(z).getCertificate()==null) {
  1836.                                     continue;
  1837.                                 }
  1838.                                 if(aStrictVerifier != sa.getInvocazionePorta().getCredenziali(z).isCertificateStrictVerification()) {
  1839.                                     continue;
  1840.                                 }
  1841.                                 String cnSubject = aCertificate.getSubject().getCN();
  1842.                                 if(cnSubject.equals(sa.getInvocazionePorta().getCredenziali(z).getCnSubject())) {
  1843.                                     Certificate certificato = ArchiveLoader.load(ArchiveType.CER, sa.getInvocazionePorta().getCredenziali(z).getCertificate(), 0, null);
  1844.                                     if(aCertificate.equals(certificato.getCertificate(),aStrictVerifier)) {
  1845.                                         sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1846.                                         sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1847.                                         return sa;
  1848.                                     }
  1849.                                 }
  1850.                             }catch(Exception e){
  1851.                                 throw new DriverConfigurazioneException(e.getMessage(),e);
  1852.                             }
  1853.                         }
  1854.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo()!=null &&
  1855.                                 CostantiConfigurazione.CREDENZIALE_SSL.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo())){
  1856.                             try{
  1857.                                 if(sa.getInvocazionePorta().getCredenziali(z).getCertificate()==null) {
  1858.                                     continue;
  1859.                                 }
  1860.                                 if(aStrictVerifier != sa.getInvocazionePorta().getCredenziali(z).isCertificateStrictVerification()) {
  1861.                                     continue;
  1862.                                 }
  1863.                                 String cnSubject = aCertificate.getSubject().getCN();
  1864.                                 if(cnSubject.equals(sa.getInvocazionePorta().getCredenziali(z).getCnSubject())) {
  1865.                                     Certificate certificato = ArchiveLoader.load(ArchiveType.CER, sa.getInvocazionePorta().getCredenziali(z).getCertificate(), 0, null);
  1866.                                     if(aCertificate.equals(certificato.getCertificate(),aStrictVerifier)) {
  1867.                                         sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1868.                                         sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1869.                                         return sa;
  1870.                                     }  
  1871.                                 }
  1872.                             }catch(Exception e){
  1873.                                 throw new DriverConfigurazioneException(e.getMessage(),e);
  1874.                             }
  1875.                         }
  1876.                     }
  1877.                 }
  1878.             }
  1879.         }
  1880.        
  1881.         throw new DriverConfigurazioneNotFound("Servizio Applicativo cercato con credenziali ssl non trovato");
  1882.        
  1883.     }
  1884.    
  1885.     @Override
  1886.     public ServizioApplicativo getServizioApplicativoByCredenzialiPrincipal(String aUserPrincipal) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  1887.        
  1888.         if(aUserPrincipal==null){
  1889.             throw new DriverConfigurazioneException("Principal non definito");
  1890.         }
  1891.        
  1892.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1893.             Soggetto soggettoSearch = this.openspcoop.getSoggetto(i);
  1894.             for(int j=0; j<soggettoSearch.sizeServizioApplicativoList(); j++){
  1895.                 ServizioApplicativo sa = soggettoSearch.getServizioApplicativo(j);
  1896.                 if(sa.getInvocazionePorta()!=null){
  1897.                     for(int z=0;z<sa.getInvocazionePorta().sizeCredenzialiList();z++){
  1898.                         if(sa.getInvocazionePorta().getCredenziali(z).getTipo()!=null &&
  1899.                                 CostantiConfigurazione.CREDENZIALE_PRINCIPAL.equals(sa.getInvocazionePorta().getCredenziali(z).getTipo())){
  1900.                             if( aUserPrincipal.equals(sa.getInvocazionePorta().getCredenziali(z).getUser()) ){
  1901.                                 sa.setTipoSoggettoProprietario(soggettoSearch.getTipo());
  1902.                                 sa.setNomeSoggettoProprietario(soggettoSearch.getNome());
  1903.                                 return sa;
  1904.                             }
  1905.                         }
  1906.                     }
  1907.                 }
  1908.             }
  1909.         }
  1910.        
  1911.         throw new DriverConfigurazioneNotFound("Servizio Applicativo cercato con credenziali principal non trovato");
  1912.     }

  1913.    
  1914.     /**
  1915.      * Restituisce la lista degli identificativi dei servizi applicativi
  1916.      *
  1917.      * @param filtroRicerca
  1918.      * @return lista degli identificativi dei servizi applicativi
  1919.      * @throws DriverConfigurazioneException
  1920.      * @throws DriverConfigurazioneNotFound
  1921.      */
  1922.     @Override
  1923.     public List<IDServizioApplicativo> getAllIdServiziApplicativi(
  1924.             FiltroRicercaServiziApplicativi filtroRicerca) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  1925.        
  1926.         refreshConfigurazioneXML();
  1927.        
  1928.         List<IDServizioApplicativo> listIDServiziApplicativi = new ArrayList<IDServizioApplicativo>();
  1929.        
  1930.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  1931.             Soggetto soggetto = this.openspcoop.getSoggetto(i);
  1932.             for (int j = 0; j < soggetto.sizeServizioApplicativoList(); j++) {
  1933.                 ServizioApplicativo sa = soggetto.getServizioApplicativo(j);
  1934.                
  1935.                 String id = sa.getNome();
  1936.                
  1937.                 if(filtroRicerca!=null){
  1938.                     // Filtro By Data
  1939.                     if(filtroRicerca.getMinDate()!=null){
  1940.                         if(sa.getOraRegistrazione()==null){
  1941.                             this.log.debug("[getAllIdPorteApplicative](FiltroByMinDate) PortaApplicativa ["+id+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1942.                             continue;
  1943.                         }else if(sa.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1944.                             continue;
  1945.                         }
  1946.                     }
  1947.                     if(filtroRicerca.getMaxDate()!=null){
  1948.                         if(soggetto.getOraRegistrazione()==null){
  1949.                             this.log.debug("[getAllIdPorteApplicative](FiltroByMaxDate) PortaApplicativa ["+id+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1950.                             continue;
  1951.                         }else if(soggetto.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1952.                             continue;
  1953.                         }
  1954.                     }
  1955.                     // Filtro By Tipo e Nome
  1956.                     if(filtroRicerca.getTipoSoggetto()!=null){
  1957.                         if(soggetto.getTipo().equals(filtroRicerca.getTipoSoggetto()) == false){
  1958.                             continue;
  1959.                         }
  1960.                     }
  1961.                     if(filtroRicerca.getNomeSoggetto()!=null){
  1962.                         if(soggetto.getNome().equals(filtroRicerca.getNomeSoggetto()) == false){
  1963.                             continue;
  1964.                         }
  1965.                     }
  1966.                     // Filtro By Ruoli
  1967.                     if(filtroRicerca.getIdRuolo()!=null && filtroRicerca.getIdRuolo().getNome()!=null){
  1968.                         if(sa.getInvocazionePorta()==null){
  1969.                             continue;
  1970.                         }
  1971.                         if(sa.getInvocazionePorta().getRuoli()==null){
  1972.                             continue;
  1973.                         }
  1974.                         boolean contains = false;
  1975.                         for (int z = 0; z < sa.getInvocazionePorta().getRuoli().sizeRuoloList(); z++) {
  1976.                             if(filtroRicerca.getIdRuolo().getNome().equals(sa.getInvocazionePorta().getRuoli().getRuolo(z).getNome())){
  1977.                                 contains = true;
  1978.                                 break;
  1979.                             }
  1980.                         }
  1981.                         if(!contains){
  1982.                             continue;
  1983.                         }
  1984.                     }
  1985.                 }
  1986.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  1987.                 idSA.setNome(id);
  1988.                 idSA.setIdSoggettoProprietario(new IDSoggetto(soggetto.getTipo(), soggetto.getNome()));
  1989.                 listIDServiziApplicativi.add(idSA);
  1990.             }
  1991.         }
  1992.        
  1993.         if(listIDServiziApplicativi.size()<=0){
  1994.             if(filtroRicerca!=null)
  1995.                 throw new DriverConfigurazioneNotFound("ServiziApplicativi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1996.             else
  1997.                 throw new DriverConfigurazioneNotFound("ServiziApplicativi non trovati");
  1998.         }
  1999.        
  2000.         return listIDServiziApplicativi;
  2001.        
  2002.     }
  2003.    
  2004.     @Override
  2005.     public List<IDConnettore> getConnettoriConsegnaNotifichePrioritarie(String queueName) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2006.    
  2007.         refreshConfigurazioneXML();
  2008.        
  2009.         List<IDConnettore> listIDServiziApplicativi = new ArrayList<IDConnettore>();
  2010.        
  2011.         for(int i=0; i<this.openspcoop.sizeSoggettoList(); i++){
  2012.             Soggetto soggetto = this.openspcoop.getSoggetto(i);
  2013.             for (int j = 0; j < soggetto.sizePortaApplicativaList(); j++) {
  2014.                 PortaApplicativa pa = soggetto.getPortaApplicativa(j);
  2015.                 if(pa.sizeServizioApplicativoList()>0) {
  2016.                     for (int k = 0; k <pa.sizeServizioApplicativoList(); k++) {
  2017.                         PortaApplicativaServizioApplicativo pasa = pa.getServizioApplicativo(k);
  2018.                         if(pasa.getDatiConnettore()!=null && pasa.getDatiConnettore().isPrioritaMax()) {
  2019.                             if(queueName!=null) {
  2020.                                 String coda = pasa.getDatiConnettore().getCoda();
  2021.                                 if(coda==null) {
  2022.                                     coda = CostantiConfigurazione.CODA_DEFAULT;
  2023.                                 }
  2024.                                 if(!queueName.equals(coda)){
  2025.                                     continue;
  2026.                                 }
  2027.                             }
  2028.                             IDConnettore idSA = new IDConnettore();
  2029.                             idSA.setNome(pasa.getNome());
  2030.                             idSA.setIdSoggettoProprietario(new IDSoggetto(soggetto.getTipo(), soggetto.getNome()));
  2031.                             idSA.setNomeConnettore(pasa.getDatiConnettore().getNome());
  2032.                             if(idSA.getNomeConnettore()==null) {
  2033.                                 idSA.setNomeConnettore(CostantiConfigurazione.NOME_CONNETTORE_DEFAULT);
  2034.                             }
  2035.                             listIDServiziApplicativi.add(idSA);
  2036.                         }
  2037.                     }
  2038.                 }
  2039.             }
  2040.         }
  2041.        
  2042.         if(listIDServiziApplicativi.size()<=0){
  2043.             if(queueName!=null)
  2044.                 throw new DriverConfigurazioneNotFound("ServiziApplicativi non trovati per la coda '"+queueName+"'");
  2045.             else
  2046.                 throw new DriverConfigurazioneNotFound("ServiziApplicativi non trovati");
  2047.         }
  2048.        
  2049.         return listIDServiziApplicativi;
  2050.     }
  2051.    
  2052.    
  2053.    
  2054.    
  2055.    
  2056.    
  2057.    

  2058.     // CONFIGURAZIONE

  2059.     /**
  2060.      * Restituisce la RoutingTable definita nella Porta di Dominio
  2061.      *
  2062.      * @return RoutingTable
  2063.      *
  2064.      */
  2065.     @Override
  2066.     public RoutingTable getRoutingTable() throws DriverConfigurazioneException{

  2067.         refreshConfigurazioneXML();

  2068.         RoutingTable r = null;
  2069.         if(this.openspcoop.getConfigurazione().getRoutingTable()==null){
  2070.             r = new RoutingTable();
  2071.             r.setAbilitata(false);
  2072.         }else{
  2073.             r =  this.openspcoop.getConfigurazione().getRoutingTable();
  2074.             r.setAbilitata(true);
  2075.         }
  2076.        
  2077.         return r;
  2078.     }

  2079.     /**
  2080.      * Restituisce l'accesso al registro definito nella Porta di Dominio
  2081.      *
  2082.      * @return AccessoRegistro
  2083.      *
  2084.      */
  2085.     @Override
  2086.     public AccessoRegistro getAccessoRegistro() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2087.         refreshConfigurazioneXML();

  2088.         if(this.openspcoop.getConfigurazione().getAccessoRegistro()==null)
  2089.             throw new DriverConfigurazioneNotFound("[getAccessoRegistro] Informazioni di accesso al RegistroServizi non trovate");
  2090.        
  2091.         return this.openspcoop.getConfigurazione().getAccessoRegistro();
  2092.     }
  2093.    
  2094.     /**
  2095.      * Restituisce l'accesso alla configurazione definito nella Porta di Dominio
  2096.      *
  2097.      * @return AccessoConfigurazione
  2098.      *
  2099.      */
  2100.     @Override
  2101.     public AccessoConfigurazione getAccessoConfigurazione() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2102.        
  2103.         refreshConfigurazioneXML();

  2104.         if(this.openspcoop.getConfigurazione().getAccessoConfigurazione()==null)
  2105.             throw new DriverConfigurazioneNotFound("[getAccessoConfigurazione] Informazioni di accesso alla configurazione non trovate");
  2106.        
  2107.         return this.openspcoop.getConfigurazione().getAccessoConfigurazione();
  2108.     }
  2109.    
  2110.     /**
  2111.      * Restituisce l'accesso ai dati di autorizzazione definiti nella Porta di Dominio
  2112.      *
  2113.      * @return AccessoDatiAutorizzazione
  2114.      *
  2115.      */
  2116.     @Override
  2117.     public AccessoDatiAutorizzazione getAccessoDatiAutorizzazione() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2118.        
  2119.         refreshConfigurazioneXML();

  2120.         if(this.openspcoop.getConfigurazione().getAccessoDatiAutorizzazione()==null)
  2121.             throw new DriverConfigurazioneNotFound("[getAccessoDatiAutorizzazione] Informazioni di accesso ai dati di autorizzazione non trovate");
  2122.        
  2123.         return this.openspcoop.getConfigurazione().getAccessoDatiAutorizzazione();
  2124.        
  2125.     }
  2126.    
  2127.     /**
  2128.      * Restituisce l'accesso ai dati di autenticazione definiti nella Porta di Dominio
  2129.      *
  2130.      * @return AccessoDatiAutenticazione
  2131.      *
  2132.      */
  2133.     @Override
  2134.     public AccessoDatiAutenticazione getAccessoDatiAutenticazione() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2135.        
  2136.         refreshConfigurazioneXML();

  2137.         if(this.openspcoop.getConfigurazione().getAccessoDatiAutenticazione()==null)
  2138.             throw new DriverConfigurazioneNotFound("[getAccessoDatiAutenticazione] Informazioni di accesso ai dati di autenticazione non trovate");
  2139.        
  2140.         return this.openspcoop.getConfigurazione().getAccessoDatiAutenticazione();
  2141.        
  2142.     }

  2143.    
  2144.     /**
  2145.      * Restituisce l'accesso ai dati di gestione token
  2146.      *
  2147.      * @return AccessoDatiGestioneToken
  2148.      *
  2149.      */
  2150.     @Override
  2151.     public AccessoDatiGestioneToken getAccessoDatiGestioneToken() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2152.        
  2153.         refreshConfigurazioneXML();

  2154.         if(this.openspcoop.getConfigurazione().getAccessoDatiGestioneToken()==null)
  2155.             throw new DriverConfigurazioneNotFound("[getAccessoDatiGestioneToken] Informazioni di accesso ai dati di gestione dei token non trovati");
  2156.        
  2157.         return this.openspcoop.getConfigurazione().getAccessoDatiGestioneToken();
  2158.        
  2159.     }
  2160.    
  2161.     /**
  2162.      * Restituisce l'accesso ai dati recuperati da attribute authority
  2163.      *
  2164.      * @return AccessoDatiAttributeAuthority
  2165.      *
  2166.      */
  2167.     @Override
  2168.     public AccessoDatiAttributeAuthority getAccessoDatiAttributeAuthority() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2169.        
  2170.         refreshConfigurazioneXML();

  2171.         if(this.openspcoop.getConfigurazione().getAccessoDatiAttributeAuthority()==null)
  2172.             throw new DriverConfigurazioneNotFound("[getAccessoDatiAttributeAuthority] Informazioni di accesso ai dati recuperati da Attribute Authority non trovati");
  2173.        
  2174.         return this.openspcoop.getConfigurazione().getAccessoDatiAttributeAuthority();
  2175.        
  2176.     }
  2177.    
  2178.     /**
  2179.      * Restituisce l'accesso ai dati per la gestione dei keystore
  2180.      *
  2181.      * @return AccessoDatiKeystore
  2182.      *
  2183.      */
  2184.     @Override
  2185.     public AccessoDatiKeystore getAccessoDatiKeystore() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2186.    
  2187.         refreshConfigurazioneXML();

  2188.         if(this.openspcoop.getConfigurazione().getAccessoDatiKeystore()==null)
  2189.             throw new DriverConfigurazioneNotFound("[getAccessoDatiKeystore] Informazioni di accesso ai dati per la gestione dei keystore non trovati");
  2190.        
  2191.         return this.openspcoop.getConfigurazione().getAccessoDatiKeystore();
  2192.        
  2193.     }
  2194.    
  2195.     /**
  2196.      * Restituisce l'accesso ai dati per la gestione delle richieste
  2197.      *
  2198.      * @return AccessoDatiRichieste
  2199.      *
  2200.      */
  2201.     @Override
  2202.     public AccessoDatiRichieste getAccessoDatiRichieste() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2203.    
  2204.         refreshConfigurazioneXML();

  2205.         if(this.openspcoop.getConfigurazione().getAccessoDatiRichieste()==null)
  2206.             throw new DriverConfigurazioneNotFound("[getAccessoDatiRichieste] Informazioni di accesso ai dati per la gestione delle richieste non trovati");
  2207.        
  2208.         return this.openspcoop.getConfigurazione().getAccessoDatiRichieste();
  2209.        
  2210.     }
  2211.    
  2212.     /**
  2213.      * Restituisce l'accesso ai dati per la gestione della consegna agli applicativi
  2214.      *
  2215.      * @return AccessoDatiKeystore
  2216.      *
  2217.      */
  2218.     @Override
  2219.     public AccessoDatiConsegnaApplicativi getAccessoDatiConsegnaApplicativi() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2220.    
  2221.         refreshConfigurazioneXML();

  2222.         if(this.openspcoop.getConfigurazione().getAccessoDatiConsegnaApplicativi()==null)
  2223.             throw new DriverConfigurazioneNotFound("[getAccessoDatiKeystore] Informazioni di accesso ai dati per la gestione della consegna agli applicativi non trovati");
  2224.        
  2225.         return this.openspcoop.getConfigurazione().getAccessoDatiConsegnaApplicativi();
  2226.        
  2227.     }
  2228.    
  2229.    
  2230.     /**
  2231.      * Restituisce la gestione dell'errore di default definita nella Porta di Dominio per il componente di cooperazione
  2232.      *
  2233.      * @return La gestione dell'errore
  2234.      *
  2235.      */
  2236.     @Override
  2237.     public GestioneErrore getGestioneErroreComponenteCooperazione() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2238.        
  2239.         refreshConfigurazioneXML();
  2240.        
  2241.         if(this.openspcoop.getConfigurazione()==null)
  2242.             throw new DriverConfigurazioneNotFound("[getGestioneErroreComponenteCooperazione] Configurazione non trovata");
  2243.         if(this.openspcoop.getConfigurazione().getGestioneErrore()==null)
  2244.             throw new DriverConfigurazioneNotFound("[getGestioneErroreComponenteCooperazione] Informazioni per la gestione dell'errore non trovate");
  2245.         if(this.openspcoop.getConfigurazione().getGestioneErrore().getComponenteCooperazione()==null)
  2246.             throw new DriverConfigurazioneNotFound("[getGestioneErroreComponenteCooperazione] Informazioni per la gestione dell'errore per il componente di cooperazione non trovate");
  2247.    
  2248.         return this.openspcoop.getConfigurazione().getGestioneErrore().getComponenteCooperazione();
  2249.     }
  2250.    
  2251.     /**
  2252.      * Restituisce la gestione dell'errore di default definita nella Porta di Dominio per il componente di integrazione
  2253.      *
  2254.      * @return La gestione dell'errore
  2255.      *
  2256.      */
  2257.     @Override
  2258.     public GestioneErrore getGestioneErroreComponenteIntegrazione() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2259.        
  2260.         refreshConfigurazioneXML();
  2261.        
  2262.         if(this.openspcoop.getConfigurazione()==null)
  2263.             throw new DriverConfigurazioneNotFound("[getGestioneErroreComponenteIntegrazione] Configurazione non trovata");
  2264.         if(this.openspcoop.getConfigurazione().getGestioneErrore()==null)
  2265.             throw new DriverConfigurazioneNotFound("[getGestioneErroreComponenteIntegrazione] Informazioni per la gestione dell'errore non trovate");
  2266.         if(this.openspcoop.getConfigurazione().getGestioneErrore().getComponenteIntegrazione()==null)
  2267.             throw new DriverConfigurazioneNotFound("[getGestioneErroreComponenteIntegrazione] Informazioni per la gestione dell'errore per il componente di cooperazione non trovate");
  2268.    
  2269.         return this.openspcoop.getConfigurazione().getGestioneErrore().getComponenteIntegrazione();
  2270.     }

  2271.     /**
  2272.      * Restituisce la servizio sui ServiziAttivi definiti nella Porta di Dominio
  2273.      *
  2274.      * @return ServiziAttivi
  2275.      *
  2276.      */
  2277.     @Override
  2278.     public StatoServiziPdd getStatoServiziPdD() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2279.        
  2280.         refreshConfigurazioneXML();
  2281.        
  2282.         if(this.openspcoop.getConfigurazione()==null)
  2283.             throw new DriverConfigurazioneNotFound("[getServiziAttiviPdD] Configurazione non trovata");
  2284.         if(this.openspcoop.getConfigurazione().getStatoServiziPdd()==null)
  2285.             throw new DriverConfigurazioneNotFound("[getServiziAttiviPdD] Configurazione servizi attivi sulla PdD non presente");
  2286.    
  2287.         return this.openspcoop.getConfigurazione().getStatoServiziPdd();
  2288.     }
  2289.    
  2290.     /**
  2291.      * Restituisce le proprieta' di sistema utilizzate dalla PdD
  2292.      *
  2293.      * @return proprieta' di sistema
  2294.      *
  2295.      */
  2296.     @Override
  2297.     public SystemProperties getSystemPropertiesPdD() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2298.        
  2299.         refreshConfigurazioneXML();
  2300.        
  2301.         if(this.openspcoop.getConfigurazione()==null)
  2302.             throw new DriverConfigurazioneNotFound("[getServiziAttiviPdD] Configurazione non trovata");
  2303.         if(this.openspcoop.getConfigurazione().getSystemProperties()==null)
  2304.             throw new DriverConfigurazioneNotFound("[getServiziAttiviPdD] Configurazione System Properties non presenti");
  2305.    
  2306.         return this.openspcoop.getConfigurazione().getSystemProperties();
  2307.        
  2308.     }
  2309.    
  2310.     /**
  2311.      * Restituisce i nomi delle proprieta' di sistema cifrate
  2312.      *
  2313.      * @return proprieta' di sistema
  2314.      *
  2315.      */
  2316.     @Override
  2317.     public List<String> getEncryptedSystemPropertiesPdD() throws DriverConfigurazioneException{
  2318.         return new ArrayList<>();
  2319.     }
  2320.    
  2321.     /**
  2322.      * Restituisce le proprieta' generiche utilizzate dalla PdD
  2323.      *
  2324.      * @return proprieta' generiche
  2325.      *
  2326.      */
  2327.     @Override
  2328.     public List<GenericProperties> getGenericProperties() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2329.        
  2330.         refreshConfigurazioneXML();
  2331.        
  2332.         if(this.openspcoop.getConfigurazione()==null)
  2333.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione non trovata");
  2334.         if(this.openspcoop.getConfigurazione().getGenericPropertiesList()==null || this.openspcoop.getConfigurazione().getGenericPropertiesList().size()<=0)
  2335.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione Generic Properties non presenti");
  2336.    
  2337.         return this.openspcoop.getConfigurazione().getGenericPropertiesList();
  2338.        
  2339.     }
  2340.    
  2341.     /**
  2342.      * Restituisce le proprieta' generiche di una tipologia utilizzate dalla PdD
  2343.      *
  2344.      * @return proprieta' generiche
  2345.      *
  2346.      */
  2347.     @Override
  2348.     public List<GenericProperties> getGenericProperties(String tipologia) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2349.         refreshConfigurazioneXML();
  2350.        
  2351.         if(this.openspcoop.getConfigurazione()==null)
  2352.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione non trovata");
  2353.         if(this.openspcoop.getConfigurazione().getGenericPropertiesList()==null || this.openspcoop.getConfigurazione().getGenericPropertiesList().size()<=0)
  2354.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione Generic Properties non presenti");
  2355.          
  2356.         List<GenericProperties> list = new ArrayList<>();
  2357.         for (GenericProperties genericProperties : this.openspcoop.getConfigurazione().getGenericPropertiesList()) {
  2358.             if(tipologia!=null && tipologia.equals(genericProperties.getTipologia())) {
  2359.                 list.add(genericProperties);
  2360.             }
  2361.         }
  2362.        
  2363.         if(list.isEmpty()) {
  2364.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione Generic Properties non presenti con tipologia '"+tipologia+"'");
  2365.         }
  2366.        
  2367.         return list;
  2368.     }
  2369.    
  2370.     @Override
  2371.     public GenericProperties getGenericProperties(String tipologia, String name) throws DriverConfigurazioneException,DriverConfigurazioneNotFound{
  2372.        
  2373.         refreshConfigurazioneXML();
  2374.        
  2375.         if(this.openspcoop.getConfigurazione()==null)
  2376.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione non trovata");
  2377.         if(this.openspcoop.getConfigurazione().getGenericPropertiesList()==null || this.openspcoop.getConfigurazione().getGenericPropertiesList().size()<=0)
  2378.             throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione Generic Properties non presenti");
  2379.          
  2380.         for (GenericProperties genericProperties : this.openspcoop.getConfigurazione().getGenericPropertiesList()) {
  2381.             if(tipologia!=null && tipologia.equals(genericProperties.getTipologia())) {
  2382.                 if(genericProperties.getNome().equals(name)) {
  2383.                     return genericProperties;
  2384.                 }
  2385.             }
  2386.         }
  2387.        
  2388.         throw new DriverConfigurazioneNotFound("[getGenericProperties] Configurazione Generic Properties non presenti con tipologia '"+tipologia+"' e nome '"+name+"'");
  2389.     }

  2390.     /**
  2391.      * Restituisce la configurazione dei plugins
  2392.      *
  2393.      * @return RegistroPlugins
  2394.      *
  2395.      */
  2396.     @Override
  2397.     public RegistroPlugins getRegistroPlugins() throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2398.         refreshConfigurazioneXML();

  2399.         RegistroPlugins registro = this.openspcoop.getConfigurazione().getRegistroPlugins();
  2400.         if(registro==null || registro.sizePluginList()<=0) {
  2401.             throw new DriverConfigurazioneNotFound("Nessun plugin registrato");
  2402.         }
  2403.        
  2404.         return registro;
  2405.     }
  2406.    

  2407.     @Override
  2408.     public CanaliConfigurazione getCanaliConfigurazione() throws DriverConfigurazioneException,DriverConfigurazioneNotFound{

  2409.         refreshConfigurazioneXML();
  2410.        
  2411.         CanaliConfigurazione c = this.openspcoop.getConfigurazione().getGestioneCanali();
  2412.         if(c==null) {
  2413.             c = new CanaliConfigurazione();
  2414.             c.setStato(StatoFunzionalita.DISABILITATO);
  2415.         }
  2416.         return c;
  2417.     }

  2418.     /**
  2419.      * Restituisce la configurazione del plugin
  2420.      *
  2421.      * @return RegistroPlugin
  2422.      *
  2423.      */
  2424.     @Override
  2425.     public RegistroPlugin getRegistroPlugin(String nome) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2426.         return getRegistroPlugin(nome, false);
  2427.     }
  2428.     @Override
  2429.     public RegistroPlugin getDatiRegistroPlugin(String nome) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2430.         return getRegistroPlugin(nome, true);
  2431.     }
  2432.     private RegistroPlugin getRegistroPlugin(String nome, boolean soloDati) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2433.         if(nome==null) {
  2434.             throw new DriverConfigurazioneException("Nome plugin non indicato");
  2435.         }
  2436.        
  2437.         refreshConfigurazioneXML();

  2438.         RegistroPlugins registro = this.openspcoop.getConfigurazione().getRegistroPlugins();
  2439.         if(registro==null || registro.sizePluginList()<=0) {
  2440.             throw new DriverConfigurazioneNotFound("Plugin '"+nome+"' non esistente");
  2441.         }
  2442.         for (int i = 0; i < registro.sizePluginList(); i++) {
  2443.             RegistroPlugin plug = registro.getPlugin(i);
  2444.             if(plug.getNome().equals(nome)) {
  2445.                 if(soloDati) {
  2446.                     RegistroPlugin plugCloned = (RegistroPlugin) plug.clone();
  2447.                     while(plugCloned.sizeArchivioList()>0) {
  2448.                         plugCloned.removeArchivio(0);
  2449.                     }
  2450.                 }
  2451.                 else {
  2452.                     return plug;
  2453.                 }
  2454.             }
  2455.         }
  2456.         throw new DriverConfigurazioneNotFound("Plugin '"+nome+"' non esistente");
  2457.     }
  2458.    
  2459.     @Override
  2460.     public RegistroPluginArchivio getRegistroPluginArchivio(String nomePlugin, String nome) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2461.        
  2462.         RegistroPlugin plug = this.getRegistroPlugin(nomePlugin);
  2463.        
  2464.         if(nome==null) {
  2465.             throw new DriverConfigurazioneException("Nome archivio non indicato");
  2466.         }
  2467.        
  2468.         for (int i = 0; i < plug.sizeArchivioList(); i++) {
  2469.             RegistroPluginArchivio plugArchivio = plug.getArchivio(i);
  2470.             if(plugArchivio.getNome().equals(nome)) {
  2471.                 return plugArchivio;
  2472.             }
  2473.         }
  2474.         throw new DriverConfigurazioneNotFound("Archivio '"+nome+"' non esistente nel plugin '"+nomePlugin+"'");
  2475.     }
  2476.    
  2477.     @Override
  2478.     public ConfigurazioneUrlInvocazioneRegola getUrlInvocazioneRegola(String nome) throws DriverConfigurazioneException, DriverConfigurazioneNotFound{
  2479.         if(nome==null) {
  2480.             throw new DriverConfigurazioneException("Nome regola non indicato");
  2481.         }
  2482.        
  2483.         refreshConfigurazioneXML();

  2484.         ConfigurazioneUrlInvocazione registro = this.openspcoop.getConfigurazione().getUrlInvocazione();
  2485.         if(registro==null || registro.sizeRegolaList()<=0) {
  2486.             throw new DriverConfigurazioneNotFound("Regola '"+nome+"' non esistente");
  2487.         }
  2488.         for (int i = 0; i < registro.sizeRegolaList(); i++) {
  2489.             ConfigurazioneUrlInvocazioneRegola regola = registro.getRegola(i);
  2490.             if(regola.getNome().equals(nome)) {
  2491.                 return regola;
  2492.             }
  2493.         }
  2494.         throw new DriverConfigurazioneNotFound("Regola '"+nome+"' non esistente");
  2495.     }
  2496.    
  2497.     /**
  2498.      * Restituisce la configurazione generale della Porta di Dominio
  2499.      *
  2500.      * @return Configurazione
  2501.      *
  2502.      */
  2503.     @SuppressWarnings("deprecation")
  2504.     @Override
  2505.     public Configurazione getConfigurazioneGenerale() throws DriverConfigurazioneException{

  2506.         refreshConfigurazioneXML();

  2507.         Configurazione config = this.openspcoop.getConfigurazione();
  2508.                
  2509.         // Backward Compatibility
  2510.         if(config!=null && config.getDump()!=null) {
  2511.             if(config.getDump().getConfigurazione()!=null) {
  2512.                 if(config.getDump().getConfigurazionePortaApplicativa()==null && config.getDump().getConfigurazionePortaDelegata()==null) {
  2513.                     config.getDump().setConfigurazionePortaApplicativa(config.getDump().getConfigurazione());
  2514.                     config.getDump().setConfigurazionePortaDelegata(config.getDump().getConfigurazione());
  2515.                 }
  2516.             }
  2517.         }
  2518.        
  2519.         return config;
  2520.     }


  2521.     /**
  2522.      * Metodo che verica la connessione ad una risorsa.
  2523.      * Se la connessione non e' presente, viene lanciata una eccezione che contiene il motivo della mancata connessione
  2524.      *
  2525.      * @throws DriverException eccezione che contiene il motivo della mancata connessione
  2526.      */
  2527.     @Override
  2528.     public void isAlive() throws CoreException{
  2529.        
  2530.         if(this.create==false)
  2531.             throw new CoreException("Driver non inizializzato");
  2532.        
  2533.         try{
  2534.             this.forzaRefreshConfigurazioneXML();
  2535.         }catch(Exception e){
  2536.             throw new CoreException("Connessione al registro non disponibile: "+e.getMessage(),e);
  2537.         }
  2538.     }




  2539.     @Override
  2540.     public Openspcoop2 getImmagineCompletaConfigurazionePdD() throws DriverConfigurazioneException{
  2541.        
  2542.         refreshConfigurazioneXML();    
  2543.         return this.openspcoop;
  2544.     }


  2545. }