DriverRegistroServiziXML.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.registry.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.List;

  29. import org.openspcoop2.core.commons.CoreException;
  30. import org.openspcoop2.core.commons.Filtri;
  31. import org.openspcoop2.core.commons.IMonitoraggioRisorsa;
  32. import org.openspcoop2.core.id.IDAccordo;
  33. import org.openspcoop2.core.id.IDAccordoAzione;
  34. import org.openspcoop2.core.id.IDAccordoCooperazione;
  35. import org.openspcoop2.core.id.IDFruizione;
  36. import org.openspcoop2.core.id.IDGruppo;
  37. import org.openspcoop2.core.id.IDPortType;
  38. import org.openspcoop2.core.id.IDPortTypeAzione;
  39. import org.openspcoop2.core.id.IDResource;
  40. import org.openspcoop2.core.id.IDRuolo;
  41. import org.openspcoop2.core.id.IDScope;
  42. import org.openspcoop2.core.id.IDServizio;
  43. import org.openspcoop2.core.id.IDSoggetto;
  44. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  45. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  46. import org.openspcoop2.core.registry.Azione;
  47. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  48. import org.openspcoop2.core.registry.Documento;
  49. import org.openspcoop2.core.registry.Fruitore;
  50. import org.openspcoop2.core.registry.Gruppo;
  51. import org.openspcoop2.core.registry.GruppoAccordo;
  52. import org.openspcoop2.core.registry.Operation;
  53. import org.openspcoop2.core.registry.PortType;
  54. import org.openspcoop2.core.registry.RegistroServizi;
  55. import org.openspcoop2.core.registry.Resource;
  56. import org.openspcoop2.core.registry.Ruolo;
  57. import org.openspcoop2.core.registry.Scope;
  58. import org.openspcoop2.core.registry.Soggetto;
  59. import org.openspcoop2.core.registry.constants.CredenzialeTipo;
  60. import org.openspcoop2.core.registry.constants.RuoloContesto;
  61. import org.openspcoop2.core.registry.constants.RuoloTipologia;
  62. import org.openspcoop2.core.registry.constants.ScopeContesto;
  63. import org.openspcoop2.core.registry.constants.TipiDocumentoLivelloServizio;
  64. import org.openspcoop2.core.registry.constants.TipiDocumentoSemiformale;
  65. import org.openspcoop2.core.registry.constants.TipiDocumentoSicurezza;
  66. import org.openspcoop2.core.registry.constants.TipologiaServizio;
  67. import org.openspcoop2.core.registry.driver.BeanUtilities;
  68. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  69. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  70. import org.openspcoop2.core.registry.driver.FiltroRicerca;
  71. import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
  72. import org.openspcoop2.core.registry.driver.FiltroRicercaAzioni;
  73. import org.openspcoop2.core.registry.driver.FiltroRicercaFruizioniServizio;
  74. import org.openspcoop2.core.registry.driver.FiltroRicercaGruppi;
  75. import org.openspcoop2.core.registry.driver.FiltroRicercaOperations;
  76. import org.openspcoop2.core.registry.driver.FiltroRicercaPortTypes;
  77. import org.openspcoop2.core.registry.driver.FiltroRicercaResources;
  78. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  79. import org.openspcoop2.core.registry.driver.FiltroRicercaScope;
  80. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  81. import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
  82. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  83. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  84. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  85. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  86. import org.openspcoop2.core.registry.driver.ProtocolPropertiesUtilities;
  87. import org.openspcoop2.core.registry.driver.ValidazioneSemantica;
  88. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  89. import org.openspcoop2.message.xml.ValidatoreXSD;
  90. import org.openspcoop2.utils.LoggerWrapperFactory;
  91. import org.openspcoop2.utils.certificate.ArchiveLoader;
  92. import org.openspcoop2.utils.certificate.ArchiveType;
  93. import org.openspcoop2.utils.certificate.Certificate;
  94. import org.openspcoop2.utils.certificate.CertificateInfo;
  95. import org.openspcoop2.utils.certificate.CertificateUtils;
  96. import org.openspcoop2.utils.certificate.PrincipalType;
  97. import org.openspcoop2.utils.crypt.CryptConfig;
  98. import org.openspcoop2.utils.crypt.CryptFactory;
  99. import org.openspcoop2.utils.crypt.ICrypt;
  100. import org.openspcoop2.utils.date.DateManager;
  101. import org.slf4j.Logger;


  102. /**
  103.  * Classe utilizzata per effettuare query ad un registro dei servizi openspcoop formato da un file xml.
  104.  * Le query riguardano specifiche
  105.  * proprieta' di servizi presenti all'interno del registro.
  106.  *
  107.  *
  108.  * @author Sandra Giangrandi (sandra@link.it)
  109.  * @author Poli Andrea (apoli@link.it)
  110.  * @author $Author$
  111.  * @version $Rev$, $Date$
  112.  */

  113. public class DriverRegistroServiziXML extends BeanUtilities
  114.     implements IDriverRegistroServiziGet,IMonitoraggioRisorsa {


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

  116.     /** Indicazione di una corretta creazione */
  117.     public boolean create = false;

  118.     /** Path dove si trova il file xml che realizza il Registro dei servizi OpenSPCoop. */
  119.     private String registry_path;
  120.     /** 'Root' del servizio dei registri OpenSPCoop. */
  121.     private org.openspcoop2.core.registry.RegistroServizi registro;
  122.     /** Validatore della configurazione */
  123.     private ValidatoreXSD validatoreRegistro = null;

  124.     // Factory
  125.     private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  126.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  127.     private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();


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

  137.     public org.openspcoop2.core.registry.RegistroServizi getRegistroXML() {
  138.         return this.registro;
  139.     }


  140.     /** ************* parsing XML ************** */
  141.     public void parsingXMLRegistroServizi() throws DriverRegistroServiziException{

  142.         /* --- Validazione XSD -- */
  143.         FileInputStream fXML = null;
  144.         try{
  145.             if(this.registry_path.startsWith("http://") || this.registry_path.startsWith("file://")){
  146.                 this.validatoreRegistro.valida(this.registry_path);  
  147.             }else{
  148.                 fXML = new FileInputStream(this.registry_path);
  149.                 this.validatoreRegistro.valida(fXML);
  150.             }
  151.         }catch (Exception e) {
  152.             throw new DriverRegistroServiziException("Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage());
  153.         }finally{
  154.             if(fXML!=null){
  155.                 try{
  156.                     fXML.close();
  157.                 }catch(Exception e){}
  158.             }
  159.         }

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



  198.         /* ---- Unmarshall del file di configurazione ---- */
  199.         try{  
  200.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  201.             this.registro = deserializer.readRegistroServizi(iStream);
  202.         } catch(Exception e) {
  203.             try{  
  204.                 if(iStream!=null)
  205.                     iStream.close();
  206.             } catch(Exception ef) {}
  207.             try{
  208.                 if(httpConn !=null)
  209.                     httpConn.disconnect();
  210.             } catch(Exception ef) {}
  211.             throw new DriverRegistroServiziException("Riscontrato errore durante l'unmarshall del file di configurazione: "+e.getMessage());
  212.         }

  213.         try{  
  214.             // Chiusura dello Stream
  215.             if(iStream!=null)
  216.                 iStream.close();
  217.         } catch(Exception e) {
  218.             throw new DriverRegistroServiziException("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 DriverRegistroServiziException("Riscontrato errore durante la chiusura dell'Input Stream (http): "+e.getMessage());
  226.         }
  227.     }




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

  229.     /**
  230.      * Costruttore.  Viene effettuato l'unmarshall del file di configurazione.
  231.      *
  232.      * @param path path dove si trova il file xml che realizza il Registro dei servizi OpenSPCoop.
  233.      *
  234.      */
  235.     public DriverRegistroServiziXML(String path,Logger alog){

  236.         if(alog==null)
  237.             this.log = LoggerWrapperFactory.getLogger(DriverRegistroServiziXML.class);
  238.         else
  239.             this.log = alog;

  240.         if(path == null){
  241.             this.log.error("DriverRegistroServizi: Riscontrato errore durante la creazione: url/path is null");
  242.             this.create=false;
  243.             return;
  244.         }
  245.         this.registry_path = path;

  246.         /* --- Costruzione Validatore XSD -- */
  247.         try{
  248.             this.validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverRegistroServiziXML.class.getResourceAsStream("/registroServizi.xsd"));
  249.         }catch (Exception e) {
  250.             this.log.error("Riscontrato errore durante l'inizializzazione dello schema del Registro dei Servizi di OpenSPCoop: "+e.getMessage());
  251.             return;
  252.         }

  253.         try{
  254.             this.parsingXMLRegistroServizi();
  255.         }catch(Exception e){
  256.             this.log.error("DriverRegistroServizi: "+e.getMessage());
  257.             this.create=false;
  258.             return;
  259.         }
  260.         this.create = true;
  261.     }

  262.     /**
  263.      * Metodo che si occupa di effettuare il refresh dell'unmarshall del file di configurazione
  264.      * se il file di configurazione e' stato modificato dall'ultimo unmarshall.
  265.      *
  266.      *
  267.      */
  268.     private void forzaRefreshRegistroServiziXML() throws DriverRegistroServiziException{
  269.         refreshRegistroServiziXML(true);
  270.     }
  271.     /**
  272.      * Metodo che si occupa di effettuare il refresh dell'unmarshall del file di configurazione
  273.      * se il file di configurazione e' stato modificato dall'ultimo unmarshall.
  274.      *
  275.      *
  276.      */
  277.     public void refreshRegistroServiziXML() throws DriverRegistroServiziException{
  278.         refreshRegistroServiziXML(false);
  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.     private synchronized void refreshRegistroServiziXML(boolean refreshForzato) throws DriverRegistroServiziException{

  287.         File fTest = null;
  288.         boolean refresh = refreshForzato;
  289.         if(refreshForzato==false){
  290.             if(this.registry_path.startsWith("http://") || this.registry_path.startsWith("file://")){
  291.                 long now = DateManager.getTimeMillis();
  292.                 if( (now-this.lastModified) > (DriverRegistroServiziXML.timeoutRefresh*1000) ){
  293.                     refresh=true;
  294.                 }
  295.             }else{
  296.                 fTest = new File(this.registry_path);
  297.                 if(this.lastModified != fTest.lastModified()){
  298.                     refresh = true;
  299.                 }
  300.             }
  301.         }
  302.         if(refresh){

  303.             try{
  304.                 this.parsingXMLRegistroServizi();
  305.             }catch(Exception e){
  306.                 this.log.error("DriverRegistroServizi refreshError: "+e.getMessage());
  307.                 throw new DriverRegistroServiziException("DriverRegistroServizi refreshError: "+e.getMessage());
  308.             }
  309.             if(this.registry_path.startsWith("http://")==false && this.registry_path.startsWith("file://")==false){
  310.                 this.log.warn("Reloaded registry context.");
  311.             }

  312.             if(this.validazioneSemanticaDuranteModificaXML){
  313.                 ValidazioneSemantica validazioneSemantica = new ValidazioneSemantica(this.registro,this.verificaURI,this.tipiConnettori,
  314.                         this.tipiSoggetti,this.tipiServiziSoap,this.tipiServiziRest,
  315.                         this.log);
  316.                 try{
  317.                     validazioneSemantica.validazioneSemantica(false);
  318.                 }catch(Exception e){
  319.                     this.log.error("DriverRegistroServizi refreshError(ValidazioneSemantica): "+e.getMessage());
  320.                     throw new DriverRegistroServiziException("DriverRegistroServizi refreshError(ValidazioneSemantica): "+e.getMessage());
  321.                 }              
  322.             }
  323.            
  324.         }

  325.         if(this.registro == null){
  326.             this.log.error("DriverRegistroServizi refreshError: istanza del registro is null dopo il refresh");
  327.             throw new DriverRegistroServiziException("DriverRegistroServizi refreshError: istanza del registro is null dopo il refresh");
  328.         }

  329.     }

  330.     private boolean validazioneSemanticaDuranteModificaXML = false;
  331.     private boolean verificaURI = false;
  332.     private String[] tipiConnettori = null;
  333.     private String[] tipiSoggetti = null;
  334.     private String[] tipiServiziSoap = null;
  335.     private String[] tipiServiziRest = null;
  336.     public void abilitazioneValidazioneSemanticaDuranteModificaXML(boolean verificaURI, String[] tipiConnettori,
  337.             String[] tipiSoggetti,String [] tipiServiziSoapValidi, String [] tipiServiziRestValidi){
  338.         this.validazioneSemanticaDuranteModificaXML = true;
  339.         this.verificaURI = verificaURI;
  340.         this.tipiConnettori = tipiConnettori;
  341.         this.tipiSoggetti = tipiSoggetti;
  342.         this.tipiServiziSoap = tipiServiziSoapValidi;
  343.         this.tipiServiziRest = tipiServiziRestValidi;
  344.     }
























  345.     /* ********  INTERFACCIA IDriverRegistroServiziGet ******** */

  346.    
  347.    
  348.     /* Accordi di Cooperazione */
  349.    
  350.     /**
  351.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoCooperazione},
  352.      * identificato grazie al parametro
  353.      * <var>nomeAccordo</var>
  354.      *
  355.      * @param idAccordo Identificativo dell'accordo di Cooperazione
  356.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.AccordoCooperazione}.
  357.      *
  358.      */
  359.     @Override
  360.     public org.openspcoop2.core.registry.AccordoCooperazione getAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  361.         if(idAccordo==null)
  362.             throw new DriverRegistroServiziException("[getAccordoCooperazione] Parametro Non Valido");
  363.         if(idAccordo.getNome()==null)
  364.             throw new DriverRegistroServiziException("[getAccordoCooperazione] Nome accordo non presente");
  365.        
  366.         refreshRegistroServiziXML();

  367.         for(int i=0; i<this.registro.sizeAccordoCooperazioneList(); i++){
  368.             org.openspcoop2.core.registry.AccordoCooperazione ac = this.registro.getAccordoCooperazione(i);
  369.             if (ac.getNome() != null) {
  370.                 if (ac.getNome().equals(idAccordo.getNome())) {
  371.                    
  372.                     // potenziale as, verifico versione
  373.                     if(idAccordo.getVersione()==null){
  374.                         if(ac.getVersione()!=null)
  375.                             continue;
  376.                     }else{
  377.                         if(idAccordo.getVersione().equals(ac.getVersione())==false)
  378.                             continue;
  379.                     }
  380.                    
  381.                     //read uriServiziComposti
  382.                     String uriAccordoCooperazione = this.idAccordoCooperazioneFactory.getUriFromAccordo(ac);
  383.                     for(int j=0; j<this.registro.sizeAccordoServizioParteComuneList(); j++){
  384.                         AccordoServizioParteComune as = this.registro.getAccordoServizioParteComune(j);
  385.                         if(as.getServizioComposto()!=null && uriAccordoCooperazione.equals(as.getServizioComposto().getAccordoCooperazione()) ){
  386.                             // Trovato as composto collegato all'accordo di cooperazione
  387.                             ac.addUriServiziComposti(this.idAccordoFactory.getUriFromAccordo(as));
  388.                         }
  389.                     }
  390.                    
  391.                     return ac;
  392.                 }
  393.             }
  394.         }

  395.         throw new DriverRegistroServiziNotFound("[getAccordoCooperazione] Accordo di Cooperazione non trovato");
  396.     }

  397.     /**
  398.      * Ritorna gli identificatori degli accordi che rispettano il parametro di ricerca
  399.      *
  400.      * @param filtroRicerca
  401.      * @return Una lista di ID degli accordi trovati
  402.      * @throws DriverRegistroServiziException
  403.      * @throws DriverRegistroServiziNotFound
  404.      */
  405.     @Override
  406.     public List<IDAccordoCooperazione> getAllIdAccordiCooperazione(FiltroRicercaAccordi filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  407.         try{

  408.             List<IDAccordoCooperazione> idAccordi = new ArrayList<IDAccordoCooperazione>();
  409.             for(int i=0; i<this.registro.sizeAccordoCooperazioneList(); i++){
  410.                 org.openspcoop2.core.registry.AccordoCooperazione ac = this.registro.getAccordoCooperazione(i);
  411.                 String uriAC = this.idAccordoCooperazioneFactory.getUriFromAccordo(ac);
  412.                
  413.                 if(filtroRicerca!=null){
  414.                     // Filtro By Data
  415.                     if(filtroRicerca.getMinDate()!=null){
  416.                         if(ac.getOraRegistrazione()==null){
  417.                             this.log.debug("[getAllIdAccordiCooperazione](FiltroByMinDate) Accordo di cooperazione ["+uriAC+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  418.                             continue;
  419.                         }else if(ac.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  420.                             continue;
  421.                         }
  422.                     }
  423.                     if(filtroRicerca.getMaxDate()!=null){
  424.                         if(ac.getOraRegistrazione()==null){
  425.                             this.log.debug("[getAllIdAccordiCooperazione](FiltroByMaxDate) Accordo di cooperazione ["+uriAC+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  426.                             continue;
  427.                         }else if(ac.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  428.                             continue;
  429.                         }
  430.                     }
  431.                     // Filtro By Nome
  432.                     if(filtroRicerca.getNomeAccordo()!=null){
  433.                         if(ac.getNome().equals(filtroRicerca.getNomeAccordo()) == false){
  434.                             continue;
  435.                         }
  436.                     }
  437.                     if(filtroRicerca.getVersione()!=null){
  438.                         if(ac.getVersione().equals(filtroRicerca.getVersione()) == false){
  439.                             continue;
  440.                         }
  441.                     }
  442.                     if(filtroRicerca.getTipoSoggettoReferente()!=null || filtroRicerca.getNomeSoggettoReferente()!=null){
  443.                         if(ac.getSoggettoReferente()==null)
  444.                             continue;
  445.                         if(filtroRicerca.getTipoSoggettoReferente()!=null){
  446.                             if(ac.getSoggettoReferente().getTipo().equals(filtroRicerca.getTipoSoggettoReferente()) == false){
  447.                                 continue;
  448.                             }
  449.                         }
  450.                         if(filtroRicerca.getNomeSoggettoReferente()!=null){
  451.                             if(ac.getSoggettoReferente().getNome().equals(filtroRicerca.getNomeSoggettoReferente()) == false){
  452.                                 continue;
  453.                             }
  454.                         }
  455.                     }
  456.                     // ProtocolProperties
  457.                     if(ProtocolPropertiesUtilities.isMatch(ac, filtroRicerca.getProtocolPropertiesAccordo())==false){
  458.                         continue;
  459.                     }
  460.                 }
  461.                 idAccordi.add(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(ac));
  462.             }
  463.             if(idAccordi.size()==0){
  464.                 if(filtroRicerca!=null){
  465.                     throw new DriverRegistroServiziNotFound("Accordi di cooperazione non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  466.                 }else{
  467.                     throw new DriverRegistroServiziNotFound("Accordi di cooperazione non trovati");
  468.                 }
  469.             }else{
  470.                 return idAccordi;
  471.             }
  472.         }catch(Exception e){
  473.             throw new DriverRegistroServiziException("getAllIdAccordiCooperazione error",e);
  474.         }
  475.     }
  476.    
  477.    
  478.    
  479.    
  480.    
  481.     /* Accordi di Servizio Parte Comune */
  482.    
  483.     /**
  484.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteComune},
  485.      * identificato grazie al parametro
  486.      * <var>nomeAccordo</var>
  487.      *
  488.      * @param idAccordo Identificativo dell'accordo di Servizio
  489.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteComune}.
  490.      *
  491.      */
  492.     @Override
  493.     public org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  494.         if(idAccordo==null)
  495.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro Non Valido");
  496.         if(idAccordo.getNome()==null)
  497.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Nome accordo non presente");
  498.         IDSoggetto soggettoReferenteCheck = idAccordo.getSoggettoReferente();
  499.         if(soggettoReferenteCheck!=null){
  500.             if(soggettoReferenteCheck.getTipo()==null){
  501.                 throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Tipo soggetto referente non presente?");
  502.             }
  503.             if(soggettoReferenteCheck.getNome()==null){
  504.                 throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Nome soggetto referente non presente?");
  505.             }
  506.         }

  507.         refreshRegistroServiziXML();

  508.         for(int i=0; i<this.registro.sizeAccordoServizioParteComuneList(); i++){
  509.             org.openspcoop2.core.registry.AccordoServizioParteComune as = this.registro.getAccordoServizioParteComune(i);
  510.             if (as.getNome() != null) {
  511.                 if (as.getNome().equals(idAccordo.getNome())) {
  512.                    
  513.                     // potenziale as, verifico soggetto referente e versione
  514.                     if(soggettoReferenteCheck==null){
  515.                         if(as.getSoggettoReferente()!=null)
  516.                             continue;
  517.                     }else{
  518.                         if(as.getSoggettoReferente()==null)
  519.                             continue;
  520.                         if(soggettoReferenteCheck.getTipo().equals(as.getSoggettoReferente().getTipo())==false)
  521.                             continue;
  522.                         if(soggettoReferenteCheck.getNome().equals(as.getSoggettoReferente().getNome())==false)
  523.                             continue;
  524.                     }
  525.                     if(idAccordo.getVersione()==null){
  526.                         if(as.getVersione()!=null)
  527.                             continue;
  528.                     }else{
  529.                         if(idAccordo.getVersione().equals(as.getVersione())==false)
  530.                             continue;
  531.                     }
  532.                    
  533.                     // nomiAzione setting
  534. //                  as.setNomiAzione(as.readNomiAzione());
  535.                     return as;
  536.                 }
  537.             }
  538.         }

  539.         throw new DriverRegistroServiziNotFound("[getAccordoServizioParteComune] Accordo di Servizio non trovato");
  540.     }

  541.     @Override
  542.     public List<IDAccordo> getAllIdAccordiServizioParteComune(FiltroRicercaAccordi filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  543.         List<IDAccordo> list = new ArrayList<IDAccordo>();
  544.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAccordiServizioParteComune", filtroRicerca, null, null, null, null, list);
  545.         return list;
  546.    
  547.     }
  548.    
  549.     @Override
  550.     public List<IDPortType> getAllIdPortType(FiltroRicercaPortTypes filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  551.        
  552.         List<IDPortType> list = new ArrayList<IDPortType>();
  553.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdPortType", filtroRicerca, filtroRicerca, null, null, null, list);
  554.         return list;
  555.        
  556.     }
  557.    
  558.     @Override
  559.     public List<IDPortTypeAzione> getAllIdAzionePortType(FiltroRicercaOperations filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  560.    
  561.         List<IDPortTypeAzione> list = new ArrayList<IDPortTypeAzione>();
  562.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAzionePortType", filtroRicerca, null, filtroRicerca, null, null, list);
  563.         return list;
  564.        
  565.     }
  566.    
  567.     @Override
  568.     public List<IDAccordoAzione> getAllIdAzioneAccordo(FiltroRicercaAzioni filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  569.        
  570.         List<IDAccordoAzione> list = new ArrayList<IDAccordoAzione>();
  571.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAzioneAccordo", filtroRicerca, null, null, filtroRicerca, null, list);
  572.         return list;
  573.        
  574.     }
  575.    
  576.     @Override
  577.     public List<IDResource> getAllIdResource(FiltroRicercaResources filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  578.        
  579.         List<IDResource> list = new ArrayList<IDResource>();
  580.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdResource", filtroRicerca, null, null, null, filtroRicerca, list);
  581.         return list;
  582.        
  583.     }
  584.    
  585.     @SuppressWarnings("unchecked")
  586.     public <T> void _fillAllIdAccordiServizioParteComuneEngine(String nomeMetodo,
  587.             FiltroRicercaAccordi filtroRicercaBase,
  588.             FiltroRicercaPortTypes filtroPT, FiltroRicercaOperations filtroOP, FiltroRicercaAzioni filtroAZ,
  589.             FiltroRicercaResources filtroResource,
  590.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  591.         try{

  592.             for(int i=0; i<this.registro.sizeAccordoServizioParteComuneList(); i++){
  593.                 org.openspcoop2.core.registry.AccordoServizioParteComune as = this.registro.getAccordoServizioParteComune(i);
  594.                 String uriAS = this.idAccordoFactory.getUriFromAccordo(as);
  595.                
  596.                 if(filtroRicercaBase!=null){
  597.                    
  598.                     List<String> tipoSoggettiProtocollo = null;
  599.                     try {
  600.                         if(filtroRicercaBase!=null && (filtroRicercaBase.getProtocollo()!=null || (filtroRicercaBase.getProtocolli()!=null && !filtroRicercaBase.getProtocolli().isEmpty()))){
  601.                             tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filtroRicercaBase.getProtocollo(), Filtri.convertToString(filtroRicercaBase.getProtocolli()));
  602.                         }
  603.                     }catch(Exception e) {
  604.                         throw new DriverRegistroServiziException(e.getMessage(),e);
  605.                     }
  606.                     boolean searchByTipoSoggetto = (tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0);
  607.                    
  608.                     // Filtro By Data
  609.                     if(filtroRicercaBase.getMinDate()!=null){
  610.                         if(as.getOraRegistrazione()==null){
  611.                             this.log.debug("["+nomeMetodo+"](FiltroByMinDate) Accordo di servizio ["+uriAS+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  612.                             continue;
  613.                         }else if(as.getOraRegistrazione().before(filtroRicercaBase.getMinDate())){
  614.                             continue;
  615.                         }
  616.                     }
  617.                     if(filtroRicercaBase.getMaxDate()!=null){
  618.                         if(as.getOraRegistrazione()==null){
  619.                             this.log.debug("["+nomeMetodo+"](FiltroByMaxDate) Accordo di servizio ["+uriAS+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  620.                             continue;
  621.                         }else if(as.getOraRegistrazione().after(filtroRicercaBase.getMaxDate())){
  622.                             continue;
  623.                         }
  624.                     }
  625.                     // Filtro By Nome
  626.                     if(filtroRicercaBase.getNomeAccordo()!=null){
  627.                         if(as.getNome().equals(filtroRicercaBase.getNomeAccordo()) == false){
  628.                             continue;
  629.                         }
  630.                     }
  631.                     if(filtroRicercaBase.getVersione()!=null){
  632.                         if(as.getVersione().equals(filtroRicercaBase.getVersione()) == false){
  633.                             continue;
  634.                         }
  635.                     }
  636.                     if(searchByTipoSoggetto || filtroRicercaBase.getTipoSoggettoReferente()!=null || filtroRicercaBase.getNomeSoggettoReferente()!=null){
  637.                         if(as.getSoggettoReferente()==null)
  638.                             continue;
  639.                         if(filtroRicercaBase.getTipoSoggettoReferente()!=null){
  640.                             if(as.getSoggettoReferente().getTipo().equals(filtroRicercaBase.getTipoSoggettoReferente()) == false){
  641.                                 continue;
  642.                             }
  643.                         }
  644.                         else if(searchByTipoSoggetto) {
  645.                             boolean find = false;
  646.                             for (String tipoSoggettoProtocollo : tipoSoggettiProtocollo) {
  647.                                 if(as.getSoggettoReferente().getTipo().equals(tipoSoggettoProtocollo)){
  648.                                     find = true;
  649.                                     break;
  650.                                 }
  651.                             }
  652.                             if(!find) {
  653.                                 continue;
  654.                             }
  655.                         }
  656.                         if(filtroRicercaBase.getNomeSoggettoReferente()!=null){
  657.                             if(as.getSoggettoReferente().getNome().equals(filtroRicercaBase.getNomeSoggettoReferente()) == false){
  658.                                 continue;
  659.                             }
  660.                         }
  661.                     }
  662.                     if(filtroRicercaBase.getServiceBinding()!=null){
  663.                         if(as.getServiceBinding().equals(filtroRicercaBase.getServiceBinding()) == false){
  664.                             continue;
  665.                         }
  666.                     }
  667.                    
  668.                     if(filtroRicercaBase.getIdGruppo()!=null && filtroRicercaBase.getIdGruppo().getNome()!=null){
  669.                         boolean found = false;
  670.                         if(as.getGruppi()!=null && as.getGruppi().sizeGruppoList()>0) {
  671.                             for (GruppoAccordo gruppo : as.getGruppi().getGruppoList()) {
  672.                                 if(gruppo.getNome().equals(filtroRicercaBase.getIdGruppo().getNome())) {
  673.                                     found = true;
  674.                                     break;
  675.                                 }
  676.                             }
  677.                         }
  678.                         if(!found) {
  679.                             continue;
  680.                         }
  681.                     }
  682.                    
  683.                     if(filtroRicercaBase.getIdAccordoCooperazione()!=null &&
  684.                             (filtroRicercaBase.getIdAccordoCooperazione().getNome()!=null ||
  685.                             filtroRicercaBase.getIdAccordoCooperazione().getVersione()!=null) ){
  686.                         if(as.getServizioComposto()==null){
  687.                             continue;
  688.                         }
  689.                         IDAccordoCooperazione idAC = this.idAccordoCooperazioneFactory.getIDAccordoFromUri(as.getServizioComposto().getAccordoCooperazione());
  690.                         if(filtroRicercaBase.getIdAccordoCooperazione().getNome()!=null){
  691.                             if(idAC.getNome().equals(filtroRicercaBase.getIdAccordoCooperazione().getNome())== false){
  692.                                 continue;
  693.                             }
  694.                         }
  695.                         if(filtroRicercaBase.getIdAccordoCooperazione().getVersione()!=null){
  696.                             if(idAC.getVersione().equals(filtroRicercaBase.getIdAccordoCooperazione().getVersione())== false){
  697.                                 continue;
  698.                             }
  699.                         }
  700.                     }
  701.                     else if(filtroRicercaBase.isServizioComposto()!=null){
  702.                         if(filtroRicercaBase.isServizioComposto()){
  703.                             if(as.getServizioComposto()==null){
  704.                                 continue;
  705.                             }
  706.                         }
  707.                         else {
  708.                             if(as.getServizioComposto()!=null){
  709.                                 continue;
  710.                             }
  711.                         }
  712.                     }
  713.                    
  714.                     // ProtocolProperties
  715.                     if(ProtocolPropertiesUtilities.isMatch(as, filtroRicercaBase.getProtocolPropertiesAccordo())==false){
  716.                         continue;
  717.                     }
  718.                    
  719.                 }
  720.                
  721.                 IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(as);
  722.                
  723.                 if(filtroPT!=null){
  724.                     for (PortType pt : as.getPortTypeList()) {
  725.                         // Nome PT
  726.                         if(filtroPT.getNomePortType()!=null){
  727.                             if(pt.getNome().equals(filtroPT.getNomePortType()) == false){
  728.                                 continue;
  729.                             }
  730.                         }
  731.                         // ProtocolProperties PT
  732.                         if(ProtocolPropertiesUtilities.isMatch(pt, filtroPT.getProtocolPropertiesPortType())==false){
  733.                             continue;
  734.                         }
  735.                        
  736.                         IDPortType idPT = new IDPortType();
  737.                         idPT.setIdAccordo(idAccordo);
  738.                         idPT.setNome(pt.getNome());
  739.                         listReturn.add((T)idPT);
  740.                     }
  741.                 }
  742.                 else if(filtroOP!=null){
  743.                     for (PortType pt : as.getPortTypeList()) {
  744.                        
  745.                         // Nome PT
  746.                         if(filtroOP.getNomePortType()!=null){
  747.                             if(pt.getNome().equals(filtroOP.getNomePortType()) == false){
  748.                                 continue;
  749.                             }
  750.                         }
  751.                         // ProtocolProperties PT
  752.                         if(ProtocolPropertiesUtilities.isMatch(pt, filtroOP.getProtocolPropertiesPortType())==false){
  753.                             continue;
  754.                         }
  755.                        
  756.                         for (Operation op : pt.getAzioneList()) {
  757.                            
  758.                             // Nome OP
  759.                             if(filtroOP.getNomeAzione()!=null){
  760.                                 if(op.getNome().equals(filtroOP.getNomeAzione()) == false){
  761.                                     continue;
  762.                                 }
  763.                             }
  764.                             // ProtocolProperties OP
  765.                             if(ProtocolPropertiesUtilities.isMatch(pt, filtroOP.getProtocolPropertiesAzione())==false){
  766.                                 continue;
  767.                             }
  768.                        
  769.                             IDPortTypeAzione idAzione = new IDPortTypeAzione();
  770.                             IDPortType idPT = new IDPortType();
  771.                             idPT.setIdAccordo(idAccordo);
  772.                             idPT.setNome(pt.getNome());
  773.                             idAzione.setIdPortType(idPT);
  774.                             idAzione.setNome(op.getNome());
  775.                             listReturn.add((T)idAzione);
  776.                         }
  777.                     }
  778.                 }
  779.                 else if(filtroAZ!=null){
  780.                     for (Azione az : as.getAzioneList()) {
  781.                        
  782.                         // Nome AZ
  783.                         if(filtroAZ.getNomeAzione()!=null){
  784.                             if(az.getNome().equals(filtroAZ.getNomeAzione()) == false){
  785.                                 continue;
  786.                             }
  787.                         }
  788.                         // ProtocolProperties PT
  789.                         if(ProtocolPropertiesUtilities.isMatch(az, filtroAZ.getProtocolPropertiesAzione())==false){
  790.                             continue;
  791.                         }
  792.                        
  793.                         IDAccordoAzione idAzione = new IDAccordoAzione();
  794.                         idAzione.setIdAccordo(idAccordo);
  795.                         idAzione.setNome(az.getNome());
  796.                         listReturn.add((T)idAzione);
  797.                     }
  798.                 }
  799.                 else if(filtroResource!=null){
  800.                     for (Resource resource : as.getResourceList()) {
  801.                         // Nome Risorsa
  802.                         if(filtroResource.getResourceName()!=null){
  803.                             if(resource.getNome().equals(filtroResource.getResourceName()) == false){
  804.                                 continue;
  805.                             }
  806.                         }
  807.                         // ProtocolProperties PT
  808.                         if(ProtocolPropertiesUtilities.isMatch(resource, filtroResource.getProtocolPropertiesResources())==false){
  809.                             continue;
  810.                         }
  811.                        
  812.                         IDResource idResource = new IDResource();
  813.                         idResource.setIdAccordo(idAccordo);
  814.                         idResource.setNome(resource.getNome());
  815.                         listReturn.add((T)idResource);
  816.                     }
  817.                 }
  818.                 else{
  819.                     listReturn.add((T)idAccordo);
  820.                 }
  821.             }
  822.             if(listReturn.size()<=0){
  823.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  824.                 if(filtroPT!=null){
  825.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroPT.toString());
  826.                 }
  827.                 else if(filtroOP!=null){
  828.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroOP.toString());
  829.                 }
  830.                 else if(filtroAZ!=null){
  831.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroAZ.toString());
  832.                 }
  833.                 else if(filtroRicercaBase!=null){
  834.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicercaBase.toString());
  835.                 }
  836.                 else{
  837.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  838.                 }
  839.             }
  840.         }catch(Exception e){
  841.             throw new DriverRegistroServiziException(nomeMetodo+" error",e);
  842.         }
  843.     }

  844.    
  845.     @Override
  846.     public Documento getAllegato(IDAccordo idAccordo, String nome) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  847.         org.openspcoop2.core.registry.AccordoServizioParteComune aspc = getAccordoServizioParteComune(idAccordo);
  848.         if(aspc.sizeAllegatoList()>0) {
  849.             for (Documento doc : aspc.getAllegatoList()) {
  850.                 File f = new File(doc.getFile());
  851.                 if(nome.equals(doc.getFile()) || nome.equals(f.getName())) {
  852.                     return doc;
  853.                 }
  854.             }
  855.         }
  856.         throw new DriverRegistroServiziNotFound("Documento '"+nome+"' non trovato");
  857.     }
  858.     @Override
  859.     public Documento getSpecificaSemiformale(IDAccordo idAccordo, TipiDocumentoSemiformale tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  860.         org.openspcoop2.core.registry.AccordoServizioParteComune aspc = getAccordoServizioParteComune(idAccordo);
  861.         if(aspc.sizeSpecificaSemiformaleList()>0) {
  862.             for (Documento doc : aspc.getSpecificaSemiformaleList()) {
  863.                 File f = new File(doc.getFile());
  864.                 if(nome.equals(doc.getFile()) || nome.equals(f.getName())) {
  865.                     if(tipo!=null && tipo.getNome().equals(doc.getTipo())) {
  866.                         return doc;
  867.                     }
  868.                 }
  869.             }
  870.         }
  871.         throw new DriverRegistroServiziNotFound("Documento '"+nome+"' non trovato");
  872.     }
  873.    
  874.    
  875.    
  876.    
  877.     /* Porte di Dominio */
  878.    
  879.     /**
  880.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.PortaDominio},
  881.      * identificato grazie al parametro
  882.      * <var>nomePdD</var>
  883.      *
  884.      * @param nomePdD Nome della Porta di Dominio
  885.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.PortaDominio}.
  886.      *
  887.      */
  888.     @Override
  889.     public org.openspcoop2.core.registry.PortaDominio getPortaDominio(String nomePdD) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  890.        
  891.         if(nomePdD==null)
  892.             throw new DriverRegistroServiziException("[getPortaDominio] Parametro Non Valido");

  893.         refreshRegistroServiziXML();

  894.         for(int i=0; i<this.registro.sizePortaDominioList(); i++){
  895.             org.openspcoop2.core.registry.PortaDominio pd = this.registro.getPortaDominio(i);
  896.             if (pd.getNome() != null) {
  897.                 if (pd.getNome().equals(nomePdD)) {
  898.                     return pd;
  899.                 }
  900.             }
  901.         }

  902.         throw new DriverRegistroServiziNotFound("[getPortaDominio] Porta di Dominio non trovata");
  903.     }

  904.     /**
  905.      * Ritorna gli identificatori delle PdD che rispettano il parametro di ricerca
  906.      *
  907.      * @param filtroRicerca
  908.      * @return Una lista di ID degli accordi trovati
  909.      * @throws DriverRegistroServiziException
  910.      * @throws DriverRegistroServiziNotFound
  911.      */
  912.     @Override
  913.     public List<String> getAllIdPorteDominio(FiltroRicerca filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  914.         try{

  915.             List<String> nomiPorteDiDominio = new ArrayList<>();
  916.             for(int i=0; i<this.registro.sizePortaDominioList(); i++){
  917.                 org.openspcoop2.core.registry.PortaDominio pd = this.registro.getPortaDominio(i);
  918.                 if(filtroRicerca!=null){
  919.                     // Filtro By Data
  920.                     if(filtroRicerca.getMinDate()!=null){
  921.                         if(pd.getOraRegistrazione()==null){
  922.                             this.log.debug("[getAllIdPorteDominio](FiltroByMinDate) Porta di Dominio ["+pd.getNome()+"] non valorizzata nell'ora-registrazione. Non inserito nella lista ritornata.");
  923.                             continue;
  924.                         }else if(pd.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  925.                             continue;
  926.                         }
  927.                     }
  928.                     if(filtroRicerca.getMaxDate()!=null){
  929.                         if(pd.getOraRegistrazione()==null){
  930.                             this.log.debug("[getAllIdPorteDominio](FiltroByMaxDate) Porta di Dominio ["+pd.getNome()+"] non valorizzata nell'ora-registrazione. Non inserito nella lista ritornata.");
  931.                             continue;
  932.                         }else if(pd.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  933.                             continue;
  934.                         }
  935.                     }
  936.                     // Filtro By Nome
  937.                     if(filtroRicerca.getNome()!=null){
  938.                         if(pd.getNome().equals(filtroRicerca.getNome()) == false){
  939.                             continue;
  940.                         }
  941.                     }
  942.                 }
  943.                 nomiPorteDiDominio.add(pd.getNome());
  944.             }
  945.             if(nomiPorteDiDominio.size()==0){
  946.                 if(filtroRicerca!=null){
  947.                     throw new DriverRegistroServiziNotFound("Porte di Dominio non trovate che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  948.                 }else{
  949.                     throw new DriverRegistroServiziNotFound("Porte di Dominio non trovate");
  950.                 }
  951.             }else{
  952.                 return nomiPorteDiDominio;
  953.             }
  954.         }catch(Exception e){
  955.             throw new DriverRegistroServiziException("getAllIdPorteDominio error",e);
  956.         }
  957.     }
  958.    
  959.    
  960.    
  961.    
  962.    
  963.    
  964.    
  965.    
  966.    
  967.    
  968.     /* Gruppi */
  969.    
  970.     /**
  971.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Gruppo},
  972.      * identificato grazie al parametro
  973.      * <var>nome</var>
  974.      *
  975.      * @param idGruppo Identificativo del gruppo
  976.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Gruppo}.
  977.      *
  978.      */
  979.     @Override
  980.     public Gruppo getGruppo(
  981.             IDGruppo idGruppo) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  982.        
  983.         if(idGruppo==null || idGruppo.getNome()==null)
  984.             throw new DriverRegistroServiziException("[getGruppo] Parametro Non Valido");

  985.         refreshRegistroServiziXML();

  986.         for(int i=0; i<this.registro.sizeGruppoList(); i++){
  987.             org.openspcoop2.core.registry.Gruppo gruppo = this.registro.getGruppo(i);
  988.             if (gruppo.getNome() != null) {
  989.                 if (gruppo.getNome().equals(idGruppo.getNome())) {
  990.                     return gruppo;
  991.                 }
  992.             }
  993.         }

  994.         throw new DriverRegistroServiziNotFound("[getGruppo] Gruppo non trovato");
  995.     }

  996.     /**
  997.      * Ritorna gli identificatori dei Gruppi che rispettano il parametro di ricerca
  998.      *
  999.      * @param filtroRicerca
  1000.      * @return Una lista di ID dei gruppi trovati
  1001.      * @throws DriverRegistroServiziException
  1002.      * @throws DriverRegistroServiziNotFound
  1003.      */
  1004.     @Override
  1005.     public List<IDGruppo> getAllIdGruppi(
  1006.             FiltroRicercaGruppi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1007.         try{

  1008.             List<IDGruppo> idGruppi = new ArrayList<IDGruppo>();
  1009.             for(int i=0; i<this.registro.sizeGruppoList(); i++){
  1010.                 org.openspcoop2.core.registry.Gruppo gruppo = this.registro.getGruppo(i);
  1011.                 if(filtroRicerca!=null){
  1012.                     // Filtro By Data
  1013.                     if(filtroRicerca.getMinDate()!=null){
  1014.                         if(gruppo.getOraRegistrazione()==null){
  1015.                             this.log.debug("[getAllIdGruppi](FiltroByMinDate) Gruppo ["+gruppo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1016.                             continue;
  1017.                         }else if(gruppo.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1018.                             continue;
  1019.                         }
  1020.                     }
  1021.                     if(filtroRicerca.getMaxDate()!=null){
  1022.                         if(gruppo.getOraRegistrazione()==null){
  1023.                             this.log.debug("[getAllIdGruppi](FiltroByMaxDate) Gruppo ["+gruppo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1024.                             continue;
  1025.                         }else if(gruppo.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1026.                             continue;
  1027.                         }
  1028.                     }
  1029.                     // Filtro By Nome
  1030.                     if(filtroRicerca.getNome()!=null){
  1031.                         if(gruppo.getNome().equals(filtroRicerca.getNome()) == false){
  1032.                             continue;
  1033.                         }
  1034.                     }
  1035.                     // Filtro By ServiceBinding
  1036.                     if(filtroRicerca.getServiceBinding()!=null){
  1037.                         if(gruppo.getServiceBinding()!=null){ // se e' uguale a null significa che va bene per qualsiasi service binding
  1038.                             if(gruppo.getServiceBinding().equals(filtroRicerca.getServiceBinding()) == false) {
  1039.                                 continue;
  1040.                             }
  1041.                         }
  1042.                     }
  1043.                 }
  1044.                 IDGruppo id = new IDGruppo(gruppo.getNome());
  1045.                 idGruppi.add(id);
  1046.             }
  1047.             if(idGruppi.size()==0){
  1048.                 if(filtroRicerca!=null){
  1049.                     throw new DriverRegistroServiziNotFound("Gruppi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1050.                 }else{
  1051.                     throw new DriverRegistroServiziNotFound("Gruppi non trovati");
  1052.                 }
  1053.             }else{
  1054.                 return idGruppi;
  1055.             }
  1056.         }catch(Exception e){
  1057.             throw new DriverRegistroServiziException("getAllIdGruppi error",e);
  1058.         }
  1059.     }
  1060.    
  1061.    
  1062.    
  1063.    
  1064.    
  1065.    
  1066.    
  1067.    
  1068.        
  1069.     /* Ruoli */
  1070.    
  1071.     /**
  1072.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Ruolo},
  1073.      * identificato grazie al parametro
  1074.      * <var>nome</var>
  1075.      *
  1076.      * @param idRuolo Identificativo del ruolo
  1077.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Ruolo}.
  1078.      *
  1079.      */
  1080.     @Override
  1081.     public Ruolo getRuolo(
  1082.             IDRuolo idRuolo) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1083.        
  1084.         if(idRuolo==null || idRuolo.getNome()==null)
  1085.             throw new DriverRegistroServiziException("[getRuolo] Parametro Non Valido");

  1086.         refreshRegistroServiziXML();

  1087.         for(int i=0; i<this.registro.sizeRuoloList(); i++){
  1088.             org.openspcoop2.core.registry.Ruolo ruolo = this.registro.getRuolo(i);
  1089.             if (ruolo.getNome() != null) {
  1090.                 if (ruolo.getNome().equals(idRuolo.getNome())) {
  1091.                     return ruolo;
  1092.                 }
  1093.             }
  1094.         }

  1095.         throw new DriverRegistroServiziNotFound("[getRuolo] Ruolo non trovato");
  1096.     }

  1097.     /**
  1098.      * Ritorna gli identificatori dei Ruoli che rispettano il parametro di ricerca
  1099.      *
  1100.      * @param filtroRicerca
  1101.      * @return Una lista di ID dei ruoli trovati
  1102.      * @throws DriverRegistroServiziException
  1103.      * @throws DriverRegistroServiziNotFound
  1104.      */
  1105.     @Override
  1106.     public List<IDRuolo> getAllIdRuoli(
  1107.             FiltroRicercaRuoli filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1108.         try{

  1109.             List<IDRuolo> idRuoli = new ArrayList<IDRuolo>();
  1110.             for(int i=0; i<this.registro.sizeRuoloList(); i++){
  1111.                 org.openspcoop2.core.registry.Ruolo ruolo = this.registro.getRuolo(i);
  1112.                 if(filtroRicerca!=null){
  1113.                     // Filtro By Data
  1114.                     if(filtroRicerca.getMinDate()!=null){
  1115.                         if(ruolo.getOraRegistrazione()==null){
  1116.                             this.log.debug("[getAllIdRuoli](FiltroByMinDate) Ruolo ["+ruolo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1117.                             continue;
  1118.                         }else if(ruolo.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1119.                             continue;
  1120.                         }
  1121.                     }
  1122.                     if(filtroRicerca.getMaxDate()!=null){
  1123.                         if(ruolo.getOraRegistrazione()==null){
  1124.                             this.log.debug("[getAllIdRuoli](FiltroByMaxDate) Ruolo ["+ruolo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1125.                             continue;
  1126.                         }else if(ruolo.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1127.                             continue;
  1128.                         }
  1129.                     }
  1130.                     // Filtro By Nome
  1131.                     if(filtroRicerca.getNome()!=null){
  1132.                         if(ruolo.getNome().equals(filtroRicerca.getNome()) == false){
  1133.                             continue;
  1134.                         }
  1135.                     }
  1136.                     // Filtro By Tipologia
  1137.                     if(filtroRicerca.getTipologia()!=null && !RuoloTipologia.QUALSIASI.equals(filtroRicerca.getTipologia())){
  1138.                         if(ruolo.getTipologia()==null){
  1139.                             continue;
  1140.                         }
  1141.                         if(!RuoloTipologia.QUALSIASI.equals(ruolo.getTipologia())){
  1142.                             if(ruolo.getTipologia().equals(filtroRicerca.getTipologia()) == false){
  1143.                                 continue;
  1144.                             }
  1145.                         }
  1146.                     }
  1147.                     // Filtro By Contesto
  1148.                     if(filtroRicerca.getContesto()!=null && !RuoloContesto.QUALSIASI.equals(filtroRicerca.getContesto())){
  1149.                         if(ruolo.getContestoUtilizzo()==null){
  1150.                             continue;
  1151.                         }
  1152.                         if(!RuoloContesto.QUALSIASI.equals(ruolo.getContestoUtilizzo())){
  1153.                             if(ruolo.getContestoUtilizzo().equals(filtroRicerca.getContesto()) == false){
  1154.                                 continue;
  1155.                             }
  1156.                         }
  1157.                     }
  1158.                 }
  1159.                 IDRuolo id = new IDRuolo(ruolo.getNome());
  1160.                 idRuoli.add(id);
  1161.             }
  1162.             if(idRuoli.size()==0){
  1163.                 if(filtroRicerca!=null){
  1164.                     throw new DriverRegistroServiziNotFound("Ruoli non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1165.                 }else{
  1166.                     throw new DriverRegistroServiziNotFound("Ruoli non trovati");
  1167.                 }
  1168.             }else{
  1169.                 return idRuoli;
  1170.             }
  1171.         }catch(Exception e){
  1172.             throw new DriverRegistroServiziException("getAllIdRuoli error",e);
  1173.         }
  1174.     }
  1175.    
  1176.    
  1177.    
  1178.    
  1179.    
  1180.    
  1181.    
  1182.     /* Scope */
  1183.    
  1184.     /**
  1185.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Scope},
  1186.      * identificato grazie al parametro
  1187.      * <var>nome</var>
  1188.      *
  1189.      * @param idScope Identificativo del scope
  1190.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Scope}.
  1191.      *
  1192.      */
  1193.     @Override
  1194.     public Scope getScope(
  1195.             IDScope idScope) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1196.        
  1197.         if(idScope==null || idScope.getNome()==null)
  1198.             throw new DriverRegistroServiziException("[getScope] Parametro Non Valido");

  1199.         refreshRegistroServiziXML();

  1200.         for(int i=0; i<this.registro.sizeScopeList(); i++){
  1201.             org.openspcoop2.core.registry.Scope scope = this.registro.getScope(i);
  1202.             if (scope.getNome() != null) {
  1203.                 if (scope.getNome().equals(idScope.getNome())) {
  1204.                     return scope;
  1205.                 }
  1206.             }
  1207.         }

  1208.         throw new DriverRegistroServiziNotFound("[getScope] Scope non trovato");
  1209.     }

  1210.     /**
  1211.      * Ritorna gli identificatori dei Scope che rispettano il parametro di ricerca
  1212.      *
  1213.      * @param filtroRicerca
  1214.      * @return Una lista di ID dei scope trovati
  1215.      * @throws DriverRegistroServiziException
  1216.      * @throws DriverRegistroServiziNotFound
  1217.      */
  1218.     @Override
  1219.     public List<IDScope> getAllIdScope(
  1220.             FiltroRicercaScope filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1221.         try{

  1222.             List<IDScope> idScope = new ArrayList<IDScope>();
  1223.             for(int i=0; i<this.registro.sizeScopeList(); i++){
  1224.                 org.openspcoop2.core.registry.Scope scope = this.registro.getScope(i);
  1225.                 if(filtroRicerca!=null){
  1226.                     // Filtro By Data
  1227.                     if(filtroRicerca.getMinDate()!=null){
  1228.                         if(scope.getOraRegistrazione()==null){
  1229.                             this.log.debug("[getAllIdScope](FiltroByMinDate) Scope ["+scope.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1230.                             continue;
  1231.                         }else if(scope.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1232.                             continue;
  1233.                         }
  1234.                     }
  1235.                     if(filtroRicerca.getMaxDate()!=null){
  1236.                         if(scope.getOraRegistrazione()==null){
  1237.                             this.log.debug("[getAllIdScope](FiltroByMaxDate) Scope ["+scope.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1238.                             continue;
  1239.                         }else if(scope.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1240.                             continue;
  1241.                         }
  1242.                     }
  1243.                     // Filtro By Nome
  1244.                     if(filtroRicerca.getNome()!=null){
  1245.                         if(scope.getNome().equals(filtroRicerca.getNome()) == false){
  1246.                             continue;
  1247.                         }
  1248.                     }
  1249.                     // Filtro By Tipologia
  1250.                     if(filtroRicerca.getTipologia()!=null){
  1251.                         if(scope.getTipologia()==null){
  1252.                             continue;
  1253.                         }
  1254.                         if(scope.getTipologia().equals(filtroRicerca.getTipologia()) == false){
  1255.                             continue;
  1256.                         }
  1257.                     }
  1258.                     // Filtro By Contesto
  1259.                     if(filtroRicerca.getContesto()!=null && !ScopeContesto.QUALSIASI.equals(filtroRicerca.getContesto())){
  1260.                         if(scope.getContestoUtilizzo()==null){
  1261.                             continue;
  1262.                         }
  1263.                         if(!ScopeContesto.QUALSIASI.equals(scope.getContestoUtilizzo())){
  1264.                             if(scope.getContestoUtilizzo().equals(filtroRicerca.getContesto()) == false){
  1265.                                 continue;
  1266.                             }
  1267.                         }
  1268.                     }
  1269.                 }
  1270.                 IDScope id = new IDScope(scope.getNome());
  1271.                 idScope.add(id);
  1272.             }
  1273.             if(idScope.size()==0){
  1274.                 if(filtroRicerca!=null){
  1275.                     throw new DriverRegistroServiziNotFound("Scope non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1276.                 }else{
  1277.                     throw new DriverRegistroServiziNotFound("Scope non trovati");
  1278.                 }
  1279.             }else{
  1280.                 return idScope;
  1281.             }
  1282.         }catch(Exception e){
  1283.             throw new DriverRegistroServiziException("getAllIdScope error",e);
  1284.         }
  1285.     }
  1286.    
  1287.    
  1288.    
  1289.    

  1290.    
  1291.     /* Soggetti */

  1292.     /**
  1293.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Soggetto},
  1294.      * identificato grazie al parametro
  1295.      * <var>idSoggetto</var> di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1296.      *
  1297.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1298.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.Soggetto}
  1299.      *
  1300.      */
  1301.     @Override
  1302.     public org.openspcoop2.core.registry.Soggetto getSoggetto(IDSoggetto idSoggetto) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1303.         if(idSoggetto==null)
  1304.             throw new DriverRegistroServiziException("[getSoggetto] Parametro Non Valido");
  1305.         String tipoSP = idSoggetto.getTipo();
  1306.         String codiceSP = idSoggetto.getNome();
  1307.         if(tipoSP == null || codiceSP == null)
  1308.             throw new DriverRegistroServiziException("[getSoggetto] Parametri Non Validi");

  1309.         refreshRegistroServiziXML();

  1310.         for(int i=0; i<this.registro.sizeSoggettoList(); i++){
  1311.             org.openspcoop2.core.registry.Soggetto ss = this.registro.getSoggetto(i);
  1312.            
  1313.             if( (ss.getTipo() != null) &&
  1314.                     (ss.getNome() != null) ){
  1315.                 if( (ss.getTipo().equals(tipoSP)) &&
  1316.                         (ss.getNome().equals(codiceSP)) ){
  1317.                     return ss;
  1318.                 }
  1319.             }
  1320.         }

  1321.         throw new DriverRegistroServiziNotFound("[getSoggetto] Soggetto non trovato");
  1322.     }
  1323.    
  1324.     @Override
  1325.     public Soggetto getSoggettoByCredenzialiBasic(
  1326.             String user,String password, CryptConfig config) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1327.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.BASIC, user, password,
  1328.                 null, null, null, false,
  1329.                 null,
  1330.                 config,
  1331.                 false);
  1332.     }
  1333.    
  1334.     @Override
  1335.     public Soggetto getSoggettoByCredenzialiApiKey(
  1336.             String user,String password, boolean appId, CryptConfig config) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1337.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.APIKEY, user, password,
  1338.                 null, null, null, false,
  1339.                 null,
  1340.                 config,
  1341.                 appId);
  1342.     }
  1343.    
  1344.     @Override
  1345.     public Soggetto getSoggettoByCredenzialiSsl(
  1346.             String subject, String issuer) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1347.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.SSL, null, null,
  1348.                 subject, issuer, null, false,
  1349.                 null,
  1350.                 null,
  1351.                 false);
  1352.     }
  1353.    
  1354.     @Override
  1355.     public Soggetto getSoggettoByCredenzialiSsl(
  1356.             CertificateInfo certificate, boolean strictVerifier) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1357.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.SSL, null, null,
  1358.                 null, null, certificate, strictVerifier,
  1359.                 null,
  1360.                 null,
  1361.                 false);
  1362.     }
  1363.    
  1364.     @Override
  1365.     public Soggetto getSoggettoByCredenzialiPrincipal(
  1366.             String principal) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1367.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.PRINCIPAL, null, null,
  1368.                 null, null, null, false,
  1369.                 principal,
  1370.                 null,
  1371.                 false);
  1372.     }
  1373.    
  1374.     private org.openspcoop2.core.registry.Soggetto getEngineSoggettoAutenticato(CredenzialeTipo tipoCredenziale, String user,String password,
  1375.             String aSubject, String aIssuer, CertificateInfo aCertificate, boolean aStrictVerifier,
  1376.             String principal,
  1377.             CryptConfig config,
  1378.             boolean appId) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1379.         // conrollo consistenza
  1380.         if (tipoCredenziale == null)
  1381.             throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro tipoCredenziale is null");

  1382.         switch (tipoCredenziale) {
  1383.         case BASIC:
  1384.             if (user == null || "".equalsIgnoreCase(user))
  1385.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro user is null (required for basic auth)");
  1386.             if (password == null || "".equalsIgnoreCase(password))
  1387.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro password is null (required for basic auth)");
  1388.             break;
  1389.         case APIKEY:
  1390.             if (user == null || "".equalsIgnoreCase(user))
  1391.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro user is null (required for apikey auth)");
  1392.             if (password == null || "".equalsIgnoreCase(password))
  1393.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro password is null (required for apikey auth)");
  1394.             break;
  1395.         case SSL:
  1396.             if ( (aSubject == null || "".equalsIgnoreCase(aSubject)) && (aCertificate==null))
  1397.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro subject/certificate is null (required for ssl auth)");
  1398.             break;
  1399.         case PRINCIPAL:
  1400.             if (principal == null || "".equalsIgnoreCase(principal))
  1401.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro principal is null (required for principal auth)");
  1402.             break;
  1403.         }

  1404.         refreshRegistroServiziXML();

  1405.         boolean testInChiaro = false;
  1406.         ICrypt crypt = null;
  1407.         if(CredenzialeTipo.BASIC.equals(tipoCredenziale)) {
  1408.             if(config==null || config.isBackwardCompatibility()) {
  1409.                 testInChiaro = true;
  1410.             }
  1411.             if(config!=null) {
  1412.                 try {
  1413.                     crypt = CryptFactory.getCrypt(this.log, config);
  1414.                 }catch(Exception e) {
  1415.                     throw new DriverRegistroServiziException(e.getMessage(),e);
  1416.                 }
  1417.             }
  1418.         }
  1419.         else if(CredenzialeTipo.APIKEY.equals(tipoCredenziale)) {
  1420.             if(config!=null) {
  1421.                 try {
  1422.                     crypt = CryptFactory.getCrypt(this.log, config);
  1423.                 }catch(Exception e) {
  1424.                     throw new DriverRegistroServiziException(e.getMessage(),e);
  1425.                 }
  1426.             }
  1427.             else {
  1428.                 testInChiaro = true;
  1429.             }
  1430.         }
  1431.        
  1432.         for(int i=0; i<this.registro.sizeSoggettoList(); i++){
  1433.             org.openspcoop2.core.registry.Soggetto ss = this.registro.getSoggetto(i);
  1434.             CredenzialiSoggetto credenziali = (ss.sizeCredenzialiList() > 0 ? ss.getCredenziali(0) : null);
  1435.             if(credenziali==null){
  1436.                 continue;
  1437.             }
  1438.             if(credenziali.getTipo()==null){
  1439.                 if(tipoCredenziale.equals(CredenzialeTipo.SSL) == false){ // ssl è il default
  1440.                     continue;
  1441.                 }  
  1442.             }
  1443.             if(tipoCredenziale.equals(credenziali.getTipo())==false){
  1444.                 continue;
  1445.             }
  1446.            
  1447.             switch (tipoCredenziale) {
  1448.             case BASIC:
  1449.             case APIKEY:
  1450.                 if( (user.equals(credenziali.getUser()))){
  1451.                    
  1452.                     if(CredenzialeTipo.APIKEY.equals(tipoCredenziale)) {
  1453.                         if(appId) {
  1454.                             if(!credenziali.isAppId()) {
  1455.                                 continue;
  1456.                             }
  1457.                         }
  1458.                         else {
  1459.                             if(credenziali.isAppId()) {
  1460.                                 continue;
  1461.                             }
  1462.                         }
  1463.                     }
  1464.                    
  1465.                     String passwordSaved =  credenziali.getPassword();
  1466.                    
  1467.                     boolean found = false;
  1468.                     if(testInChiaro) {
  1469.                         found = password.equals(passwordSaved);
  1470.                     }
  1471.                     if(!found && crypt!=null) {
  1472.                         found = crypt.check(password, passwordSaved);
  1473.                     }
  1474.                    
  1475.                     if( found ) {
  1476.                         return ss;
  1477.                     }
  1478.                    
  1479.                 }
  1480.                 break;
  1481.             case SSL:
  1482.                 try{
  1483.                     if(aSubject!=null && !"".equals(aSubject)) {
  1484.                    
  1485.                         boolean subjectValid = false;
  1486.                         if(credenziali.getSubject()!=null) {
  1487.                             subjectValid = CertificateUtils.sslVerify(credenziali.getSubject(), aSubject, PrincipalType.SUBJECT, this.log);
  1488.                         }
  1489.                        
  1490.                         boolean issuerValid = true;
  1491.                         if(aIssuer!=null && !"".equals(aIssuer)) {
  1492.                             if(credenziali.getIssuer()==null) {
  1493.                                 issuerValid = false;
  1494.                             }
  1495.                             else {
  1496.                                 issuerValid = CertificateUtils.sslVerify(credenziali.getIssuer(), aIssuer, PrincipalType.ISSUER, this.log);
  1497.                             }
  1498.                         }
  1499.                         else {
  1500.                             issuerValid = (credenziali.getIssuer() == null);
  1501.                         }
  1502.                        
  1503.                         if(subjectValid && issuerValid){
  1504.                             return ss;
  1505.                         }
  1506.    
  1507.                     }
  1508.                     else {
  1509.                        
  1510.                         // ricerca per certificato
  1511.                         String cnSubject = aCertificate.getSubject().getCN();
  1512.                         if(cnSubject.equals(credenziali.getCnSubject())) {
  1513.                             Certificate certificato = ArchiveLoader.load(ArchiveType.CER, credenziali.getCertificate(), 0, null);
  1514.                             if(aCertificate.equals(certificato.getCertificate(),aStrictVerifier)) {
  1515.                                 return ss;
  1516.                             }
  1517.                         }
  1518.                        
  1519.                     }
  1520.                 }catch(Exception e){
  1521.                     throw new DriverRegistroServiziException(e.getMessage(),e);
  1522.                 }
  1523.                 break;
  1524.             case PRINCIPAL:
  1525.                 if( (principal.equals(credenziali.getUser()))){
  1526.                     return ss;
  1527.                 }
  1528.                 break;
  1529.             }
  1530.         }

  1531.         throw new DriverRegistroServiziNotFound("[getSoggetto] Soggetto non Trovato");
  1532.     }

  1533.     /**
  1534.      *  Ritorna gli identificatori dei soggetti che rispettano il parametro di ricerca
  1535.      *
  1536.      * @param filtroRicerca
  1537.      * @return Una lista di ID dei soggetti trovati
  1538.      * @throws DriverRegistroServiziException
  1539.      * @throws DriverRegistroServiziNotFound
  1540.      */
  1541.     @Override
  1542.     public List<IDSoggetto> getAllIdSoggetti(FiltroRicercaSoggetti filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1543.         try{
  1544.            
  1545.             boolean testInChiaro = false;
  1546.             ICrypt crypt = null;
  1547.             if(filtroRicerca!=null && filtroRicerca.getCredenzialiSoggetto()!=null && filtroRicerca.getCredenzialiSoggetto().getPassword()!=null){
  1548.                 CredenzialeTipo cTipo = filtroRicerca.getCredenzialiSoggetto().getTipo();
  1549.                 if(CredenzialeTipo.BASIC.equals(cTipo)){
  1550.                     CryptConfig config = filtroRicerca.getCryptConfig();
  1551.                     if(config==null || config.isBackwardCompatibility()) {
  1552.                         testInChiaro = true;
  1553.                     }
  1554.                     if(config!=null) {
  1555.                         try {
  1556.                             crypt = CryptFactory.getCrypt(this.log, config);
  1557.                         }catch(Exception e) {
  1558.                             throw new DriverRegistroServiziException(e.getMessage(),e);
  1559.                         }
  1560.                     }
  1561.                 }
  1562.                 else if(CredenzialeTipo.APIKEY.equals(cTipo)){
  1563.                     CryptConfig config = filtroRicerca.getCryptConfig();
  1564.                     if(config!=null) {
  1565.                         try {
  1566.                             crypt = CryptFactory.getCrypt(this.log, config);
  1567.                         }catch(Exception e) {
  1568.                             throw new DriverRegistroServiziException(e.getMessage(),e);
  1569.                         }
  1570.                     }
  1571.                     else {
  1572.                         testInChiaro = true;
  1573.                     }
  1574.                 }
  1575.             }
  1576.            
  1577.             List<IDSoggetto> idSoggetti = new ArrayList<IDSoggetto>();
  1578.             for(int i=0; i<this.registro.sizeSoggettoList(); i++){
  1579.                 org.openspcoop2.core.registry.Soggetto ss = this.registro.getSoggetto(i);
  1580.                 if(filtroRicerca!=null){
  1581.                     // Filtro By Data
  1582.                     if(filtroRicerca.getMinDate()!=null){
  1583.                         if(ss.getOraRegistrazione()==null){
  1584.                             this.log.debug("[getAllIdSoggetti](FiltroByMinDate) Soggetto ["+ss.getTipo()+"/"+ss.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1585.                             continue;
  1586.                         }else if(ss.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1587.                             continue;
  1588.                         }
  1589.                     }
  1590.                     if(filtroRicerca.getMaxDate()!=null){
  1591.                         if(ss.getOraRegistrazione()==null){
  1592.                             this.log.debug("[getAllIdSoggetti](FiltroByMaxDate) Soggetto ["+ss.getTipo()+"/"+ss.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1593.                             continue;
  1594.                         }else if(ss.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1595.                             continue;
  1596.                         }
  1597.                     }
  1598.                     // Filtro By Tipo e Nome
  1599.                     if(filtroRicerca.getTipo()!=null){
  1600.                         if(ss.getTipo().equals(filtroRicerca.getTipo()) == false){
  1601.                             continue;
  1602.                         }
  1603.                     }
  1604.                     if(filtroRicerca.getNome()!=null){
  1605.                         if(ss.getNome().equals(filtroRicerca.getNome()) == false){
  1606.                             continue;
  1607.                         }
  1608.                     }
  1609.                     // Filtro By Pdd
  1610.                     if(filtroRicerca.getNomePdd()!=null){
  1611.                         if(ss.getPortaDominio().equals(filtroRicerca.getNomePdd()) == false){
  1612.                             continue;
  1613.                         }
  1614.                     }
  1615.                     // ProtocolProperties
  1616.                     if(ProtocolPropertiesUtilities.isMatch(ss, filtroRicerca.getProtocolProperties())==false){
  1617.                         continue;
  1618.                     }
  1619.                     // Filtro By Ruoli
  1620.                     if(filtroRicerca.getIdRuolo()!=null && filtroRicerca.getIdRuolo().getNome()!=null){
  1621.                         if(ss.getRuoli()==null){
  1622.                             continue;
  1623.                         }
  1624.                         boolean contains = false;
  1625.                         for (int j = 0; j < ss.getRuoli().sizeRuoloList(); j++) {
  1626.                             if(filtroRicerca.getIdRuolo().getNome().equals(ss.getRuoli().getRuolo(j).getNome())){
  1627.                                 contains = true;
  1628.                                 break;
  1629.                             }
  1630.                         }
  1631.                         if(!contains){
  1632.                             continue;
  1633.                         }
  1634.                     }
  1635.                     // Filtro By Credenziali
  1636.                     if(filtroRicerca.getCredenzialiSoggetto()!=null){
  1637.                         CredenzialiSoggetto credenziali = (ss.sizeCredenzialiList() > 0 ? ss.getCredenziali(0) : null);
  1638.                         if(credenziali==null){
  1639.                             continue;
  1640.                         }
  1641.                         if(filtroRicerca.getCredenzialiSoggetto().getTipo()!=null){
  1642.                             if(credenziali.getTipo()==null){
  1643.                                 if(filtroRicerca.getCredenzialiSoggetto().getTipo().equals(CredenzialeTipo.SSL) == false){ // ssl è il default
  1644.                                     continue;
  1645.                                 }
  1646.                             }
  1647.                             else{
  1648.                                 if(filtroRicerca.getCredenzialiSoggetto().getTipo().equals(credenziali.getTipo())==false){
  1649.                                     continue;
  1650.                                 }
  1651.                                 if(CredenzialeTipo.APIKEY.equals(filtroRicerca.getCredenzialiSoggetto().getTipo())){
  1652.                                     if(filtroRicerca.getCredenzialiSoggetto().isAppId()) {
  1653.                                         if(!credenziali.isAppId()) {
  1654.                                             continue;
  1655.                                         }
  1656.                                     }
  1657.                                     else {
  1658.                                         if(credenziali.isAppId()) {
  1659.                                             continue;
  1660.                                         }
  1661.                                     }
  1662.                                 }
  1663.                             }
  1664.                         }
  1665.                         if(filtroRicerca.getCredenzialiSoggetto().getUser()!=null){
  1666.                             if(filtroRicerca.getCredenzialiSoggetto().getUser().equals(credenziali.getUser())==false){
  1667.                                 continue;
  1668.                             }
  1669.                         }
  1670.                         if(filtroRicerca.getCredenzialiSoggetto().getPassword()!=null){
  1671.                             String passwordSaved =  credenziali.getPassword();
  1672.                             boolean found = false;
  1673.                             if(testInChiaro) {
  1674.                                 found = filtroRicerca.getCredenzialiSoggetto().getPassword().equals(passwordSaved);
  1675.                             }
  1676.                             if(!found && crypt!=null) {
  1677.                                 found = crypt.check(filtroRicerca.getCredenzialiSoggetto().getPassword(), passwordSaved);
  1678.                             }
  1679.                            
  1680.                             if( !found ) {
  1681.                                 continue;
  1682.                             }
  1683.                         }
  1684.                         if(filtroRicerca.getCredenzialiSoggetto().getSubject()!=null){
  1685.                             try{
  1686.                                 if(credenziali.getSubject()==null){
  1687.                                     continue;
  1688.                                 }
  1689.                                 boolean subjectValid = CertificateUtils.sslVerify(credenziali.getSubject(), filtroRicerca.getCredenzialiSoggetto().getSubject(), PrincipalType.SUBJECT, this.log);
  1690.                                 boolean issuerValid = true;
  1691.                                 if(filtroRicerca.getCredenzialiSoggetto().getIssuer()!=null) {
  1692.                                     if(credenziali.getIssuer()==null) {
  1693.                                         issuerValid = false;
  1694.                                     }
  1695.                                     else {
  1696.                                         issuerValid = CertificateUtils.sslVerify(credenziali.getIssuer(), filtroRicerca.getCredenzialiSoggetto().getIssuer(), PrincipalType.ISSUER, this.log);
  1697.                                     }
  1698.                                 }
  1699.                                 else {
  1700.                                     issuerValid = (credenziali.getIssuer() == null);
  1701.                                 }
  1702.                                 if(!subjectValid || !issuerValid){
  1703.                                     continue;
  1704.                                 }
  1705.                             }catch(Exception e){
  1706.                                 throw new DriverRegistroServiziException(e.getMessage(),e);
  1707.                             }
  1708.                         }
  1709.                         if(filtroRicerca.getCredenzialiSoggetto().getCnSubject()!=null && filtroRicerca.getCredenzialiSoggetto().getCertificate()!=null) {
  1710.                             if(filtroRicerca.getCredenzialiSoggetto().getCnSubject().equals(credenziali.getCnSubject())==false) {
  1711.                                 continue;
  1712.                             }
  1713.                             // Possono esistere piu' soggetti che hanno un CN con subject e issuer diverso.
  1714.                             Certificate certificato = ArchiveLoader.load(ArchiveType.CER, credenziali.getCertificate(), 0, null);
  1715.                             Certificate certificatoFiltro = ArchiveLoader.load(ArchiveType.CER, filtroRicerca.getCredenzialiSoggetto().getCertificate(), 0, null);                          
  1716.                             if(!certificatoFiltro.getCertificate().equals(certificato.getCertificate(),filtroRicerca.getCredenzialiSoggetto().isCertificateStrictVerification())) {
  1717.                                 continue;
  1718.                             }
  1719.                         }
  1720.                        
  1721.                     }
  1722.                 }
  1723.                 IDSoggetto idS = new IDSoggetto(ss.getTipo(),ss.getNome());
  1724.                 idSoggetti.add(idS);
  1725.             }
  1726.             if(idSoggetti.size()==0){
  1727.                 if(filtroRicerca!=null){
  1728.                     throw new DriverRegistroServiziNotFound("Soggetti non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1729.                 }else{
  1730.                     throw new DriverRegistroServiziNotFound("Soggetti non trovati");
  1731.                 }
  1732.             }else{
  1733.                 return idSoggetti;
  1734.             }
  1735.         }catch(Exception e){
  1736.             throw new DriverRegistroServiziException("getAllIdSoggetti error",e);
  1737.         }
  1738.     }

  1739.    
  1740.    
  1741.    
  1742.    
  1743.    
  1744.     /* Accordi di Servizio Parte Specifica */
  1745.    
  1746.     /**
  1747.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1748.      * contenente le informazioni sulle funzionalita' associate
  1749.      * al servizio  identificato grazie ai fields Soggetto,
  1750.      * 'Servizio','TipoServizio' e 'Azione' impostati
  1751.      * all'interno del parametro <var>idService</var> di tipo {@link org.openspcoop2.core.id.IDServizio}.
  1752.      *
  1753.      * @param idService Identificatore del Servizio di tipo {@link org.openspcoop2.core.id.IDServizio}.
  1754.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1755.      *
  1756.      */
  1757.     @Override
  1758.     public org.openspcoop2.core.registry.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idService) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1759.         // Il refresh viene effettuato con questa ricerca.
  1760.         org.openspcoop2.core.registry.Soggetto soggetto = getSoggetto(idService.getSoggettoErogatore());

  1761.         if(soggetto == null)
  1762.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica(IDServizio)] Parametro Non Valido");
  1763.         String servizio = idService.getNome();
  1764.         String tipoServizio = idService.getTipo();
  1765.         Integer versioneServizio = idService.getVersione();
  1766.         if((servizio==null)||(tipoServizio==null)||(versioneServizio==null))
  1767.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica(IDServizio)] Parametri Non Validi");

  1768.         for(int i=0; i<soggetto.sizeAccordoServizioParteSpecificaList(); i++){
  1769.             org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = soggetto.getAccordoServizioParteSpecifica(i);
  1770.             if( (asps.getTipo().equals(tipoServizio)) &&
  1771.                     (asps.getNome().equals(servizio)) &&
  1772.                     asps.getVersione().intValue() == versioneServizio.intValue()){
  1773.                 asps.setTipoSoggettoErogatore(soggetto.getTipo());
  1774.                 asps.setNomeSoggettoErogatore(soggetto.getNome());
  1775.                 return asps;
  1776.             }
  1777.         }

  1778.         throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica(IDServizio)] Servizio non trovato");
  1779.     }


  1780.     /**
  1781.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1782.      * contenente le informazioni sulle funzionalita' associate
  1783.      * al servizio  correlato identificato grazie ai fields Soggetto
  1784.      * e nomeAccordo
  1785.      *
  1786.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1787.      * @param idAccordoServizioParteComune ID dell'accordo che deve implementare il servizio correlato
  1788.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}.
  1789.      *
  1790.      */
  1791.     @Override
  1792.     public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(
  1793.             IDSoggetto idSoggetto,
  1794.             IDAccordo idAccordoServizioParteComune) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1795.        
  1796.         // Il refresh viene effettuato con questa ricerca.
  1797.         org.openspcoop2.core.registry.Soggetto soggetto = getSoggetto(idSoggetto);
  1798.         if(soggetto == null)
  1799.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Parametro Non Valido");

  1800.         String uriAccordo = this.idAccordoFactory.getUriFromIDAccordo(idAccordoServizioParteComune);
  1801.        
  1802.         for(int i=0; i<soggetto.sizeAccordoServizioParteSpecificaList(); i++){
  1803.             org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = soggetto.getAccordoServizioParteSpecifica(i);
  1804.             if( asps.getAccordoServizioParteComune() != null) {
  1805.                 if( asps.getAccordoServizioParteComune().equals(uriAccordo) && TipologiaServizio.CORRELATO.equals(asps.getTipologiaServizio()) ) {
  1806.                     asps.setTipoSoggettoErogatore(soggetto.getTipo());
  1807.                     asps.setNomeSoggettoErogatore(soggetto.getNome());
  1808.                     return asps;
  1809.                 }
  1810.             }
  1811.         }

  1812.         throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Servizio non trovato");
  1813.        
  1814.     }
  1815.    
  1816.    
  1817.     @Override
  1818.     public List<IDServizio> getAllIdServizi(FiltroRicercaServizi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1819.        
  1820.         List<IDServizio> list = new ArrayList<IDServizio>();
  1821.         _fillAllIdServiziEngine("getAllIdServizi", filtroRicerca, list);
  1822.         return list;
  1823.        
  1824.     }
  1825.    
  1826.     @Override
  1827.     public List<IDFruizione> getAllIdFruizioniServizio(
  1828.             FiltroRicercaFruizioniServizio filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1829.    
  1830.         List<IDFruizione> list = new ArrayList<IDFruizione>();
  1831.         _fillAllIdServiziEngine("getAllIdFruizioniServizio", filtroRicerca, list);
  1832.         return list;
  1833.        
  1834.     }
  1835.    
  1836.     @SuppressWarnings("unchecked")
  1837.     public <T> void _fillAllIdServiziEngine(String nomeMetodo,
  1838.             FiltroRicercaServizi filtroRicerca,
  1839.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1840.         try{

  1841.             FiltroRicercaFruizioniServizio filtroFruizioni = null;
  1842.             if(filtroRicerca instanceof FiltroRicercaFruizioniServizio){
  1843.                 filtroFruizioni = (FiltroRicercaFruizioniServizio) filtroRicerca;
  1844.             }
  1845.            
  1846.             for(int i=0; i<this.registro.sizeSoggettoList(); i++){
  1847.                 org.openspcoop2.core.registry.Soggetto ss = this.registro.getSoggetto(i);
  1848.                 if(filtroRicerca!=null){
  1849.                     // Filtro By Tipo e Nome Soggetto Erogatore
  1850.                     if(filtroRicerca.getTipoSoggettoErogatore()!=null){
  1851.                         if(ss.getTipo().equals(filtroRicerca.getTipoSoggettoErogatore()) == false){
  1852.                             continue;
  1853.                         }
  1854.                     }
  1855.                     if(filtroRicerca.getNomeSoggettoErogatore()!=null){
  1856.                         if(ss.getNome().equals(filtroRicerca.getNomeSoggettoErogatore()) == false){
  1857.                             continue;
  1858.                         }
  1859.                     }
  1860.                 }
  1861.                 for(int j=0; j<ss.sizeAccordoServizioParteSpecificaList(); j++){
  1862.                     org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = ss.getAccordoServizioParteSpecifica(j);

  1863.                     if(filtroRicerca!=null){
  1864.                         // Filtro By Data
  1865.                         if(filtroRicerca.getMinDate()!=null){
  1866.                             if(asps.getOraRegistrazione()==null){
  1867.                                 this.log.debug("["+nomeMetodo+"](FiltroByMinDate) Servizio["+this.idServizioFactory.getUriFromAccordo(asps)+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1868.                                 continue;
  1869.                             }else if(asps.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1870.                                 continue;
  1871.                             }
  1872.                         }
  1873.                         if(filtroRicerca.getMaxDate()!=null){
  1874.                             if(asps.getOraRegistrazione()==null){
  1875.                                 this.log.debug("["+nomeMetodo+"](FiltroByMaxDate) Servizio["+this.idServizioFactory.getUriFromAccordo(asps)+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1876.                                 continue;
  1877.                             }else if(asps.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1878.                                 continue;
  1879.                             }
  1880.                         }
  1881.                         // Filtro By Tipo, Nome e Versione
  1882.                         if(filtroRicerca.getTipo()!=null){
  1883.                             if(asps.getTipo().equals(filtroRicerca.getTipo()) == false){
  1884.                                 continue;
  1885.                             }
  1886.                         }
  1887.                         if(filtroRicerca.getNome()!=null){
  1888.                             if(asps.getNome().equals(filtroRicerca.getNome()) == false){
  1889.                                 continue;
  1890.                             }
  1891.                         }
  1892.                         if(filtroRicerca.getVersione()!=null){
  1893.                             if(asps.getVersione().intValue() != filtroRicerca.getVersione().intValue()){
  1894.                                 continue;
  1895.                             }
  1896.                         }
  1897.                         if(filtroRicerca.getPortType()!=null){
  1898.                             if(asps.getPortType().equals(filtroRicerca.getPortType()) == false){
  1899.                                 continue;
  1900.                             }
  1901.                         }
  1902.                         // Filtro by Accordo
  1903.                         if(filtroRicerca.getIdAccordoServizioParteComune()!=null){
  1904.                             String uriAccordo = this.idAccordoFactory.getUriFromIDAccordo(filtroRicerca.getIdAccordoServizioParteComune());
  1905.                             if(asps.getAccordoServizioParteComune().equals(uriAccordo) == false){
  1906.                                 continue;
  1907.                             }
  1908.                         }
  1909.                         // ProtocolProperties
  1910.                         if(ProtocolPropertiesUtilities.isMatch(asps, filtroRicerca.getProtocolProperties())==false){
  1911.                             continue;
  1912.                         }
  1913.                         // Filtro By Tipo e/o Nome Soggetto Fruitore
  1914.                         if(filtroRicerca.getTipoSoggettoFruitore()!=null || filtroRicerca.getNomeSoggettoFruitore()!=null){
  1915.                             if(asps.sizeFruitoreList()<=0){
  1916.                                 continue;
  1917.                             }
  1918.                             boolean found = false;
  1919.                             for (int k = 0; k < asps.sizeFruitoreList(); k++) {
  1920.                                 Fruitore fruitore = asps.getFruitore(k);
  1921.                                 if(filtroRicerca.getTipoSoggettoFruitore()!=null){
  1922.                                     if(fruitore.getTipo().equals(filtroRicerca.getTipoSoggettoFruitore()) == false){
  1923.                                         continue;
  1924.                                     }
  1925.                                 }
  1926.                                 if(filtroRicerca.getNomeSoggettoFruitore()!=null){
  1927.                                     if(fruitore.getNome().equals(filtroRicerca.getNomeSoggettoFruitore()) == false){
  1928.                                         continue;
  1929.                                     }
  1930.                                 }
  1931.                                 found = true;
  1932.                                 break;
  1933.                             }
  1934.                             if(!found){
  1935.                                 continue;
  1936.                             }
  1937.                         }
  1938.                     }
  1939.                     IDServizio idServ = this.idServizioFactory.getIDServizioFromAccordo(asps);
  1940.                    
  1941.                     if(filtroFruizioni!=null){
  1942.                        
  1943.                         for (Fruitore fruitore : asps.getFruitoreList()) {
  1944.                            
  1945.                             // Tipo
  1946.                             if(filtroFruizioni.getTipoSoggettoFruitore()!=null){
  1947.                                 if(fruitore.getTipo().equals(filtroFruizioni.getTipoSoggettoFruitore()) == false){
  1948.                                     continue;
  1949.                                 }
  1950.                             }
  1951.                             // Nome
  1952.                             if(filtroFruizioni.getNomeSoggettoFruitore()!=null){
  1953.                                 if(fruitore.getNome().equals(filtroFruizioni.getNomeSoggettoFruitore()) == false){
  1954.                                     continue;
  1955.                                 }
  1956.                             }
  1957.                             // ProtocolProperties
  1958.                             if(ProtocolPropertiesUtilities.isMatch(fruitore, filtroFruizioni.getProtocolPropertiesFruizione())==false){
  1959.                                 continue;
  1960.                             }
  1961.                            
  1962.                             IDFruizione idFruizione = new IDFruizione();
  1963.                             idFruizione.setIdServizio(idServ);
  1964.                             idFruizione.setIdFruitore(new IDSoggetto(fruitore.getTipo(), fruitore.getNome()));
  1965.                             listReturn.add((T)idFruizione);
  1966.                         }
  1967.                        
  1968.                         // Filtro By Tipo e/o Nome Soggetto Fruitore
  1969.                         if(filtroRicerca.getTipoSoggettoFruitore()!=null || filtroRicerca.getNomeSoggettoFruitore()!=null){
  1970.                             if(asps.sizeFruitoreList()<=0){
  1971.                                 continue;
  1972.                             }
  1973.                             boolean found = false;
  1974.                             for (int k = 0; k < asps.sizeFruitoreList(); k++) {
  1975.                                 Fruitore fruitore = asps.getFruitore(k);
  1976.                                 if(filtroRicerca.getTipoSoggettoFruitore()!=null){
  1977.                                     if(fruitore.getTipo().equals(filtroRicerca.getTipoSoggettoFruitore()) == false){
  1978.                                         continue;
  1979.                                     }
  1980.                                 }
  1981.                                 if(filtroRicerca.getNomeSoggettoFruitore()!=null){
  1982.                                     if(fruitore.getNome().equals(filtroRicerca.getNomeSoggettoFruitore()) == false){
  1983.                                         continue;
  1984.                                     }
  1985.                                 }
  1986.                                 found = true;
  1987.                                 break;
  1988.                             }
  1989.                             if(!found){
  1990.                                 continue;
  1991.                             }
  1992.                         }
  1993.                     }
  1994.                     else{
  1995.                         listReturn.add((T)idServ);
  1996.                     }
  1997.                 }
  1998.             }
  1999.             if(listReturn.size()<=0){
  2000.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  2001.                 if(filtroFruizioni!=null){
  2002.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroFruizioni.toString());
  2003.                 }
  2004.                 else if(filtroRicerca!=null){
  2005.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicerca.toString());
  2006.                 }
  2007.                 else
  2008.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  2009.             }

  2010.         }catch(Exception e){
  2011.             throw new DriverRegistroServiziException(nomeMetodo+" error",e);
  2012.         }
  2013.     }

  2014.     @Override
  2015.     public Documento getAllegato(IDServizio idASPS, String nome) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2016.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = getAccordoServizioParteSpecifica(idASPS);
  2017.         if(asps.sizeAllegatoList()>0) {
  2018.             for (Documento doc : asps.getAllegatoList()) {
  2019.                 File f = new File(doc.getFile());
  2020.                 if(nome.equals(doc.getFile()) || nome.equals(f.getName())) {
  2021.                     return doc;
  2022.                 }
  2023.             }
  2024.         }
  2025.         throw new DriverRegistroServiziNotFound("Documento '"+nome+"' non trovato");
  2026.     }
  2027.     @Override
  2028.     public Documento getSpecificaSemiformale(IDServizio idASPS, TipiDocumentoSemiformale tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2029.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = getAccordoServizioParteSpecifica(idASPS);
  2030.         if(asps.sizeSpecificaSemiformaleList()>0) {
  2031.             for (Documento doc : asps.getSpecificaSemiformaleList()) {
  2032.                 File f = new File(doc.getFile());
  2033.                 if(nome.equals(doc.getFile()) || nome.equals(f.getName())) {
  2034.                     if(tipo!=null && tipo.getNome().equals(doc.getTipo())) {
  2035.                         return doc;
  2036.                     }
  2037.                 }
  2038.             }
  2039.         }
  2040.         throw new DriverRegistroServiziNotFound("Documento '"+nome+"' non trovato");
  2041.     }
  2042.    
  2043.     @Override
  2044.     public Documento getSpecificaSicurezza(IDServizio idASPS, TipiDocumentoSicurezza tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2045.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = getAccordoServizioParteSpecifica(idASPS);
  2046.         if(asps.sizeSpecificaSicurezzaList()>0) {
  2047.             for (Documento doc : asps.getSpecificaSicurezzaList()) {
  2048.                 File f = new File(doc.getFile());
  2049.                 if(nome.equals(doc.getFile()) || nome.equals(f.getName())) {
  2050.                     if(tipo!=null && tipo.getNome().equals(doc.getTipo())) {
  2051.                         return doc;
  2052.                     }
  2053.                 }
  2054.             }
  2055.         }
  2056.         throw new DriverRegistroServiziNotFound("Documento '"+nome+"' non trovato");
  2057.     }
  2058.     @Override
  2059.     public Documento getSpecificaLivelloServizio(IDServizio idASPS, TipiDocumentoLivelloServizio tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2060.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica asps = getAccordoServizioParteSpecifica(idASPS);
  2061.         if(asps.sizeSpecificaLivelloServizioList()>0) {
  2062.             for (Documento doc : asps.getSpecificaLivelloServizioList()) {
  2063.                 File f = new File(doc.getFile());
  2064.                 if(nome.equals(doc.getFile()) || nome.equals(f.getName())) {
  2065.                     if(tipo!=null && tipo.getNome().equals(doc.getTipo())) {
  2066.                         return doc;
  2067.                     }
  2068.                 }
  2069.             }
  2070.         }
  2071.         throw new DriverRegistroServiziNotFound("Documento '"+nome+"' non trovato");
  2072.     }
  2073.    



  2074.     /**
  2075.      * Metodo che verica la connessione ad una risorsa.
  2076.      * Se la connessione non e' presente, viene lanciata una eccezione che contiene il motivo della mancata connessione
  2077.      *
  2078.      * @throws DriverException eccezione che contiene il motivo della mancata connessione
  2079.      */
  2080.     @Override
  2081.     public void isAlive() throws CoreException{
  2082.        
  2083.         if(this.create==false)
  2084.             throw new CoreException("Driver non inizializzato");
  2085.        
  2086.         try{
  2087.             this.forzaRefreshRegistroServiziXML();
  2088.         }catch(Exception e){
  2089.             throw new CoreException("Connessione al registro non disponibile: "+e.getMessage(),e);
  2090.         }
  2091.     }



  2092.     @Override
  2093.     public RegistroServizi getImmagineCompletaRegistroServizi() throws DriverRegistroServiziException{
  2094.        
  2095.         refreshRegistroServiziXML();        
  2096.         return this.registro;
  2097.     }
  2098. }