DriverRegistroServiziUDDI.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.uddi;

  21. import java.io.ByteArrayInputStream;
  22. import java.util.ArrayList;
  23. import java.util.List;

  24. import org.openspcoop2.core.commons.CoreException;
  25. import org.openspcoop2.core.commons.Filtri;
  26. import org.openspcoop2.core.commons.IDriverWS;
  27. import org.openspcoop2.core.commons.IMonitoraggioRisorsa;
  28. import org.openspcoop2.core.id.IDAccordo;
  29. import org.openspcoop2.core.id.IDAccordoAzione;
  30. import org.openspcoop2.core.id.IDAccordoCooperazione;
  31. import org.openspcoop2.core.id.IDFruizione;
  32. import org.openspcoop2.core.id.IDGruppo;
  33. import org.openspcoop2.core.id.IDPortType;
  34. import org.openspcoop2.core.id.IDPortTypeAzione;
  35. import org.openspcoop2.core.id.IDResource;
  36. import org.openspcoop2.core.id.IDRuolo;
  37. import org.openspcoop2.core.id.IDScope;
  38. import org.openspcoop2.core.id.IDServizio;
  39. import org.openspcoop2.core.id.IDSoggetto;
  40. import org.openspcoop2.core.registry.AccordoCooperazione;
  41. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  42. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  43. import org.openspcoop2.core.registry.Azione;
  44. import org.openspcoop2.core.registry.ConfigurazioneServizioAzione;
  45. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  46. import org.openspcoop2.core.registry.Documento;
  47. import org.openspcoop2.core.registry.Fruitore;
  48. import org.openspcoop2.core.registry.Gruppo;
  49. import org.openspcoop2.core.registry.GruppoAccordo;
  50. import org.openspcoop2.core.registry.Operation;
  51. import org.openspcoop2.core.registry.PortType;
  52. import org.openspcoop2.core.registry.PortaDominio;
  53. import org.openspcoop2.core.registry.Resource;
  54. import org.openspcoop2.core.registry.Ruolo;
  55. import org.openspcoop2.core.registry.Scope;
  56. import org.openspcoop2.core.registry.Soggetto;
  57. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  58. import org.openspcoop2.core.registry.constants.CostantiXMLRepository;
  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.driver.BeanUtilities;
  67. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  68. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  69. import org.openspcoop2.core.registry.driver.FiltroRicerca;
  70. import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
  71. import org.openspcoop2.core.registry.driver.FiltroRicercaAzioni;
  72. import org.openspcoop2.core.registry.driver.FiltroRicercaFruizioniServizio;
  73. import org.openspcoop2.core.registry.driver.FiltroRicercaGruppi;
  74. import org.openspcoop2.core.registry.driver.FiltroRicercaOperations;
  75. import org.openspcoop2.core.registry.driver.FiltroRicercaPortTypes;
  76. import org.openspcoop2.core.registry.driver.FiltroRicercaResources;
  77. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  78. import org.openspcoop2.core.registry.driver.FiltroRicercaScope;
  79. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  80. import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
  81. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  82. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  83. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  84. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziCRUD;
  85. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  86. import org.openspcoop2.core.registry.driver.ProtocolPropertiesUtilities;
  87. import org.openspcoop2.core.registry.driver.web.XMLLib;
  88. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  89. import org.openspcoop2.message.xml.ValidatoreXSD;
  90. import org.openspcoop2.utils.LoggerWrapperFactory;
  91. import org.openspcoop2.utils.UtilsException;
  92. import org.openspcoop2.utils.UtilsRuntimeException;
  93. import org.openspcoop2.utils.certificate.ArchiveLoader;
  94. import org.openspcoop2.utils.certificate.ArchiveType;
  95. import org.openspcoop2.utils.certificate.Certificate;
  96. import org.openspcoop2.utils.certificate.CertificateInfo;
  97. import org.openspcoop2.utils.certificate.CertificateUtils;
  98. import org.openspcoop2.utils.certificate.PrincipalType;
  99. import org.openspcoop2.utils.crypt.CryptConfig;
  100. import org.openspcoop2.utils.crypt.CryptFactory;
  101. import org.openspcoop2.utils.crypt.ICrypt;
  102. import org.openspcoop2.utils.transport.http.HttpUtilities;
  103. import org.slf4j.Logger;

  104. /**
  105.  * Classe utilizzata per effettuare query al registro UDDI, riguardanti specifiche
  106.  * proprieta' di servizi presenti all'interno del registro.
  107.  *
  108.  *
  109.  * @author Anedda Valentino (anedda@link.it)
  110.  * @author Poli Andrea (apoli@link.it)
  111.  * @author $Author$
  112.  * @version $Rev$, $Date$
  113.  */

  114. public class DriverRegistroServiziUDDI extends BeanUtilities
  115.    implements IDriverRegistroServiziGet,IDriverRegistroServiziCRUD, IDriverWS,IMonitoraggioRisorsa{


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

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

  120.     /** UDDI Lib. */
  121.     private UDDILib uddiLib=null;
  122.     /** --- URL Prefix utilizzato come prefisso da associare alle url memorizzate nelle entita create nell'UDDI
  123.     e contenenti le definizioni XML ------*/
  124.     private String urlPrefix;  
  125.     /** --- Utility per la generazione dell'XML ------*/
  126.     private XMLLib generatoreXML;
  127.    
  128.     /** Validatore della configurazione */
  129.     private ValidatoreXSD validatoreRegistro = null;
  130.    
  131.     /** Logger utilizzato per info. */
  132.     private org.slf4j.Logger log = null;

  133.     // Factory
  134.     private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  135.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  136.     private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();


  137.     /* ********  C O S T R U T T O R E  ******** */
  138.     /**
  139.      * Costruttore per Query senza autenticazione.
  140.      *
  141.      *
  142.      */
  143.     public DriverRegistroServiziUDDI(String inquiry,Logger alog){
  144.         this(inquiry,null,null,alog);
  145.     }
  146.     /**
  147.      * Costruttore per Query con autenticazione.
  148.      *
  149.      *
  150.      */
  151.     public DriverRegistroServiziUDDI(String inquiry,String user,String password,Logger alog){  
  152.         this(inquiry,null,user,password,null,null,alog);
  153.     }

  154.     /**
  155.      * Costruttore per Gestione senza autenticazione.
  156.      *
  157.      *
  158.      */
  159.     public DriverRegistroServiziUDDI(String inquiry,String publish, String urlPrefix, String pathPrefix,Logger alog){
  160.         this(inquiry,publish,null,null,urlPrefix,pathPrefix,alog);
  161.     }
  162.     /**
  163.      * Costruttore per Gestione con autenticazione.
  164.      *
  165.      *
  166.      */
  167.     public DriverRegistroServiziUDDI(String inquiry,String publish, String user,String password,String urlPrefix, String pathPrefix,Logger alog){

  168.         if(alog==null)
  169.             this.log = LoggerWrapperFactory.getLogger(DriverRegistroServiziUDDI.class);
  170.         else
  171.             this.log = alog;
  172.         if(this.log==null) {
  173.             throw new UtilsRuntimeException("Logger unavailable");
  174.         }
  175.         try{
  176.            
  177.             if(publish!=null){
  178.                 this.uddiLib=new UDDILib(inquiry,publish,user,password);
  179.             }else{
  180.                 if(user!=null && password!=null){
  181.                     this.uddiLib=new UDDILib(inquiry,user,password);
  182.                 }else{
  183.                     this.uddiLib=new UDDILib(inquiry);
  184.                 }
  185.             }

  186.             /* --- Costruzione Validatore XSD -- */
  187.             try{
  188.                 this.validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverRegistroServiziUDDI.class.getResourceAsStream("/registroServizi.xsd"));
  189.             }catch (Exception e) {
  190.                 throw new Exception("Riscontrato errore durante l'inizializzazione dello schema del Registro dei Servizi di OpenSPCoop: "+e.getMessage(),e);
  191.             }
  192.            
  193.             if(urlPrefix!=null){
  194.                 if (!urlPrefix.endsWith(CostantiRegistroServizi.URL_SEPARATOR))
  195.                     this.urlPrefix= urlPrefix + CostantiRegistroServizi.URL_SEPARATOR;
  196.                 else
  197.                     this.urlPrefix = urlPrefix;
  198.             }
  199.             if(urlPrefix!=null && pathPrefix!=null){
  200.                 this.generatoreXML = new XMLLib(pathPrefix,urlPrefix);
  201.             }
  202.            
  203.             this.create = this.uddiLib.create;
  204.         }catch(Exception e){
  205.             this.log.error("Inizializzazione fallita: "+e.getMessage(),e);
  206.             this.create = false;
  207.         }
  208.     }





  209.    
  210.     /* ********  INTERFACCIA IDriverRegistroServiziGet ******** */
  211.    
  212.    
  213.     /* Accordi di Cooperazione */
  214.    
  215.     /**
  216.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoCooperazione},
  217.      * identificato grazie al parametro
  218.      * <var>nomeAccordo</var>
  219.      *
  220.      * @param idAccordo Identificativo dell'accordo di Cooperazione
  221.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.AccordoCooperazione}.
  222.      *
  223.      */
  224.     @Override
  225.     public org.openspcoop2.core.registry.AccordoCooperazione getAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  226.         if( idAccordo == null)
  227.             throw new DriverRegistroServiziException("[AccordoCooperazione] Parametro Non Valido");
  228.         if( idAccordo.getNome() == null)
  229.             throw new DriverRegistroServiziException("[AccordoCooperazione] Nome accordo servizio non fornito");
  230.        
  231.         //       controllo inizializzazione UDDI
  232.         if(this.uddiLib.create == false){
  233.             throw new DriverRegistroServiziException("[AccordoCooperazione] Inizializzazione dell'engine UDDI errata");
  234.         }
  235.        
  236.         //       Controllo pre-esistenza dell'accordo
  237.         if( this.uddiLib.existsAccordoCooperazione(idAccordo) == false){
  238.             throw new DriverRegistroServiziNotFound("[AccordoCooperazione] Accordo richiesto non esiste: "+idAccordo);
  239.         }
  240.        
  241.         org.openspcoop2.core.registry.AccordoCooperazione accRichiesto = null;

  242.         // Ottengo URL XML associato all'accordo
  243.         String urlXMLAccordoCooperazione = this.uddiLib.getUrlXmlAccordoCooperazione(idAccordo);
  244.         if(urlXMLAccordoCooperazione == null){
  245.             throw new DriverRegistroServiziException("[AccordoCooperazione] definzione XML non disponibile");
  246.         }

  247.         // Ottengo oggetto AccordoCooperazione
  248.         ByteArrayInputStream bin = null;
  249.         try{
  250.             byte[] fileXML = null;
  251.             try{
  252.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLAccordoCooperazione);
  253.             }catch(UtilsException e){
  254.                 // Controllo pre-esistenza dell'accordo
  255.                 if( "404".equals(e.getMessage()) ){
  256.                     throw new DriverRegistroServiziNotFound("[AccordoCooperazione] Accordo richiesto non esiste nel repository http: "+idAccordo);
  257.                 } else
  258.                     throw e;
  259.             }
  260.            
  261.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  262.             try{
  263.                 this.validatoreRegistro.valida(urlXMLAccordoCooperazione);  
  264.             }catch (Exception e) {
  265.                 throw new DriverRegistroServiziException("[AccordoCooperazione] Riscontrato errore durante la validazione XSD Accordo("+idAccordo+"): "+e.getMessage(),e);
  266.             }
  267.            
  268.             // parsing
  269.             bin = new ByteArrayInputStream(fileXML);
  270.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  271.             org.openspcoop2.core.registry.RegistroServizi rs =
  272.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  273.             if(rs.sizeAccordoCooperazioneList()>0)
  274.                 accRichiesto = rs.getAccordoCooperazione(0);
  275.             bin.close();
  276.         }catch(Exception e){
  277.             try{
  278.                 if(bin!=null)
  279.                     bin.close();
  280.             } catch(Exception eis) {
  281.                 // ignore
  282.             }
  283.             if(e instanceof DriverRegistroServiziNotFound)
  284.                 throw (DriverRegistroServiziNotFound)e;
  285.             else
  286.                 throw new DriverRegistroServiziException("[AccordoCooperazione] Errore durante il parsing xml Accordo("+idAccordo+"): "+e.getMessage(),e);
  287.         }

  288.         if(accRichiesto==null)
  289.             throw new DriverRegistroServiziNotFound("[AccordoCooperazione] Accordo di Cooperazione ["+idAccordo+"] non trovato.");
  290.        
  291.         return accRichiesto;
  292.     }

  293.     /**
  294.      * Ritorna gli identificatori degli accordi che rispettano il parametro di ricerca
  295.      *
  296.      * @param filtroRicerca
  297.      * @return Una lista di ID degli accordi trovati
  298.      * @throws DriverRegistroServiziException
  299.      * @throws DriverRegistroServiziNotFound
  300.      */
  301.     @Override
  302.     public List<IDAccordoCooperazione> getAllIdAccordiCooperazione(FiltroRicercaAccordi filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  303.         try{

  304.             // Ricerca UDDI degli accordi
  305.             /*if(this.urlPrefix==null){
  306.                 throw new DriverRegistroServiziException("[getAllIdAccordiCooperazione] Implementazione non eseguibile se il driver non viene inizializzato con urlPrefix.");
  307.             }*/
  308.            
  309.             IDAccordoCooperazione idAccordoFiltro = null;
  310.             if(filtroRicerca!=null && filtroRicerca.getNomeAccordo()!=null){
  311.                 IDSoggetto soggettoReferente = null;
  312.                 if(filtroRicerca.getTipoSoggettoReferente()!=null && filtroRicerca.getNomeSoggettoReferente()!=null){
  313.                     soggettoReferente = new IDSoggetto(filtroRicerca.getTipoSoggettoReferente(), filtroRicerca.getNomeSoggettoReferente());
  314.                 }
  315.                 idAccordoFiltro = this.idAccordoCooperazioneFactory.getIDAccordoFromValues(filtroRicerca.getNomeAccordo(),soggettoReferente,filtroRicerca.getVersione());
  316.             }
  317.            
  318.             String [] urlXMLAccordi = this.uddiLib.getUrlXmlAccordiCooperazione(idAccordoFiltro,this.urlPrefix);
  319.            
  320.             // Esamina degli accordi
  321.             List<IDAccordoCooperazione> idAccordi = new ArrayList<IDAccordoCooperazione>();
  322.             for(int i=0; i<urlXMLAccordi.length; i++){
  323.                 org.openspcoop2.core.registry.AccordoCooperazione ac = null;
  324.                
  325.                 /* --- Validazione XSD -- */
  326.                 try{
  327.                     this.validatoreRegistro.valida(urlXMLAccordi[i]);  
  328.                 }catch (Exception e) {
  329.                     throw new DriverRegistroServiziException("[getAllIdAccordiCooperazione] Riscontrato errore durante la validazione XSD ("+urlXMLAccordi[i]+"): "+e.getMessage(),e);
  330.                 }
  331.                
  332.                 // Ottengo oggetto Accordo
  333.                 ByteArrayInputStream bin = null;
  334.                 try{
  335.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLAccordi[i]);
  336.                     bin = new ByteArrayInputStream(fileXML);
  337.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  338.                     org.openspcoop2.core.registry.RegistroServizi rs =
  339.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  340.                     if(rs.sizeAccordoCooperazioneList()>0)
  341.                         ac = rs.getAccordoCooperazione(0);
  342.                     bin.close();
  343.                 }catch(Exception e){
  344.                     try{
  345.                         if(bin!=null)
  346.                             bin.close();
  347.                     } catch(Exception eis) {
  348.                         // ignore
  349.                     }
  350.                     throw new DriverRegistroServiziException("[getAllIdAccordiCooperazione] Errore durante il parsing xml ("+urlXMLAccordi[i]+"): "+e.getMessage(),e);
  351.                 }
  352.                 if(ac==null)
  353.                     throw new DriverRegistroServiziException("[getAllIdAccordiCooperazione] accordo non definito per la url ["+urlXMLAccordi[i]+"]");
  354.                 String acURI = this.idAccordoCooperazioneFactory.getUriFromAccordo(ac);
  355.                
  356.                 if(filtroRicerca!=null){
  357.                     // Filtro By Data
  358.                     if(filtroRicerca.getMinDate()!=null){
  359.                         if(ac.getOraRegistrazione()==null){
  360.                             this.log.debug("[getAllIdAccordiCooperazione](FiltroByMinDate) Accordo di cooperazione ["+acURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  361.                             continue;
  362.                         }else if(ac.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  363.                             continue;
  364.                         }
  365.                     }
  366.                     if(filtroRicerca.getMaxDate()!=null){
  367.                         if(ac.getOraRegistrazione()==null){
  368.                             this.log.debug("[getAllIdAccordiCooperazione](FiltroByMaxDate) Accordo di cooperazione ["+acURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  369.                             continue;
  370.                         }else if(ac.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  371.                             continue;
  372.                         }
  373.                     }
  374.                     // Filtro By Nome
  375.                     if(filtroRicerca.getNomeAccordo()!=null){
  376.                         if(ac.getNome().equals(filtroRicerca.getNomeAccordo()) == false){
  377.                             continue;
  378.                         }
  379.                     }
  380.                     if(filtroRicerca.getVersione()!=null){
  381.                         if(ac.getVersione().equals(filtroRicerca.getVersione()) == false){
  382.                             continue;
  383.                         }
  384.                     }
  385.                     if(filtroRicerca.getTipoSoggettoReferente()!=null || filtroRicerca.getNomeSoggettoReferente()!=null){
  386.                         if(ac.getSoggettoReferente()==null)
  387.                             continue;
  388.                         if(filtroRicerca.getTipoSoggettoReferente()!=null){
  389.                             if(ac.getSoggettoReferente().getTipo().equals(filtroRicerca.getTipoSoggettoReferente()) == false){
  390.                                 continue;
  391.                             }
  392.                         }
  393.                         if(filtroRicerca.getNomeSoggettoReferente()!=null){
  394.                             if(ac.getSoggettoReferente().getNome().equals(filtroRicerca.getNomeSoggettoReferente()) == false){
  395.                                 continue;
  396.                             }
  397.                         }
  398.                     }
  399.                     // ProtocolProperties
  400.                     if(ProtocolPropertiesUtilities.isMatch(ac, filtroRicerca.getProtocolPropertiesAccordo())==false){
  401.                         continue;
  402.                     }
  403.                 }
  404.                 idAccordi.add(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(ac));
  405.             }
  406.             if(idAccordi.size()==0){
  407.                 throw new DriverRegistroServiziNotFound("Accordi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  408.             }else{
  409.                 return idAccordi;
  410.             }
  411.         }catch(Exception e){
  412.             if(e instanceof DriverRegistroServiziNotFound)
  413.                 throw (DriverRegistroServiziNotFound)e;
  414.             else
  415.                 throw new DriverRegistroServiziException("getAllIdAccordiCooperazione error",e);
  416.         }
  417.     }
  418.    
  419.    
  420.    
  421.    
  422.    
  423.    
  424.     /* Accordi di Servizio Parte Comune */
  425.    
  426.     /**
  427.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteComune},
  428.      * identificato grazie al parametro
  429.      * <var>nomeAccordo</var>
  430.      *
  431.      * @param idAccordo Identificativo dell'accordo di Servizio
  432.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteComune}.
  433.      *
  434.      */
  435.     @Override
  436.     public org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  437.         if( idAccordo == null)
  438.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro Non Valido");
  439.         if( idAccordo.getNome() == null)
  440.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Nome accordo servizio non fornito");
  441.        
  442.         //       controllo inizializzazione UDDI
  443.         if(this.uddiLib.create == false){
  444.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Inizializzazione dell'engine UDDI errata");
  445.         }
  446.        
  447.         //       Controllo pre-esistenza dell'accordo
  448.         if( this.uddiLib.existsAccordoServizio(idAccordo) == false){
  449.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteComune] Accordo richiesto non esiste: "+idAccordo);
  450.         }
  451.        
  452.         org.openspcoop2.core.registry.AccordoServizioParteComune accRichiesto = null;

  453.         // Ottengo URL XML associato all'accordo
  454.         String urlXMLAccordoServizio = this.uddiLib.getUrlXmlAccordoServizio(idAccordo);
  455.         if(urlXMLAccordoServizio == null){
  456.             throw new DriverRegistroServiziException("[getAccordoServizioParteComune] definzione XML non disponibile");
  457.         }

  458.         // Ottengo oggetto AccordoServizio
  459.         ByteArrayInputStream bin = null;
  460.         try{
  461.             byte[] fileXML = null;
  462.             try{
  463.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLAccordoServizio);
  464.             }catch(UtilsException e){
  465.                 // Controllo pre-esistenza dell'accordo
  466.                 if( "404".equals(e.getMessage()) ){
  467.                     throw new DriverRegistroServiziNotFound("[getAccordoServizioParteComune] Accordo richiesto non esiste nel repository http: "+idAccordo);
  468.                 } else
  469.                     throw e;
  470.             }
  471.            
  472.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  473.             try{
  474.                 this.validatoreRegistro.valida(urlXMLAccordoServizio);  
  475.             }catch (Exception e) {
  476.                 throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Riscontrato errore durante la validazione XSD Accordo("+idAccordo+"): "+e.getMessage(),e);
  477.             }
  478.            
  479.             // parsing
  480.             bin = new ByteArrayInputStream(fileXML);
  481.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  482.             org.openspcoop2.core.registry.RegistroServizi rs =
  483.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  484.             if(rs.sizeAccordoServizioParteComuneList()>0)
  485.                 accRichiesto = rs.getAccordoServizioParteComune(0);
  486.             bin.close();
  487.         }catch(Exception e){
  488.             try{
  489.                 if(bin!=null)
  490.                     bin.close();
  491.             } catch(Exception eis) {
  492.                 // ignore
  493.             }
  494.             if(e instanceof DriverRegistroServiziNotFound)
  495.                 throw (DriverRegistroServiziNotFound)e;
  496.             else
  497.                 throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Errore durante il parsing xml Accordo("+idAccordo+"): "+e.getMessage(),e);
  498.         }

  499.         if(accRichiesto==null)
  500.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteComune] Accordo di Servizio ["+idAccordo+"] non trovato.");
  501.        
  502.         // nomiAzione setting
  503. //      accRichiesto.setNomiAzione(accRichiesto.readNomiAzione());
  504.        
  505.         return accRichiesto;
  506.     }

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

  509.         List<IDAccordo> list = new ArrayList<IDAccordo>();
  510.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAccordiServizioParteComune", filtroRicerca, null, null, null, null, list);
  511.         return list;
  512.    
  513.     }
  514.    
  515.     @Override
  516.     public List<IDPortType> getAllIdPortType(FiltroRicercaPortTypes filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  517.        
  518.         List<IDPortType> list = new ArrayList<IDPortType>();
  519.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdPortType", filtroRicerca, filtroRicerca, null, null, null, list);
  520.         return list;
  521.        
  522.     }
  523.    
  524.     @Override
  525.     public List<IDPortTypeAzione> getAllIdAzionePortType(FiltroRicercaOperations filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  526.    
  527.         List<IDPortTypeAzione> list = new ArrayList<IDPortTypeAzione>();
  528.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAzionePortType", filtroRicerca, null, filtroRicerca, null, null, list);
  529.         return list;
  530.        
  531.     }
  532.    
  533.     @Override
  534.     public List<IDAccordoAzione> getAllIdAzioneAccordo(FiltroRicercaAzioni filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  535.        
  536.         List<IDAccordoAzione> list = new ArrayList<IDAccordoAzione>();
  537.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAzioneAccordo", filtroRicerca, null, null, filtroRicerca, null, list);
  538.         return list;
  539.        
  540.     }
  541.    
  542.     @Override
  543.     public List<IDResource> getAllIdResource(FiltroRicercaResources filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  544.        
  545.         List<IDResource> list = new ArrayList<IDResource>();
  546.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdResource", filtroRicerca, null, null, null, filtroRicerca, list);
  547.         return list;
  548.        
  549.     }
  550.    
  551.     @SuppressWarnings("unchecked")
  552.     public <T> void _fillAllIdAccordiServizioParteComuneEngine(String nomeMetodo,
  553.             FiltroRicercaAccordi filtroRicercaBase,
  554.             FiltroRicercaPortTypes filtroPT, FiltroRicercaOperations filtroOP, FiltroRicercaAzioni filtroAZ,
  555.             FiltroRicercaResources filtroResource,
  556.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  557.         try{

  558.             // Ricerca UDDI degli accordi
  559.             /*if(this.urlPrefix==null){
  560.                 throw new DriverRegistroServiziException("[getAllIdAccordiServizio] Implementazione non eseguibile se il driver non viene inizializzato con urlPrefix.");
  561.             }*/
  562.            
  563.             IDAccordo idAccordoFiltro = null;
  564.             if(filtroRicercaBase!=null && filtroRicercaBase.getNomeAccordo()!=null){
  565.                 IDSoggetto soggettoReferente = null;
  566.                 if(filtroRicercaBase.getTipoSoggettoReferente()!=null && filtroRicercaBase.getNomeSoggettoReferente()!=null){
  567.                     soggettoReferente = new IDSoggetto(filtroRicercaBase.getTipoSoggettoReferente(),filtroRicercaBase.getNomeSoggettoReferente());
  568.                 }
  569.                 idAccordoFiltro = this.idAccordoFactory.getIDAccordoFromValues(filtroRicercaBase.getNomeAccordo(),soggettoReferente,filtroRicercaBase.getVersione());
  570.             }
  571.                        
  572.             String [] urlXMLAccordi = this.uddiLib.getUrlXmlAccordiServizio(idAccordoFiltro,this.urlPrefix);
  573.            
  574.             // Esamina degli accordi
  575.             List<IDAccordo> idAccordi = new ArrayList<IDAccordo>();
  576.             for(int i=0; i<urlXMLAccordi.length; i++){
  577.                 org.openspcoop2.core.registry.AccordoServizioParteComune as = null;
  578.                
  579.                 /* --- Validazione XSD -- */
  580.                 try{
  581.                     this.validatoreRegistro.valida(urlXMLAccordi[i]);  
  582.                 }catch (Exception e) {
  583.                     throw new DriverRegistroServiziException("["+nomeMetodo+"] Riscontrato errore durante la validazione XSD ("+urlXMLAccordi[i]+"): "+e.getMessage(),e);
  584.                 }
  585.                
  586.                 // Ottengo oggetto Accordo
  587.                 ByteArrayInputStream bin = null;
  588.                 try{
  589.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLAccordi[i]);
  590.                     bin = new ByteArrayInputStream(fileXML);
  591.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  592.                     org.openspcoop2.core.registry.RegistroServizi rs =
  593.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  594.                     if(rs.sizeAccordoServizioParteComuneList()>0)
  595.                         as = rs.getAccordoServizioParteComune(0);
  596.                     bin.close();
  597.                 }catch(Exception e){
  598.                     try{
  599.                         if(bin!=null)
  600.                             bin.close();
  601.                     } catch(Exception eis) {
  602.                         // ignore
  603.                     }
  604.                     throw new DriverRegistroServiziException("["+nomeMetodo+"] Errore durante il parsing xml ("+urlXMLAccordi[i]+"): "+e.getMessage(),e);
  605.                 }
  606.                 if(as==null)
  607.                     throw new DriverRegistroServiziException("["+nomeMetodo+"] accordo non definito per la url ["+urlXMLAccordi[i]+"]");
  608.                 String asURI = this.idAccordoFactory.getUriFromAccordo(as);
  609.                
  610.                 if(filtroRicercaBase!=null){
  611.                    
  612.                     List<String> tipoSoggettiProtocollo = null;
  613.                     try {
  614.                         if(filtroRicercaBase!=null && (filtroRicercaBase.getProtocollo()!=null || (filtroRicercaBase.getProtocolli()!=null && !filtroRicercaBase.getProtocolli().isEmpty()))){
  615.                             tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filtroRicercaBase.getProtocollo(), Filtri.convertToString(filtroRicercaBase.getProtocolli()));
  616.                         }
  617.                     }catch(Exception e) {
  618.                         throw new DriverRegistroServiziException(e.getMessage(),e);
  619.                     }
  620.                     boolean searchByTipoSoggetto = (tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0);
  621.                    
  622.                     // Filtro By Data
  623.                     if(filtroRicercaBase.getMinDate()!=null){
  624.                         if(as.getOraRegistrazione()==null){
  625.                             this.log.debug("["+nomeMetodo+"](FiltroByMinDate) Accordo di servizio ["+asURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  626.                             continue;
  627.                         }else if(as.getOraRegistrazione().before(filtroRicercaBase.getMinDate())){
  628.                             continue;
  629.                         }
  630.                     }
  631.                     if(filtroRicercaBase.getMaxDate()!=null){
  632.                         if(as.getOraRegistrazione()==null){
  633.                             this.log.debug("["+nomeMetodo+"](FiltroByMaxDate) Accordo di servizio ["+asURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  634.                             continue;
  635.                         }else if(as.getOraRegistrazione().after(filtroRicercaBase.getMaxDate())){
  636.                             continue;
  637.                         }
  638.                     }
  639.                     // Filtro By Nome
  640.                     if(filtroRicercaBase.getNomeAccordo()!=null){
  641.                         if(as.getNome().equals(filtroRicercaBase.getNomeAccordo()) == false){
  642.                             continue;
  643.                         }
  644.                     }
  645.                     if(filtroRicercaBase.getVersione()!=null){
  646.                         if(as.getVersione().equals(filtroRicercaBase.getVersione()) == false){
  647.                             continue;
  648.                         }
  649.                     }
  650.                     if(searchByTipoSoggetto || filtroRicercaBase.getTipoSoggettoReferente()!=null || filtroRicercaBase.getNomeSoggettoReferente()!=null){
  651.                         if(as.getSoggettoReferente()==null)
  652.                             continue;
  653.                         if(filtroRicercaBase.getTipoSoggettoReferente()!=null){
  654.                             if(as.getSoggettoReferente().getTipo().equals(filtroRicercaBase.getTipoSoggettoReferente()) == false){
  655.                                 continue;
  656.                             }
  657.                         }
  658.                         else if(searchByTipoSoggetto) {
  659.                             boolean find = false;
  660.                             for (String tipoSoggettoProtocollo : tipoSoggettiProtocollo) {
  661.                                 if(as.getSoggettoReferente().getTipo().equals(tipoSoggettoProtocollo)){
  662.                                     find = true;
  663.                                     break;
  664.                                 }
  665.                             }
  666.                             if(!find) {
  667.                                 continue;
  668.                             }
  669.                         }
  670.                         if(filtroRicercaBase.getNomeSoggettoReferente()!=null){
  671.                             if(as.getSoggettoReferente().getNome().equals(filtroRicercaBase.getNomeSoggettoReferente()) == false){
  672.                                 continue;
  673.                             }
  674.                         }
  675.                     }
  676.                     if(filtroRicercaBase.getServiceBinding()!=null){
  677.                         if(as.getServiceBinding().equals(filtroRicercaBase.getServiceBinding()) == false){
  678.                             continue;
  679.                         }
  680.                     }
  681.                     if(filtroRicercaBase.getIdGruppo()!=null && filtroRicercaBase.getIdGruppo().getNome()!=null){
  682.                         boolean found = false;
  683.                         if(as.getGruppi()!=null && as.getGruppi().sizeGruppoList()>0) {
  684.                             for (GruppoAccordo gruppo : as.getGruppi().getGruppoList()) {
  685.                                 if(gruppo.getNome().equals(filtroRicercaBase.getIdGruppo().getNome())) {
  686.                                     found = true;
  687.                                     break;
  688.                                 }
  689.                             }
  690.                         }
  691.                         if(!found) {
  692.                             continue;
  693.                         }
  694.                     }
  695.                    
  696.                     if(filtroRicercaBase.getIdAccordoCooperazione()!=null &&
  697.                             (filtroRicercaBase.getIdAccordoCooperazione().getNome()!=null ||
  698.                             filtroRicercaBase.getIdAccordoCooperazione().getVersione()!=null) ){
  699.                         if(as.getServizioComposto()==null){
  700.                             continue;
  701.                         }
  702.                         IDAccordoCooperazione idAC = this.idAccordoCooperazioneFactory.getIDAccordoFromUri(as.getServizioComposto().getAccordoCooperazione());
  703.                         if(filtroRicercaBase.getIdAccordoCooperazione().getNome()!=null){
  704.                             if(idAC.getNome().equals(filtroRicercaBase.getIdAccordoCooperazione().getNome())== false){
  705.                                 continue;
  706.                             }
  707.                         }
  708.                         if(filtroRicercaBase.getIdAccordoCooperazione().getVersione()!=null){
  709.                             if(idAC.getVersione().equals(filtroRicercaBase.getIdAccordoCooperazione().getVersione())== false){
  710.                                 continue;
  711.                             }
  712.                         }
  713.                     }
  714.                     else if(filtroRicercaBase.isServizioComposto()!=null){
  715.                         if(filtroRicercaBase.isServizioComposto()){
  716.                             if(as.getServizioComposto()==null){
  717.                                 continue;
  718.                             }
  719.                         }
  720.                         else {
  721.                             if(as.getServizioComposto()!=null){
  722.                                 continue;
  723.                             }
  724.                         }
  725.                     }
  726.                    
  727.                     // ProtocolProperties
  728.                     if(ProtocolPropertiesUtilities.isMatch(as, filtroRicercaBase.getProtocolPropertiesAccordo())==false){
  729.                         continue;
  730.                     }
  731.                    
  732.                 }
  733.                
  734.                 IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromValues(as.getNome(),BeanUtilities.getSoggettoReferenteID(as.getSoggettoReferente()),as.getVersione());
  735.                
  736.                 if(filtroPT!=null){
  737.                     for (PortType pt : as.getPortTypeList()) {
  738.                         // Nome PT
  739.                         if(filtroPT.getNomePortType()!=null){
  740.                             if(pt.getNome().equals(filtroPT.getNomePortType()) == false){
  741.                                 continue;
  742.                             }
  743.                         }
  744.                         // ProtocolProperties PT
  745.                         if(ProtocolPropertiesUtilities.isMatch(pt, filtroPT.getProtocolPropertiesPortType())==false){
  746.                             continue;
  747.                         }
  748.                        
  749.                         IDPortType idPT = new IDPortType();
  750.                         idPT.setIdAccordo(idAccordo);
  751.                         idPT.setNome(pt.getNome());
  752.                         listReturn.add((T)idPT);
  753.                     }
  754.                 }
  755.                 else if(filtroOP!=null){
  756.                     for (PortType pt : as.getPortTypeList()) {
  757.                        
  758.                         // Nome PT
  759.                         if(filtroOP.getNomePortType()!=null){
  760.                             if(pt.getNome().equals(filtroOP.getNomePortType()) == false){
  761.                                 continue;
  762.                             }
  763.                         }
  764.                         // ProtocolProperties PT
  765.                         if(ProtocolPropertiesUtilities.isMatch(pt, filtroOP.getProtocolPropertiesPortType())==false){
  766.                             continue;
  767.                         }
  768.                        
  769.                         for (Operation op : pt.getAzioneList()) {
  770.                            
  771.                             // Nome OP
  772.                             if(filtroOP.getNomeAzione()!=null){
  773.                                 if(op.getNome().equals(filtroOP.getNomeAzione()) == false){
  774.                                     continue;
  775.                                 }
  776.                             }
  777.                             // ProtocolProperties OP
  778.                             if(ProtocolPropertiesUtilities.isMatch(pt, filtroOP.getProtocolPropertiesAzione())==false){
  779.                                 continue;
  780.                             }
  781.                        
  782.                             IDPortTypeAzione idAzione = new IDPortTypeAzione();
  783.                             IDPortType idPT = new IDPortType();
  784.                             idPT.setIdAccordo(idAccordo);
  785.                             idPT.setNome(pt.getNome());
  786.                             idAzione.setIdPortType(idPT);
  787.                             idAzione.setNome(op.getNome());
  788.                             listReturn.add((T)idAzione);
  789.                         }
  790.                     }
  791.                 }
  792.                 else if(filtroAZ!=null){
  793.                     for (Azione az : as.getAzioneList()) {
  794.                        
  795.                         // Nome AZ
  796.                         if(filtroAZ.getNomeAzione()!=null){
  797.                             if(az.getNome().equals(filtroAZ.getNomeAzione()) == false){
  798.                                 continue;
  799.                             }
  800.                         }
  801.                         // ProtocolProperties PT
  802.                         if(ProtocolPropertiesUtilities.isMatch(az, filtroAZ.getProtocolPropertiesAzione())==false){
  803.                             continue;
  804.                         }
  805.                        
  806.                         IDAccordoAzione idAzione = new IDAccordoAzione();
  807.                         idAzione.setIdAccordo(idAccordo);
  808.                         idAzione.setNome(az.getNome());
  809.                         listReturn.add((T)idAzione);
  810.                     }
  811.                 }
  812.                 else if(filtroResource!=null){
  813.                     for (Resource resource : as.getResourceList()) {
  814.                         // Nome Risorsa
  815.                         if(filtroResource.getResourceName()!=null){
  816.                             if(resource.getNome().equals(filtroResource.getResourceName()) == false){
  817.                                 continue;
  818.                             }
  819.                         }
  820.                         // ProtocolProperties PT
  821.                         if(ProtocolPropertiesUtilities.isMatch(resource, filtroResource.getProtocolPropertiesResources())==false){
  822.                             continue;
  823.                         }
  824.                        
  825.                         IDResource idResource = new IDResource();
  826.                         idResource.setIdAccordo(idAccordo);
  827.                         idResource.setNome(resource.getNome());
  828.                         listReturn.add((T)idResource);
  829.                     }
  830.                 }
  831.                 else{
  832.                     listReturn.add((T)idAccordo);
  833.                 }
  834.             }
  835.             if(idAccordi.size()<=0){
  836.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  837.                 if(filtroPT!=null){
  838.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroPT.toString());
  839.                 }
  840.                 else if(filtroOP!=null){
  841.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroOP.toString());
  842.                 }
  843.                 else if(filtroAZ!=null){
  844.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroAZ.toString());
  845.                 }
  846.                 else if(filtroRicercaBase!=null){
  847.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicercaBase.toString());
  848.                 }
  849.                 else{
  850.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  851.                 }
  852.             }
  853.         }catch(Exception e){
  854.             if(e instanceof DriverRegistroServiziNotFound)
  855.                 throw (DriverRegistroServiziNotFound)e;
  856.             else
  857.                 throw new DriverRegistroServiziException(nomeMetodo+" error",e);
  858.         }
  859.     }
  860.    
  861.     @Override
  862.     public Documento getAllegato(IDAccordo idAccordo, String nome) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  863.         throw new DriverRegistroServiziException("Not Implemented");
  864.     }
  865.     @Override
  866.     public Documento getSpecificaSemiformale(IDAccordo idAccordo, TipiDocumentoSemiformale tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  867.         throw new DriverRegistroServiziException("Not Implemented");
  868.     }
  869.    
  870.    
  871.    
  872.    
  873.     /* Porte di Dominio */
  874.    
  875.     /**
  876.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.PortaDominio},
  877.      * identificato grazie al parametro
  878.      * <var>nomePdD</var>
  879.      *
  880.      * @param nomePdD Nome della Porta di Dominio
  881.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.PortaDominio}.
  882.      *
  883.      */
  884.     @Override
  885.     public org.openspcoop2.core.registry.PortaDominio getPortaDominio(String nomePdD) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  886.         if( nomePdD == null)
  887.             throw new DriverRegistroServiziException("[getPortaDominio] Parametro Non Valido");

  888.         //       controllo inizializzazione UDDI
  889.         if(this.uddiLib.create == false){
  890.             throw new DriverRegistroServiziException("[getPortaDominio] Inizializzazione dell'engine UDDI errata");
  891.         }
  892.        
  893.         //       Controllo pre-esistenza della porta di dominio
  894.         if( this.uddiLib.existsPortaDominio(nomePdD) == false){
  895.             throw new DriverRegistroServiziNotFound("[getPortaDominio] Porta di dominio richiesta non esiste: "+nomePdD);
  896.         }
  897.        
  898.         org.openspcoop2.core.registry.PortaDominio pddRichiesta = null;

  899.         // Ottengo URL XML associato alla porta di dominio
  900.         String urlXMLPortaDominio = this.uddiLib.getUrlXmlPortaDominio(nomePdD);
  901.         if(urlXMLPortaDominio == null){
  902.             throw new DriverRegistroServiziException("[getPortaDominio] definzione XML non disponibile");
  903.         }

  904.         // Ottengo oggetto PortaDominio
  905.         ByteArrayInputStream bin = null;
  906.         try{
  907.             byte[] fileXML = null;
  908.             try{
  909.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLPortaDominio);
  910.             }catch(UtilsException e){
  911.                 // Controllo pre-esistenza dell'accordo
  912.                 if( "404".equals(e.getMessage()) ){
  913.                     throw new DriverRegistroServiziNotFound("[getPortaDominio] Porta di dominio richiesta non esiste nel repository http: "+nomePdD);
  914.                 } else
  915.                     throw e;
  916.             }
  917.            
  918.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  919.             try{
  920.                 this.validatoreRegistro.valida(urlXMLPortaDominio);  
  921.             }catch (Exception e) {
  922.                 throw new DriverRegistroServiziException("[getPortaDominio] Riscontrato errore durante la validazione XSD della Porta di dominio("+nomePdD+"): "+e.getMessage(),e);
  923.             }
  924.            
  925.             // parsing
  926.             bin = new ByteArrayInputStream(fileXML);
  927.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  928.             org.openspcoop2.core.registry.RegistroServizi rs =
  929.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  930.             if(rs.sizePortaDominioList()>0)
  931.                 pddRichiesta = rs.getPortaDominio(0);
  932.             bin.close();
  933.         }catch(Exception e){
  934.             try{
  935.                 if(bin!=null)
  936.                     bin.close();
  937.             } catch(Exception eis) {
  938.                 // ignore
  939.             }
  940.             if(e instanceof DriverRegistroServiziNotFound)
  941.                 throw (DriverRegistroServiziNotFound)e;
  942.             else
  943.                 throw new DriverRegistroServiziException("[getPortaDominio] Errore durante il parsing xml della Porta di dominio("+nomePdD+"): "+e.getMessage(),e);
  944.         }

  945.         if(pddRichiesta==null)
  946.             throw new DriverRegistroServiziNotFound("[getPortaDominio] Porta di dominio ["+nomePdD+"] non trovata.");
  947.        
  948.         return pddRichiesta;
  949.     }

  950.     /**
  951.      * Ritorna gli identificatori delle PdD che rispettano il parametro di ricerca
  952.      *
  953.      * @param filtroRicerca
  954.      * @return Una lista di ID degli accordi trovati
  955.      * @throws DriverRegistroServiziException
  956.      * @throws DriverRegistroServiziNotFound
  957.      */
  958.     @Override
  959.     public List<String> getAllIdPorteDominio(FiltroRicerca filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  960.         try{

  961.             // Ricerca UDDI delle porte di dominio
  962.             /*if(this.urlPrefix==null){
  963.                 throw new DriverRegistroServiziException("[getAllIdPorteDominio] Implementazione non eseguibile se il driver non viene inizializzato con urlPrefix.");
  964.             }*/
  965.            
  966.             String nomeFiltro = null;
  967.             if(filtroRicerca!=null)
  968.                 nomeFiltro = filtroRicerca.getNome();
  969.             String [] urlXMLPdd = this.uddiLib.getUrlXmlPortaDominio(nomeFiltro,this.urlPrefix);
  970.            
  971.             // Esamina delle porte di dominio
  972.             List<String> nomiPdd = new ArrayList<>();
  973.             for(int i=0; i<urlXMLPdd.length; i++){
  974.                 org.openspcoop2.core.registry.PortaDominio pd = null;
  975.                
  976.                 /* --- Validazione XSD -- */
  977.                 try{
  978.                     this.validatoreRegistro.valida(urlXMLPdd[i]);  
  979.                 }catch (Exception e) {
  980.                     throw new DriverRegistroServiziException("[getAllIdPorteDominio] Riscontrato errore durante la validazione XSD ("+urlXMLPdd[i]+"): "+e.getMessage(),e);
  981.                 }
  982.                
  983.                 // Ottengo oggetto Porta di dominio
  984.                 ByteArrayInputStream bin = null;
  985.                 try{
  986.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLPdd[i]);
  987.                     bin = new ByteArrayInputStream(fileXML);
  988.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  989.                     org.openspcoop2.core.registry.RegistroServizi rs =
  990.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  991.                     if(rs.sizePortaDominioList()>0)
  992.                         pd = rs.getPortaDominio(0);
  993.                     bin.close();
  994.                 }catch(Exception e){
  995.                     try{
  996.                         if(bin!=null)
  997.                             bin.close();
  998.                     } catch(Exception eis) {
  999.                         // ignore
  1000.                     }
  1001.                     throw new DriverRegistroServiziException("[getAllIdPorteDominio] Errore durante il parsing xml ("+urlXMLPdd[i]+"): "+e.getMessage(),e);
  1002.                 }
  1003.                 if(pd==null)
  1004.                     throw new DriverRegistroServiziException("[getAllIdPorteDominio] porta di dominio non definita per la url ["+urlXMLPdd[i]+"]");
  1005.                
  1006.                 if(filtroRicerca!=null){
  1007.                     // Filtro By Data
  1008.                     if(filtroRicerca.getMinDate()!=null){
  1009.                         if(pd.getOraRegistrazione()==null){
  1010.                             this.log.debug("[getAllIdPorteDominio](FiltroByMinDate) Porta di dominio ["+pd.getNome()+"] non valorizzata nell'ora-registrazione. Non inserito nella lista ritornata.");
  1011.                             continue;
  1012.                         }else if(pd.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1013.                             continue;
  1014.                         }
  1015.                     }
  1016.                     if(filtroRicerca.getMaxDate()!=null){
  1017.                         if(pd.getOraRegistrazione()==null){
  1018.                             this.log.debug("[getAllIdPorteDominio](FiltroByMaxDate) Porta di dominio ["+pd.getNome()+"] non valorizzata nell'ora-registrazione. Non inserito nella lista ritornata.");
  1019.                             continue;
  1020.                         }else if(pd.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1021.                             continue;
  1022.                         }
  1023.                     }
  1024.                     // Filtro By Nome
  1025.                     if(filtroRicerca.getNome()!=null){
  1026.                         if(pd.getNome().equals(filtroRicerca.getNome()) == false){
  1027.                             continue;
  1028.                         }
  1029.                     }
  1030.                 }
  1031.                 nomiPdd.add(pd.getNome());
  1032.             }
  1033.             if(nomiPdd.size()==0){
  1034.                 throw new DriverRegistroServiziNotFound("Porte di dominio non trovate che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1035.             }else{
  1036.                 return nomiPdd;
  1037.             }
  1038.         }catch(Exception e){
  1039.             if(e instanceof DriverRegistroServiziNotFound)
  1040.                 throw (DriverRegistroServiziNotFound)e;
  1041.             else
  1042.                 throw new DriverRegistroServiziException("getAllIdPorteDominio error",e);
  1043.         }
  1044.     }
  1045.    
  1046.    
  1047.    
  1048.    
  1049.     /* Gruppi */
  1050.    
  1051.     /**
  1052.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Gruppo},
  1053.      * identificato grazie al parametro
  1054.      * <var>nome</var>
  1055.      *
  1056.      * @param idGruppo Identificativo del gruppo
  1057.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Gruppo}.
  1058.      *
  1059.      */
  1060.     @Override
  1061.     public Gruppo getGruppo(
  1062.             IDGruppo idGruppo) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1063.         if(idGruppo==null || idGruppo.getNome()==null)
  1064.             throw new DriverRegistroServiziException("[getGruppo] Parametro Non Valido");

  1065.         //       controllo inizializzazione UDDI
  1066.         if(this.uddiLib.create == false){
  1067.             throw new DriverRegistroServiziException("[getGruppo] Inizializzazione dell'engine UDDI errata");
  1068.         }
  1069.        
  1070.         //       Controllo pre-esistenza del gruppo
  1071.         if( this.uddiLib.existsGruppo(idGruppo.getNome()) == false){
  1072.             throw new DriverRegistroServiziNotFound("[getGruppo] Gruppo richiesto non esiste: "+idGruppo.getNome());
  1073.         }
  1074.        
  1075.         org.openspcoop2.core.registry.Gruppo gruppoRichiesto = null;

  1076.         // Ottengo URL XML associato al gruppo
  1077.         String urlXMLGruppo = this.uddiLib.getUrlXmlGruppo(idGruppo.getNome());
  1078.         if(urlXMLGruppo == null){
  1079.             throw new DriverRegistroServiziException("[getGruppo] definzione XML non disponibile");
  1080.         }

  1081.         // Ottengo oggetto PortaDominio
  1082.         ByteArrayInputStream bin = null;
  1083.         try{
  1084.             byte[] fileXML = null;
  1085.             try{
  1086.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLGruppo);
  1087.             }catch(UtilsException e){
  1088.                 // Controllo pre-esistenza dell'accordo
  1089.                 if( "404".equals(e.getMessage()) ){
  1090.                     throw new DriverRegistroServiziNotFound("[getGruppo] Gruppo richiesto non esiste nel repository http: "+idGruppo.getNome());
  1091.                 } else
  1092.                     throw e;
  1093.             }
  1094.            
  1095.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1096.             try{
  1097.                 this.validatoreRegistro.valida(urlXMLGruppo);  
  1098.             }catch (Exception e) {
  1099.                 throw new DriverRegistroServiziException("[getGruppo] Riscontrato errore durante la validazione XSD del Gruppo ("+idGruppo.getNome()+"): "+e.getMessage(),e);
  1100.             }
  1101.            
  1102.             // parsing
  1103.             bin = new ByteArrayInputStream(fileXML);
  1104.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1105.             org.openspcoop2.core.registry.RegistroServizi rs =
  1106.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1107.             if(rs.sizeGruppoList()>0)
  1108.                 gruppoRichiesto = rs.getGruppo(0);
  1109.             bin.close();
  1110.         }catch(Exception e){
  1111.             try{
  1112.                 if(bin!=null)
  1113.                     bin.close();
  1114.             } catch(Exception eis) {
  1115.                 // ignore
  1116.             }
  1117.             if(e instanceof DriverRegistroServiziNotFound)
  1118.                 throw (DriverRegistroServiziNotFound)e;
  1119.             else
  1120.                 throw new DriverRegistroServiziException("[getGruppo] Errore durante il parsing xml del Gruppo ("+idGruppo.getNome()+"): "+e.getMessage(),e);
  1121.         }

  1122.         if(gruppoRichiesto==null)
  1123.             throw new DriverRegistroServiziNotFound("[getGruppo] Gruppo ["+idGruppo.getNome()+"] non trovato.");
  1124.        
  1125.         return gruppoRichiesto;
  1126.     }

  1127.     /**
  1128.      * Ritorna gli identificatori dei Gruppi che rispettano il parametro di ricerca
  1129.      *
  1130.      * @param filtroRicerca
  1131.      * @return Una lista di ID dei gruppi trovati
  1132.      * @throws DriverRegistroServiziException
  1133.      * @throws DriverRegistroServiziNotFound
  1134.      */
  1135.     @Override
  1136.     public List<IDGruppo> getAllIdGruppi(
  1137.             FiltroRicercaGruppi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1138.         try{

  1139.             // Ricerca UDDI delle porte di dominio
  1140.             /*if(this.urlPrefix==null){
  1141.                 throw new DriverRegistroServiziException("[getAllIdPorteDominio] Implementazione non eseguibile se il driver non viene inizializzato con urlPrefix.");
  1142.             }*/
  1143.            
  1144.             String nomeFiltro = null;
  1145.             if(filtroRicerca!=null)
  1146.                 nomeFiltro = filtroRicerca.getNome();
  1147.             String [] urlXMLGruppi = this.uddiLib.getUrlXmlGruppo(nomeFiltro,this.urlPrefix);
  1148.            
  1149.             // Esamina dei Gruppi
  1150.             List<IDGruppo> idGruppi = new ArrayList<IDGruppo>();
  1151.             for(int i=0; i<urlXMLGruppi.length; i++){
  1152.                 org.openspcoop2.core.registry.Gruppo gruppo = null;
  1153.                
  1154.                 /* --- Validazione XSD -- */
  1155.                 try{
  1156.                     this.validatoreRegistro.valida(urlXMLGruppi[i]);  
  1157.                 }catch (Exception e) {
  1158.                     throw new DriverRegistroServiziException("[getAllIdGruppi] Riscontrato errore durante la validazione XSD ("+urlXMLGruppi[i]+"): "+e.getMessage(),e);
  1159.                 }
  1160.                
  1161.                 // Ottengo oggetto Porta di dominio
  1162.                 ByteArrayInputStream bin = null;
  1163.                 try{
  1164.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLGruppi[i]);
  1165.                     bin = new ByteArrayInputStream(fileXML);
  1166.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1167.                     org.openspcoop2.core.registry.RegistroServizi rs =
  1168.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1169.                     if(rs.sizeGruppoList()>0)
  1170.                         gruppo = rs.getGruppo(0);
  1171.                     bin.close();
  1172.                 }catch(Exception e){
  1173.                     try{
  1174.                         if(bin!=null)
  1175.                             bin.close();
  1176.                     } catch(Exception eis) {
  1177.                         // ignore
  1178.                     }
  1179.                     throw new DriverRegistroServiziException("[getAllIdGruppi] Errore durante il parsing xml ("+urlXMLGruppi[i]+"): "+e.getMessage(),e);
  1180.                 }
  1181.                 if(gruppo==null)
  1182.                     throw new DriverRegistroServiziException("[getAllIdGruppi] Gruppo non definito per la url ["+urlXMLGruppi[i]+"]");
  1183.                
  1184.                 if(filtroRicerca!=null){
  1185.                     // Filtro By Data
  1186.                     if(filtroRicerca.getMinDate()!=null){
  1187.                         if(gruppo.getOraRegistrazione()==null){
  1188.                             this.log.debug("[getAllIdGruppi](FiltroByMinDate) Gruppo ["+gruppo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1189.                             continue;
  1190.                         }else if(gruppo.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1191.                             continue;
  1192.                         }
  1193.                     }
  1194.                     if(filtroRicerca.getMaxDate()!=null){
  1195.                         if(gruppo.getOraRegistrazione()==null){
  1196.                             this.log.debug("[getAllIdGruppi](FiltroByMaxDate) Gruppo ["+gruppo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1197.                             continue;
  1198.                         }else if(gruppo.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1199.                             continue;
  1200.                         }
  1201.                     }
  1202.                     // Filtro By Nome
  1203.                     if(filtroRicerca.getNome()!=null){
  1204.                         if(gruppo.getNome().equals(filtroRicerca.getNome()) == false){
  1205.                             continue;
  1206.                         }
  1207.                     }
  1208.                     // Filtro By ServiceBinding
  1209.                     if(filtroRicerca.getServiceBinding()!=null){
  1210.                         if(gruppo.getServiceBinding()!=null){ // se e' uguale a null significa che va bene per qualsiasi service binding
  1211.                             if(gruppo.getServiceBinding().equals(filtroRicerca.getServiceBinding()) == false) {
  1212.                                 continue;
  1213.                             }
  1214.                         }
  1215.                     }
  1216.                 }
  1217.                 IDGruppo id = new IDGruppo(gruppo.getNome());
  1218.                 idGruppi.add(id);
  1219.             }
  1220.             if(idGruppi.size()==0){
  1221.                 throw new DriverRegistroServiziNotFound("Gruppi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1222.             }else{
  1223.                 return idGruppi;
  1224.             }
  1225.         }catch(Exception e){
  1226.             if(e instanceof DriverRegistroServiziNotFound)
  1227.                 throw (DriverRegistroServiziNotFound)e;
  1228.             else
  1229.                 throw new DriverRegistroServiziException("getAllIdGruppi error",e);
  1230.         }
  1231.     }
  1232.    
  1233.    
  1234.    
  1235.    
  1236.    
  1237.    
  1238.     /* Ruoli */
  1239.    
  1240.     /**
  1241.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Ruolo},
  1242.      * identificato grazie al parametro
  1243.      * <var>nome</var>
  1244.      *
  1245.      * @param idRuolo Identificativo del ruolo
  1246.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Ruolo}.
  1247.      *
  1248.      */
  1249.     @Override
  1250.     public Ruolo getRuolo(
  1251.             IDRuolo idRuolo) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1252.         if(idRuolo==null || idRuolo.getNome()==null)
  1253.             throw new DriverRegistroServiziException("[getRuolo] Parametro Non Valido");

  1254.         //       controllo inizializzazione UDDI
  1255.         if(this.uddiLib.create == false){
  1256.             throw new DriverRegistroServiziException("[getRuolo] Inizializzazione dell'engine UDDI errata");
  1257.         }
  1258.        
  1259.         //       Controllo pre-esistenza del ruolo
  1260.         if( this.uddiLib.existsRuolo(idRuolo.getNome()) == false){
  1261.             throw new DriverRegistroServiziNotFound("[getRuolo] Ruolo richiesto non esiste: "+idRuolo.getNome());
  1262.         }
  1263.        
  1264.         org.openspcoop2.core.registry.Ruolo ruoloRichiesto = null;

  1265.         // Ottengo URL XML associato al ruolo
  1266.         String urlXMLRuolo = this.uddiLib.getUrlXmlRuolo(idRuolo.getNome());
  1267.         if(urlXMLRuolo == null){
  1268.             throw new DriverRegistroServiziException("[getRuolo] definzione XML non disponibile");
  1269.         }

  1270.         // Ottengo oggetto PortaDominio
  1271.         ByteArrayInputStream bin = null;
  1272.         try{
  1273.             byte[] fileXML = null;
  1274.             try{
  1275.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLRuolo);
  1276.             }catch(UtilsException e){
  1277.                 // Controllo pre-esistenza dell'accordo
  1278.                 if( "404".equals(e.getMessage()) ){
  1279.                     throw new DriverRegistroServiziNotFound("[getRuolo] Ruolo richiesto non esiste nel repository http: "+idRuolo.getNome());
  1280.                 } else
  1281.                     throw e;
  1282.             }
  1283.            
  1284.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1285.             try{
  1286.                 this.validatoreRegistro.valida(urlXMLRuolo);  
  1287.             }catch (Exception e) {
  1288.                 throw new DriverRegistroServiziException("[getRuolo] Riscontrato errore durante la validazione XSD del Ruolo ("+idRuolo.getNome()+"): "+e.getMessage(),e);
  1289.             }
  1290.            
  1291.             // parsing
  1292.             bin = new ByteArrayInputStream(fileXML);
  1293.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1294.             org.openspcoop2.core.registry.RegistroServizi rs =
  1295.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1296.             if(rs.sizeRuoloList()>0)
  1297.                 ruoloRichiesto = rs.getRuolo(0);
  1298.             bin.close();
  1299.         }catch(Exception e){
  1300.             try{
  1301.                 if(bin!=null)
  1302.                     bin.close();
  1303.             } catch(Exception eis) {
  1304.                 // ignore
  1305.             }
  1306.             if(e instanceof DriverRegistroServiziNotFound)
  1307.                 throw (DriverRegistroServiziNotFound)e;
  1308.             else
  1309.                 throw new DriverRegistroServiziException("[getRuolo] Errore durante il parsing xml del Ruolo ("+idRuolo.getNome()+"): "+e.getMessage(),e);
  1310.         }

  1311.         if(ruoloRichiesto==null)
  1312.             throw new DriverRegistroServiziNotFound("[getRuolo] Ruolo ["+idRuolo.getNome()+"] non trovato.");
  1313.        
  1314.         return ruoloRichiesto;
  1315.     }

  1316.     /**
  1317.      * Ritorna gli identificatori dei Ruoli che rispettano il parametro di ricerca
  1318.      *
  1319.      * @param filtroRicerca
  1320.      * @return Una lista di ID dei ruoli trovati
  1321.      * @throws DriverRegistroServiziException
  1322.      * @throws DriverRegistroServiziNotFound
  1323.      */
  1324.     @Override
  1325.     public List<IDRuolo> getAllIdRuoli(
  1326.             FiltroRicercaRuoli filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1327.         try{

  1328.             // Ricerca UDDI delle porte di dominio
  1329.             /*if(this.urlPrefix==null){
  1330.                 throw new DriverRegistroServiziException("[getAllIdPorteDominio] Implementazione non eseguibile se il driver non viene inizializzato con urlPrefix.");
  1331.             }*/
  1332.            
  1333.             String nomeFiltro = null;
  1334.             if(filtroRicerca!=null)
  1335.                 nomeFiltro = filtroRicerca.getNome();
  1336.             String [] urlXMLRuoli = this.uddiLib.getUrlXmlRuolo(nomeFiltro,this.urlPrefix);
  1337.            
  1338.             // Esamina dei Ruoli
  1339.             List<IDRuolo> idRuoli = new ArrayList<IDRuolo>();
  1340.             for(int i=0; i<urlXMLRuoli.length; i++){
  1341.                 org.openspcoop2.core.registry.Ruolo ruolo = null;
  1342.                
  1343.                 /* --- Validazione XSD -- */
  1344.                 try{
  1345.                     this.validatoreRegistro.valida(urlXMLRuoli[i]);  
  1346.                 }catch (Exception e) {
  1347.                     throw new DriverRegistroServiziException("[getAllIdRuoli] Riscontrato errore durante la validazione XSD ("+urlXMLRuoli[i]+"): "+e.getMessage(),e);
  1348.                 }
  1349.                
  1350.                 // Ottengo oggetto Porta di dominio
  1351.                 ByteArrayInputStream bin = null;
  1352.                 try{
  1353.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLRuoli[i]);
  1354.                     bin = new ByteArrayInputStream(fileXML);
  1355.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1356.                     org.openspcoop2.core.registry.RegistroServizi rs =
  1357.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1358.                     if(rs.sizeRuoloList()>0)
  1359.                         ruolo = rs.getRuolo(0);
  1360.                     bin.close();
  1361.                 }catch(Exception e){
  1362.                     try{
  1363.                         if(bin!=null)
  1364.                             bin.close();
  1365.                     } catch(Exception eis) {
  1366.                         // ignore
  1367.                     }
  1368.                     throw new DriverRegistroServiziException("[getAllIdRuoli] Errore durante il parsing xml ("+urlXMLRuoli[i]+"): "+e.getMessage(),e);
  1369.                 }
  1370.                 if(ruolo==null)
  1371.                     throw new DriverRegistroServiziException("[getAllIdRuoli] Ruolo non definito per la url ["+urlXMLRuoli[i]+"]");
  1372.                
  1373.                 if(filtroRicerca!=null){
  1374.                     // Filtro By Data
  1375.                     if(filtroRicerca.getMinDate()!=null){
  1376.                         if(ruolo.getOraRegistrazione()==null){
  1377.                             this.log.debug("[getAllIdRuoli](FiltroByMinDate) Ruolo ["+ruolo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1378.                             continue;
  1379.                         }else if(ruolo.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1380.                             continue;
  1381.                         }
  1382.                     }
  1383.                     if(filtroRicerca.getMaxDate()!=null){
  1384.                         if(ruolo.getOraRegistrazione()==null){
  1385.                             this.log.debug("[getAllIdRuoli](FiltroByMaxDate) Ruolo ["+ruolo.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1386.                             continue;
  1387.                         }else if(ruolo.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1388.                             continue;
  1389.                         }
  1390.                     }
  1391.                     // Filtro By Nome
  1392.                     if(filtroRicerca.getNome()!=null){
  1393.                         if(ruolo.getNome().equals(filtroRicerca.getNome()) == false){
  1394.                             continue;
  1395.                         }
  1396.                     }
  1397.                     // Filtro By Tipologia
  1398.                     if(filtroRicerca.getTipologia()!=null && !RuoloTipologia.QUALSIASI.equals(filtroRicerca.getTipologia())){
  1399.                         if(ruolo.getTipologia()==null){
  1400.                             continue;
  1401.                         }
  1402.                         if(!RuoloTipologia.QUALSIASI.equals(ruolo.getTipologia())){
  1403.                             if(ruolo.getTipologia().equals(filtroRicerca.getTipologia()) == false){
  1404.                                 continue;
  1405.                             }
  1406.                         }
  1407.                     }
  1408.                     // Filtro By Contesto
  1409.                     if(filtroRicerca.getContesto()!=null && !RuoloContesto.QUALSIASI.equals(filtroRicerca.getContesto())){
  1410.                         if(ruolo.getContestoUtilizzo()==null){
  1411.                             continue;
  1412.                         }
  1413.                         if(!RuoloContesto.QUALSIASI.equals(ruolo.getContestoUtilizzo())){
  1414.                             if(ruolo.getContestoUtilizzo().equals(filtroRicerca.getContesto()) == false){
  1415.                                 continue;
  1416.                             }
  1417.                         }
  1418.                     }
  1419.                 }
  1420.                 IDRuolo id = new IDRuolo(ruolo.getNome());
  1421.                 idRuoli.add(id);
  1422.             }
  1423.             if(idRuoli.size()==0){
  1424.                 throw new DriverRegistroServiziNotFound("Ruoli non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1425.             }else{
  1426.                 return idRuoli;
  1427.             }
  1428.         }catch(Exception e){
  1429.             if(e instanceof DriverRegistroServiziNotFound)
  1430.                 throw (DriverRegistroServiziNotFound)e;
  1431.             else
  1432.                 throw new DriverRegistroServiziException("getAllIdRuoli error",e);
  1433.         }
  1434.     }
  1435.    
  1436.    
  1437.    
  1438.    
  1439.    
  1440.    
  1441.     /* Scope */
  1442.    
  1443.     /**
  1444.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Scope},
  1445.      * identificato grazie al parametro
  1446.      * <var>nome</var>
  1447.      *
  1448.      * @param idScope Identificativo del scope
  1449.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Scope}.
  1450.      *
  1451.      */
  1452.     @Override
  1453.     public Scope getScope(
  1454.             IDScope idScope) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1455.         if(idScope==null || idScope.getNome()==null)
  1456.             throw new DriverRegistroServiziException("[getScope] Parametro Non Valido");

  1457.         //       controllo inizializzazione UDDI
  1458.         if(this.uddiLib.create == false){
  1459.             throw new DriverRegistroServiziException("[getScope] Inizializzazione dell'engine UDDI errata");
  1460.         }
  1461.        
  1462.         //       Controllo pre-esistenza del scope
  1463.         if( this.uddiLib.existsScope(idScope.getNome()) == false){
  1464.             throw new DriverRegistroServiziNotFound("[getScope] Scope richiesto non esiste: "+idScope.getNome());
  1465.         }
  1466.        
  1467.         org.openspcoop2.core.registry.Scope scopeRichiesto = null;

  1468.         // Ottengo URL XML associato al scope
  1469.         String urlXMLScope = this.uddiLib.getUrlXmlScope(idScope.getNome());
  1470.         if(urlXMLScope == null){
  1471.             throw new DriverRegistroServiziException("[getScope] definzione XML non disponibile");
  1472.         }

  1473.         // Ottengo oggetto PortaDominio
  1474.         ByteArrayInputStream bin = null;
  1475.         try{
  1476.             byte[] fileXML = null;
  1477.             try{
  1478.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLScope);
  1479.             }catch(UtilsException e){
  1480.                 // Controllo pre-esistenza dell'accordo
  1481.                 if( "404".equals(e.getMessage()) ){
  1482.                     throw new DriverRegistroServiziNotFound("[getScope] Scope richiesto non esiste nel repository http: "+idScope.getNome());
  1483.                 } else
  1484.                     throw e;
  1485.             }
  1486.            
  1487.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1488.             try{
  1489.                 this.validatoreRegistro.valida(urlXMLScope);  
  1490.             }catch (Exception e) {
  1491.                 throw new DriverRegistroServiziException("[getScope] Riscontrato errore durante la validazione XSD del Scope ("+idScope.getNome()+"): "+e.getMessage(),e);
  1492.             }
  1493.            
  1494.             // parsing
  1495.             bin = new ByteArrayInputStream(fileXML);
  1496.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1497.             org.openspcoop2.core.registry.RegistroServizi rs =
  1498.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1499.             if(rs.sizeScopeList()>0)
  1500.                 scopeRichiesto = rs.getScope(0);
  1501.             bin.close();
  1502.         }catch(Exception e){
  1503.             try{
  1504.                 if(bin!=null)
  1505.                     bin.close();
  1506.             } catch(Exception eis) {
  1507.                 // ignore
  1508.             }
  1509.             if(e instanceof DriverRegistroServiziNotFound)
  1510.                 throw (DriverRegistroServiziNotFound)e;
  1511.             else
  1512.                 throw new DriverRegistroServiziException("[getScope] Errore durante il parsing xml del Scope ("+idScope.getNome()+"): "+e.getMessage(),e);
  1513.         }

  1514.         if(scopeRichiesto==null)
  1515.             throw new DriverRegistroServiziNotFound("[getScope] Scope ["+idScope.getNome()+"] non trovato.");
  1516.        
  1517.         return scopeRichiesto;
  1518.     }

  1519.     /**
  1520.      * Ritorna gli identificatori dei Scope che rispettano il parametro di ricerca
  1521.      *
  1522.      * @param filtroRicerca
  1523.      * @return Una lista di ID dei scope trovati
  1524.      * @throws DriverRegistroServiziException
  1525.      * @throws DriverRegistroServiziNotFound
  1526.      */
  1527.     @Override
  1528.     public List<IDScope> getAllIdScope(
  1529.             FiltroRicercaScope filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1530.         try{

  1531.             // Ricerca UDDI delle porte di dominio
  1532.             /*if(this.urlPrefix==null){
  1533.                 throw new DriverRegistroServiziException("[getAllIdPorteDominio] Implementazione non eseguibile se il driver non viene inizializzato con urlPrefix.");
  1534.             }*/
  1535.            
  1536.             String nomeFiltro = null;
  1537.             if(filtroRicerca!=null)
  1538.                 nomeFiltro = filtroRicerca.getNome();
  1539.             String [] urlXMLScope = this.uddiLib.getUrlXmlScope(nomeFiltro,this.urlPrefix);
  1540.            
  1541.             // Esamina dei Scope
  1542.             List<IDScope> idScope = new ArrayList<IDScope>();
  1543.             for(int i=0; i<urlXMLScope.length; i++){
  1544.                 org.openspcoop2.core.registry.Scope scope = null;
  1545.                
  1546.                 /* --- Validazione XSD -- */
  1547.                 try{
  1548.                     this.validatoreRegistro.valida(urlXMLScope[i]);  
  1549.                 }catch (Exception e) {
  1550.                     throw new DriverRegistroServiziException("[getAllIdScope] Riscontrato errore durante la validazione XSD ("+urlXMLScope[i]+"): "+e.getMessage(),e);
  1551.                 }
  1552.                
  1553.                 // Ottengo oggetto Porta di dominio
  1554.                 ByteArrayInputStream bin = null;
  1555.                 try{
  1556.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLScope[i]);
  1557.                     bin = new ByteArrayInputStream(fileXML);
  1558.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1559.                     org.openspcoop2.core.registry.RegistroServizi rs =
  1560.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1561.                     if(rs.sizeScopeList()>0)
  1562.                         scope = rs.getScope(0);
  1563.                     bin.close();
  1564.                 }catch(Exception e){
  1565.                     try{
  1566.                         if(bin!=null)
  1567.                             bin.close();
  1568.                     } catch(Exception eis) {
  1569.                         // ignore
  1570.                     }
  1571.                     throw new DriverRegistroServiziException("[getAllIdScope] Errore durante il parsing xml ("+urlXMLScope[i]+"): "+e.getMessage(),e);
  1572.                 }
  1573.                 if(scope==null)
  1574.                     throw new DriverRegistroServiziException("[getAllIdScope] Scope non definito per la url ["+urlXMLScope[i]+"]");
  1575.                
  1576.                 if(filtroRicerca!=null){
  1577.                     // Filtro By Data
  1578.                     if(filtroRicerca.getMinDate()!=null){
  1579.                         if(scope.getOraRegistrazione()==null){
  1580.                             this.log.debug("[getAllIdScope](FiltroByMinDate) Scope ["+scope.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1581.                             continue;
  1582.                         }else if(scope.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1583.                             continue;
  1584.                         }
  1585.                     }
  1586.                     if(filtroRicerca.getMaxDate()!=null){
  1587.                         if(scope.getOraRegistrazione()==null){
  1588.                             this.log.debug("[getAllIdScope](FiltroByMaxDate) Scope ["+scope.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1589.                             continue;
  1590.                         }else if(scope.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1591.                             continue;
  1592.                         }
  1593.                     }
  1594.                     // Filtro By Nome
  1595.                     if(filtroRicerca.getNome()!=null){
  1596.                         if(scope.getNome().equals(filtroRicerca.getNome()) == false){
  1597.                             continue;
  1598.                         }
  1599.                     }
  1600.                     // Filtro By Tipologia
  1601.                     if(filtroRicerca.getTipologia()!=null){
  1602.                         if(scope.getTipologia()==null){
  1603.                             continue;
  1604.                         }
  1605.                         if(scope.getTipologia().equals(filtroRicerca.getTipologia()) == false){
  1606.                             continue;
  1607.                         }
  1608.                     }
  1609.                     // Filtro By Contesto
  1610.                     if(filtroRicerca.getContesto()!=null && !ScopeContesto.QUALSIASI.equals(filtroRicerca.getContesto())){
  1611.                         if(scope.getContestoUtilizzo()==null){
  1612.                             continue;
  1613.                         }
  1614.                         if(!ScopeContesto.QUALSIASI.equals(scope.getContestoUtilizzo())){
  1615.                             if(scope.getContestoUtilizzo().equals(filtroRicerca.getContesto()) == false){
  1616.                                 continue;
  1617.                             }
  1618.                         }
  1619.                     }
  1620.                 }
  1621.                 IDScope id = new IDScope(scope.getNome());
  1622.                 idScope.add(id);
  1623.             }
  1624.             if(idScope.size()==0){
  1625.                 throw new DriverRegistroServiziNotFound("Scope non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1626.             }else{
  1627.                 return idScope;
  1628.             }
  1629.         }catch(Exception e){
  1630.             if(e instanceof DriverRegistroServiziNotFound)
  1631.                 throw (DriverRegistroServiziNotFound)e;
  1632.             else
  1633.                 throw new DriverRegistroServiziException("getAllIdScope error",e);
  1634.         }
  1635.     }
  1636.    
  1637.    
  1638.    
  1639.    
  1640.    
  1641.    
  1642.     /* Soggetti */
  1643.    
  1644.     /**
  1645.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Soggetto},
  1646.      * identificato grazie al parametro
  1647.      * <var>idSoggetto</var> di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1648.      *
  1649.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1650.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.Soggetto}
  1651.      *
  1652.      */
  1653.     @Override
  1654.     public org.openspcoop2.core.registry.Soggetto getSoggetto(IDSoggetto idSoggetto) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1655.         if(idSoggetto==null)
  1656.             throw new DriverRegistroServiziException("[getSoggetto] Parametro Non Valido");
  1657.        
  1658.         //       controllo inizializzazione UDDI
  1659.         if(this.uddiLib.create == false){
  1660.             throw new DriverRegistroServiziException("[getSoggetto] Inizializzazione dell'engine UDDI errata");
  1661.         }
  1662.        
  1663.        
  1664.         if( this.uddiLib.existsSoggetto(idSoggetto) == false){
  1665.             throw new DriverRegistroServiziNotFound("[getSoggetto] Il soggetto ["+idSoggetto.getTipo()+"/"+idSoggetto.getNome()+
  1666.             "] non risulta gia' inserito nel registro dei servizi.");
  1667.         }
  1668.        
  1669.         org.openspcoop2.core.registry.Soggetto soggRichiesto = null;

  1670.         // Ottengo URL XML associato al Soggetto
  1671.         String urlXMLSoggetto = this.uddiLib.getUrlXmlSoggetto(idSoggetto);
  1672.         if(urlXMLSoggetto == null){
  1673.             throw new DriverRegistroServiziException("[getSoggetto] Definizione xml non disponibile");
  1674.         }

  1675.         // Ottengo oggetto Soggetto
  1676.         ByteArrayInputStream bin = null;
  1677.         try{
  1678.             byte[] fileXML = null;
  1679.             try{
  1680.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLSoggetto);
  1681.             }catch(UtilsException e){
  1682.                 // Controllo pre-esistenza dell'accordo
  1683.                 if( "404".equals(e.getMessage()) ){
  1684.                     throw new DriverRegistroServiziNotFound("[getSoggetto] Soggetto richiesto non esiste nel repository http: "+idSoggetto);
  1685.                 } else
  1686.                     throw e;
  1687.             }
  1688.            
  1689.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1690.             try{
  1691.                 this.validatoreRegistro.valida(urlXMLSoggetto);  
  1692.             }catch (Exception e) {
  1693.                 throw new DriverRegistroServiziException("[getSoggetto] Riscontrato errore durante la validazione XSD del soggetto("+idSoggetto+"): "+e.getMessage(),e);
  1694.             }
  1695.            
  1696.             // parsing
  1697.             bin = new ByteArrayInputStream(fileXML);
  1698.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1699.             org.openspcoop2.core.registry.RegistroServizi rs =
  1700.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1701.             if(rs.sizeSoggettoList()>0)
  1702.                 soggRichiesto = rs.getSoggetto(0);
  1703.             bin.close();
  1704.         }catch(Exception e){
  1705.             try{
  1706.                 if(bin!=null)
  1707.                     bin.close();
  1708.             } catch(Exception eis) {
  1709.                 // ignore
  1710.             }
  1711.             if(e instanceof DriverRegistroServiziNotFound)
  1712.                 throw (DriverRegistroServiziNotFound)e;
  1713.             else
  1714.                 throw new DriverRegistroServiziException("[getSoggetto] Errore durante il parsing xml del soggetto("+idSoggetto+"): "+e.getMessage(),e);
  1715.         }

  1716.         if(soggRichiesto==null)
  1717.             throw new DriverRegistroServiziNotFound("[getSoggetto] Soggetto ["+idSoggetto+"] non trovato.");
  1718.        
  1719.         return soggRichiesto;
  1720.     }

  1721.     @Override
  1722.     public Soggetto getSoggettoByCredenzialiBasic(
  1723.             String user,String password,
  1724.             CryptConfig config) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1725.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.BASIC, user, password,
  1726.                 null, null, null, false,
  1727.                 null,
  1728.                 config,
  1729.                 false);
  1730.     }
  1731.    
  1732.     @Override
  1733.     public Soggetto getSoggettoByCredenzialiApiKey(
  1734.             String user,String password, boolean appId,
  1735.             CryptConfig config) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1736.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.BASIC, user, password,
  1737.                 null, null, null, false,
  1738.                 null,
  1739.                 config,
  1740.                 appId);
  1741.     }
  1742.    
  1743.     @Override
  1744.     public Soggetto getSoggettoByCredenzialiSsl(
  1745.             String subject, String issuer) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1746.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.SSL, null, null,
  1747.                 subject, issuer, null, false,
  1748.                 null,
  1749.                 null,
  1750.                 false);
  1751.     }
  1752.    
  1753.     @Override
  1754.     public Soggetto getSoggettoByCredenzialiSsl(CertificateInfo certificate, boolean strictVerifier) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1755.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.SSL, null, null,
  1756.                 null, null, certificate, strictVerifier,
  1757.                 null,
  1758.                 null,
  1759.                 false);
  1760.     }
  1761.    
  1762.     @Override
  1763.     public Soggetto getSoggettoByCredenzialiPrincipal(
  1764.             String principal) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1765.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.PRINCIPAL, null, null,
  1766.                 null, null, null, false,
  1767.                 principal,
  1768.                 null,
  1769.                 false);
  1770.     }
  1771.     private org.openspcoop2.core.registry.Soggetto getEngineSoggettoAutenticato(CredenzialeTipo tipoCredenziale, String user,String password,
  1772.             String aSubject, String aIssuer, CertificateInfo aCertificate, boolean aStrictVerifier,
  1773.             String principal,
  1774.             CryptConfig config,
  1775.             boolean appId) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1776.         // conrollo consistenza
  1777.         if (tipoCredenziale == null)
  1778.             throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro tipoCredenziale is null");

  1779.         switch (tipoCredenziale) {
  1780.         case BASIC:
  1781.             if (user == null || "".equalsIgnoreCase(user))
  1782.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro user is null (required for basic auth)");
  1783.             if (password == null || "".equalsIgnoreCase(password))
  1784.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro password is null (required for basic auth)");
  1785.             break;
  1786.         case APIKEY:
  1787.             if (user == null || "".equalsIgnoreCase(user))
  1788.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro user is null (required for apikey auth)");
  1789.             if (password == null || "".equalsIgnoreCase(password))
  1790.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro password is null (required for apikey auth)");
  1791.             break;
  1792.         case SSL:
  1793.             if ( (aSubject == null || "".equalsIgnoreCase(aSubject)) && (aCertificate==null))
  1794.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro subject/certificate is null (required for ssl auth)");
  1795.             break;
  1796.         case PRINCIPAL:
  1797.             if (principal == null || "".equalsIgnoreCase(principal))
  1798.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro principal is null (required for principal auth)");
  1799.             break;
  1800.         }

  1801.         IDSoggetto idSoggetto = null;
  1802.         try{
  1803.             FiltroRicercaSoggetti filtroRicerca = new FiltroRicercaSoggetti();
  1804.             CredenzialiSoggetto credenzialiSoggetto = new CredenzialiSoggetto();
  1805.             credenzialiSoggetto.setTipo(tipoCredenziale);
  1806.             switch (tipoCredenziale) {
  1807.             case BASIC:
  1808.                 credenzialiSoggetto.setUser(user);
  1809.                 credenzialiSoggetto.setPassword(password);
  1810.                 break;
  1811.             case APIKEY:
  1812.                 credenzialiSoggetto.setUser(user);
  1813.                 credenzialiSoggetto.setPassword(password);
  1814.                 credenzialiSoggetto.setAppId(appId);
  1815.                 break;
  1816.             case SSL:
  1817.                 credenzialiSoggetto.setSubject(aSubject);
  1818.                 credenzialiSoggetto.setIssuer(aIssuer);
  1819.                 if(aCertificate!=null) {
  1820.                     try {
  1821.                         credenzialiSoggetto.setCertificate(aCertificate.getCertificate().getEncoded());
  1822.                     }catch(Exception e) {
  1823.                         throw new DriverRegistroServiziException(e.getMessage(),e);
  1824.                     }
  1825.                 }
  1826.                 credenzialiSoggetto.setCertificateStrictVerification(aStrictVerifier);
  1827.                 break;
  1828.             case PRINCIPAL:
  1829.                 credenzialiSoggetto.setUser(principal);
  1830.                 break;
  1831.             }
  1832.             filtroRicerca.setCredenzialiSoggetto(credenzialiSoggetto, config);
  1833.             List<IDSoggetto> l = this.getAllIdSoggetti(filtroRicerca);
  1834.             if(l.size()>1){
  1835.                 throw new DriverRegistroServiziException("Trovato più di un soggetto che possiede le credenziali '"+tipoCredenziale.toString()+"' fornite");
  1836.             }
  1837.             else if(l.size()==1){
  1838.                 idSoggetto = l.get(0);
  1839.             }
  1840.         }catch(DriverRegistroServiziNotFound notFound){
  1841.             // ignore
  1842.         }
  1843.        
  1844.         if(idSoggetto==null){
  1845.             throw new DriverRegistroServiziNotFound("Nessun soggetto trovato che possiede le credenziali '"+tipoCredenziale.toString()+"' fornite");
  1846.         }
  1847.         else{
  1848.             return this.getSoggetto(idSoggetto);
  1849.         }
  1850.     }
  1851.    
  1852.     /**
  1853.      *  Ritorna gli identificatori dei soggetti che rispettano il parametro di ricerca
  1854.      *
  1855.      * @param filtroRicerca
  1856.      * @return Una lista di ID dei soggetti trovati
  1857.      * @throws DriverRegistroServiziException
  1858.      * @throws DriverRegistroServiziNotFound
  1859.      */
  1860.     @Override
  1861.     public List<IDSoggetto> getAllIdSoggetti(FiltroRicercaSoggetti filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1862.         try{
  1863.             // Ricerca UDDI dei soggetti
  1864.             String [] urlXMLSoggetti = this.uddiLib.getUrlXmlSoggetti();
  1865.            
  1866.             boolean testInChiaro = false;
  1867.             ICrypt crypt = null;
  1868.             if(filtroRicerca!=null && filtroRicerca.getCredenzialiSoggetto()!=null && filtroRicerca.getCredenzialiSoggetto().getPassword()!=null){
  1869.                 CredenzialeTipo cTipo = filtroRicerca.getCredenzialiSoggetto().getTipo();
  1870.                 if(CredenzialeTipo.BASIC.equals(cTipo)){
  1871.                     CryptConfig config = filtroRicerca.getCryptConfig();
  1872.                     if(config==null || config.isBackwardCompatibility()) {
  1873.                         testInChiaro = true;
  1874.                     }
  1875.                     if(config!=null) {
  1876.                         try {
  1877.                             crypt = CryptFactory.getCrypt(this.log, config);
  1878.                         }catch(Exception e) {
  1879.                             throw new DriverRegistroServiziException(e.getMessage(),e);
  1880.                         }
  1881.                     }
  1882.                 }
  1883.                 else if(CredenzialeTipo.APIKEY.equals(cTipo)){
  1884.                     CryptConfig config = filtroRicerca.getCryptConfig();
  1885.                     if(config!=null) {
  1886.                         try {
  1887.                             crypt = CryptFactory.getCrypt(this.log, config);
  1888.                         }catch(Exception e) {
  1889.                             throw new DriverRegistroServiziException(e.getMessage(),e);
  1890.                         }
  1891.                     }
  1892.                     else {
  1893.                         testInChiaro = true;
  1894.                     }
  1895.                 }
  1896.             }
  1897.            
  1898.             // Esamina dei soggetti
  1899.             List<IDSoggetto> idSoggetti = new ArrayList<IDSoggetto>();
  1900.             for(int i=0; i<urlXMLSoggetti.length; i++){
  1901.                
  1902.                 org.openspcoop2.core.registry.Soggetto ss = null;
  1903.                
  1904.                 /* --- Validazione XSD -- */
  1905.                 try{
  1906.                     this.validatoreRegistro.valida(urlXMLSoggetti[i]);  
  1907.                 }catch (Exception e) {
  1908.                     throw new DriverRegistroServiziException("[getAllIdSoggettiRegistro] Riscontrato errore durante la validazione XSD ("+urlXMLSoggetti[i]+"): "+e.getMessage(),e);
  1909.                 }
  1910.                
  1911.                 // Ottengo oggetto Soggetto
  1912.                 ByteArrayInputStream bin = null;
  1913.                 try{
  1914.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLSoggetti[i]);
  1915.                     bin = new ByteArrayInputStream(fileXML);
  1916.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1917.                     org.openspcoop2.core.registry.RegistroServizi rs =
  1918.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1919.                     if(rs.sizeSoggettoList()>0)
  1920.                         ss = rs.getSoggetto(0);
  1921.                     bin.close();
  1922.                 }catch(Exception e){
  1923.                     try{
  1924.                         if(bin!=null)
  1925.                             bin.close();
  1926.                     } catch(Exception eis) {
  1927.                         // ignore
  1928.                     }
  1929.                     throw new DriverRegistroServiziException("[getAllIdSoggettiRegistro] Errore durante il parsing xml ("+urlXMLSoggetti[i]+"): "+e.getMessage(),e);
  1930.                 }
  1931.                 if(ss==null)
  1932.                     throw new DriverRegistroServiziException("[getAllIdSoggettiRegistro] soggetto non definito per la url ["+urlXMLSoggetti[i]+"]");
  1933.                
  1934.                
  1935.                 if(filtroRicerca!=null){
  1936.                     // Filtro By Data
  1937.                     if(filtroRicerca.getMinDate()!=null){
  1938.                         if(ss.getOraRegistrazione()==null){
  1939.                             this.log.debug("[getAllIdSoggettiRegistro](FiltroByMinDate) Soggetto ["+ss.getTipo()+"/"+ss.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1940.                             continue;
  1941.                         }else if(ss.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1942.                             continue;
  1943.                         }
  1944.                     }
  1945.                     if(filtroRicerca.getMaxDate()!=null){
  1946.                         if(ss.getOraRegistrazione()==null){
  1947.                             this.log.debug("[getAllIdSoggettiRegistro](FiltroByMaxDate) Soggetto ["+ss.getTipo()+"/"+ss.getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1948.                             continue;
  1949.                         }else if(ss.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1950.                             continue;
  1951.                         }
  1952.                     }
  1953.                     // Filtro By Tipo e Nome
  1954.                     if(filtroRicerca.getTipo()!=null){
  1955.                         if(ss.getTipo().equals(filtroRicerca.getTipo()) == false){
  1956.                             continue;
  1957.                         }
  1958.                     }
  1959.                     if(filtroRicerca.getNome()!=null){
  1960.                         if(ss.getNome().equals(filtroRicerca.getNome()) == false){
  1961.                             continue;
  1962.                         }
  1963.                     }
  1964.                     // Filtro By Pdd
  1965.                     if(filtroRicerca.getNomePdd()!=null){
  1966.                         if(ss.getPortaDominio().equals(filtroRicerca.getNomePdd()) == false){
  1967.                             continue;
  1968.                         }
  1969.                     }
  1970.                     // ProtocolProperties
  1971.                     if(ProtocolPropertiesUtilities.isMatch(ss, filtroRicerca.getProtocolProperties())==false){
  1972.                         continue;
  1973.                     }
  1974.                     // Filtro By Ruoli
  1975.                     if(filtroRicerca.getIdRuolo()!=null && filtroRicerca.getIdRuolo().getNome()!=null){
  1976.                         if(ss.getRuoli()==null){
  1977.                             continue;
  1978.                         }
  1979.                         boolean contains = false;
  1980.                         for (int j = 0; j < ss.getRuoli().sizeRuoloList(); j++) {
  1981.                             if(filtroRicerca.getIdRuolo().getNome().equals(ss.getRuoli().getRuolo(j).getNome())){
  1982.                                 contains = true;
  1983.                                 break;
  1984.                             }
  1985.                         }
  1986.                         if(!contains){
  1987.                             continue;
  1988.                         }
  1989.                     }
  1990.                     // Filtro By Credenziali
  1991.                     if(filtroRicerca.getCredenzialiSoggetto()!=null){
  1992.                         CredenzialiSoggetto credenziali = (ss.sizeCredenzialiList() > 0 ? ss.getCredenziali(0) : null);
  1993.                         if(credenziali==null){
  1994.                             continue;
  1995.                         }
  1996.                         if(filtroRicerca.getCredenzialiSoggetto().getTipo()!=null){
  1997.                             if(credenziali.getTipo()==null){
  1998.                                 if(filtroRicerca.getCredenzialiSoggetto().getTipo().equals(CredenzialeTipo.SSL) == false){ // ssl è il default
  1999.                                     continue;
  2000.                                 }  
  2001.                             }
  2002.                             else{
  2003.                                 if(filtroRicerca.getCredenzialiSoggetto().getTipo().equals(credenziali.getTipo())==false){
  2004.                                     continue;
  2005.                                 }
  2006.                                 if(CredenzialeTipo.APIKEY.equals(filtroRicerca.getCredenzialiSoggetto().getTipo())){
  2007.                                     if(filtroRicerca.getCredenzialiSoggetto().isAppId()) {
  2008.                                         if(!credenziali.isAppId()) {
  2009.                                             continue;
  2010.                                         }
  2011.                                     }
  2012.                                     else {
  2013.                                         if(credenziali.isAppId()) {
  2014.                                             continue;
  2015.                                         }
  2016.                                     }
  2017.                                 }
  2018.                             }
  2019.                         }
  2020.                         if(filtroRicerca.getCredenzialiSoggetto().getUser()!=null){
  2021.                             if(filtroRicerca.getCredenzialiSoggetto().getUser().equals(credenziali.getUser())==false){
  2022.                                 continue;
  2023.                             }
  2024.                         }
  2025.                         if(filtroRicerca.getCredenzialiSoggetto().getPassword()!=null){
  2026.                             String passwordSaved =  credenziali.getPassword();
  2027.                             boolean found = false;
  2028.                             if(testInChiaro) {
  2029.                                 found = filtroRicerca.getCredenzialiSoggetto().getPassword().equals(passwordSaved);
  2030.                             }
  2031.                             if(!found && crypt!=null) {
  2032.                                 found = crypt.check(filtroRicerca.getCredenzialiSoggetto().getPassword(), passwordSaved);
  2033.                             }
  2034.                            
  2035.                             if( !found ) {
  2036.                                 continue;
  2037.                             }
  2038.                         }
  2039.                         if(filtroRicerca.getCredenzialiSoggetto().getSubject()!=null){
  2040.                             try{
  2041.                                 if(credenziali.getSubject()==null){
  2042.                                     continue;
  2043.                                 }
  2044.                                 boolean subjectValid = CertificateUtils.sslVerify(credenziali.getSubject(), filtroRicerca.getCredenzialiSoggetto().getSubject(), PrincipalType.SUBJECT, this.log);
  2045.                                 boolean issuerValid = true;
  2046.                                 if(filtroRicerca.getCredenzialiSoggetto().getIssuer()!=null) {
  2047.                                     issuerValid = CertificateUtils.sslVerify(credenziali.getIssuer(), filtroRicerca.getCredenzialiSoggetto().getIssuer(), PrincipalType.ISSUER, this.log);
  2048.                                 }
  2049.                                 else {
  2050.                                     issuerValid = (credenziali.getIssuer() == null);
  2051.                                 }
  2052.                                 if(!subjectValid || !issuerValid){
  2053.                                     continue;
  2054.                                 }
  2055.                             }catch(Exception e){
  2056.                                 throw new DriverRegistroServiziException(e.getMessage(),e);
  2057.                             }
  2058.                         }
  2059.                         if(filtroRicerca.getCredenzialiSoggetto().getCnSubject()!=null && filtroRicerca.getCredenzialiSoggetto().getCertificate()!=null) {
  2060.                             if(filtroRicerca.getCredenzialiSoggetto().getCnSubject().equals(credenziali.getCnSubject())==false) {
  2061.                                 continue;
  2062.                             }
  2063.                             // Possono esistere piu' soggetti che hanno un CN con subject e issuer diverso.
  2064.                             Certificate certificato = ArchiveLoader.load(ArchiveType.CER, credenziali.getCertificate(), 0, null);
  2065.                             Certificate certificatoFiltro = ArchiveLoader.load(ArchiveType.CER, filtroRicerca.getCredenzialiSoggetto().getCertificate(), 0, null);                          
  2066.                             if(!certificatoFiltro.getCertificate().equals(certificato.getCertificate(),filtroRicerca.getCredenzialiSoggetto().isCertificateStrictVerification())) {
  2067.                                 continue;
  2068.                             }
  2069.                         }
  2070.                     }
  2071.                 }
  2072.                 IDSoggetto idS = new IDSoggetto(ss.getTipo(),ss.getNome());
  2073.                 idSoggetti.add(idS);
  2074.             }
  2075.             if(idSoggetti.size()==0){
  2076.                 throw new DriverRegistroServiziNotFound("Soggetti non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  2077.             }else{
  2078.                 return idSoggetti;
  2079.             }
  2080.         }catch(Exception e){
  2081.             if(e instanceof DriverRegistroServiziNotFound)
  2082.                 throw (DriverRegistroServiziNotFound)e;
  2083.             else
  2084.                 throw new DriverRegistroServiziException("getAllIdSoggettiRegistro error",e);
  2085.         }
  2086.     }
  2087.    
  2088.    
  2089.    
  2090.    
  2091.    
  2092.    
  2093.     /* Accordi di Servizio Parte Specifica */
  2094.    
  2095.     /**
  2096.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  2097.      * contenente le informazioni sulle funzionalita' associate
  2098.      * al servizio  identificato grazie ai fields Soggetto,
  2099.      * 'Servizio','TipoServizio' e 'Azione' impostati
  2100.      * all'interno del parametro <var>idService</var> di tipo {@link org.openspcoop2.core.id.IDServizio}.
  2101.      *
  2102.      * @param idServizio Identificatore del Servizio di tipo {@link org.openspcoop2.core.id.IDServizio}.
  2103.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  2104.      *
  2105.      */
  2106.     @Override
  2107.     public org.openspcoop2.core.registry.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2108.        
  2109.         if(idServizio == null || idServizio.getSoggettoErogatore()==null)
  2110.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Parametro Non Valido");
  2111.        
  2112.         // controllo inizializzazione UDDI
  2113.         if(this.uddiLib.create == false){
  2114.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Inizializzazione dell'engine UDDI errata");
  2115.         }
  2116.        
  2117.         //  Controllo pre-esistenza del soggetto
  2118.         if( this.uddiLib.existsSoggetto(idServizio.getSoggettoErogatore()) == false){
  2119.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica] Il soggetto ["+idServizio.getSoggettoErogatore()
  2120.             +"] non risulta gia' inserito nel registro dei servizi.");
  2121.         }
  2122.         // Controllo pre-esistenza del servizio
  2123.         if (this.uddiLib.existsServizio(idServizio)==false){
  2124.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica] Il servizio ["+idServizio.toString()+"] non risulta gia' registrato nel registro");
  2125.         }
  2126.        
  2127.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica servRichiesto = null;
  2128.         // get URL XML Servizio
  2129.         String urlXMLServizio = this.uddiLib.getUrlXmlServizio(idServizio);
  2130.         if( urlXMLServizio == null ){
  2131.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Definizione XML non disponibile");
  2132.         }
  2133.        
  2134.         ByteArrayInputStream bin = null;
  2135.         try{
  2136.             byte[] fileXML = null;
  2137.             try{
  2138.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLServizio);
  2139.             }catch(UtilsException e){
  2140.                 // Controllo pre-esistenza dell'accordo
  2141.                 if( "404".equals(e.getMessage()) ){
  2142.                     throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica] Servizio richiesto non esiste nel repository http: "+idServizio);
  2143.                 } else
  2144.                     throw e;
  2145.             }
  2146.            
  2147.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  2148.             try{
  2149.                 this.validatoreRegistro.valida(urlXMLServizio);  
  2150.             }catch (Exception e) {
  2151.                 throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Riscontrato errore durante la validazione XSD del servizio("+idServizio+"): "+e.getMessage(),e);
  2152.             }
  2153.            
  2154.             // parsing
  2155.             bin = new ByteArrayInputStream(fileXML);
  2156.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  2157.             org.openspcoop2.core.registry.RegistroServizi rs =
  2158.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  2159.             if(rs.sizeSoggettoList()>0){
  2160.                 if(rs.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0){
  2161.                     servRichiesto = rs.getSoggetto(0).getAccordoServizioParteSpecifica(0);
  2162.                     servRichiesto.setNomeSoggettoErogatore(idServizio.getSoggettoErogatore().getNome());
  2163.                     servRichiesto.setTipoSoggettoErogatore(idServizio.getSoggettoErogatore().getTipo());
  2164.                 }
  2165.             }
  2166.             bin.close();
  2167.         }catch(Exception e){
  2168.             try{
  2169.                 if(bin!=null)
  2170.                     bin.close();
  2171.             } catch(Exception eis) {
  2172.                 // ignore
  2173.             }
  2174.             if(e instanceof DriverRegistroServiziNotFound)
  2175.                 throw (DriverRegistroServiziNotFound)e;
  2176.             else
  2177.                 throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Errore durante il parsing xml del servizio("+idServizio+"): "+e.getMessage(),e);
  2178.         }

  2179.         if(servRichiesto==null)
  2180.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica] Servizio non trovato.");
  2181.            
  2182.         return servRichiesto;
  2183.     }
  2184.    
  2185.    
  2186.    
  2187.     /**
  2188.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  2189.      * contenente le informazioni sulle funzionalita' associate
  2190.      * al servizio  correlato identificato grazie ai fields Soggetto
  2191.      * e nomeAccordo
  2192.      *
  2193.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  2194.      * @param idAccordo ID dell'accordo che deve implementare il servizio correlato
  2195.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  2196.      *
  2197.      */
  2198.     @Override
  2199.     public org.openspcoop2.core.registry.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto, IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  2200.         if(idSoggetto == null || idAccordo==null || idAccordo.getNome()==null )
  2201.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Parametro Non Valido");
  2202.        
  2203.         //       controllo inizializzazione UDDI
  2204.         if(this.uddiLib.create == false){
  2205.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Inizializzazione dell'engine UDDI errata");
  2206.         }
  2207.        
  2208.         //  Controllo pre-esistenza del soggetto
  2209.         if( this.uddiLib.existsSoggetto(idSoggetto) == false){
  2210.             throw new DriverRegistroServiziNotFound("Il soggetto ["+idSoggetto
  2211.             +"] non risulta gia' inserito nel registro dei servizi.");
  2212.         }
  2213.                
  2214.         String [] url =  this.uddiLib.getUrlXmlServizi(idSoggetto,idAccordo);
  2215.         if(url==null)
  2216.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Servizi correlati che rispettano il parametri di ricerca, non esistenti.");
  2217.        
  2218.        
  2219.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica servCorrelatoRichiesto = null;
  2220.         for(int i=0; i<url.length; i++){
  2221.            
  2222.             //System.out.println("URL["+(i+1)+"]: "+url[i]);    
  2223.             ByteArrayInputStream bin = null;
  2224.             try{
  2225.                 byte[] fileXML = null;
  2226.                 try{
  2227.                     fileXML = HttpUtilities.requestHTTPFile(url[i]);
  2228.                 }catch(UtilsException e){
  2229.                     // Controllo pre-esistenza dell'accordo
  2230.                     if( "404".equals(e.getMessage()) ){
  2231.                         throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Servizio richiesto non esiste nel repository http, accordo:"+idAccordo+ " e soggetto:"+idSoggetto);
  2232.                     } else
  2233.                         throw e;
  2234.                 }
  2235.                
  2236.                 /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  2237.                 try{
  2238.                     this.validatoreRegistro.valida(url[i]);  
  2239.                 }catch (Exception e) {
  2240.                     throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Riscontrato errore durante la validazione XSD del servizioUrl("+url[i]+"): "+e.getMessage(),e);
  2241.                 }
  2242.                
  2243.                 // parsing
  2244.                 bin = new ByteArrayInputStream(fileXML);
  2245.                 org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  2246.                 org.openspcoop2.core.registry.RegistroServizi rs =
  2247.                     (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  2248.                 if(rs.sizeSoggettoList()>0){
  2249.                     if(rs.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0){
  2250.                         servCorrelatoRichiesto = rs.getSoggetto(0).getAccordoServizioParteSpecifica(0);
  2251.                         servCorrelatoRichiesto.setNomeSoggettoErogatore(idSoggetto.getNome());
  2252.                         servCorrelatoRichiesto.setTipoSoggettoErogatore(idSoggetto.getTipo());
  2253.                     }
  2254.                 }
  2255.                 bin.close();
  2256.                 if(servCorrelatoRichiesto!=null)
  2257.                     break;
  2258.             }catch(Exception e){
  2259.                 try{
  2260.                     if(bin!=null)
  2261.                         bin.close();
  2262.                 } catch(Exception eis) {
  2263.                     // ignore
  2264.                 }
  2265.                 if(e instanceof DriverRegistroServiziNotFound)
  2266.                     throw (DriverRegistroServiziNotFound)e;
  2267.                 else
  2268.                     throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Errore durante il parsing xml del servizioUrl("+url[i]+"): "+e.getMessage(),e);
  2269.             }
  2270.         }

  2271.         if(servCorrelatoRichiesto==null)
  2272.             throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Servizio non trovato.");
  2273.            
  2274.         return servCorrelatoRichiesto;
  2275.     }

  2276.    
  2277.     @Override
  2278.     public List<IDServizio> getAllIdServizi(FiltroRicercaServizi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  2279.        
  2280.         List<IDServizio> list = new ArrayList<IDServizio>();
  2281.         _fillAllIdServiziEngine("getAllIdServizi", filtroRicerca, list);
  2282.         return list;
  2283.        
  2284.     }
  2285.    
  2286.     @Override
  2287.     public List<IDFruizione> getAllIdFruizioniServizio(
  2288.             FiltroRicercaFruizioniServizio filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  2289.    
  2290.         List<IDFruizione> list = new ArrayList<IDFruizione>();
  2291.         _fillAllIdServiziEngine("getAllIdFruizioniServizio", filtroRicerca, list);
  2292.         return list;
  2293.        
  2294.     }
  2295.    
  2296.     @SuppressWarnings("unchecked")
  2297.     public <T> void _fillAllIdServiziEngine(String nomeMetodo,
  2298.             FiltroRicercaServizi filtroRicerca,
  2299.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2300.            
  2301.         try{
  2302.    
  2303.             FiltroRicercaFruizioniServizio filtroFruizioni = null;
  2304.             if(filtroRicerca instanceof FiltroRicercaFruizioniServizio){
  2305.                 filtroFruizioni = (FiltroRicercaFruizioniServizio) filtroRicerca;
  2306.             }
  2307.            
  2308.             // Ricerca UDDI
  2309.             IDAccordo idAccordo = null;
  2310.             IDSoggetto soggettoErogatore = null;
  2311.             String tipoServizio = null;
  2312.             String nomeServizio = null;
  2313.             if(filtroRicerca!=null){
  2314.                 idAccordo = filtroRicerca.getIdAccordoServizioParteComune();
  2315.                 if(filtroRicerca.getTipoSoggettoErogatore()!=null && filtroRicerca.getNomeSoggettoErogatore()!=null){
  2316.                     soggettoErogatore = new IDSoggetto(filtroRicerca.getTipoSoggettoErogatore(),filtroRicerca.getNomeSoggettoErogatore());
  2317.                 }
  2318.                 tipoServizio = filtroRicerca.getTipo();
  2319.                 nomeServizio = filtroRicerca.getNome();
  2320.             }
  2321.             String [] urlXMLServizi = this.uddiLib.getUrlXMLServiziBySearch(idAccordo, soggettoErogatore, tipoServizio, nomeServizio);
  2322.            
  2323.            
  2324.            
  2325.             // Esamina dei servizi
  2326.             for(int i=0; i<urlXMLServizi.length; i++){
  2327.            
  2328.                 org.openspcoop2.core.registry.AccordoServizioParteSpecifica serv = null;
  2329.                
  2330.                 /* --- Validazione XSD -- */
  2331.                 try{
  2332.                     this.validatoreRegistro.valida(urlXMLServizi[i]);  
  2333.                 }catch (Exception e) {
  2334.                     throw new DriverRegistroServiziException("[getAllIdServizi] Riscontrato errore durante la validazione XSD URL("+urlXMLServizi[i]+"): "+e.getMessage(),e);
  2335.                 }
  2336.                
  2337.                 ByteArrayInputStream bin = null;
  2338.                 try{
  2339.                     byte[] fileXML = HttpUtilities.requestHTTPFile(urlXMLServizi[i]);
  2340.                     bin = new ByteArrayInputStream(fileXML);
  2341.                     org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  2342.                     org.openspcoop2.core.registry.RegistroServizi rs =
  2343.                         (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  2344.                     if(rs.sizeSoggettoList()>0){
  2345.                         if(rs.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0 ){
  2346.                             org.openspcoop2.core.registry.Soggetto s = rs.getSoggetto(0);
  2347.                             if(s.sizeAccordoServizioParteSpecificaList()>0){
  2348.                                 serv = s.getAccordoServizioParteSpecifica(0);
  2349.                                 serv.setNomeSoggettoErogatore(s.getNome());
  2350.                                 serv.setTipoSoggettoErogatore(s.getTipo());
  2351.                             }else{
  2352.                                 continue;
  2353.                             }
  2354.                         }
  2355.                     }
  2356.                     bin.close();
  2357.                 }catch(Exception e){
  2358.                     try{
  2359.                         if(bin!=null)
  2360.                             bin.close();
  2361.                     } catch(Exception eis) {
  2362.                         // ignore
  2363.                     }
  2364.                     throw new DriverRegistroServiziException("[getAllIdServizi] Errore durante il parsing xml del servizio("+urlXMLServizi[i]+"): "+e.getMessage(),e);
  2365.                 }
  2366.                 if(serv==null)
  2367.                     throw new DriverRegistroServiziException("[getAllIdServizi] servizio non definito per la url ["+urlXMLServizi[i]+"]");
  2368.                
  2369.                 if(filtroRicerca!=null){
  2370.                     // Filtro By Tipo e Nome Soggetto Erogatore
  2371.                     if(filtroRicerca.getTipoSoggettoErogatore()!=null){
  2372.                         if(serv.getTipoSoggettoErogatore().equals(filtroRicerca.getTipoSoggettoErogatore()) == false){
  2373.                             continue;
  2374.                         }
  2375.                     }
  2376.                     if(filtroRicerca.getNomeSoggettoErogatore()!=null){
  2377.                         if(serv.getNomeSoggettoErogatore().equals(filtroRicerca.getNomeSoggettoErogatore()) == false){
  2378.                             continue;
  2379.                         }
  2380.                     }
  2381.                     // Filtro By Data
  2382.                     if(filtroRicerca.getMinDate()!=null){
  2383.                         if(serv.getOraRegistrazione()==null){
  2384.                             this.log.debug("[getAllIdServizi](FiltroByMinDate) ["+this.idServizioFactory.getUriFromAccordo(serv)+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  2385.                             continue;
  2386.                         }else if(serv.getOraRegistrazione().before(filtroRicerca.getMinDate())){
  2387.                             continue;
  2388.                         }
  2389.                     }
  2390.                     if(filtroRicerca.getMaxDate()!=null){
  2391.                         if(serv.getOraRegistrazione()==null){
  2392.                             this.log.debug("[getAllIdServizi](FiltroByMaxDate) Servizio["+this.idServizioFactory.getUriFromAccordo(serv)+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  2393.                             continue;
  2394.                         }else if(serv.getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  2395.                             continue;
  2396.                         }
  2397.                     }
  2398.                     // Filtro By Tipo, Nome e Versione
  2399.                     if(filtroRicerca.getTipo()!=null){
  2400.                         if(serv.getTipo().equals(filtroRicerca.getTipo()) == false){
  2401.                             continue;
  2402.                         }
  2403.                     }
  2404.                     if(filtroRicerca.getNome()!=null){
  2405.                         if(serv.getNome().equals(filtroRicerca.getNome()) == false){
  2406.                             continue;
  2407.                         }
  2408.                     }
  2409.                     if(filtroRicerca.getVersione()!=null){
  2410.                         if(serv.getVersione().intValue() != filtroRicerca.getVersione().intValue()){
  2411.                             continue;
  2412.                         }
  2413.                     }
  2414.                     if(filtroRicerca.getPortType()!=null){
  2415.                         if(serv.getPortType().equals(filtroRicerca.getPortType()) == false){
  2416.                             continue;
  2417.                         }
  2418.                     }
  2419.                     // Filtro by Accordo
  2420.                     if(filtroRicerca.getIdAccordoServizioParteComune()!=null){
  2421.                         String uriAccordo = this.idAccordoFactory.getUriFromIDAccordo(filtroRicerca.getIdAccordoServizioParteComune());
  2422.                         if(serv.getAccordoServizioParteComune().equals(uriAccordo) == false){
  2423.                             continue;
  2424.                         }
  2425.                     }
  2426.                     // ProtocolProperties
  2427.                     if(ProtocolPropertiesUtilities.isMatch(serv, filtroRicerca.getProtocolProperties())==false){
  2428.                         continue;
  2429.                     }
  2430.                     // Filtro By Tipo e/o Nome Soggetto Fruitore
  2431.                     if(filtroRicerca.getTipoSoggettoFruitore()!=null || filtroRicerca.getNomeSoggettoFruitore()!=null){
  2432.                         if(serv.sizeFruitoreList()<=0){
  2433.                             continue;
  2434.                         }
  2435.                         boolean found = false;
  2436.                         for (int k = 0; k < serv.sizeFruitoreList(); k++) {
  2437.                             Fruitore fruitore = serv.getFruitore(k);
  2438.                             if(filtroRicerca.getTipoSoggettoFruitore()!=null){
  2439.                                 if(fruitore.getTipo().equals(filtroRicerca.getTipoSoggettoFruitore()) == false){
  2440.                                     continue;
  2441.                                 }
  2442.                             }
  2443.                             if(filtroRicerca.getNomeSoggettoFruitore()!=null){
  2444.                                 if(fruitore.getNome().equals(filtroRicerca.getNomeSoggettoFruitore()) == false){
  2445.                                     continue;
  2446.                                 }
  2447.                             }
  2448.                             found = true;
  2449.                             break;
  2450.                         }
  2451.                         if(!found){
  2452.                             continue;
  2453.                         }
  2454.                     }
  2455.                 }
  2456.                
  2457.                 IDServizio idServ = this.idServizioFactory.getIDServizioFromAccordo(serv);
  2458.                
  2459.                 if(filtroFruizioni!=null){
  2460.                    
  2461.                     for (Fruitore fruitore : serv.getFruitoreList()) {
  2462.                        
  2463.                         // Tipo
  2464.                         if(filtroFruizioni.getTipoSoggettoFruitore()!=null){
  2465.                             if(fruitore.getTipo().equals(filtroFruizioni.getTipoSoggettoFruitore()) == false){
  2466.                                 continue;
  2467.                             }
  2468.                         }
  2469.                         // Nome
  2470.                         if(filtroFruizioni.getNomeSoggettoFruitore()!=null){
  2471.                             if(fruitore.getNome().equals(filtroFruizioni.getNomeSoggettoFruitore()) == false){
  2472.                                 continue;
  2473.                             }
  2474.                         }
  2475.                         // ProtocolProperties
  2476.                         if(ProtocolPropertiesUtilities.isMatch(fruitore, filtroFruizioni.getProtocolPropertiesFruizione())==false){
  2477.                             continue;
  2478.                         }
  2479.                        
  2480.                         IDFruizione idFruizione = new IDFruizione();
  2481.                         idFruizione.setIdServizio(idServ);
  2482.                         idFruizione.setIdFruitore(new IDSoggetto(fruitore.getTipo(), fruitore.getNome()));
  2483.                         listReturn.add((T)idFruizione);
  2484.                     }
  2485.                    
  2486.                 }
  2487.                 else{
  2488.                     listReturn.add((T)idServ);
  2489.                 }
  2490.             }
  2491.             if(listReturn.size()<=0){
  2492.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  2493.                 if(filtroFruizioni!=null){
  2494.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroFruizioni.toString());
  2495.                 }
  2496.                 else if(filtroRicerca!=null){
  2497.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicerca.toString());
  2498.                 }
  2499.                 else
  2500.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  2501.             }

  2502.         }catch(Exception e){
  2503.             if(e instanceof DriverRegistroServiziNotFound)
  2504.                 throw (DriverRegistroServiziNotFound)e;
  2505.             else
  2506.                 throw new DriverRegistroServiziException("getAllIdServizi error",e);
  2507.         }
  2508.     }
  2509.    
  2510.     @Override
  2511.     public Documento getAllegato(IDServizio idASPS, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2512.         throw new DriverRegistroServiziException("Not Implemented");
  2513.     }
  2514.     @Override
  2515.     public Documento getSpecificaSemiformale(IDServizio idASPS, TipiDocumentoSemiformale tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2516.         throw new DriverRegistroServiziException("Not Implemented");
  2517.     }
  2518.     @Override
  2519.     public Documento getSpecificaSicurezza(IDServizio idASPS, TipiDocumentoSicurezza tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2520.         throw new DriverRegistroServiziException("Not Implemented");
  2521.     }
  2522.     @Override
  2523.     public Documento getSpecificaLivelloServizio(IDServizio idASPS, TipiDocumentoLivelloServizio tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2524.         throw new DriverRegistroServiziException("Not Implemented");
  2525.     }
  2526.    
  2527.    
  2528.    
  2529.    
  2530.    
  2531.    
  2532.    
  2533.    
  2534.    
  2535.    
  2536.    
  2537.    
  2538.    
  2539.    
  2540.     /* ********  INTERFACCIA IDriverRegistroServiziCRUD ******** */
  2541.    
  2542.     /**
  2543.      * Crea un nuovo AccordoCooperazione
  2544.      *
  2545.      * @param accordoCooperazione
  2546.      * @throws DriverRegistroServiziException
  2547.      */
  2548.     @Override
  2549.     public void createAccordoCooperazione(AccordoCooperazione accordoCooperazione) throws DriverRegistroServiziException{
  2550.         if( accordoCooperazione == null)
  2551.             throw new DriverRegistroServiziException("[createAccordoCooperazione] Parametro Non Valido");
  2552.        
  2553.         IDAccordoCooperazione idAccordo = null;
  2554.         try {

  2555.             idAccordo = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);

  2556.             // controllo inizializzazione UDDI
  2557.             if(this.uddiLib.create == false){
  2558.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2559.             }

  2560.             // Controllo elementi obbligatori
  2561.             if( accordoCooperazione.getNome() == null ){
  2562.                 throw new DriverRegistroServiziException("Accordo Cooperazione non completamente definito nei parametri obbligatori");
  2563.             }

  2564.             // Controllo pre-esistenza dell'accordo
  2565.             if( this.uddiLib.existsAccordoCooperazione(idAccordo) == true){
  2566.                 throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordo
  2567.                 +"] risulta gia' inserito nel registro dei servizi.");
  2568.             }

  2569.             // Generazione XML
  2570.             this.generatoreXML.createAccordoCooperazione(idAccordo,accordoCooperazione);
  2571.                
  2572.             // Registrazione nel registro UDDI.
  2573.             String urlXML = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiRegistroServizi.URL_SEPARATOR +
  2574.                 this.generatoreXML.mappingIDAccordoCooperazioneToFileName(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione))  + ".xml";
  2575.             this.uddiLib.createAccordoCooperazione(idAccordo,urlXML);

  2576.         }catch (Exception e) {
  2577.             throw new DriverRegistroServiziException("[createAccordoCooperazione] Errore generatosi durante la creazione di un nuovo accordo di cooperazione ["+idAccordo+"]: "+e.getMessage(),e);
  2578.         }
  2579.     }
  2580.    
  2581.     /**
  2582.      * Verifica l'esistenza di un accordo registrato.
  2583.      *
  2584.      * @param idAccordo dell'accordo da verificare
  2585.      * @return true se l'accordo esiste, false altrimenti
  2586.      * @throws DriverRegistroServiziException
  2587.      */    
  2588.     @Override
  2589.     public boolean existsAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException{
  2590.         if( idAccordo == null)
  2591.             return false;
  2592.         if( idAccordo.getNome() == null)
  2593.             return false;
  2594.        
  2595.         try{
  2596.             return this.uddiLib.existsAccordoCooperazione(idAccordo);
  2597.         }catch(Exception e){
  2598.             this.log.error("[existsAccordoCooperazione] Accordo non trovato: "+e.getMessage(),e);
  2599.             return false;
  2600.         }
  2601.     }
  2602.    
  2603.     /**
  2604.      * Aggiorna l'AccordoCooperazione con i nuovi valori.
  2605.      *  
  2606.      * @param accordoCooperazione
  2607.      * @throws DriverRegistroServiziException
  2608.      */
  2609.     @Override
  2610.     public void updateAccordoCooperazione(AccordoCooperazione accordoCooperazione) throws DriverRegistroServiziException{
  2611.         if( accordoCooperazione == null)
  2612.             throw new DriverRegistroServiziException("[updateAccordoCooperazione] Parametro Non Valido");
  2613.        
  2614.         IDAccordoCooperazione idAccordoOLD = null;
  2615.         if(accordoCooperazione.getOldIDAccordoForUpdate()!=null){
  2616.             idAccordoOLD = accordoCooperazione.getOldIDAccordoForUpdate();
  2617.         }else{
  2618.             idAccordoOLD = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);
  2619.         }

  2620.         try {

  2621.             // Controllo  dell'accordo da Modificare
  2622.             if(idAccordoOLD==null){
  2623.                 throw new DriverRegistroServiziException("Accordo Cooperazione da modificare non definito");
  2624.             }

  2625.             // controllo inizializzazione UDDI
  2626.             if(this.uddiLib.create == false){
  2627.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2628.             }

  2629.             // Controllo elementi obbligatori dell'accordo modificato
  2630.             if( accordoCooperazione.getNome() == null){
  2631.                 throw new DriverRegistroServiziException("Accordo Cooperazione modificato non completamente definito nei parametri obbligatori");
  2632.             }

  2633.             // Controllo pre-esistenza dell'accordo da modificare
  2634.             if( this.uddiLib.existsAccordoCooperazione(idAccordoOLD) == false){
  2635.                 throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordoOLD
  2636.                 +"] non risulta gia' inserito nel registro dei servizi.");
  2637.             }

  2638.             // Controllo non esistenza della nuova identita dell'accordo (se da modificare)
  2639.             IDAccordoCooperazione idAccordoNEW = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);
  2640.             if(idAccordoOLD.equals(idAccordoNEW) == false){
  2641.                 if( this.uddiLib.existsAccordoCooperazione(idAccordoNEW) == true){
  2642.                     throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordoNEW
  2643.                     +"] risulta gia' inserito nel registro dei servizi.");
  2644.                 }
  2645.             }

  2646.             // Ri-Generazione XML
  2647.             this.generatoreXML.createAccordoCooperazione(idAccordoOLD,accordoCooperazione);
  2648.            
  2649.             // Modifica UDDI
  2650.             if(idAccordoOLD.equals(idAccordoNEW) == false){
  2651.                 String urlXML = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiRegistroServizi.URL_SEPARATOR +
  2652.                     this.generatoreXML.mappingIDAccordoCooperazioneToFileName(idAccordoNEW)  + ".xml";
  2653.                 this.uddiLib.updateAccordoCooperazione(idAccordoOLD,idAccordoNEW,urlXML);
  2654.             }

  2655.         }catch (Exception e) {
  2656.             throw new DriverRegistroServiziException("[updateAccordoCooperazione] Errore generatosi durante la modifica dell'accordo di cooperazione ["+idAccordoOLD+"]: "+e);
  2657.         }
  2658.     }
  2659.    
  2660.     /**
  2661.      * Elimina un AccordoCooperazione
  2662.      *  
  2663.      * @param accordoCooperazione
  2664.      * @throws DriverRegistroServiziException
  2665.      */
  2666.     @Override
  2667.     public void deleteAccordoCooperazione(AccordoCooperazione accordoCooperazione) throws DriverRegistroServiziException{
  2668.         if( accordoCooperazione == null)
  2669.             throw new DriverRegistroServiziException("[deleteAccordoCooperazione] Parametro Non Valido");
  2670.                
  2671.         IDAccordoCooperazione idAccordo = null;
  2672.         try {
  2673.             idAccordo = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);
  2674.            
  2675.             // controllo inizializzazione UDDI
  2676.             if(this.uddiLib.create == false){
  2677.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2678.             }
  2679.        
  2680.             // Controllo id dell'accordo da eliminare
  2681.             if(accordoCooperazione.getNome()==null){
  2682.                 throw new DriverRegistroServiziException("Accordo Cooperazione da eliminare non definito");
  2683.             }

  2684.             // Controllo pre-esistenza dell'accordo da eliminare
  2685.             if( this.uddiLib.existsAccordoCooperazione(idAccordo) == false){
  2686.                 throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordo
  2687.                 +"] non risulta gia' inserito nel registro dei servizi.");
  2688.             }

  2689.             // Delete from Repository
  2690.             this.generatoreXML.deleteAccordoCooperazione(idAccordo);
  2691.                
  2692.             // Delete from UDDI
  2693.             this.uddiLib.deleteAccordoCooperazione(idAccordo);
  2694.            
  2695.         }catch (Exception e) {
  2696.             throw new DriverRegistroServiziException("[deleteAccordoCooperazione] Errore generatosi durante l'eliminazione dell'accordo di cooperazione ["+this.idAccordoCooperazioneFactory.getUriFromAccordo(accordoCooperazione)+"]: "+e.getMessage(),e);
  2697.         }
  2698.     }
  2699.    
  2700.     /**
  2701.      * Crea un nuovo AccordoServizio
  2702.      *
  2703.      * @param accordoServizio
  2704.      * @throws DriverRegistroServiziException
  2705.      */
  2706.     @Override
  2707.     public void createAccordoServizioParteComune(AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException{
  2708.         if( accordoServizio == null)
  2709.             throw new DriverRegistroServiziException("[createAccordoServizioParteComune] Parametro Non Valido");
  2710.        
  2711.         IDAccordo idAccordo = null;
  2712.         try {

  2713.             idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);

  2714.             // controllo inizializzazione UDDI
  2715.             if(this.uddiLib.create == false){
  2716.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2717.             }

  2718.             // Controllo elementi obbligatori
  2719.             if( (accordoServizio.getNome() == null) ||
  2720.                 (accordoServizio.getProfiloCollaborazione() == null) ){
  2721.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune non completamente definito nei parametri obbligatori");
  2722.             }

  2723.             // Controllo pre-esistenza dell'accordo
  2724.             if( this.uddiLib.existsAccordoServizio(idAccordo) == true){
  2725.                 throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordo
  2726.                 +"] risulta gia' inserito nel registro dei servizi.");
  2727.             }

  2728.             // Generazione XML
  2729.             this.generatoreXML.createAccordoServizioParteComune(idAccordo,accordoServizio);
  2730.                
  2731.             // Registrazione nel registro UDDI.
  2732.             String urlXML = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiRegistroServizi.URL_SEPARATOR +
  2733.                 this.generatoreXML.mappingIDAccordoToFileName(this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio))  + ".xml";
  2734.             this.uddiLib.createAccordoServizio(idAccordo,urlXML);

  2735.         }catch (Exception e) {
  2736.             throw new DriverRegistroServiziException("[createAccordoServizioParteComune] Errore generatosi durante la creazione di un nuovo accordo di servizio ["+idAccordo+"]: "+e.getMessage(),e);
  2737.         }
  2738.     }
  2739.    
  2740.     /**
  2741.      * Verifica l'esistenza di un accordo registrato.
  2742.      *
  2743.      * @param idAccordo dell'accordo da verificare
  2744.      * @return true se l'accordo esiste, false altrimenti
  2745.      * @throws DriverRegistroServiziException
  2746.      */    
  2747.     @Override
  2748.     public boolean existsAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException{
  2749.         if( idAccordo == null)
  2750.             return false;
  2751.         if( idAccordo.getNome() == null)
  2752.             return false;
  2753.        
  2754.         try{
  2755.             return this.uddiLib.existsAccordoServizio(idAccordo);
  2756.         }catch(Exception e){
  2757.             this.log.error("[existsAccordoServizioParteComune] Accordo non trovato: "+e.getMessage(),e);
  2758.             return false;
  2759.         }
  2760.     }
  2761.    
  2762.     /**
  2763.      * Aggiorna l'AccordoServizio con i nuovi valori.
  2764.      *  
  2765.      * @param accordoServizio
  2766.      * @throws DriverRegistroServiziException
  2767.      */
  2768.     @Override
  2769.     public void updateAccordoServizioParteComune(AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException{
  2770.         if( accordoServizio == null)
  2771.             throw new DriverRegistroServiziException("[updateAccordoServizioParteComune] Parametro Non Valido");
  2772.        
  2773.         IDAccordo idAccordoOLD = null;
  2774.         if(accordoServizio.getOldIDAccordoForUpdate()!=null){
  2775.             idAccordoOLD = accordoServizio.getOldIDAccordoForUpdate();
  2776.         }else{
  2777.             idAccordoOLD = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  2778.         }

  2779.         try {

  2780.             // Controllo  dell'accordo da Modificare
  2781.             if(idAccordoOLD==null){
  2782.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune da modificare non definito");
  2783.             }

  2784.             // controllo inizializzazione UDDI
  2785.             if(this.uddiLib.create == false){
  2786.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2787.             }

  2788.             // Controllo elementi obbligatori dell'accordo modificato
  2789.             if( (accordoServizio.getNome() == null) ||
  2790.                 (accordoServizio.getProfiloCollaborazione() == null) ){
  2791.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune modificato non completamente definito nei parametri obbligatori");
  2792.             }

  2793.             // Controllo pre-esistenza dell'accordo da modificare
  2794.             if( this.uddiLib.existsAccordoServizio(idAccordoOLD) == false){
  2795.                 throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordoOLD
  2796.                 +"] non risulta gia' inserito nel registro dei servizi.");
  2797.             }

  2798.             // Controllo non esistenza della nuova identita dell'accordo (se da modificare)
  2799.             IDAccordo idAccordoNEW = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  2800.             if(idAccordoOLD.equals(idAccordoNEW) == false){
  2801.                 if( this.uddiLib.existsAccordoServizio(idAccordoNEW) == true){
  2802.                     throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordoNEW
  2803.                     +"] risulta gia' inserito nel registro dei servizi.");
  2804.                 }
  2805.             }

  2806.             // Ri-Generazione XML
  2807.             this.generatoreXML.createAccordoServizioParteComune(idAccordoOLD,accordoServizio);
  2808.            
  2809.             // Modifica UDDI
  2810.             if(idAccordoOLD.equals(idAccordoNEW) == false){
  2811.                 String urlXML = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiRegistroServizi.URL_SEPARATOR +
  2812.                     this.generatoreXML.mappingIDAccordoToFileName(idAccordoNEW)  + ".xml";
  2813.                 this.uddiLib.updateAccordoServizio(idAccordoOLD,idAccordoNEW,urlXML);
  2814.             }

  2815.         }catch (Exception e) {
  2816.             throw new DriverRegistroServiziException("[updateAccordoServizioParteComune] Errore generatosi durante la modifica dell'accordo di servizio ["+idAccordoOLD+"]: "+e);
  2817.         }
  2818.     }
  2819.    
  2820.     /**
  2821.      * Elimina un AccordoServizio
  2822.      *  
  2823.      * @param accordoServizio
  2824.      * @throws DriverRegistroServiziException
  2825.      */
  2826.     @Override
  2827.     public void deleteAccordoServizioParteComune(AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException{
  2828.         if( accordoServizio == null)
  2829.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteComune] Parametro Non Valido");
  2830.                
  2831.         IDAccordo idAccordo = null;
  2832.         try {
  2833.             idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  2834.            
  2835.             // controllo inizializzazione UDDI
  2836.             if(this.uddiLib.create == false){
  2837.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2838.             }
  2839.        
  2840.             // Controllo id dell'accordo da eliminare
  2841.             if(accordoServizio.getNome()==null){
  2842.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune da eliminare non definito");
  2843.             }

  2844.             // Controllo pre-esistenza dell'accordo da eliminare
  2845.             if( this.uddiLib.existsAccordoServizio(idAccordo) == false){
  2846.                 throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordo
  2847.                 +"] non risulta gia' inserito nel registro dei servizi.");
  2848.             }

  2849.             // Delete from Repository
  2850.             this.generatoreXML.deleteAccordoServizioParteComune(idAccordo);
  2851.                
  2852.             // Delete from UDDI
  2853.             this.uddiLib.deleteAccordoServizio(idAccordo);
  2854.            
  2855.         }catch (Exception e) {
  2856.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteComune] Errore generatosi durante l'eliminazione dell'accordo di servizio ["+this.idAccordoFactory.getUriFromAccordo(accordoServizio)+"]: "+e.getMessage(),e);
  2857.         }
  2858.     }
  2859.    
  2860.    
  2861.    
  2862.    
  2863.    
  2864.    
  2865.     /**
  2866.      * Crea una nuova Porta di Dominio
  2867.      *
  2868.      * @param pdd
  2869.      * @throws DriverRegistroServiziException
  2870.      */
  2871.     @Override
  2872.     public void createPortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  2873.         if( pdd == null)
  2874.             throw new DriverRegistroServiziException("[createPortaDominio] Parametro Non Valido");
  2875.        
  2876.         try {

  2877.             // controllo inizializzazione UDDI
  2878.             if(this.uddiLib.create == false){
  2879.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2880.             }

  2881.             // Controllo elementi obbligatori
  2882.             if( (pdd.getNome() == null) ){
  2883.                 throw new DriverRegistroServiziException("Porta di dominio non completamente definita nei parametri obbligatori");
  2884.             }

  2885.             // Controllo pre-esistenza della porta di dominio
  2886.             if( this.uddiLib.existsPortaDominio(pdd.getNome()) == true){
  2887.                 throw new DriverRegistroServiziException("La porta di dominio ["+pdd.getNome()
  2888.                 +"] risulta gia' inserito nel registro dei servizi.");
  2889.             }

  2890.             // Generazione XML
  2891.             this.generatoreXML.createPortaDominio(pdd.getNome(),pdd);
  2892.                
  2893.             // Registrazione nel registro UDDI.
  2894.             String urlXML = this.urlPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + CostantiRegistroServizi.URL_SEPARATOR + pdd.getNome()  + ".xml";
  2895.             this.uddiLib.createPortaDominio(pdd.getNome(),urlXML);

  2896.         }catch (Exception e) {
  2897.             throw new DriverRegistroServiziException("[createPortaDominio] Errore generatosi durante la creazione di una nuova porta di dominio ["+pdd.getNome()+"]: "+e.getMessage(),e);
  2898.         }
  2899.     }
  2900.    
  2901.     /**
  2902.      * Verifica l'esistenza di una Porta di Dominio.
  2903.      *
  2904.      * @param nome della porta di dominio da verificare
  2905.      * @return true se la porta di dominio esiste, false altrimenti
  2906.      * @throws DriverRegistroServiziException
  2907.      */    
  2908.     @Override
  2909.     public boolean existsPortaDominio(String nome) throws DriverRegistroServiziException{
  2910.         if( nome == null)
  2911.             return false;
  2912.        
  2913.         try{
  2914.             return this.uddiLib.existsPortaDominio(nome);
  2915.         }catch(Exception e){
  2916.             this.log.error("[existsPortaDominio] Porta di dominio non trovata: "+e.getMessage(),e);
  2917.             return false;
  2918.         }
  2919.     }
  2920.    
  2921.     /**
  2922.      * Aggiorna la Porta di Dominio con i nuovi valori.
  2923.      *  
  2924.      * @param pdd
  2925.      * @throws DriverRegistroServiziException
  2926.      */
  2927.     @Override
  2928.     public void updatePortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  2929.         if( pdd == null)
  2930.             throw new DriverRegistroServiziException("[updatePortaDominio] Parametro Non Valido");
  2931.        
  2932.         String pddOLD = null;
  2933.         //pddOLD = pdd.getOldNomeForUpdate();
  2934.         if(pddOLD==null)
  2935.             pddOLD = pdd.getNome();
  2936.        
  2937.         try {

  2938.             // controllo inizializzazione UDDI
  2939.             if(this.uddiLib.create == false){
  2940.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2941.             }

  2942.             // Controllo  della porta di dominio da Modificare
  2943.             if(pddOLD==null){
  2944.                 throw new DriverRegistroServiziException("Porta di dominio da modificare non definito");
  2945.             }

  2946.             // Controllo elementi obbligatori della pdd modificato
  2947.             if( (pdd.getNome() == null) ){
  2948.                 throw new DriverRegistroServiziException("Porta di dominio modificata non completamente definita nei parametri obbligatori");
  2949.             }

  2950.             // Controllo pre-esistenza della pdd da modificare
  2951.             if( this.uddiLib.existsPortaDominio(pddOLD) == false){
  2952.                 throw new DriverRegistroServiziException("La porta di dominio ["+pddOLD
  2953.                 +"] non risulta gia' inserita nel registro dei servizi.");
  2954.             }

  2955.             // Controllo non esistenza della nuova identita della pdd (se da modificare)
  2956.             String pddNEW = pdd.getNome();
  2957.             if(pddOLD.equals(pddNEW) == false){
  2958.                 if( this.uddiLib.existsPortaDominio(pddNEW) == true){
  2959.                     throw new DriverRegistroServiziException("La porta di dominio ["+pddNEW
  2960.                     +"] risulta gia' inserita nel registro dei servizi.");
  2961.                 }
  2962.             }

  2963.             // Ri-Generazione XML
  2964.             this.generatoreXML.createPortaDominio(pddOLD,pdd);
  2965.            
  2966.             // Modifica UDDI
  2967.             if(pddOLD.equals(pddNEW) == false){
  2968.                 String urlXML = this.urlPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + CostantiRegistroServizi.URL_SEPARATOR + pddNEW  + ".xml";
  2969.                 this.uddiLib.updatePortaDominio(pddOLD,pddNEW,urlXML);
  2970.             }

  2971.         }catch (Exception e) {
  2972.             throw new DriverRegistroServiziException("[updatePortaDominio] Errore generatosi durante la modifica della porta di dominio ["+pddOLD+"]: "+e);
  2973.         }
  2974.     }
  2975.    
  2976.     /**
  2977.      * Elimina una Porta di Dominio
  2978.      *  
  2979.      * @param pdd
  2980.      * @throws DriverRegistroServiziException
  2981.      */
  2982.     @Override
  2983.     public void deletePortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  2984.         if( pdd == null)
  2985.             throw new DriverRegistroServiziException("[deletePortaDominio] Parametro Non Valido");
  2986.                
  2987.         try {
  2988.             // controllo inizializzazione UDDI
  2989.             if(this.uddiLib.create == false){
  2990.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  2991.             }
  2992.        
  2993.             // Controllo id dell'accordo da eliminare
  2994.             if(pdd.getNome()==null){
  2995.                 throw new DriverRegistroServiziException("Porta di dominio da eliminare non definito");
  2996.             }

  2997.             // Controllo pre-esistenza della pdd da eliminare
  2998.             if( this.uddiLib.existsPortaDominio(pdd.getNome()) == false){
  2999.                 throw new DriverRegistroServiziException("La porta di dominio ["+pdd.getNome()
  3000.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3001.             }

  3002.             // Delete from Repository
  3003.             this.generatoreXML.deletePortaDominio(pdd.getNome());
  3004.                
  3005.             // Delete from UDDI
  3006.             this.uddiLib.deletePortaDominio(pdd.getNome());
  3007.            
  3008.         }catch (Exception e) {
  3009.             throw new DriverRegistroServiziException("[deletePortaDominio] Errore generatosi durante l'eliminazione della porta di dominio ["+pdd.getNome()+"]: "+e.getMessage(),e);
  3010.         }
  3011.     }
  3012.    
  3013.    
  3014.    
  3015.    
  3016.    
  3017.    
  3018.    
  3019.    
  3020.    
  3021.     /**
  3022.      * Crea una nuovo Gruppo
  3023.      *
  3024.      * @param gruppo
  3025.      * @throws DriverRegistroServiziException
  3026.      */
  3027.     @Override
  3028.     public void createGruppo(Gruppo gruppo) throws DriverRegistroServiziException{
  3029.         if( gruppo == null)
  3030.             throw new DriverRegistroServiziException("[createGruppo] Parametro Non Valido");
  3031.        
  3032.         try {

  3033.             // controllo inizializzazione UDDI
  3034.             if(this.uddiLib.create == false){
  3035.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3036.             }

  3037.             // Controllo elementi obbligatori
  3038.             if( (gruppo.getNome() == null) ){
  3039.                 throw new DriverRegistroServiziException("Gruppo non completamente definito nei parametri obbligatori");
  3040.             }

  3041.             // Controllo pre-esistenza del gruppo
  3042.             if( this.uddiLib.existsGruppo(gruppo.getNome()) == true){
  3043.                 throw new DriverRegistroServiziException("Il gruppo ["+gruppo.getNome()
  3044.                 +"] risulta gia' inserito nel registro dei servizi.");
  3045.             }

  3046.             // Generazione XML
  3047.             this.generatoreXML.createGruppo(gruppo.getNome(),gruppo);
  3048.                
  3049.             // Registrazione nel registro UDDI.
  3050.             String urlXML = this.urlPrefix + CostantiXMLRepository.GRUPPI + CostantiRegistroServizi.URL_SEPARATOR + gruppo.getNome()  + ".xml";
  3051.             this.uddiLib.createGruppo(gruppo.getNome(),urlXML);

  3052.         }catch (Exception e) {
  3053.             throw new DriverRegistroServiziException("[createGruppo] Errore generatosi durante la creazione di un nuovo gruppo ["+gruppo.getNome()+"]: "+e.getMessage(),e);
  3054.         }
  3055.     }
  3056.    
  3057.     /**
  3058.      * Verifica l'esistenza di un Gruppo
  3059.      *
  3060.      * @param idGruppo idGruppo del gruppo da verificare
  3061.      * @return true se il gruppo esiste, false altrimenti
  3062.      * @throws DriverRegistroServiziException
  3063.      */    
  3064.     @Override
  3065.     public boolean existsGruppo(IDGruppo idGruppo) throws DriverRegistroServiziException{
  3066.         if( idGruppo == null || idGruppo.getNome()==null)
  3067.             return false;
  3068.        
  3069.         try{
  3070.             return this.uddiLib.existsGruppo(idGruppo.getNome());
  3071.         }catch(Exception e){
  3072.             this.log.error("[existsGruppo] Gruppo non trovato: "+e.getMessage(),e);
  3073.             return false;
  3074.         }
  3075.     }
  3076.    
  3077.     /**
  3078.      * Aggiorna il Gruppo con i nuovi valori.
  3079.      *  
  3080.      * @param gruppo
  3081.      * @throws DriverRegistroServiziException
  3082.      */
  3083.     @Override
  3084.     public void updateGruppo(Gruppo gruppo) throws DriverRegistroServiziException{
  3085.         if( gruppo == null)
  3086.             throw new DriverRegistroServiziException("[updateGruppo] Parametro Non Valido");
  3087.        
  3088.         IDGruppo idGruppoOLD = null;
  3089.         //idGruppoOLD = gruppo.getOldIDGruppoForUpdate();
  3090.         //if(idGruppoOLD==null)
  3091.         idGruppoOLD = new IDGruppo(gruppo.getNome());
  3092.        
  3093.         try {

  3094.             // controllo inizializzazione UDDI
  3095.             if(this.uddiLib.create == false){
  3096.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3097.             }

  3098.             // Controllo  del gruppo da Modificare
  3099.             if(idGruppoOLD==null || idGruppoOLD.getNome()==null){
  3100.                 throw new DriverRegistroServiziException("Gruppo da modificare non definito");
  3101.             }

  3102.             // Controllo elementi obbligatori del gruppo modificato
  3103.             if( (gruppo.getNome() == null) ){
  3104.                 throw new DriverRegistroServiziException("Gruppo modificato non completamente definita nei parametri obbligatori");
  3105.             }

  3106.             // Controllo pre-esistenza del gruppo da modificare
  3107.             if( this.uddiLib.existsGruppo(idGruppoOLD.getNome()) == false){
  3108.                 throw new DriverRegistroServiziException("Il Gruppo ["+idGruppoOLD
  3109.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3110.             }

  3111.             // Controllo non esistenza della nuova identita del gruppo (se da modificare)
  3112.             IDGruppo idGruppoNEW = new IDGruppo(gruppo.getNome());
  3113.             if(idGruppoOLD.equals(idGruppoNEW) == false){
  3114.                 if( this.uddiLib.existsGruppo(idGruppoNEW.getNome()) == true){
  3115.                     throw new DriverRegistroServiziException("Il Gruppo ["+idGruppoNEW
  3116.                     +"] risulta gia' inserita nel registro dei servizi.");
  3117.                 }
  3118.             }

  3119.             // Ri-Generazione XML
  3120.             this.generatoreXML.createGruppo(idGruppoOLD.getNome(),gruppo);
  3121.            
  3122.             // Modifica UDDI
  3123.             if(idGruppoOLD.equals(idGruppoNEW) == false){
  3124.                 String urlXML = this.urlPrefix + CostantiXMLRepository.GRUPPI + CostantiRegistroServizi.URL_SEPARATOR + idGruppoNEW  + ".xml";
  3125.                 this.uddiLib.updateGruppo(idGruppoOLD.getNome(),idGruppoNEW.getNome(),urlXML);
  3126.             }

  3127.         }catch (Exception e) {
  3128.             throw new DriverRegistroServiziException("[updateGruppo] Errore generatosi durante la modifica del gruppo ["+idGruppoOLD+"]: "+e);
  3129.         }
  3130.     }
  3131.    
  3132.     /**
  3133.      * Elimina un Gruppo
  3134.      *  
  3135.      * @param gruppo
  3136.      * @throws DriverRegistroServiziException
  3137.      */
  3138.     @Override
  3139.     public void deleteGruppo(Gruppo gruppo) throws DriverRegistroServiziException{
  3140.         if( gruppo == null)
  3141.             throw new DriverRegistroServiziException("[deleteGruppo] Parametro Non Valido");
  3142.                
  3143.         try {
  3144.             // controllo inizializzazione UDDI
  3145.             if(this.uddiLib.create == false){
  3146.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3147.             }
  3148.        
  3149.             // Controllo id del gruppo
  3150.             if(gruppo.getNome()==null){
  3151.                 throw new DriverRegistroServiziException("Gruppo da eliminare non definito");
  3152.             }

  3153.             // Controllo pre-esistenza del gruppo da eliminare
  3154.             if( this.uddiLib.existsGruppo(gruppo.getNome()) == false){
  3155.                 throw new DriverRegistroServiziException("Il Gruppo ["+gruppo.getNome()
  3156.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3157.             }

  3158.             // Delete from Repository
  3159.             this.generatoreXML.deleteGruppo(gruppo.getNome());
  3160.                
  3161.             // Delete from UDDI
  3162.             this.uddiLib.deleteGruppo(gruppo.getNome());
  3163.            
  3164.         }catch (Exception e) {
  3165.             throw new DriverRegistroServiziException("[deleteGruppo] Errore generatosi durante l'eliminazione del gruppo ["+gruppo.getNome()+"]: "+e.getMessage(),e);
  3166.         }
  3167.     }
  3168.    
  3169.    
  3170.    
  3171.    
  3172.    
  3173.    
  3174.    
  3175.    
  3176.    
  3177.    
  3178.     /**
  3179.      * Crea una nuovo Ruolo
  3180.      *
  3181.      * @param ruolo
  3182.      * @throws DriverRegistroServiziException
  3183.      */
  3184.     @Override
  3185.     public void createRuolo(Ruolo ruolo) throws DriverRegistroServiziException{
  3186.         if( ruolo == null)
  3187.             throw new DriverRegistroServiziException("[createRuolo] Parametro Non Valido");
  3188.        
  3189.         try {

  3190.             // controllo inizializzazione UDDI
  3191.             if(this.uddiLib.create == false){
  3192.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3193.             }

  3194.             // Controllo elementi obbligatori
  3195.             if( (ruolo.getNome() == null) ){
  3196.                 throw new DriverRegistroServiziException("Ruolo non completamente definito nei parametri obbligatori");
  3197.             }

  3198.             // Controllo pre-esistenza del ruolo
  3199.             if( this.uddiLib.existsRuolo(ruolo.getNome()) == true){
  3200.                 throw new DriverRegistroServiziException("Il ruolo ["+ruolo.getNome()
  3201.                 +"] risulta gia' inserito nel registro dei servizi.");
  3202.             }

  3203.             // Generazione XML
  3204.             this.generatoreXML.createRuolo(ruolo.getNome(),ruolo);
  3205.                
  3206.             // Registrazione nel registro UDDI.
  3207.             String urlXML = this.urlPrefix + CostantiXMLRepository.RUOLI + CostantiRegistroServizi.URL_SEPARATOR + ruolo.getNome()  + ".xml";
  3208.             this.uddiLib.createRuolo(ruolo.getNome(),urlXML);

  3209.         }catch (Exception e) {
  3210.             throw new DriverRegistroServiziException("[createRuolo] Errore generatosi durante la creazione di un nuovo ruolo ["+ruolo.getNome()+"]: "+e.getMessage(),e);
  3211.         }
  3212.     }
  3213.    
  3214.     /**
  3215.      * Verifica l'esistenza di un Ruolo
  3216.      *
  3217.      * @param idRuolo idRuolo del ruolo da verificare
  3218.      * @return true se il ruolo esiste, false altrimenti
  3219.      * @throws DriverRegistroServiziException
  3220.      */    
  3221.     @Override
  3222.     public boolean existsRuolo(IDRuolo idRuolo) throws DriverRegistroServiziException{
  3223.         if( idRuolo == null || idRuolo.getNome()==null)
  3224.             return false;
  3225.        
  3226.         try{
  3227.             return this.uddiLib.existsRuolo(idRuolo.getNome());
  3228.         }catch(Exception e){
  3229.             this.log.error("[existsRuolo] Ruolo non trovato: "+e.getMessage(),e);
  3230.             return false;
  3231.         }
  3232.     }
  3233.    
  3234.     /**
  3235.      * Aggiorna il Ruolo con i nuovi valori.
  3236.      *  
  3237.      * @param ruolo
  3238.      * @throws DriverRegistroServiziException
  3239.      */
  3240.     @Override
  3241.     public void updateRuolo(Ruolo ruolo) throws DriverRegistroServiziException{
  3242.         if( ruolo == null)
  3243.             throw new DriverRegistroServiziException("[updateRuolo] Parametro Non Valido");
  3244.        
  3245.         IDRuolo idRuoloOLD = null;
  3246.         //idRuoloOLD = ruolo.getOldIDRuoloForUpdate();
  3247.         //if(idRuoloOLD==null)
  3248.         idRuoloOLD = new IDRuolo(ruolo.getNome());
  3249.        
  3250.         try {

  3251.             // controllo inizializzazione UDDI
  3252.             if(this.uddiLib.create == false){
  3253.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3254.             }

  3255.             // Controllo  del ruolo da Modificare
  3256.             if(idRuoloOLD==null || idRuoloOLD.getNome()==null){
  3257.                 throw new DriverRegistroServiziException("Ruolo da modificare non definito");
  3258.             }

  3259.             // Controllo elementi obbligatori del ruolo modificato
  3260.             if( (ruolo.getNome() == null) ){
  3261.                 throw new DriverRegistroServiziException("Ruolo modificato non completamente definita nei parametri obbligatori");
  3262.             }

  3263.             // Controllo pre-esistenza del ruolo da modificare
  3264.             if( this.uddiLib.existsRuolo(idRuoloOLD.getNome()) == false){
  3265.                 throw new DriverRegistroServiziException("Il Ruolo ["+idRuoloOLD
  3266.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3267.             }

  3268.             // Controllo non esistenza della nuova identita del ruolo (se da modificare)
  3269.             IDRuolo idRuoloNEW = new IDRuolo(ruolo.getNome());
  3270.             if(idRuoloOLD.equals(idRuoloNEW) == false){
  3271.                 if( this.uddiLib.existsRuolo(idRuoloNEW.getNome()) == true){
  3272.                     throw new DriverRegistroServiziException("Il Ruolo ["+idRuoloNEW
  3273.                     +"] risulta gia' inserita nel registro dei servizi.");
  3274.                 }
  3275.             }

  3276.             // Ri-Generazione XML
  3277.             this.generatoreXML.createRuolo(idRuoloOLD.getNome(),ruolo);
  3278.            
  3279.             // Modifica UDDI
  3280.             if(idRuoloOLD.equals(idRuoloNEW) == false){
  3281.                 String urlXML = this.urlPrefix + CostantiXMLRepository.RUOLI + CostantiRegistroServizi.URL_SEPARATOR + idRuoloNEW  + ".xml";
  3282.                 this.uddiLib.updateRuolo(idRuoloOLD.getNome(),idRuoloNEW.getNome(),urlXML);
  3283.             }

  3284.         }catch (Exception e) {
  3285.             throw new DriverRegistroServiziException("[updateRuolo] Errore generatosi durante la modifica del ruolo ["+idRuoloOLD+"]: "+e);
  3286.         }
  3287.     }
  3288.    
  3289.     /**
  3290.      * Elimina un Ruolo
  3291.      *  
  3292.      * @param ruolo
  3293.      * @throws DriverRegistroServiziException
  3294.      */
  3295.     @Override
  3296.     public void deleteRuolo(Ruolo ruolo) throws DriverRegistroServiziException{
  3297.         if( ruolo == null)
  3298.             throw new DriverRegistroServiziException("[deleteRuolo] Parametro Non Valido");
  3299.                
  3300.         try {
  3301.             // controllo inizializzazione UDDI
  3302.             if(this.uddiLib.create == false){
  3303.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3304.             }
  3305.        
  3306.             // Controllo id del ruolo
  3307.             if(ruolo.getNome()==null){
  3308.                 throw new DriverRegistroServiziException("Ruolo da eliminare non definito");
  3309.             }

  3310.             // Controllo pre-esistenza del ruolo da eliminare
  3311.             if( this.uddiLib.existsRuolo(ruolo.getNome()) == false){
  3312.                 throw new DriverRegistroServiziException("Il Ruolo ["+ruolo.getNome()
  3313.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3314.             }

  3315.             // Delete from Repository
  3316.             this.generatoreXML.deleteRuolo(ruolo.getNome());
  3317.                
  3318.             // Delete from UDDI
  3319.             this.uddiLib.deleteRuolo(ruolo.getNome());
  3320.            
  3321.         }catch (Exception e) {
  3322.             throw new DriverRegistroServiziException("[deleteRuolo] Errore generatosi durante l'eliminazione del ruolo ["+ruolo.getNome()+"]: "+e.getMessage(),e);
  3323.         }
  3324.     }
  3325.    
  3326.    
  3327.    
  3328.    
  3329.    
  3330.    
  3331.    
  3332.    
  3333.    
  3334.     /**
  3335.      * Crea una nuovo Scope
  3336.      *
  3337.      * @param scope
  3338.      * @throws DriverRegistroServiziException
  3339.      */
  3340.     @Override
  3341.     public void createScope(Scope scope) throws DriverRegistroServiziException{
  3342.         if( scope == null)
  3343.             throw new DriverRegistroServiziException("[createScope] Parametro Non Valido");
  3344.        
  3345.         try {

  3346.             // controllo inizializzazione UDDI
  3347.             if(this.uddiLib.create == false){
  3348.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3349.             }

  3350.             // Controllo elementi obbligatori
  3351.             if( (scope.getNome() == null) ){
  3352.                 throw new DriverRegistroServiziException("Scope non completamente definito nei parametri obbligatori");
  3353.             }

  3354.             // Controllo pre-esistenza del scope
  3355.             if( this.uddiLib.existsScope(scope.getNome()) == true){
  3356.                 throw new DriverRegistroServiziException("Il scope ["+scope.getNome()
  3357.                 +"] risulta gia' inserito nel registro dei servizi.");
  3358.             }

  3359.             // Generazione XML
  3360.             this.generatoreXML.createScope(scope.getNome(),scope);
  3361.                
  3362.             // Registrazione nel registro UDDI.
  3363.             String urlXML = this.urlPrefix + CostantiXMLRepository.RUOLI + CostantiRegistroServizi.URL_SEPARATOR + scope.getNome()  + ".xml";
  3364.             this.uddiLib.createScope(scope.getNome(),urlXML);

  3365.         }catch (Exception e) {
  3366.             throw new DriverRegistroServiziException("[createScope] Errore generatosi durante la creazione di un nuovo scope ["+scope.getNome()+"]: "+e.getMessage(),e);
  3367.         }
  3368.     }
  3369.    
  3370.     /**
  3371.      * Verifica l'esistenza di un Scope
  3372.      *
  3373.      * @param idScope idScope del scope da verificare
  3374.      * @return true se il scope esiste, false altrimenti
  3375.      * @throws DriverRegistroServiziException
  3376.      */    
  3377.     @Override
  3378.     public boolean existsScope(IDScope idScope) throws DriverRegistroServiziException{
  3379.         if( idScope == null || idScope.getNome()==null)
  3380.             return false;
  3381.        
  3382.         try{
  3383.             return this.uddiLib.existsScope(idScope.getNome());
  3384.         }catch(Exception e){
  3385.             this.log.error("[existsScope] Scope non trovato: "+e.getMessage(),e);
  3386.             return false;
  3387.         }
  3388.     }
  3389.    
  3390.     /**
  3391.      * Aggiorna il Scope con i nuovi valori.
  3392.      *  
  3393.      * @param scope
  3394.      * @throws DriverRegistroServiziException
  3395.      */
  3396.     @Override
  3397.     public void updateScope(Scope scope) throws DriverRegistroServiziException{
  3398.         if( scope == null)
  3399.             throw new DriverRegistroServiziException("[updateScope] Parametro Non Valido");
  3400.        
  3401.         IDScope idScopeOLD = null;
  3402.         //idScopeOLD = scope.getOldIDScopeForUpdate();
  3403.         //if(idScopeOLD==null)
  3404.         idScopeOLD = new IDScope(scope.getNome());
  3405.        
  3406.         try {

  3407.             // controllo inizializzazione UDDI
  3408.             if(this.uddiLib.create == false){
  3409.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3410.             }

  3411.             // Controllo  del scope da Modificare
  3412.             if(idScopeOLD==null || idScopeOLD.getNome()==null){
  3413.                 throw new DriverRegistroServiziException("Scope da modificare non definito");
  3414.             }

  3415.             // Controllo elementi obbligatori del scope modificato
  3416.             if( (scope.getNome() == null) ){
  3417.                 throw new DriverRegistroServiziException("Scope modificato non completamente definita nei parametri obbligatori");
  3418.             }

  3419.             // Controllo pre-esistenza del scope da modificare
  3420.             if( this.uddiLib.existsScope(idScopeOLD.getNome()) == false){
  3421.                 throw new DriverRegistroServiziException("Il Scope ["+idScopeOLD
  3422.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3423.             }

  3424.             // Controllo non esistenza della nuova identita del scope (se da modificare)
  3425.             IDScope idScopeNEW = new IDScope(scope.getNome());
  3426.             if(idScopeOLD.equals(idScopeNEW) == false){
  3427.                 if( this.uddiLib.existsScope(idScopeNEW.getNome()) == true){
  3428.                     throw new DriverRegistroServiziException("Il Scope ["+idScopeNEW
  3429.                     +"] risulta gia' inserita nel registro dei servizi.");
  3430.                 }
  3431.             }

  3432.             // Ri-Generazione XML
  3433.             this.generatoreXML.createScope(idScopeOLD.getNome(),scope);
  3434.            
  3435.             // Modifica UDDI
  3436.             if(idScopeOLD.equals(idScopeNEW) == false){
  3437.                 String urlXML = this.urlPrefix + CostantiXMLRepository.RUOLI + CostantiRegistroServizi.URL_SEPARATOR + idScopeNEW  + ".xml";
  3438.                 this.uddiLib.updateScope(idScopeOLD.getNome(),idScopeNEW.getNome(),urlXML);
  3439.             }

  3440.         }catch (Exception e) {
  3441.             throw new DriverRegistroServiziException("[updateScope] Errore generatosi durante la modifica del scope ["+idScopeOLD+"]: "+e);
  3442.         }
  3443.     }
  3444.    
  3445.     /**
  3446.      * Elimina un Scope
  3447.      *  
  3448.      * @param scope
  3449.      * @throws DriverRegistroServiziException
  3450.      */
  3451.     @Override
  3452.     public void deleteScope(Scope scope) throws DriverRegistroServiziException{
  3453.         if( scope == null)
  3454.             throw new DriverRegistroServiziException("[deleteScope] Parametro Non Valido");
  3455.                
  3456.         try {
  3457.             // controllo inizializzazione UDDI
  3458.             if(this.uddiLib.create == false){
  3459.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3460.             }
  3461.        
  3462.             // Controllo id del scope
  3463.             if(scope.getNome()==null){
  3464.                 throw new DriverRegistroServiziException("Scope da eliminare non definito");
  3465.             }

  3466.             // Controllo pre-esistenza del scope da eliminare
  3467.             if( this.uddiLib.existsScope(scope.getNome()) == false){
  3468.                 throw new DriverRegistroServiziException("Il Scope ["+scope.getNome()
  3469.                 +"] non risulta gia' inserita nel registro dei servizi.");
  3470.             }

  3471.             // Delete from Repository
  3472.             this.generatoreXML.deleteScope(scope.getNome());
  3473.                
  3474.             // Delete from UDDI
  3475.             this.uddiLib.deleteScope(scope.getNome());
  3476.            
  3477.         }catch (Exception e) {
  3478.             throw new DriverRegistroServiziException("[deleteScope] Errore generatosi durante l'eliminazione del scope ["+scope.getNome()+"]: "+e.getMessage(),e);
  3479.         }
  3480.     }
  3481.    
  3482.    
  3483.    
  3484.    
  3485.    
  3486.    
  3487.    
  3488.     /**
  3489.      * Crea un nuovo Soggetto
  3490.      *
  3491.      * @param soggetto
  3492.      * @throws DriverRegistroServiziException
  3493.      */
  3494.     @Override
  3495.     public void createSoggetto(Soggetto soggetto) throws DriverRegistroServiziException{
  3496.         if( soggetto == null)
  3497.             throw new DriverRegistroServiziException("[createSoggetto] Parametro Non Valido");
  3498.        
  3499.         try {

  3500.             // controllo inizializzazione UDDI
  3501.             if(this.uddiLib.create == false){
  3502.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3503.             }
  3504.            
  3505.             // Controllo elementi obbligatori
  3506.             if( (soggetto.getNome() == null) ||
  3507.                     (soggetto.getTipo() == null) ){
  3508.                 throw new DriverRegistroServiziException("Soggetto non definito");
  3509.             }
  3510.             if(soggetto.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(soggetto.getConnettore().getTipo())){
  3511.                 boolean connettoreNonDefinito = false;
  3512.                 if( soggetto.getConnettore().getTipo() == null ){
  3513.                     connettoreNonDefinito = true;
  3514.                 }
  3515.                 if(connettoreNonDefinito){
  3516.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del soggetto non corretta");
  3517.                 }
  3518.             }

  3519.             //  Definizione dati opzionali
  3520.             if( (soggetto.getIdentificativoPorta() == null) || ("".equals(soggetto.getIdentificativoPorta())) ){
  3521.                 soggetto.setIdentificativoPorta(soggetto.getNome() + "SPCoopIT");
  3522.             }
  3523.             if( (soggetto.getDescrizione() == null) ||  ("".equals(soggetto.getDescrizione())) ){
  3524.                 soggetto.setDescrizione("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome());
  3525.             }
  3526.             IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome(),soggetto.getIdentificativoPorta());
  3527. //          if( (soggetto.getCodiceIpa() == null) || ("".equals(soggetto.getCodiceIpa())) ){
  3528. //              // GESTIRE TRAMITE FACTORY?            
  3529. //              //soggetto.setCodiceIpa(SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(idSoggetto,false));
  3530. //          }
  3531.            
  3532.            
  3533.             // Controllo pre-esistenza del soggetto
  3534.             String idSoggetto_string = soggetto.getTipo() + soggetto.getNome();
  3535.             if(this.uddiLib.existsSoggetto(idSoggetto) == true){
  3536.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggetto_string
  3537.                 +"] risulta gia' inserito nel registro dei servizi.");
  3538.             }

  3539.            
  3540.             // Generazione XML
  3541.             String urlXML = this.urlPrefix + idSoggetto_string + CostantiRegistroServizi.URL_SEPARATOR  + idSoggetto_string + ".xml";
  3542.             this.generatoreXML.createSoggetto(idSoggetto,soggetto);
  3543.                
  3544.             // Registrazione nel registro UDDI.
  3545.             this.uddiLib.createSoggetto(idSoggetto, soggetto.getDescrizione(),urlXML);
  3546.                
  3547.         }catch (Exception e) {
  3548.             throw new DriverRegistroServiziException("[createSoggetto] Errore generatosi durante la creazione del nuovo Soggetto ["+soggetto.getTipo()+soggetto.getNome()+"]: "+e.getMessage(),e);
  3549.         }
  3550.     }
  3551.    
  3552.     /**
  3553.      * Verifica l'esistenza di un soggetto registrato.
  3554.      *
  3555.      * @param idSoggetto Identificativo del soggetto
  3556.      * @return true se il soggetto esiste, false altrimenti
  3557.      */    
  3558.     @Override
  3559.     public boolean existsSoggetto(IDSoggetto idSoggetto) throws DriverRegistroServiziException{
  3560.         if( idSoggetto == null)
  3561.             return false;
  3562.         try{
  3563.             return this.uddiLib.existsSoggetto(idSoggetto);
  3564.         }catch(Exception e) {
  3565.             return false;
  3566.         }
  3567.     }
  3568.    
  3569.     /**
  3570.      * Aggiorna un Soggetto
  3571.      *
  3572.      * @param soggetto
  3573.      * @throws DriverRegistroServiziException
  3574.      */
  3575.     @Override
  3576.     public void updateSoggetto(Soggetto soggetto) throws DriverRegistroServiziException{
  3577.         if( soggetto == null)
  3578.             throw new DriverRegistroServiziException("[updateSoggetto] Parametro Non Valido");
  3579.        
  3580.         String tipoOLD = null;
  3581.         String nomeOLD = null;
  3582.         if(soggetto.getOldIDSoggettoForUpdate()!=null){
  3583.             tipoOLD = soggetto.getOldIDSoggettoForUpdate().getTipo();
  3584.             nomeOLD = soggetto.getOldIDSoggettoForUpdate().getNome();
  3585.         }
  3586.         if(tipoOLD==null||nomeOLD==null){
  3587.             tipoOLD = soggetto.getTipo();
  3588.             nomeOLD = soggetto.getNome();
  3589.         }
  3590.         String idSoggettoOLD_string = tipoOLD + nomeOLD;
  3591.         IDSoggetto idSoggettoOLD = new IDSoggetto(tipoOLD,nomeOLD);
  3592.            
  3593.         try {

  3594.             // controllo inizializzazione UDDI
  3595.             if(this.uddiLib.create == false){
  3596.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3597.             }
  3598.            
  3599.             // Controllo id del soggetto da Modificare
  3600.             if(tipoOLD==null || nomeOLD==null){
  3601.                 throw new DriverRegistroServiziException("Soggetto da modificare non definito");
  3602.             }

  3603.             // Controllo elementi obbligatori del soggetto modificato
  3604.             if( (soggetto.getNome() == null) ||
  3605.                     (soggetto.getTipo() == null) ){
  3606.                 throw new DriverRegistroServiziException("Soggetto modificato non definito");
  3607.             }
  3608.             if(soggetto.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(soggetto.getConnettore().getTipo())){
  3609.                 boolean connettoreNonDefinito = false;
  3610.                 if( soggetto.getConnettore().getTipo() == null ){
  3611.                     connettoreNonDefinito = true;
  3612.                 }
  3613.                 if(connettoreNonDefinito){
  3614.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del soggetto non corretta");
  3615.                 }
  3616.             }
  3617.            
  3618.             // Definizione dati opzionali
  3619.             if( (soggetto.getIdentificativoPorta() == null) || ("".equals(soggetto.getIdentificativoPorta())) ){
  3620.                 soggetto.setIdentificativoPorta(soggetto.getNome() + "SPCoopIT");
  3621.             }
  3622.             if( (soggetto.getDescrizione() == null) ||  ("".equals(soggetto.getDescrizione())) ){
  3623.                 soggetto.setDescrizione("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome());
  3624.             }
  3625.             IDSoggetto idSoggettoNEW = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  3626. //          if( (soggetto.getCodiceIpa() == null) || ("".equals(soggetto.getCodiceIpa())) ){
  3627. //              // GESTIRE TRAMITE FACTORY?            
  3628. //              //soggetto.setCodiceIpa(SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(idSoggettoNEW,false));
  3629. //          }

  3630.             // Controllo pre-esistenza del soggetto da modificare
  3631.             if( this.uddiLib.existsSoggetto(idSoggettoOLD) == false){
  3632.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoOLD_string
  3633.                 +"] non risulta gia' inserito nel registro dei servizi.");
  3634.             }

  3635.             // Controllo non esistenza della nuova identita del soggetto (se da modificare)
  3636.             String idSoggettoNEW_string = soggetto.getTipo() + soggetto.getNome();
  3637.             if(idSoggettoOLD_string.equals(idSoggettoNEW_string) == false){
  3638.                 if( this.uddiLib.existsSoggetto(idSoggettoNEW) == true){
  3639.                     throw new DriverRegistroServiziException("La nuova identita da associare al soggetto ["+idSoggettoNEW_string
  3640.                     +"] risulta gia' utilizzata nel registro dei servizi.");
  3641.                 }
  3642.             }

  3643.             // Ri-Generazione XML
  3644.             String urlXML = this.urlPrefix + idSoggettoNEW_string + CostantiRegistroServizi.URL_SEPARATOR + idSoggettoNEW_string + ".xml";
  3645.             this.generatoreXML.createSoggetto(idSoggettoOLD,soggetto);
  3646.            
  3647.             // Modifica UDDI
  3648.            
  3649.             // Refresh dominio
  3650.             this.uddiLib.updateIdentificativoPortaSoggetto(idSoggettoOLD,soggetto.getIdentificativoPorta());
  3651.            
  3652.             // Refresh descrizione
  3653.             this.uddiLib.updateDescrizioneSoggetto(idSoggettoOLD,soggetto.getDescrizione());
  3654.            
  3655.             if(idSoggettoOLD_string.equals(idSoggettoNEW_string) == false){
  3656.                 // Modifica url che punta al file XML
  3657.                 this.uddiLib.updateUrlXmlSoggetto(idSoggettoOLD,urlXML);

  3658.                 // Modifica nome BusinessService (Per ultima per permettere il Rollback!!!!!)
  3659.                 this.uddiLib.updateIdSoggetto(idSoggettoOLD,idSoggettoNEW);
  3660.             }

  3661.         }catch (Exception e) {
  3662.             throw new DriverRegistroServiziException("[updateSoggetto] Errore generatosi durante la modifica del Soggetto ["+idSoggettoOLD+"]: "+e.getMessage(),e);
  3663.         }
  3664.     }
  3665.    
  3666.     /**
  3667.      * Cancella un Soggetto
  3668.      *
  3669.      * @param soggetto
  3670.      * @throws DriverRegistroServiziException
  3671.      */
  3672.     @Override
  3673.     public void deleteSoggetto(Soggetto soggetto) throws DriverRegistroServiziException{
  3674.         if( soggetto == null)
  3675.             throw new DriverRegistroServiziException("[deleteSoggetto] Parametro Non Valido");

  3676.         try {
  3677.             //  controllo inizializzazione UDDI
  3678.             if(this.uddiLib.create == false){
  3679.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3680.             }
  3681.            
  3682.             // Controllo id del soggetto da eliminare
  3683.             if(soggetto.getTipo()==null || soggetto.getNome()==null){
  3684.                 throw new DriverRegistroServiziException("Soggetto da eliminare non definito");
  3685.             }

  3686.             // Controllo pre-esistenza del soggetto da modificare
  3687.             IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome(),soggetto.getIdentificativoPorta());
  3688.             if( this.uddiLib.existsSoggetto(idSoggetto) == false){
  3689.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggetto
  3690.                 +"] non risulta gia' inserito nel registro dei servizi.");
  3691.             }

  3692.             // Delete from Repository
  3693.             this.generatoreXML.deleteSoggetto(idSoggetto);
  3694.                
  3695.             // Delete from UDDI
  3696.             this.uddiLib.deleteSoggetto(idSoggetto);
  3697.            
  3698.         }catch (Exception e) {
  3699.             throw new DriverRegistroServiziException("[deleteSoggetto] Errore generatosi durante l'eliminazione del Soggetto ["+soggetto.getTipo()+soggetto.getNome()+"]: "+e.getMessage(),e);
  3700.         }
  3701.     }
  3702.    
  3703.    
  3704.    
  3705.    
  3706.    
  3707.    
  3708.    
  3709.     /**
  3710.      * Crea un Accordo Servizio Parte Specifica
  3711.      *
  3712.      * @param asps
  3713.      * @throws DriverRegistroServiziException
  3714.      */
  3715.     @Override
  3716.     public void createAccordoServizioParteSpecifica(AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
  3717.    
  3718.         if( asps == null)
  3719.             throw new DriverRegistroServiziException("[createAccordoServizioParteSpecifica] Parametro Non Valido");
  3720.        
  3721.        
  3722.    
  3723.         try {

  3724.             // controllo inizializzazione UDDI
  3725.             if(this.uddiLib.create == false){
  3726.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3727.             }

  3728.             // Controllo elementi obbligatori
  3729.             if( (asps.getNomeSoggettoErogatore() == null) ||
  3730.                     (asps.getTipoSoggettoErogatore() == null) ){
  3731.                 throw new DriverRegistroServiziException("Soggetto, erogatore del servizio, non definito");
  3732.             }
  3733.             if( (asps.getNome() == null) ||
  3734.                     (asps.getTipo() == null)  ||
  3735.                     (asps.getVersione() == null)  ){
  3736.                 throw new DriverRegistroServiziException("Servizio, non definito");
  3737.             }
  3738.             if(asps.getAccordoServizioParteComune()==null){
  3739.                 throw new DriverRegistroServiziException("Accordo di Servizio, da associare al servizio, non definito");
  3740.             }
  3741.             if(asps.getConfigurazioneServizio()!=null && asps.getConfigurazioneServizio().getConnettore() !=null &&
  3742.                     !CostantiRegistroServizi.DISABILITATO.equals(asps.getConfigurazioneServizio().getConnettore().getTipo())){
  3743.                 boolean connettoreNonDefinito = false;
  3744.                 if( asps.getConfigurazioneServizio().getConnettore().getTipo() == null ){
  3745.                     connettoreNonDefinito = true;
  3746.                 }
  3747.                 if(connettoreNonDefinito){
  3748.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del servizio non corretta");
  3749.                 }
  3750.             }
  3751.             for(int i=0;i<asps.sizeFruitoreList();i++){
  3752.                 Fruitore checkFr = asps.getFruitore(i);
  3753.                 if( (checkFr.getNome()==null) || (checkFr.getTipo()==null)){
  3754.                     throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o tipo");
  3755.                 }
  3756.                 for(int j=0;j<checkFr.sizeConfigurazioneAzioneList();j++){
  3757.                     ConfigurazioneServizioAzione checkAz = checkFr.getConfigurazioneAzione(j);
  3758.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3759.                         throw new DriverRegistroServiziException("Definizione di un azione (fruizione) senza nome o connettore");
  3760.                     }
  3761.                     // controllo connettore
  3762.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3763.                         boolean connettoreNonDefinito = false;
  3764.                         if( checkAz.getConnettore().getTipo() == null ){
  3765.                             connettoreNonDefinito = true;
  3766.                         }
  3767.                         if(connettoreNonDefinito){
  3768.                             throw new DriverRegistroServiziException("Definizione del punto di accesso delle azioni "+checkAz.getAzioneList()+" della fruizione di servizio non corretta");
  3769.                         }
  3770.                     }
  3771.                 }
  3772.                 // Controllo pre-esistenza del soggetto fruitore
  3773.                 String idSoggettoFruitore_string = checkFr.getTipo() + checkFr.getNome();
  3774.                 IDSoggetto idSoggettoFruitore = new IDSoggetto(checkFr.getTipo(),checkFr.getNome());
  3775.                 if( this.uddiLib.existsSoggetto(idSoggettoFruitore) == false){
  3776.                     throw new DriverRegistroServiziException("Il fruitore ["+idSoggettoFruitore_string
  3777.                     +"] non risulta gia' inserito nel registro dei servizi.");
  3778.                 }
  3779.             }
  3780.             if(asps.getConfigurazioneServizio()!=null){
  3781.                 for(int i=0;i<asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();i++){
  3782.                     ConfigurazioneServizioAzione checkAz = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  3783.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3784.                         throw new DriverRegistroServiziException("Definizione di un azione senza nome o connettore");
  3785.                     }
  3786.                     // controllo connettore
  3787.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3788.                         boolean connettoreNonDefinito = false;
  3789.                         if( checkAz.getConnettore().getTipo() == null ){
  3790.                             connettoreNonDefinito = true;
  3791.                         }
  3792.                         if(connettoreNonDefinito){
  3793.                             throw new DriverRegistroServiziException("Definizione del punto di accesso delle azioni "+checkAz.getAzioneList()+" del servizio non corretta");
  3794.                         }
  3795.                     }
  3796.                 }
  3797.             }

  3798.             // Controllo pre-esistenza del soggetto erogatore
  3799.             IDSoggetto idSoggettoErogatore = new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  3800.             String idSoggettoErogatore_string = asps.getTipoSoggettoErogatore()+asps.getNomeSoggettoErogatore();
  3801.             if( this.uddiLib.existsSoggetto(idSoggettoErogatore) == false){
  3802.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoErogatore_string
  3803.                 +"] non risulta gia' inserito nel registro dei servizi.");
  3804.             }

  3805.             // Controllo pre-esistenza del servizio
  3806.             String idServizio_string = asps.getTipo() + asps.getNome() + asps.getVersione();
  3807.             String uriServizio = this.idServizioFactory.getUriFromAccordo(asps);
  3808.             IDServizio idServizio = this.idServizioFactory.getIDServizioFromAccordo(asps);
  3809.             if (this.uddiLib.existsServizio(idServizio)==true){
  3810.                 throw new DriverRegistroServiziException("Il servizio ["+uriServizio+"] risulta gia' registrato nel registro");
  3811.             }

  3812.             String urlXML = this.urlPrefix + idSoggettoErogatore_string + CostantiRegistroServizi.URL_SEPARATOR +CostantiXMLRepository.SERVIZI+
  3813.                 CostantiRegistroServizi.URL_SEPARATOR + idServizio_string  + ".xml";

  3814.             // Generazione XML
  3815.             this.generatoreXML.createAccordoServizioParteSpecifica(idServizio,asps);
  3816.            
  3817.             // Registrazione nel registro UDDI.
  3818.             this.uddiLib.createServizio(idServizio,
  3819.                     urlXML,this.idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune()));
  3820.                
  3821.         }catch (Exception e) {
  3822.             throw new DriverRegistroServiziException("[createAccordoServizioParteSpecifica] Errore generatosi durante la creazione del nuovo Servizio ["+
  3823.                     this.idServizioFactory.getUriFromAccordo(asps)+"]: "+e.getMessage(),e);
  3824.         }
  3825.     }      
  3826.    
  3827.     /**
  3828.      * Verifica l'esistenza di un servizio registrato.
  3829.      *
  3830.      * @param idServizio Identificativo del servizio
  3831.      * @return true se il servizio esiste, false altrimenti
  3832.      */    
  3833.     @Override
  3834.     public boolean existsAccordoServizioParteSpecifica(IDServizio idServizio) throws DriverRegistroServiziException{
  3835.         if( idServizio == null)
  3836.             return false;
  3837.    
  3838.         try{
  3839.             this.getAccordoServizioParteSpecifica(idServizio);
  3840.            
  3841.             return true;
  3842.         }catch(DriverRegistroServiziNotFound de){
  3843.             return false;
  3844.         }
  3845.         catch(Exception e){
  3846.             this.log.error("[existsAccordoServizioParteSpecifica] Servizio non trovato: "+e.getMessage(),e);
  3847.             return false;
  3848.         }
  3849.     }
  3850.    
  3851.    
  3852.     /**
  3853.      * Aggiorna un Accordo Servizio Parte Specifica
  3854.      *
  3855.      * @param asps
  3856.      * @throws DriverRegistroServiziException
  3857.      */
  3858.     @Override
  3859.     public void updateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
  3860.        
  3861.         if( asps == null)
  3862.             throw new DriverRegistroServiziException("[updateAccordoServizioParteSpecifica] Parametro Non Valido");
  3863.        
  3864.    
  3865.         String tipoServizioOLD = null;
  3866.         String nomeServizioOLD = null;
  3867.         Integer versioneServizioOLD = null;
  3868.         if(asps.getOldIDServizioForUpdate()!=null){
  3869.             tipoServizioOLD = asps.getOldIDServizioForUpdate().getTipo();
  3870.             nomeServizioOLD = asps.getOldIDServizioForUpdate().getNome();
  3871.             versioneServizioOLD = asps.getOldIDServizioForUpdate().getVersione();
  3872.         }
  3873.         if(tipoServizioOLD==null||nomeServizioOLD==null||versioneServizioOLD==null){
  3874.             tipoServizioOLD = asps.getTipo();
  3875.             nomeServizioOLD = asps.getNome();
  3876.             versioneServizioOLD = asps.getVersione();
  3877.         }
  3878.         String tipoSoggettoOLD = null;
  3879.         String nomeSoggettoOLD = null;
  3880.         if(asps.getOldIDServizioForUpdate()!=null && asps.getOldIDServizioForUpdate().getSoggettoErogatore()!=null){
  3881.             tipoSoggettoOLD = asps.getOldIDServizioForUpdate().getSoggettoErogatore().getTipo();
  3882.             nomeSoggettoOLD = asps.getOldIDServizioForUpdate().getSoggettoErogatore().getNome();
  3883.         }
  3884.         if(tipoSoggettoOLD==null||nomeSoggettoOLD==null){
  3885.             tipoSoggettoOLD = asps.getTipoSoggettoErogatore();
  3886.             nomeSoggettoOLD = asps.getNomeSoggettoErogatore();
  3887.         }
  3888.         String idSoggettoOLD_string = tipoSoggettoOLD+nomeSoggettoOLD;
  3889.         IDSoggetto idSoggettoOLD = new IDSoggetto(tipoSoggettoOLD,nomeSoggettoOLD);
  3890.         String idServizioOLD_string = tipoServizioOLD + nomeServizioOLD+versioneServizioOLD;
  3891.         IDServizio idServizioOLD = this.idServizioFactory.getIDServizioFromValues(tipoServizioOLD,nomeServizioOLD, idSoggettoOLD, versioneServizioOLD);
  3892.                
  3893.         try {

  3894.             // controllo inizializzazione UDDI
  3895.             if(this.uddiLib.create == false){
  3896.                 throw new DriverRegistroServiziException("Inizializzazione dell'engine UDDI errata");
  3897.             }
  3898.            
  3899.             // Controllo elementi obbligatori
  3900.             // vecchio ID Soggetto
  3901.             if( (tipoSoggettoOLD == null) ||
  3902.                     (nomeSoggettoOLD == null) ){
  3903.                 throw new DriverRegistroServiziException("Soggetto da modificare, erogatore del servizio, non definito");
  3904.             }
  3905.             // nuovo ID Soggetto
  3906.             if( (asps.getTipoSoggettoErogatore() == null) ||
  3907.                     (asps.getNomeSoggettoErogatore() == null) ){
  3908.                 throw new DriverRegistroServiziException("Soggetto, erogatore del servizio, non definito");
  3909.             }
  3910.             // vecchio ID Servizio
  3911.             if( (tipoServizioOLD == null) ||
  3912.                     (nomeServizioOLD == null) ){
  3913.                 throw new DriverRegistroServiziException("Servizio da modificare non definito");
  3914.             }
  3915.             // nuovo ID Servizio
  3916.             if( (asps.getNome() == null) ||
  3917.                     (asps.getTipo() == null) ||
  3918.                     (asps.getVersione() == null) ){
  3919.                 throw new DriverRegistroServiziException("Dati del nuovo servizio, non definiti");
  3920.             }
  3921.             // accordo
  3922.             if(asps.getAccordoServizioParteComune()==null){
  3923.                 throw new DriverRegistroServiziException("Accordo di Servizio, da associare al servizio, non definito");
  3924.             }
  3925.             // connettore
  3926.             if(asps.getConfigurazioneServizio()!=null && asps.getConfigurazioneServizio().getConnettore() !=null &&
  3927.                     !CostantiRegistroServizi.DISABILITATO.equals(asps.getConfigurazioneServizio().getConnettore().getTipo())){
  3928.                 boolean connettoreNonDefinito = false;
  3929.                 if( asps.getConfigurazioneServizio().getConnettore().getTipo() == null ){
  3930.                     connettoreNonDefinito = true;
  3931.                 }
  3932.                 if(connettoreNonDefinito){
  3933.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del servizio non corretta");
  3934.                 }
  3935.             }
  3936.             // fruitori
  3937.             for(int i=0;i<asps.sizeFruitoreList();i++){
  3938.                 Fruitore checkFr = asps.getFruitore(i);
  3939.                 if( (checkFr.getNome()==null) || (checkFr.getTipo()==null)){
  3940.                     throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o tipo");
  3941.                 }
  3942.                 for(int j=0;j<checkFr.sizeConfigurazioneAzioneList();j++){
  3943.                     ConfigurazioneServizioAzione checkAz = checkFr.getConfigurazioneAzione(j);
  3944.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3945.                         throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o connettore");
  3946.                     }
  3947.                     // controllo connettore
  3948.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3949.                         boolean connettoreNonDefinito = false;
  3950.                         if( checkAz.getConnettore().getTipo() == null ){
  3951.                             connettoreNonDefinito = true;
  3952.                         }
  3953.                         if(connettoreNonDefinito){
  3954.                             throw new DriverRegistroServiziException("Definizione del punto di accesso dell'azione "+checkAz.getAzioneList()+" della fruizione di servizio non corretta");
  3955.                         }
  3956.                     }
  3957.                 }
  3958.                 // Controllo pre-esistenza del soggetto fruitore
  3959.                 /*String idSoggettoFruitore_string = checkFr.getTipo() + checkFr.getNome();
  3960.                 IDSoggetto idSoggettoFruitore = new IDSoggetto(checkFr.getTipo(),checkFr.getNome());
  3961.                 if( this.uddiLib.existsSoggetto(idSoggettoFruitore) == false){
  3962.                     throw new DriverRegistroServiziException("Il fruitore ["+idSoggettoFruitore_string
  3963.                     +"] non risulta gia' inserito nel registro dei servizi.");
  3964.                 } */
  3965.             }
  3966.             // azioni-fruitori-connettori
  3967.             if(asps.getConfigurazioneServizio()!=null){
  3968.                 for(int i=0;i<asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();i++){
  3969.                     ConfigurazioneServizioAzione checkAz = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  3970.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3971.                         throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o connettore");
  3972.                     }
  3973.                     // controllo connettore
  3974.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3975.                         boolean connettoreNonDefinito = false;
  3976.                         if( checkAz.getConnettore().getTipo() == null ){
  3977.                             connettoreNonDefinito = true;
  3978.                         }
  3979.                         if(connettoreNonDefinito){
  3980.                             throw new DriverRegistroServiziException("Definizione del punto di accesso dell'azione "+checkAz.getAzioneList()+" del servizio non corretta");
  3981.                         }
  3982.                     }
  3983.                 }
  3984.             }
  3985.            
  3986.        

  3987.             // Controllo pre-esistenza del soggetto erogatore da modificare
  3988.             if( this.uddiLib.existsSoggetto(idSoggettoOLD) == false){
  3989.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoOLD_string
  3990.                 +"] da modificare, non risulta gia' inserito nel registro dei servizi.");
  3991.             }

  3992.    
  3993.            
  3994.             // Controllo pre-esistenza del nuovo soggetto erogatore
  3995.             String idSoggettoNEW_string = asps.getTipoSoggettoErogatore() + asps.getNomeSoggettoErogatore();
  3996.             IDSoggetto idSoggettoNEW = new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  3997.             if( idSoggettoOLD_string.equals(idSoggettoNEW_string) == false ){
  3998.                 if( this.uddiLib.existsSoggetto(idSoggettoNEW) == false){
  3999.                     throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoNEW_string
  4000.                     +"] a cui re-assegnare il servizio, non risulta gia' inserito nel registro dei servizi.");
  4001.                 }
  4002.             }
  4003.            
  4004.                
  4005.            
  4006.             // Controllo pre-esistenza del servizio da modificare
  4007.             if (this.uddiLib.existsServizio(idServizioOLD)==false){
  4008.                 throw new DriverRegistroServiziException("Il servizio ["+idServizioOLD_string+"] erogato dal soggetto ["+idSoggettoOLD_string+"] non risulta gia' registrato nel registro");
  4009.             }
  4010.    
  4011.             // check esistenza nuovo servizio
  4012.             IDServizio idServizioNEW = this.idServizioFactory.getIDServizioFromValues(asps.getTipo(),asps.getNome(), idSoggettoNEW, asps.getVersione());
  4013.             String idServizioNEW_string = asps.getTipo() + asps.getNome() + asps.getVersione();
  4014.             if(idServizioOLD_string.equals(idServizioNEW_string) == false){
  4015.                 // Controllo non esistenza del servizio da creare
  4016.                 if (this.uddiLib.existsServizio(idServizioNEW)==true){
  4017.                     throw new DriverRegistroServiziException("Il servizio ["+idServizioNEW_string+"] erogato dal soggetto ["+idSoggettoNEW_string+"] risulta gia' registrato nel registro");
  4018.                 }
  4019.             }
  4020.                
  4021.             String urlXML = this.urlPrefix + idSoggettoNEW_string + CostantiRegistroServizi.URL_SEPARATOR +CostantiXMLRepository.SERVIZI+
  4022.                 CostantiRegistroServizi.URL_SEPARATOR + idServizioNEW_string  + ".xml";
  4023.        
  4024.             if( idSoggettoOLD_string.equals(idSoggettoNEW_string) == true ){
  4025.                 // NON e' CAMBIATO IL SOGGETTO EROGATORE.
  4026.                
  4027.                 // Ri-Generazione XML
  4028.                 this.generatoreXML.createAccordoServizioParteSpecifica(idServizioOLD,asps);
  4029.                    
  4030.                 // Modifica UDDI
  4031.                 // refresh AccordoServizio
  4032.                 this.uddiLib.updateAccordoServizio(idServizioOLD,this.idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune()));
  4033.                    
  4034.                 //if(idServizioOLD_string.equals(idServizioNEW_string) == false){
  4035.                 // Lo faccio cmq per non incasinare la govwayConsole
  4036.                
  4037.                 // refresh url XML
  4038.                 this.uddiLib.updateUrlXmlServizio(idServizioOLD,urlXML);
  4039.                    
  4040.                 // Modifica nome BusinessService (Per ultima per permettere il Rollback!!!!!)
  4041.                 this.uddiLib.updateIdServizio(idServizioOLD,idServizioNEW);
  4042.                        
  4043.                 //}
  4044.                    
  4045.                
  4046.             }else{
  4047.                 // E' CAMBIATO IL SOGGETTO EROGATORE
  4048.                    
  4049.                 // Delete from Repository
  4050.                 this.generatoreXML.deleteAccordoServizioParteSpecifica(idServizioOLD);
  4051.                
  4052.                 // Delete from UDDI
  4053.                 this.uddiLib.deleteServizio(idServizioOLD);
  4054.                
  4055.                 // Generazione XML
  4056.                 this.generatoreXML.createAccordoServizioParteSpecifica(idServizioNEW,asps);
  4057.                    
  4058.                 // Registrazione nel registro UDDI.
  4059.                 this.uddiLib.createServizio(idServizioNEW,
  4060.                         urlXML,this.idAccordoFactory.getIDAccordoFromUri(asps.getAccordoServizioParteComune()));
  4061.             }

  4062.         }catch (Exception e) {
  4063.             throw new DriverRegistroServiziException("[updateAccordoServizioParteSpecifica] Errore generatosi durante la modifica del Servizio ["+idServizioOLD_string+"] erogato dal soggetto ["+
  4064.             idSoggettoOLD_string+"]: "+e.getMessage(),e);
  4065.         }
  4066.     }
  4067.    
  4068.     /**
  4069.      * Cancella un Accordo Servizio Parte Specifica
  4070.      *
  4071.      * @param asps
  4072.      * @throws DriverRegistroServiziException
  4073.      */
  4074.     @Override
  4075.     public void deleteAccordoServizioParteSpecifica(AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
  4076.    
  4077.         if( asps == null)
  4078.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteSpecifica] Parametro Non Valido");
  4079.        
  4080.        
  4081.         String idSoggetto_string = asps.getTipoSoggettoErogatore() + asps.getNomeSoggettoErogatore();
  4082.         String idServizio_string = asps.getTipo() + asps.getNome() + asps.getVersione();
  4083.                
  4084.         try {
  4085.             // Controllo id del soggetto
  4086.             if(asps.getTipoSoggettoErogatore()==null || asps.getNomeSoggettoErogatore()==null){
  4087.                 throw new DriverRegistroServiziException("Soggetto non definito");
  4088.             }
  4089.             // Controllo id del servizio da eliminare
  4090.             if(asps.getTipo()==null || asps.getNome()==null || asps.getVersione()==null){
  4091.                 throw new DriverRegistroServiziException("Servizio da eliminare non definito");
  4092.             }
  4093.             // Controllo pre-esistenza del soggetto
  4094.             IDSoggetto idSoggetto = new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  4095.             if( this.uddiLib.existsSoggetto(idSoggetto) == false){
  4096.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggetto_string
  4097.                 +"] non risulta gia' inserito nel registro dei servizi.");
  4098.             }
  4099.             // Controllo pre-esistenza del servizio
  4100.             IDServizio idServizio = this.idServizioFactory.getIDServizioFromValues(asps.getTipo(),asps.getNome(), idSoggetto, asps.getVersione());
  4101.             if (this.uddiLib.existsServizio(idServizio)==false){
  4102.                 throw new DriverRegistroServiziException("Il servizio ["+idServizio_string+"] erogato dal soggetto ["+idSoggetto_string+"] non risulta gia' registrato nel registro");
  4103.             }

  4104.             // Delete from Repository
  4105.             this.generatoreXML.deleteAccordoServizioParteSpecifica(idServizio);

  4106.             // Delete from UDDI
  4107.             this.uddiLib.deleteServizio(idServizio);

  4108.         }catch (Exception e) {
  4109.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteSpecifica] Errore generatosi durante l'eliminazione del Servizio ["+idServizio_string
  4110.             +"] erogato dal soggetto ["+idSoggetto_string+"]: "+e.getMessage(),e);
  4111.         }
  4112.     }
  4113.    
  4114.    
  4115.    
  4116.     //RESET
  4117.     @Override
  4118.     public void reset() throws DriverRegistroServiziException{
  4119.         String inEliminazione = null;
  4120.         try{
  4121.             AccordoServizioParteComune[] accordiRegistrati = this.generatoreXML.getAccordiServizioParteComune();
  4122.             if(accordiRegistrati!=null){
  4123.                 for(int i=0; i<accordiRegistrati.length;i++){
  4124.                     IDAccordo idInEliminazione = this.idAccordoFactory.getIDAccordoFromAccordo(accordiRegistrati[i]);
  4125.                     this.log.info("eliminazione accordo di servizio ["+idInEliminazione+"] in corso...");
  4126.                     if(this.existsAccordoServizioParteComune(idInEliminazione)){
  4127.                         this.deleteAccordoServizioParteComune(accordiRegistrati[i]);
  4128.                     }else{
  4129.                         this.generatoreXML.deleteAccordoServizioParteComune(idInEliminazione);
  4130.                     }
  4131.                     this.log.info("eliminazione accordo di servizio ["+idInEliminazione+"] effettuata.");
  4132.                 }
  4133.             }
  4134.         }catch (Exception e) {
  4135.             this.log.info("Errore durante l'eliminazione di ["+inEliminazione+"]: "+e.getMessage(),e);
  4136.             throw new DriverRegistroServiziException("Errore durante la cancellazione degli accordi registrati ["+inEliminazione+"]: "+e.getMessage(),e);
  4137.         }
  4138.         try{
  4139.             AccordoCooperazione[] accordiCooperazioneRegistrati = this.generatoreXML.getAccordiCooperazione();
  4140.             if(accordiCooperazioneRegistrati!=null){
  4141.                 for(int i=0; i<accordiCooperazioneRegistrati.length;i++){
  4142.                     IDAccordoCooperazione idInEliminazione = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordiCooperazioneRegistrati[i]);
  4143.                     this.log.info("eliminazione accordo di cooperazione ["+idInEliminazione+"] in corso...");
  4144.                     if(this.existsAccordoCooperazione(idInEliminazione)){
  4145.                         this.deleteAccordoCooperazione(accordiCooperazioneRegistrati[i]);
  4146.                     }else{
  4147.                         this.generatoreXML.deleteAccordoCooperazione(idInEliminazione);
  4148.                     }
  4149.                     this.log.info("eliminazione accordo di cooperazione ["+idInEliminazione+"] effettuata.");
  4150.                 }
  4151.             }
  4152.         }catch (Exception e) {
  4153.             this.log.info("Errore durante l'eliminazione di ["+inEliminazione+"]: "+e.getMessage(),e);
  4154.             throw new DriverRegistroServiziException("Errore durante la cancellazione degli accordi registrati ["+inEliminazione+"]: "+e.getMessage(),e);
  4155.         }
  4156.         try{
  4157.             AccordoServizioParteSpecifica[] serviziRegistrati = this.generatoreXML.getAccordiServiziParteSpecifica();
  4158.             if(serviziRegistrati!=null){
  4159.                 for(int i=0; i<serviziRegistrati.length;i++){
  4160.                     inEliminazione=this.idServizioFactory.getUriFromAccordo(serviziRegistrati[i]);
  4161.                     this.log.info("eliminazione servizio ["+inEliminazione+"] in corso...");
  4162.                     IDServizio idS = this.idServizioFactory.getIDServizioFromAccordo(serviziRegistrati[i]);
  4163.                     if(this.existsAccordoServizioParteSpecifica(idS)){
  4164.                         this.deleteAccordoServizioParteSpecifica(serviziRegistrati[i]);
  4165.                     }else{
  4166.                         this.generatoreXML.deleteAccordoServizioParteSpecifica(idS);
  4167.                     }
  4168.                     this.log.info("eliminazione servizio ["+inEliminazione+"] effettuata.");
  4169.                 }
  4170.             }
  4171.         }catch (Exception e) {
  4172.             this.log.info("Errore durante l'eliminazione di ["+inEliminazione+"]: "+e.getMessage(),e);
  4173.             throw new DriverRegistroServiziException("Errore durante la cancellazione dei servizi registrati ["+inEliminazione+"]: "+e.getMessage(),e);
  4174.         }
  4175.         try{
  4176.             Soggetto[] soggettiRegistrati = this.generatoreXML.getSoggetti();
  4177.             if(soggettiRegistrati!=null){
  4178.                 for(int i=0; i<soggettiRegistrati.length;i++){
  4179.                     inEliminazione=soggettiRegistrati[i].getTipo()+"/"+soggettiRegistrati[i].getNome();
  4180.                     this.log.info("eliminazione soggetto ["+inEliminazione+"] in corso...");
  4181.                     IDSoggetto idS = new IDSoggetto(soggettiRegistrati[i].getTipo(),soggettiRegistrati[i].getNome());
  4182.                     if(this.existsSoggetto(idS)) {
  4183.                         this.deleteSoggetto(soggettiRegistrati[i]);
  4184.                     }else{
  4185.                         this.generatoreXML.deleteSoggetto(idS);
  4186.                     }
  4187.                     this.log.info("eliminazione soggetto ["+inEliminazione+"] effettuata.");
  4188.                 }
  4189.             }
  4190.         }catch (Exception e) {
  4191.             this.log.info("Errore durante l'eliminazione di ["+inEliminazione+"]: "+e.getMessage(),e);
  4192.             throw new DriverRegistroServiziException("Errore durante la cancellazione dei soggetti registrati ["+inEliminazione+"]: "+e.getMessage(),e);
  4193.         }
  4194.         try{
  4195.             PortaDominio[] pddRegistrate = this.generatoreXML.getPorteDominio();
  4196.             if(pddRegistrate!=null){
  4197.                 for(int i=0; i<pddRegistrate.length;i++){
  4198.                     inEliminazione = pddRegistrate[i].getNome();
  4199.                     this.log.info("eliminazione porta di dominio ["+inEliminazione+"] in corso...");
  4200.                     if(this.existsPortaDominio(inEliminazione)){
  4201.                         this.deletePortaDominio(pddRegistrate[i]);
  4202.                     }else{
  4203.                         this.generatoreXML.deletePortaDominio(inEliminazione);
  4204.                     }
  4205.                     this.log.info("eliminazione porta di dominio ["+inEliminazione+"] effettuata.");
  4206.                 }
  4207.             }
  4208.         }catch (Exception e) {
  4209.             this.log.info("Errore durante l'eliminazione di ["+inEliminazione+"]: "+e.getMessage(),e);
  4210.             throw new DriverRegistroServiziException("Errore durante la cancellazione delle porte di dominio registrate ["+inEliminazione+"]: "+e.getMessage(),e);
  4211.         }
  4212.     }
  4213.    
  4214.    
  4215.    
  4216.    
  4217.    
  4218.     /**
  4219.      * Metodo che verica la connessione ad una risorsa.
  4220.      * Se la connessione non e' presente, viene lanciata una eccezione che contiene il motivo della mancata connessione
  4221.      *
  4222.      * @throws DriverException eccezione che contiene il motivo della mancata connessione
  4223.      */
  4224.     @Override
  4225.     public void isAlive() throws CoreException{
  4226.        
  4227.         if(this.create==false)
  4228.             throw new CoreException("Driver non inizializzato");
  4229.        
  4230.         try{
  4231.             if(this.uddiLib.getTModel("isAliveTest",UDDILib.TMODEL_OPENSPCOOP)==null)
  4232.                 throw new Exception("TModel ["+UDDILib.TMODEL_OPENSPCOOP+"] non trovata");
  4233.         }catch(Exception e){
  4234.             throw new CoreException("Connessione al registro non disponibile: "+e.getMessage(),e);
  4235.         }
  4236.     }

  4237. }