DriverRegistroServiziWEB.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.web;

  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.constants.TipologiaServizio;
  67. import org.openspcoop2.core.registry.driver.BeanUtilities;
  68. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  69. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  70. import org.openspcoop2.core.registry.driver.FiltroRicerca;
  71. import org.openspcoop2.core.registry.driver.FiltroRicercaAccordi;
  72. import org.openspcoop2.core.registry.driver.FiltroRicercaAzioni;
  73. import org.openspcoop2.core.registry.driver.FiltroRicercaFruizioniServizio;
  74. import org.openspcoop2.core.registry.driver.FiltroRicercaGruppi;
  75. import org.openspcoop2.core.registry.driver.FiltroRicercaOperations;
  76. import org.openspcoop2.core.registry.driver.FiltroRicercaPortTypes;
  77. import org.openspcoop2.core.registry.driver.FiltroRicercaResources;
  78. import org.openspcoop2.core.registry.driver.FiltroRicercaRuoli;
  79. import org.openspcoop2.core.registry.driver.FiltroRicercaScope;
  80. import org.openspcoop2.core.registry.driver.FiltroRicercaServizi;
  81. import org.openspcoop2.core.registry.driver.FiltroRicercaSoggetti;
  82. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  83. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  84. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  85. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziCRUD;
  86. import org.openspcoop2.core.registry.driver.IDriverRegistroServiziGet;
  87. import org.openspcoop2.core.registry.driver.ProtocolPropertiesUtilities;
  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 ad un registro WEB, riguardanti specifiche
  106.  * proprieta' di servizi presenti all'interno del registro.
  107.  *
  108.  *
  109.  * @author Poli Andrea (apoli@link.it)
  110.  * @author $Author$
  111.  * @version $Rev$, $Date$
  112.  */

  113. public class DriverRegistroServiziWEB extends BeanUtilities
  114. implements IDriverRegistroServiziGet,IDriverRegistroServiziCRUD, IDriverWS,IMonitoraggioRisorsa{



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

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

  118.     /** --- URL Prefix utilizzato come prefisso
  119.      per il repository WEB XML ------*/
  120.     private String urlPrefix;  
  121.     /** --- Utility per la generazione dell'XML ------*/
  122.     private XMLLib generatoreXML;

  123.     /** Validatore della configurazione */
  124.     private ValidatoreXSD validatoreRegistro = null;

  125.     /** Logger utilizzato per info. */
  126.     private org.slf4j.Logger log = null;

  127.     // Factory
  128.     private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  129.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  130.     private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();



  131.     /* ********  C O S T R U T T O R E  ******** */

  132.     /**
  133.      * Costruttore per interfaccia di query.
  134.      *
  135.      *
  136.      */
  137.     public DriverRegistroServiziWEB(String urlPrefix,Logger alog){  
  138.         this(urlPrefix,null,alog);
  139.     }
  140.     /**
  141.      * Costruttore per interfaccia CRUD.
  142.      *
  143.      *
  144.      */
  145.     public DriverRegistroServiziWEB(String urlPrefix,String pathPrefix,Logger alog){    

  146.         if(alog==null)
  147.             this.log = LoggerWrapperFactory.getLogger(DriverRegistroServiziWEB.class);
  148.         else
  149.             this.log = alog;
  150.         if(this.log==null) {
  151.             throw new UtilsRuntimeException("Logger unavailable");
  152.         }
  153.         try{
  154.             if (!urlPrefix.endsWith(CostantiRegistroServizi.URL_SEPARATOR))
  155.                 this.urlPrefix= urlPrefix + CostantiRegistroServizi.URL_SEPARATOR;
  156.             else
  157.                 this.urlPrefix = urlPrefix;

  158.             /* --- Costruzione Validatore XSD -- */
  159.             try{
  160.                 this.validatoreRegistro = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), this.log,DriverRegistroServiziWEB.class.getResourceAsStream("/registroServizi.xsd"));
  161.             }catch (Exception e) {
  162.                 throw new Exception("Riscontrato errore durante l'inizializzazione dello schema del Registro dei Servizi di OpenSPCoop: "+e.getMessage(),e);
  163.             }

  164.             if(pathPrefix!=null)
  165.                 this.generatoreXML = new XMLLib(pathPrefix,urlPrefix);

  166.             this.create = true;
  167.         }catch(Exception e){
  168.             this.log.error("Inizializzazione fallita: "+e.getMessage());
  169.             this.create = false;
  170.         }
  171.     }








  172.     /* ********  INTERFACCIA IDriverRegistroServiziGet ******** */

  173.    
  174.    
  175.     /* Accordi di Cooperazione */
  176.    
  177.     /**
  178.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoCooperazione},
  179.      * identificato grazie al parametro
  180.      * <var>nomeAccordo</var>
  181.      *
  182.      * @param idAccordo Identificativo dell'accordo di Cooperazione
  183.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.AccordoCooperazione}.
  184.      *
  185.      */
  186.     @Override
  187.     public org.openspcoop2.core.registry.AccordoCooperazione getAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  188.         if( idAccordo == null)
  189.             throw new DriverRegistroServiziException("[getAccordoCooperazione] Parametro Non Valido");
  190.         if( idAccordo.getNome() == null)
  191.             throw new DriverRegistroServiziException("[getAccordoCooperazione] Nome accordo cooperazione non fornito");


  192.         org.openspcoop2.core.registry.AccordoCooperazione accRichiesto = null;

  193.         // Ottengo URL XML associato all'accordo
  194.         String fileName = this.generatoreXML.mappingIDAccordoCooperazioneToFileName(idAccordo);
  195.         String urlXMLAccordoCooperazione = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiRegistroServizi.URL_SEPARATOR + fileName + ".xml";    

  196.         // Ottengo oggetto Soggetto
  197.         ByteArrayInputStream bin = null;
  198.         try{
  199.             byte[] fileXML = null;
  200.             try{
  201.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLAccordoCooperazione);
  202.             }catch(UtilsException e){
  203.                 // Controllo pre-esistenza dell'accordo
  204.                 if( "404".equals(e.getMessage()) ){
  205.                     throw new DriverRegistroServiziNotFound("[getAccordoCooperazione] Accordo richiesto non esiste: "+fileName);
  206.                 } else
  207.                     throw e;
  208.             }

  209.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  210.             try{
  211.                 this.validatoreRegistro.valida(urlXMLAccordoCooperazione);  
  212.             }catch (Exception e) {
  213.                 throw new DriverRegistroServiziException("[getAccordoCooperazione] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  214.             }

  215.             // parsing
  216.             bin = new ByteArrayInputStream(fileXML);
  217.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  218.             org.openspcoop2.core.registry.RegistroServizi rs =
  219.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  220.             if(rs.sizeAccordoCooperazioneList()>0)
  221.                 accRichiesto = rs.getAccordoCooperazione(0);
  222.             bin.close();
  223.         }catch(DriverRegistroServiziNotFound e){
  224.             throw e;
  225.         }catch(DriverRegistroServiziException e){
  226.             throw e;
  227.         }catch(Exception e){
  228.             try{
  229.                 if(bin!=null)
  230.                     bin.close();
  231.             } catch(Exception eis) {
  232.                 // close
  233.             }
  234.             if(e instanceof DriverRegistroServiziNotFound)
  235.                 throw (DriverRegistroServiziNotFound)e;
  236.             else
  237.                 throw new DriverRegistroServiziException("[getAccordoCooperazione] Errore durante il parsing xml: "+e.getMessage(),e);
  238.         }

  239.         if(accRichiesto==null)
  240.             throw new DriverRegistroServiziNotFound("[getAccordoCooperazione] Accordo di Cooperazione non trovato.");

  241.         return accRichiesto;
  242.     }

  243.     /**
  244.      * Ritorna gli identificatori degli accordi che rispettano il parametro di ricerca
  245.      *
  246.      * @param filtroRicerca
  247.      * @return Una lista di ID degli accordi trovati
  248.      * @throws DriverRegistroServiziException
  249.      * @throws DriverRegistroServiziNotFound
  250.      */
  251.     @Override
  252.     public List<IDAccordoCooperazione> getAllIdAccordiCooperazione(FiltroRicercaAccordi filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  253.         try{

  254.             if(this.generatoreXML==null)
  255.                 throw new DriverRegistroServiziException("[getAllIdAccordiCooperazione] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  256.             org.openspcoop2.core.registry.AccordoCooperazione[] acList = this.generatoreXML.getAccordiCooperazione();
  257.             if(acList==null)
  258.                 throw new DriverRegistroServiziNotFound("Accordi non esistenti nel repository WEB");

  259.             // Esamina degli accordi
  260.             List<IDAccordoCooperazione> idAccordi = new ArrayList<IDAccordoCooperazione>();
  261.             for(int i=0; i<acList.length; i++){

  262.                 String fileName = this.generatoreXML.mappingUriToFileName_accordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromAccordo(acList[i]));
  263.                 String acUrlXML = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiRegistroServizi.URL_SEPARATOR+ fileName + ".xml";    
  264.                 String acURI = this.idAccordoCooperazioneFactory.getUriFromAccordo(acList[i]);


  265.                 /* --- Validazione XSD -- */
  266.                 try{
  267.                     this.validatoreRegistro.valida(acUrlXML);  
  268.                 }catch (Exception e) {
  269.                     throw new DriverRegistroServiziException("[getAllIdAccordiCooperazione] Riscontrato errore durante la validazione XSD ("+acUrlXML+"): "+e.getMessage(),e);
  270.                 }

  271.                 if(filtroRicerca!=null){
  272.                     // Filtro By Data
  273.                     if(filtroRicerca.getMinDate()!=null){
  274.                         if(acList[i].getOraRegistrazione()==null){
  275.                             this.log.debug("[getAllIdAccordiCooperazione](FiltroByMinDate) Accordo di servizio ["+acURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  276.                             continue;
  277.                         }else if(acList[i].getOraRegistrazione().before(filtroRicerca.getMinDate())){
  278.                             continue;
  279.                         }
  280.                     }
  281.                     if(filtroRicerca.getMaxDate()!=null){
  282.                         if(acList[i].getOraRegistrazione()==null){
  283.                             this.log.debug("[getAllIdAccordiCooperazione](FiltroByMaxDate) Accordo di servizio ["+acURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  284.                             continue;
  285.                         }else if(acList[i].getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  286.                             continue;
  287.                         }
  288.                     }
  289.                     // Filtro By Nome
  290.                     if(filtroRicerca.getNomeAccordo()!=null){
  291.                         if(acList[i].getNome().equals(filtroRicerca.getNomeAccordo()) == false){
  292.                             continue;
  293.                         }
  294.                     }
  295.                     if(filtroRicerca.getVersione()!=null){
  296.                         if(acList[i].getVersione().equals(filtroRicerca.getVersione()) == false){
  297.                             continue;
  298.                         }
  299.                     }
  300.                     if(filtroRicerca.getTipoSoggettoReferente()!=null || filtroRicerca.getNomeSoggettoReferente()!=null){
  301.                         if(acList[i].getSoggettoReferente()==null)
  302.                             continue;
  303.                         if(filtroRicerca.getTipoSoggettoReferente()!=null){
  304.                             if(acList[i].getSoggettoReferente().getTipo().equals(filtroRicerca.getTipoSoggettoReferente()) == false){
  305.                                 continue;
  306.                             }
  307.                         }
  308.                         if(filtroRicerca.getNomeSoggettoReferente()!=null){
  309.                             if(acList[i].getSoggettoReferente().getNome().equals(filtroRicerca.getNomeSoggettoReferente()) == false){
  310.                                 continue;
  311.                             }
  312.                         }
  313.                     }
  314.                     // ProtocolProperties
  315.                     if(ProtocolPropertiesUtilities.isMatch(acList[i], filtroRicerca.getProtocolPropertiesAccordo())==false){
  316.                         continue;
  317.                     }
  318.                 }
  319.                 idAccordi.add(this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(acList[i]));
  320.             }
  321.             if(idAccordi.size()==0){
  322.                 throw new DriverRegistroServiziNotFound("Accordi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  323.             }else{
  324.                 return idAccordi;
  325.             }
  326.         }catch(Exception e){
  327.             if(e instanceof DriverRegistroServiziNotFound)
  328.                 throw (DriverRegistroServiziNotFound)e;
  329.             else
  330.                 throw new DriverRegistroServiziException("getAllIdAccordiCooperazione error",e);
  331.         }
  332.     }


  333.    
  334.    
  335.     /* Accordi di Servizio Parte Comune */
  336.    
  337.     /**
  338.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteComune},
  339.      * identificato grazie al parametro
  340.      * <var>nomeAccordo</var>
  341.      *
  342.      * @param idAccordo Identificativo dell'accordo di Servizio
  343.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteComune}.
  344.      *
  345.      */
  346.     @Override
  347.     public org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  348.         if( idAccordo == null)
  349.             throw new DriverRegistroServiziException("[AccordoServizioParteComune] Parametro Non Valido");
  350.         if( idAccordo.getNome() == null)
  351.             throw new DriverRegistroServiziException("[AccordoServizioParteComune] Nome accordo servizio non fornito");


  352.         org.openspcoop2.core.registry.AccordoServizioParteComune accRichiesto = null;

  353.         // Ottengo URL XML associato all'accordo
  354.         String fileName = this.generatoreXML.mappingIDAccordoToFileName(idAccordo);
  355.         String urlXMLAccordoServizio = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiRegistroServizi.URL_SEPARATOR + fileName + ".xml";    

  356.         // Ottengo oggetto Soggetto
  357.         ByteArrayInputStream bin = null;
  358.         try{
  359.             byte[] fileXML = null;
  360.             try{
  361.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLAccordoServizio);
  362.             }catch(UtilsException e){
  363.                 // Controllo pre-esistenza dell'accordo
  364.                 if( "404".equals(e.getMessage()) ){
  365.                     throw new DriverRegistroServiziNotFound("[AccordoServizioParteComune] Accordo richiesto non esiste: "+fileName);
  366.                 } else
  367.                     throw e;
  368.             }

  369.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  370.             try{
  371.                 this.validatoreRegistro.valida(urlXMLAccordoServizio);  
  372.             }catch (Exception e) {
  373.                 throw new DriverRegistroServiziException("[AccordoServizioParteComune] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  374.             }

  375.             // parsing
  376.             bin = new ByteArrayInputStream(fileXML);
  377.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  378.             org.openspcoop2.core.registry.RegistroServizi rs =
  379.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  380.             if(rs.sizeAccordoServizioParteComuneList()>0)
  381.                 accRichiesto = rs.getAccordoServizioParteComune(0);
  382.             bin.close();
  383.         }catch(DriverRegistroServiziNotFound e){
  384.             throw e;
  385.         }catch(DriverRegistroServiziException e){
  386.             throw e;
  387.         }catch(Exception e){
  388.             try{
  389.                 if(bin!=null)
  390.                     bin.close();
  391.             } catch(Exception eis) {
  392.                 // close
  393.             }
  394.             if(e instanceof DriverRegistroServiziNotFound)
  395.                 throw (DriverRegistroServiziNotFound)e;
  396.             else
  397.                 throw new DriverRegistroServiziException("[AccordoServizioParteComune] Errore durante il parsing xml: "+e.getMessage(),e);
  398.         }

  399.         if(accRichiesto==null)
  400.             throw new DriverRegistroServiziNotFound("[AccordoServizioParteComune] Accordo di Servizio non trovato.");

  401.         // nomiAzione setting
  402. //      accRichiesto.setNomiAzione(accRichiesto.readNomiAzione());

  403.         return accRichiesto;
  404.     }


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

  407.         List<IDAccordo> list = new ArrayList<IDAccordo>();
  408.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAccordiServizioParteComune", filtroRicerca, null, null, null, null, list);
  409.         return list;
  410.    
  411.     }
  412.    
  413.     @Override
  414.     public List<IDPortType> getAllIdPortType(FiltroRicercaPortTypes filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  415.        
  416.         List<IDPortType> list = new ArrayList<IDPortType>();
  417.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdPortType", filtroRicerca, filtroRicerca, null, null, null, list);
  418.         return list;
  419.        
  420.     }
  421.    
  422.     @Override
  423.     public List<IDPortTypeAzione> getAllIdAzionePortType(FiltroRicercaOperations filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  424.    
  425.         List<IDPortTypeAzione> list = new ArrayList<IDPortTypeAzione>();
  426.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAzionePortType", filtroRicerca, null, filtroRicerca, null, null, list);
  427.         return list;
  428.        
  429.     }
  430.    
  431.     @Override
  432.     public List<IDAccordoAzione> getAllIdAzioneAccordo(FiltroRicercaAzioni filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  433.        
  434.         List<IDAccordoAzione> list = new ArrayList<IDAccordoAzione>();
  435.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdAzioneAccordo", filtroRicerca, null, null, filtroRicerca, null, list);
  436.         return list;
  437.        
  438.     }
  439.    
  440.     @Override
  441.     public List<IDResource> getAllIdResource(FiltroRicercaResources filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  442.        
  443.         List<IDResource> list = new ArrayList<IDResource>();
  444.         _fillAllIdAccordiServizioParteComuneEngine("getAllIdResource", filtroRicerca, null, null, null, filtroRicerca, list);
  445.         return list;
  446.        
  447.     }
  448.    
  449.     @SuppressWarnings("unchecked")
  450.     public <T> void _fillAllIdAccordiServizioParteComuneEngine(String nomeMetodo,
  451.             FiltroRicercaAccordi filtroRicercaBase,
  452.             FiltroRicercaPortTypes filtroPT, FiltroRicercaOperations filtroOP, FiltroRicercaAzioni filtroAZ,
  453.             FiltroRicercaResources filtroResource,
  454.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  455.         try{

  456.             if(this.generatoreXML==null)
  457.                 throw new DriverRegistroServiziException("["+nomeMetodo+"] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  458.             org.openspcoop2.core.registry.AccordoServizioParteComune[] asList = this.generatoreXML.getAccordiServizioParteComune();
  459.             if(asList==null)
  460.                 throw new DriverRegistroServiziNotFound("Accordi non esistenti nel repository WEB");

  461.             // Esamina degli accordi
  462.             for(int i=0; i<asList.length; i++){

  463.                 String fileName = this.generatoreXML.mappingUriToFileName(this.idAccordoFactory.getUriFromAccordo(asList[i]));
  464.                 String asUrlXML = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiRegistroServizi.URL_SEPARATOR+ fileName + ".xml";    
  465.                 String asURI = this.idAccordoFactory.getUriFromAccordo(asList[i]);


  466.                 /* --- Validazione XSD -- */
  467.                 try{
  468.                     this.validatoreRegistro.valida(asUrlXML);  
  469.                 }catch (Exception e) {
  470.                     throw new DriverRegistroServiziException("[getAllIdAccordiServizioParteComune] Riscontrato errore durante la validazione XSD ("+asUrlXML+"): "+e.getMessage(),e);
  471.                 }

  472.                 if(filtroRicercaBase!=null){
  473.                    
  474.                     List<String> tipoSoggettiProtocollo = null;
  475.                     try {
  476.                         if(filtroRicercaBase!=null && (filtroRicercaBase.getProtocollo()!=null || (filtroRicercaBase.getProtocolli()!=null && !filtroRicercaBase.getProtocolli().isEmpty()))){
  477.                             tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filtroRicercaBase.getProtocollo(), Filtri.convertToString(filtroRicercaBase.getProtocolli()));
  478.                         }
  479.                     }catch(Exception e) {
  480.                         throw new DriverRegistroServiziException(e.getMessage(),e);
  481.                     }
  482.                     boolean searchByTipoSoggetto = (tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0);
  483.                    
  484.                     // Filtro By Data
  485.                     if(filtroRicercaBase.getMinDate()!=null){
  486.                         if(asList[i].getOraRegistrazione()==null){
  487.                             this.log.debug("["+nomeMetodo+"](FiltroByMinDate) Accordo di servizio ["+asURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  488.                             continue;
  489.                         }else if(asList[i].getOraRegistrazione().before(filtroRicercaBase.getMinDate())){
  490.                             continue;
  491.                         }
  492.                     }
  493.                     if(filtroRicercaBase.getMaxDate()!=null){
  494.                         if(asList[i].getOraRegistrazione()==null){
  495.                             this.log.debug("["+nomeMetodo+"](FiltroByMaxDate) Accordo di servizio ["+asURI+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  496.                             continue;
  497.                         }else if(asList[i].getOraRegistrazione().after(filtroRicercaBase.getMaxDate())){
  498.                             continue;
  499.                         }
  500.                     }
  501.                     // Filtro By Nome
  502.                     if(filtroRicercaBase.getNomeAccordo()!=null){
  503.                         if(asList[i].getNome().equals(filtroRicercaBase.getNomeAccordo()) == false){
  504.                             continue;
  505.                         }
  506.                     }
  507.                     if(filtroRicercaBase.getVersione()!=null){
  508.                         if(asList[i].getVersione().equals(filtroRicercaBase.getVersione()) == false){
  509.                             continue;
  510.                         }
  511.                     }
  512.                     if(searchByTipoSoggetto || filtroRicercaBase.getTipoSoggettoReferente()!=null || filtroRicercaBase.getNomeSoggettoReferente()!=null){
  513.                         if(asList[i].getSoggettoReferente()==null)
  514.                             continue;
  515.                         if(filtroRicercaBase.getTipoSoggettoReferente()!=null){
  516.                             if(asList[i].getSoggettoReferente().getTipo().equals(filtroRicercaBase.getTipoSoggettoReferente()) == false){
  517.                                 continue;
  518.                             }
  519.                         }
  520.                         else if(searchByTipoSoggetto) {
  521.                             boolean find = false;
  522.                             for (String tipoSoggettoProtocollo : tipoSoggettiProtocollo) {
  523.                                 if(asList[i].getSoggettoReferente().getTipo().equals(tipoSoggettoProtocollo)){
  524.                                     find = true;
  525.                                     break;
  526.                                 }
  527.                             }
  528.                             if(!find) {
  529.                                 continue;
  530.                             }
  531.                         }
  532.                         if(filtroRicercaBase.getNomeSoggettoReferente()!=null){
  533.                             if(asList[i].getSoggettoReferente().getNome().equals(filtroRicercaBase.getNomeSoggettoReferente()) == false){
  534.                                 continue;
  535.                             }
  536.                         }
  537.                     }
  538.                     if(filtroRicercaBase.getServiceBinding()!=null){
  539.                         if(asList[i].getServiceBinding().equals(filtroRicercaBase.getServiceBinding()) == false){
  540.                             continue;
  541.                         }
  542.                     }
  543.                     if(filtroRicercaBase.getIdGruppo()!=null && filtroRicercaBase.getIdGruppo().getNome()!=null){
  544.                         boolean found = false;
  545.                         if(asList[i].getGruppi()!=null && asList[i].getGruppi().sizeGruppoList()>0) {
  546.                             for (GruppoAccordo gruppo : asList[i].getGruppi().getGruppoList()) {
  547.                                 if(gruppo.getNome().equals(filtroRicercaBase.getIdGruppo().getNome())) {
  548.                                     found = true;
  549.                                     break;
  550.                                 }
  551.                             }
  552.                         }
  553.                         if(!found) {
  554.                             continue;
  555.                         }
  556.                     }
  557.                    
  558.                     if(filtroRicercaBase.getIdAccordoCooperazione()!=null &&
  559.                             (filtroRicercaBase.getIdAccordoCooperazione().getNome()!=null ||
  560.                             filtroRicercaBase.getIdAccordoCooperazione().getVersione()!=null) ){
  561.                         if(asList[i].getServizioComposto()==null){
  562.                             continue;
  563.                         }
  564.                         IDAccordoCooperazione idAC = this.idAccordoCooperazioneFactory.getIDAccordoFromUri(asList[i].getServizioComposto().getAccordoCooperazione());
  565.                         if(filtroRicercaBase.getIdAccordoCooperazione().getNome()!=null){
  566.                             if(idAC.getNome().equals(filtroRicercaBase.getIdAccordoCooperazione().getNome())== false){
  567.                                 continue;
  568.                             }
  569.                         }
  570.                         if(filtroRicercaBase.getIdAccordoCooperazione().getVersione()!=null){
  571.                             if(idAC.getVersione().equals(filtroRicercaBase.getIdAccordoCooperazione().getVersione())== false){
  572.                                 continue;
  573.                             }
  574.                         }
  575.                     }
  576.                     else if(filtroRicercaBase.isServizioComposto()!=null){
  577.                         if(filtroRicercaBase.isServizioComposto()){
  578.                             if(asList[i].getServizioComposto()==null){
  579.                                 continue;
  580.                             }
  581.                         }
  582.                         else {
  583.                             if(asList[i].getServizioComposto()!=null){
  584.                                 continue;
  585.                             }
  586.                         }
  587.                     }
  588.                    
  589.                     // ProtocolProperties
  590.                     if(ProtocolPropertiesUtilities.isMatch(asList[i], filtroRicercaBase.getProtocolPropertiesAccordo())==false){
  591.                         continue;
  592.                     }
  593.                    
  594.                 }
  595.                
  596.                 IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromValues(asList[i].getNome(),BeanUtilities.getSoggettoReferenteID(asList[i].getSoggettoReferente()),asList[i].getVersione());
  597.                
  598.                 if(filtroPT!=null){
  599.                     for (PortType pt : asList[i].getPortTypeList()) {
  600.                         // Nome PT
  601.                         if(filtroPT.getNomePortType()!=null){
  602.                             if(pt.getNome().equals(filtroPT.getNomePortType()) == false){
  603.                                 continue;
  604.                             }
  605.                         }
  606.                         // ProtocolProperties PT
  607.                         if(ProtocolPropertiesUtilities.isMatch(pt, filtroPT.getProtocolPropertiesPortType())==false){
  608.                             continue;
  609.                         }
  610.                        
  611.                         IDPortType idPT = new IDPortType();
  612.                         idPT.setIdAccordo(idAccordo);
  613.                         idPT.setNome(pt.getNome());
  614.                         listReturn.add((T)idPT);
  615.                     }
  616.                 }
  617.                 else if(filtroOP!=null){
  618.                     for (PortType pt : asList[i].getPortTypeList()) {
  619.                        
  620.                         // Nome PT
  621.                         if(filtroOP.getNomePortType()!=null){
  622.                             if(pt.getNome().equals(filtroOP.getNomePortType()) == false){
  623.                                 continue;
  624.                             }
  625.                         }
  626.                         // ProtocolProperties PT
  627.                         if(ProtocolPropertiesUtilities.isMatch(pt, filtroOP.getProtocolPropertiesPortType())==false){
  628.                             continue;
  629.                         }
  630.                        
  631.                         for (Operation op : pt.getAzioneList()) {
  632.                            
  633.                             // Nome OP
  634.                             if(filtroOP.getNomeAzione()!=null){
  635.                                 if(op.getNome().equals(filtroOP.getNomeAzione()) == false){
  636.                                     continue;
  637.                                 }
  638.                             }
  639.                             // ProtocolProperties OP
  640.                             if(ProtocolPropertiesUtilities.isMatch(pt, filtroOP.getProtocolPropertiesAzione())==false){
  641.                                 continue;
  642.                             }
  643.                        
  644.                             IDPortTypeAzione idAzione = new IDPortTypeAzione();
  645.                             IDPortType idPT = new IDPortType();
  646.                             idPT.setIdAccordo(idAccordo);
  647.                             idPT.setNome(pt.getNome());
  648.                             idAzione.setIdPortType(idPT);
  649.                             idAzione.setNome(op.getNome());
  650.                             listReturn.add((T)idAzione);
  651.                         }
  652.                     }
  653.                 }
  654.                 else if(filtroAZ!=null){
  655.                     for (Azione az : asList[i].getAzioneList()) {
  656.                        
  657.                         // Nome AZ
  658.                         if(filtroAZ.getNomeAzione()!=null){
  659.                             if(az.getNome().equals(filtroAZ.getNomeAzione()) == false){
  660.                                 continue;
  661.                             }
  662.                         }
  663.                         // ProtocolProperties PT
  664.                         if(ProtocolPropertiesUtilities.isMatch(az, filtroAZ.getProtocolPropertiesAzione())==false){
  665.                             continue;
  666.                         }
  667.                        
  668.                         IDAccordoAzione idAzione = new IDAccordoAzione();
  669.                         idAzione.setIdAccordo(idAccordo);
  670.                         idAzione.setNome(az.getNome());
  671.                         listReturn.add((T)idAzione);
  672.                     }
  673.                 }
  674.                 else if(filtroResource!=null){
  675.                     for (Resource resource : asList[i].getResourceList()) {
  676.                         // Nome Risorsa
  677.                         if(filtroResource.getResourceName()!=null){
  678.                             if(resource.getNome().equals(filtroResource.getResourceName()) == false){
  679.                                 continue;
  680.                             }
  681.                         }
  682.                         // ProtocolProperties PT
  683.                         if(ProtocolPropertiesUtilities.isMatch(resource, filtroResource.getProtocolPropertiesResources())==false){
  684.                             continue;
  685.                         }
  686.                        
  687.                         IDResource idResource = new IDResource();
  688.                         idResource.setIdAccordo(idAccordo);
  689.                         idResource.setNome(resource.getNome());
  690.                         listReturn.add((T)idResource);
  691.                     }
  692.                 }
  693.                 else{
  694.                     listReturn.add((T)idAccordo);
  695.                 }
  696.                
  697.             }
  698.             if(listReturn.size()<=0){
  699.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  700.                 if(filtroPT!=null){
  701.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroPT.toString());
  702.                 }
  703.                 else if(filtroOP!=null){
  704.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroOP.toString());
  705.                 }
  706.                 else if(filtroAZ!=null){
  707.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroAZ.toString());
  708.                 }
  709.                 else if(filtroRicercaBase!=null){
  710.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicercaBase.toString());
  711.                 }
  712.                 else{
  713.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  714.                 }
  715.             }
  716.         }catch(Exception e){
  717.             if(e instanceof DriverRegistroServiziNotFound)
  718.                 throw (DriverRegistroServiziNotFound)e;
  719.             else
  720.                 throw new DriverRegistroServiziException(nomeMetodo+" error",e);
  721.         }
  722.     }

  723.     @Override
  724.     public Documento getAllegato(IDAccordo idAccordo, String nome) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  725.         throw new DriverRegistroServiziException("Not Implemented");
  726.     }
  727.     @Override
  728.     public Documento getSpecificaSemiformale(IDAccordo idAccordo, TipiDocumentoSemiformale tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  729.         throw new DriverRegistroServiziException("Not Implemented");
  730.     }
  731.    
  732.    
  733.    
  734.    
  735.     /* Porte di Dominio */

  736.     /**
  737.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.PortaDominio},
  738.      * identificato grazie al parametro
  739.      * <var>nomePdD</var>
  740.      *
  741.      * @param nomePdD Nome della Porta di Dominio
  742.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.PortaDominio}.
  743.      *
  744.      */
  745.     @Override
  746.     public org.openspcoop2.core.registry.PortaDominio getPortaDominio(String nomePdD) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  747.         if( nomePdD == null)
  748.             throw new DriverRegistroServiziException("[getPortaDominio] Parametro Non Valido");

  749.         org.openspcoop2.core.registry.PortaDominio pddRichiesta = null;

  750.         // Ottengo URL XML associata alla porta di dominio
  751.         String urlXMLPortaDominio = this.urlPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + CostantiRegistroServizi.URL_SEPARATOR + nomePdD + ".xml";  

  752.         // Ottengo oggetto Soggetto
  753.         ByteArrayInputStream bin = null;
  754.         try{
  755.             byte[] fileXML = null;
  756.             try{
  757.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLPortaDominio);
  758.             }catch(UtilsException e){
  759.                 // Controllo pre-esistenza dell'accordo
  760.                 if( "404".equals(e.getMessage()) ){
  761.                     throw new DriverRegistroServiziNotFound("[getPortaDominio] Porta di dominio richiesta non esiste: "+nomePdD);
  762.                 } else
  763.                     throw e;
  764.             }

  765.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  766.             try{
  767.                 this.validatoreRegistro.valida(urlXMLPortaDominio);  
  768.             }catch (Exception e) {
  769.                 throw new DriverRegistroServiziException("[getPortaDominio] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  770.             }

  771.             // parsing
  772.             bin = new ByteArrayInputStream(fileXML);
  773.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  774.             org.openspcoop2.core.registry.RegistroServizi rs =
  775.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  776.             if(rs.sizePortaDominioList()>0)
  777.                 pddRichiesta = rs.getPortaDominio(0);
  778.             bin.close();
  779.         }catch(DriverRegistroServiziNotFound e){
  780.             throw e;
  781.         }catch(DriverRegistroServiziException e){
  782.             throw e;
  783.         }catch(Exception e){
  784.             try{
  785.                 if(bin!=null)
  786.                     bin.close();
  787.             } catch(Exception eis) {
  788.                 // close
  789.             }
  790.             if(e instanceof DriverRegistroServiziNotFound)
  791.                 throw (DriverRegistroServiziNotFound)e;
  792.             else
  793.                 throw new DriverRegistroServiziException("[getPortaDominio] Errore durante il parsing xml: "+e.getMessage(),e);
  794.         }

  795.         if(pddRichiesta==null)
  796.             throw new DriverRegistroServiziNotFound("[getPortaDominio] Porta di Dominio non trovata.");

  797.         return pddRichiesta;
  798.     }

  799.     /**
  800.      * Ritorna gli identificatori delle PdD che rispettano il parametro di ricerca
  801.      *
  802.      * @param filtroRicerca
  803.      * @return Una lista di ID degli accordi trovati
  804.      * @throws DriverRegistroServiziException
  805.      * @throws DriverRegistroServiziNotFound
  806.      */
  807.     @Override
  808.     public List<String> getAllIdPorteDominio(FiltroRicerca filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  809.         try{

  810.             if(this.generatoreXML==null)
  811.                 throw new DriverRegistroServiziException("[getAllIdPorteDominio] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  812.             org.openspcoop2.core.registry.PortaDominio[] pddList = this.generatoreXML.getPorteDominio();
  813.             if(pddList==null)
  814.                 throw new DriverRegistroServiziNotFound("Porte di dominio non esistenti nel repository WEB");

  815.             // Esamina delle pdd
  816.             List<String> nomiPdd = new ArrayList<>();
  817.             for(int i=0; i<pddList.length; i++){

  818.                 String pdUrlXML = this.urlPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + CostantiRegistroServizi.URL_SEPARATOR
  819.                 + pddList[i].getNome() + ".xml";      


  820.                 /* --- Validazione XSD -- */
  821.                 try{
  822.                     this.validatoreRegistro.valida(pdUrlXML);  
  823.                 }catch (Exception e) {
  824.                     throw new DriverRegistroServiziException("[getAllIdPorteDominio] Riscontrato errore durante la validazione XSD ("+pdUrlXML+"): "+e.getMessage(),e);
  825.                 }

  826.                 if(filtroRicerca!=null){
  827.                     // Filtro By Data
  828.                     if(filtroRicerca.getMinDate()!=null){
  829.                         if(pddList[i].getOraRegistrazione()==null){
  830.                             this.log.debug("[getAllIdPorteDominio](FiltroByMinDate) Porta di Dominio ["+pddList[i].getNome()+"] non valorizzata nell'ora-registrazione. Non inserito nella lista ritornata.");
  831.                             continue;
  832.                         }else if(pddList[i].getOraRegistrazione().before(filtroRicerca.getMinDate())){
  833.                             continue;
  834.                         }
  835.                     }
  836.                     if(filtroRicerca.getMaxDate()!=null){
  837.                         if(pddList[i].getOraRegistrazione()==null){
  838.                             this.log.debug("[getAllIdPorteDominio](FiltroByMaxDate) Porta di Dominio ["+pddList[i].getNome()+"] non valorizzata nell'ora-registrazione. Non inserito nella lista ritornata.");
  839.                             continue;
  840.                         }else if(pddList[i].getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  841.                             continue;
  842.                         }
  843.                     }
  844.                     // Filtro By Nome
  845.                     if(filtroRicerca.getNome()!=null){
  846.                         if(pddList[i].getNome().equals(filtroRicerca.getNome()) == false){
  847.                             continue;
  848.                         }
  849.                     }
  850.                 }
  851.                 nomiPdd.add(pddList[i].getNome());
  852.             }
  853.             if(nomiPdd.size()==0){
  854.                 throw new DriverRegistroServiziNotFound("Porte di dominio non trovate che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  855.             }else{
  856.                 return nomiPdd;
  857.             }
  858.         }catch(Exception e){
  859.             if(e instanceof DriverRegistroServiziNotFound)
  860.                 throw (DriverRegistroServiziNotFound)e;
  861.             else
  862.                 throw new DriverRegistroServiziException("getAllIdPorteDominio error",e);
  863.         }
  864.     }

  865.    
  866.    
  867.    
  868.    
  869.    
  870.    
  871.    
  872.    
  873.     /* Gruppi */
  874.    
  875.     /**
  876.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Gruppo},
  877.      * identificato grazie al parametro
  878.      * <var>nome</var>
  879.      *
  880.      * @param idGruppo Identificativo del gruppo
  881.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Gruppo}.
  882.      *
  883.      */
  884.     @Override
  885.     public Gruppo getGruppo(
  886.             IDGruppo idGruppo) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  887.         if(idGruppo==null || idGruppo.getNome()==null)
  888.             throw new DriverRegistroServiziException("[getGruppo] Parametro Non Valido");

  889.         org.openspcoop2.core.registry.Gruppo gruppoRichiesto = null;

  890.         // Ottengo URL XML associata alla porta di dominio
  891.         String urlXMLPortaDominio = this.urlPrefix + CostantiXMLRepository.GRUPPI + CostantiRegistroServizi.URL_SEPARATOR + idGruppo.getNome() + ".xml";      

  892.         // Ottengo oggetto Soggetto
  893.         ByteArrayInputStream bin = null;
  894.         try{
  895.             byte[] fileXML = null;
  896.             try{
  897.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLPortaDominio);
  898.             }catch(UtilsException e){
  899.                 // Controllo pre-esistenza dell'accordo
  900.                 if( "404".equals(e.getMessage()) ){
  901.                     throw new DriverRegistroServiziNotFound("[getGruppo] Gruppo richiesto non esiste: "+idGruppo.getNome());
  902.                 } else
  903.                     throw e;
  904.             }

  905.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  906.             try{
  907.                 this.validatoreRegistro.valida(urlXMLPortaDominio);  
  908.             }catch (Exception e) {
  909.                 throw new DriverRegistroServiziException("[getGruppo] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  910.             }

  911.             // parsing
  912.             bin = new ByteArrayInputStream(fileXML);
  913.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  914.             org.openspcoop2.core.registry.RegistroServizi rs =
  915.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  916.             if(rs.sizeGruppoList()>0)
  917.                 gruppoRichiesto = rs.getGruppo(0);
  918.             bin.close();
  919.         }catch(DriverRegistroServiziNotFound e){
  920.             throw e;
  921.         }catch(DriverRegistroServiziException e){
  922.             throw e;
  923.         }catch(Exception e){
  924.             try{
  925.                 if(bin!=null)
  926.                     bin.close();
  927.             } catch(Exception eis) {
  928.                 // close
  929.             }
  930.             if(e instanceof DriverRegistroServiziNotFound)
  931.                 throw (DriverRegistroServiziNotFound)e;
  932.             else
  933.                 throw new DriverRegistroServiziException("[getGruppo] Errore durante il parsing xml: "+e.getMessage(),e);
  934.         }

  935.         if(gruppoRichiesto==null)
  936.             throw new DriverRegistroServiziNotFound("[getGruppo] Gruppo non trovato.");

  937.         return gruppoRichiesto;
  938.     }

  939.     /**
  940.      * Ritorna gli identificatori dei Gruppi che rispettano il parametro di ricerca
  941.      *
  942.      * @param filtroRicerca
  943.      * @return Una lista di ID dei gruppi trovati
  944.      * @throws DriverRegistroServiziException
  945.      * @throws DriverRegistroServiziNotFound
  946.      */
  947.     @Override
  948.     public List<IDGruppo> getAllIdGruppi(
  949.             FiltroRicercaGruppi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  950.         try{

  951.             if(this.generatoreXML==null)
  952.                 throw new DriverRegistroServiziException("[getAllIdGruppi] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  953.             org.openspcoop2.core.registry.Gruppo[] gruppoList = this.generatoreXML.getGruppi();
  954.             if(gruppoList==null)
  955.                 throw new DriverRegistroServiziNotFound("Gruppi non esistenti nel repository WEB");

  956.             // Esamina dei gruppi
  957.             List<IDGruppo> idGruppi = new ArrayList<IDGruppo>();
  958.             for(int i=0; i<gruppoList.length; i++){

  959.                 String gruppoUrlXML = this.urlPrefix + CostantiXMLRepository.GRUPPI + CostantiRegistroServizi.URL_SEPARATOR
  960.                         + gruppoList[i].getNome() + ".xml";  


  961.                 /* --- Validazione XSD -- */
  962.                 try{
  963.                     this.validatoreRegistro.valida(gruppoUrlXML);  
  964.                 }catch (Exception e) {
  965.                     throw new DriverRegistroServiziException("[getAllIdGruppi] Riscontrato errore durante la validazione XSD ("+gruppoUrlXML+"): "+e.getMessage(),e);
  966.                 }

  967.                 if(filtroRicerca!=null){
  968.                     // Filtro By Data
  969.                     if(filtroRicerca.getMinDate()!=null){
  970.                         if(gruppoList[i].getOraRegistrazione()==null){
  971.                             this.log.debug("[getAllIdGruppi](FiltroByMinDate) Gruppo ["+gruppoList[i].getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  972.                             continue;
  973.                         }else if(gruppoList[i].getOraRegistrazione().before(filtroRicerca.getMinDate())){
  974.                             continue;
  975.                         }
  976.                     }
  977.                     if(filtroRicerca.getMaxDate()!=null){
  978.                         if(gruppoList[i].getOraRegistrazione()==null){
  979.                             this.log.debug("[getAllIdGruppi](FiltroByMaxDate) Gruppo ["+gruppoList[i].getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  980.                             continue;
  981.                         }else if(gruppoList[i].getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  982.                             continue;
  983.                         }
  984.                     }
  985.                     // Filtro By Nome
  986.                     if(filtroRicerca.getNome()!=null){
  987.                         if(gruppoList[i].getNome().equals(filtroRicerca.getNome()) == false){
  988.                             continue;
  989.                         }
  990.                     }
  991.                     // Filtro By ServiceBinding
  992.                     if(filtroRicerca.getServiceBinding()!=null){
  993.                         if(gruppoList[i].getServiceBinding()!=null){ // se e' uguale a null significa che va bene per qualsiasi service binding
  994.                             if(gruppoList[i].getServiceBinding().equals(filtroRicerca.getServiceBinding()) == false) {
  995.                                 continue;
  996.                             }
  997.                         }
  998.                     }
  999.                 }
  1000.                 IDGruppo id = new IDGruppo(gruppoList[i].getNome());
  1001.                 idGruppi.add(id);
  1002.             }
  1003.             if(idGruppi.size()==0){
  1004.                 throw new DriverRegistroServiziNotFound("Gruppi non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1005.             }else{
  1006.                 return idGruppi;
  1007.             }
  1008.         }catch(Exception e){
  1009.             if(e instanceof DriverRegistroServiziNotFound)
  1010.                 throw (DriverRegistroServiziNotFound)e;
  1011.             else
  1012.                 throw new DriverRegistroServiziException("getAllIdGruppi error",e);
  1013.         }
  1014.     }
  1015.    
  1016.    
  1017.    
  1018.    
  1019.    
  1020.    
  1021.    
  1022.    
  1023.     /* Ruoli */
  1024.    
  1025.     /**
  1026.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Ruolo},
  1027.      * identificato grazie al parametro
  1028.      * <var>nome</var>
  1029.      *
  1030.      * @param idRuolo Identificativo del ruolo
  1031.      * @return un oggetto di tipo {@link org.openspcoop2.core.registry.Ruolo}.
  1032.      *
  1033.      */
  1034.     @Override
  1035.     public Ruolo getRuolo(
  1036.             IDRuolo idRuolo) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1037.         if(idRuolo==null || idRuolo.getNome()==null)
  1038.             throw new DriverRegistroServiziException("[getRuolo] Parametro Non Valido");

  1039.         org.openspcoop2.core.registry.Ruolo ruoloRichiesto = null;

  1040.         // Ottengo URL XML associata alla porta di dominio
  1041.         String urlXMLPortaDominio = this.urlPrefix + CostantiXMLRepository.RUOLI + CostantiRegistroServizi.URL_SEPARATOR + idRuolo.getNome() + ".xml";    

  1042.         // Ottengo oggetto Soggetto
  1043.         ByteArrayInputStream bin = null;
  1044.         try{
  1045.             byte[] fileXML = null;
  1046.             try{
  1047.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLPortaDominio);
  1048.             }catch(UtilsException e){
  1049.                 // Controllo pre-esistenza dell'accordo
  1050.                 if( "404".equals(e.getMessage()) ){
  1051.                     throw new DriverRegistroServiziNotFound("[getRuolo] Ruolo richiesto non esiste: "+idRuolo.getNome());
  1052.                 } else
  1053.                     throw e;
  1054.             }

  1055.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1056.             try{
  1057.                 this.validatoreRegistro.valida(urlXMLPortaDominio);  
  1058.             }catch (Exception e) {
  1059.                 throw new DriverRegistroServiziException("[getRuolo] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  1060.             }

  1061.             // parsing
  1062.             bin = new ByteArrayInputStream(fileXML);
  1063.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1064.             org.openspcoop2.core.registry.RegistroServizi rs =
  1065.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1066.             if(rs.sizeRuoloList()>0)
  1067.                 ruoloRichiesto = rs.getRuolo(0);
  1068.             bin.close();
  1069.         }catch(DriverRegistroServiziNotFound e){
  1070.             throw e;
  1071.         }catch(DriverRegistroServiziException e){
  1072.             throw e;
  1073.         }catch(Exception e){
  1074.             try{
  1075.                 if(bin!=null)
  1076.                     bin.close();
  1077.             } catch(Exception eis) {
  1078.                 // close
  1079.             }
  1080.             if(e instanceof DriverRegistroServiziNotFound)
  1081.                 throw (DriverRegistroServiziNotFound)e;
  1082.             else
  1083.                 throw new DriverRegistroServiziException("[getRuolo] Errore durante il parsing xml: "+e.getMessage(),e);
  1084.         }

  1085.         if(ruoloRichiesto==null)
  1086.             throw new DriverRegistroServiziNotFound("[getRuolo] Ruolo non trovato.");

  1087.         return ruoloRichiesto;
  1088.     }

  1089.     /**
  1090.      * Ritorna gli identificatori dei Ruoli che rispettano il parametro di ricerca
  1091.      *
  1092.      * @param filtroRicerca
  1093.      * @return Una lista di ID dei ruoli trovati
  1094.      * @throws DriverRegistroServiziException
  1095.      * @throws DriverRegistroServiziNotFound
  1096.      */
  1097.     @Override
  1098.     public List<IDRuolo> getAllIdRuoli(
  1099.             FiltroRicercaRuoli filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1100.         try{

  1101.             if(this.generatoreXML==null)
  1102.                 throw new DriverRegistroServiziException("[getAllIdRuoli] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  1103.             org.openspcoop2.core.registry.Ruolo[] ruoloList = this.generatoreXML.getRuoli();
  1104.             if(ruoloList==null)
  1105.                 throw new DriverRegistroServiziNotFound("Ruoli non esistenti nel repository WEB");

  1106.             // Esamina dei ruoli
  1107.             List<IDRuolo> idRuoli = new ArrayList<IDRuolo>();
  1108.             for(int i=0; i<ruoloList.length; i++){

  1109.                 String ruoloUrlXML = this.urlPrefix + CostantiXMLRepository.RUOLI + CostantiRegistroServizi.URL_SEPARATOR
  1110.                         + ruoloList[i].getNome() + ".xml";    


  1111.                 /* --- Validazione XSD -- */
  1112.                 try{
  1113.                     this.validatoreRegistro.valida(ruoloUrlXML);  
  1114.                 }catch (Exception e) {
  1115.                     throw new DriverRegistroServiziException("[getAllIdRuoli] Riscontrato errore durante la validazione XSD ("+ruoloUrlXML+"): "+e.getMessage(),e);
  1116.                 }

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

  1203.         org.openspcoop2.core.registry.Scope scopeRichiesto = null;

  1204.         // Ottengo URL XML associata alla porta di dominio
  1205.         String urlXMLPortaDominio = this.urlPrefix + CostantiXMLRepository.SCOPE + CostantiRegistroServizi.URL_SEPARATOR + idScope.getNome() + ".xml";    

  1206.         // Ottengo oggetto Soggetto
  1207.         ByteArrayInputStream bin = null;
  1208.         try{
  1209.             byte[] fileXML = null;
  1210.             try{
  1211.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLPortaDominio);
  1212.             }catch(UtilsException e){
  1213.                 // Controllo pre-esistenza dell'accordo
  1214.                 if( "404".equals(e.getMessage()) ){
  1215.                     throw new DriverRegistroServiziNotFound("[getScope] Scope richiesto non esiste: "+idScope.getNome());
  1216.                 } else
  1217.                     throw e;
  1218.             }

  1219.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1220.             try{
  1221.                 this.validatoreRegistro.valida(urlXMLPortaDominio);  
  1222.             }catch (Exception e) {
  1223.                 throw new DriverRegistroServiziException("[getScope] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  1224.             }

  1225.             // parsing
  1226.             bin = new ByteArrayInputStream(fileXML);
  1227.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1228.             org.openspcoop2.core.registry.RegistroServizi rs =
  1229.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1230.             if(rs.sizeScopeList()>0)
  1231.                 scopeRichiesto = rs.getScope(0);
  1232.             bin.close();
  1233.         }catch(DriverRegistroServiziNotFound e){
  1234.             throw e;
  1235.         }catch(DriverRegistroServiziException e){
  1236.             throw e;
  1237.         }catch(Exception e){
  1238.             try{
  1239.                 if(bin!=null)
  1240.                     bin.close();
  1241.             } catch(Exception eis) {
  1242.                 // close
  1243.             }
  1244.             if(e instanceof DriverRegistroServiziNotFound)
  1245.                 throw (DriverRegistroServiziNotFound)e;
  1246.             else
  1247.                 throw new DriverRegistroServiziException("[getScope] Errore durante il parsing xml: "+e.getMessage(),e);
  1248.         }

  1249.         if(scopeRichiesto==null)
  1250.             throw new DriverRegistroServiziNotFound("[getScope] Scope non trovato.");

  1251.         return scopeRichiesto;
  1252.     }

  1253.     /**
  1254.      * Ritorna gli identificatori dei Scope che rispettano il parametro di ricerca
  1255.      *
  1256.      * @param filtroRicerca
  1257.      * @return Una lista di ID dei scope trovati
  1258.      * @throws DriverRegistroServiziException
  1259.      * @throws DriverRegistroServiziNotFound
  1260.      */
  1261.     @Override
  1262.     public List<IDScope> getAllIdScope(
  1263.             FiltroRicercaScope filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1264.         try{

  1265.             if(this.generatoreXML==null)
  1266.                 throw new DriverRegistroServiziException("[getAllIdScope] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  1267.             org.openspcoop2.core.registry.Scope[] scopeList = this.generatoreXML.getScope();
  1268.             if(scopeList==null)
  1269.                 throw new DriverRegistroServiziNotFound("Scope non esistenti nel repository WEB");

  1270.             // Esamina dei scope
  1271.             List<IDScope> idScope = new ArrayList<IDScope>();
  1272.             for(int i=0; i<scopeList.length; i++){

  1273.                 String scopeUrlXML = this.urlPrefix + CostantiXMLRepository.SCOPE + CostantiRegistroServizi.URL_SEPARATOR
  1274.                         + scopeList[i].getNome() + ".xml";    


  1275.                 /* --- Validazione XSD -- */
  1276.                 try{
  1277.                     this.validatoreRegistro.valida(scopeUrlXML);  
  1278.                 }catch (Exception e) {
  1279.                     throw new DriverRegistroServiziException("[getAllIdScope] Riscontrato errore durante la validazione XSD ("+scopeUrlXML+"): "+e.getMessage(),e);
  1280.                 }

  1281.                 if(filtroRicerca!=null){
  1282.                     // Filtro By Data
  1283.                     if(filtroRicerca.getMinDate()!=null){
  1284.                         if(scopeList[i].getOraRegistrazione()==null){
  1285.                             this.log.debug("[getAllIdScope](FiltroByMinDate) Scope ["+scopeList[i].getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1286.                             continue;
  1287.                         }else if(scopeList[i].getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1288.                             continue;
  1289.                         }
  1290.                     }
  1291.                     if(filtroRicerca.getMaxDate()!=null){
  1292.                         if(scopeList[i].getOraRegistrazione()==null){
  1293.                             this.log.debug("[getAllIdScope](FiltroByMaxDate) Scope ["+scopeList[i].getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1294.                             continue;
  1295.                         }else if(scopeList[i].getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1296.                             continue;
  1297.                         }
  1298.                     }
  1299.                     // Filtro By Nome
  1300.                     if(filtroRicerca.getNome()!=null){
  1301.                         if(scopeList[i].getNome().equals(filtroRicerca.getNome()) == false){
  1302.                             continue;
  1303.                         }
  1304.                     }
  1305.                     // Filtro By Tipologia
  1306.                     if(filtroRicerca.getTipologia()!=null){
  1307.                         if(scopeList[i].getTipologia()==null){
  1308.                             continue;
  1309.                         }
  1310.                         if(scopeList[i].getTipologia().equals(filtroRicerca.getTipologia()) == false){
  1311.                             continue;
  1312.                         }
  1313.                     }
  1314.                     // Filtro By Contesto
  1315.                     if(filtroRicerca.getContesto()!=null && !ScopeContesto.QUALSIASI.equals(filtroRicerca.getContesto())){
  1316.                         if(scopeList[i].getContestoUtilizzo()==null){
  1317.                             continue;
  1318.                         }
  1319.                         if(!ScopeContesto.QUALSIASI.equals(scopeList[i].getContestoUtilizzo())){
  1320.                             if(scopeList[i].getContestoUtilizzo().equals(filtroRicerca.getContesto()) == false){
  1321.                                 continue;
  1322.                             }
  1323.                         }
  1324.                     }
  1325.                 }
  1326.                 IDScope id = new IDScope(scopeList[i].getNome());
  1327.                 idScope.add(id);
  1328.             }
  1329.             if(idScope.size()==0){
  1330.                 throw new DriverRegistroServiziNotFound("Scope non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1331.             }else{
  1332.                 return idScope;
  1333.             }
  1334.         }catch(Exception e){
  1335.             if(e instanceof DriverRegistroServiziNotFound)
  1336.                 throw (DriverRegistroServiziNotFound)e;
  1337.             else
  1338.                 throw new DriverRegistroServiziException("getAllIdScope error",e);
  1339.         }
  1340.     }
  1341.    
  1342.    

  1343.    
  1344.    
  1345.    
  1346.     /* Soggetti */
  1347.    
  1348.     /**
  1349.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.Soggetto},
  1350.      * identificato grazie al parametro
  1351.      * <var>idSoggetto</var> di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1352.      *
  1353.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1354.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.Soggetto}
  1355.      *
  1356.      */
  1357.     @Override
  1358.     public org.openspcoop2.core.registry.Soggetto getSoggetto(IDSoggetto idSoggetto) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1359.         if(idSoggetto==null)
  1360.             throw new DriverRegistroServiziException("[getSoggetto] Parametro Non Valido");
  1361.         String tipo = idSoggetto.getTipo();
  1362.         String nome = idSoggetto.getNome();
  1363.         if(tipo == null || nome == null)
  1364.             throw new DriverRegistroServiziException("[getSoggetto] Parametri Non Validi");

  1365.         org.openspcoop2.core.registry.Soggetto soggRichiesto = null;

  1366.         // Ottengo URL XML associato al Soggetto
  1367.         String idSoggettoXML = tipo + nome;
  1368.         String urlXMLSoggetto = this.urlPrefix + idSoggettoXML +CostantiRegistroServizi.URL_SEPARATOR  + idSoggettoXML + ".xml";



  1369.         // Ottengo oggetto Soggetto
  1370.         ByteArrayInputStream bin = null;
  1371.         try{
  1372.             byte[] fileXML = null;
  1373.             try{
  1374.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLSoggetto);
  1375.             }catch(UtilsException e){
  1376.                 // Controllo pre-esistenza dell'accordo
  1377.                 if( "404".equals(e.getMessage()) ){
  1378.                     throw new DriverRegistroServiziNotFound("[getSoggetto] Il soggetto ["+idSoggetto.getTipo()+"/"+idSoggetto.getNome()+
  1379.                     "] non risulta gia' inserito nel registro dei servizi.");
  1380.                 } else
  1381.                     throw e;
  1382.             }

  1383.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1384.             try{
  1385.                 this.validatoreRegistro.valida(urlXMLSoggetto);  
  1386.             }catch (Exception e) {
  1387.                 throw new DriverRegistroServiziException("[getSoggetto] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  1388.             }

  1389.             // parsing
  1390.             bin = new ByteArrayInputStream(fileXML);
  1391.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1392.             org.openspcoop2.core.registry.RegistroServizi rs =
  1393.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1394.             if(rs.sizeSoggettoList()>0)
  1395.                 soggRichiesto = rs.getSoggetto(0);
  1396.             bin.close();
  1397.         }catch(DriverRegistroServiziNotFound e){
  1398.             throw e;
  1399.         }catch(DriverRegistroServiziException e){
  1400.             throw e;
  1401.         }catch(Exception e){
  1402.             try{
  1403.                 if(bin!=null)
  1404.                     bin.close();
  1405.             } catch(Exception eis) {
  1406.                 // close
  1407.             }
  1408.             if(e instanceof DriverRegistroServiziNotFound)
  1409.                 throw (DriverRegistroServiziNotFound)e;
  1410.             else
  1411.                 throw new DriverRegistroServiziException("[getSoggetto] Errore durante il parsing xml: "+e.getMessage(),e);
  1412.         }

  1413.         if(soggRichiesto==null)
  1414.             throw new DriverRegistroServiziNotFound("[getSoggetto] Soggetto non trovato.");

  1415.         return soggRichiesto;
  1416.     }

  1417.     @Override
  1418.     public Soggetto getSoggettoByCredenzialiBasic(
  1419.             String user,String password,
  1420.             CryptConfig config) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1421.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.BASIC, user, password,
  1422.                 null, null, null, false,
  1423.                 null,
  1424.                 config,
  1425.                 false);
  1426.     }
  1427.    
  1428.     @Override
  1429.     public Soggetto getSoggettoByCredenzialiApiKey(
  1430.             String user,String password, boolean appId,
  1431.             CryptConfig config) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1432.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.BASIC, user, password,
  1433.                 null, null, null, false,
  1434.                 null,
  1435.                 config,
  1436.                 appId);
  1437.     }
  1438.    
  1439.     @Override
  1440.     public Soggetto getSoggettoByCredenzialiSsl(
  1441.             String subject, String issuer) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1442.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.SSL, null, null,
  1443.                 subject, issuer, null, false,
  1444.                 null,
  1445.                 null,
  1446.                 false);
  1447.     }
  1448.    
  1449.     @Override
  1450.     public Soggetto getSoggettoByCredenzialiSsl(CertificateInfo certificate, boolean strictVerifier) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1451.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.SSL, null, null,
  1452.                 null, null, certificate, strictVerifier,
  1453.                 null,
  1454.                 null,
  1455.                 false);
  1456.     }
  1457.    
  1458.     @Override
  1459.     public Soggetto getSoggettoByCredenzialiPrincipal(
  1460.             String principal) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1461.         return this.getEngineSoggettoAutenticato(CredenzialeTipo.PRINCIPAL, null, null,
  1462.                 null, null, null, false,
  1463.                 principal,
  1464.                 null,
  1465.                 false);
  1466.     }
  1467.     private org.openspcoop2.core.registry.Soggetto getEngineSoggettoAutenticato(CredenzialeTipo tipoCredenziale, String user,String password,
  1468.             String aSubject, String aIssuer, CertificateInfo aCertificate, boolean aStrictVerifier,
  1469.             String principal,
  1470.             CryptConfig config,
  1471.             boolean appId) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1472.        
  1473.         // conrollo consistenza
  1474.         if (tipoCredenziale == null)
  1475.             throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro tipoCredenziale is null");

  1476.         switch (tipoCredenziale) {
  1477.         case BASIC:
  1478.             if (user == null || "".equalsIgnoreCase(user))
  1479.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro user is null (required for basic auth)");
  1480.             if (password == null || "".equalsIgnoreCase(password))
  1481.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro password is null (required for basic auth)");
  1482.             break;
  1483.         case APIKEY:
  1484.             if (user == null || "".equalsIgnoreCase(user))
  1485.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro user is null (required for apikey auth)");
  1486.             if (password == null || "".equalsIgnoreCase(password))
  1487.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro password is null (required for apikey auth)");
  1488.             break;
  1489.         case SSL:
  1490.             if ( (aSubject == null || "".equalsIgnoreCase(aSubject)) && (aCertificate==null))
  1491.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro subject/certificate is null (required for ssl auth)");
  1492.             break;
  1493.         case PRINCIPAL:
  1494.             if (principal == null || "".equalsIgnoreCase(principal))
  1495.                 throw new DriverRegistroServiziException("[getSoggettoAutenticato] Parametro principal is null (required for principal auth)");
  1496.             break;
  1497.         }

  1498.         IDSoggetto idSoggetto = null;
  1499.         try{
  1500.             FiltroRicercaSoggetti filtroRicerca = new FiltroRicercaSoggetti();
  1501.             CredenzialiSoggetto credenzialiSoggetto = new CredenzialiSoggetto();
  1502.             credenzialiSoggetto.setTipo(tipoCredenziale);
  1503.             switch (tipoCredenziale) {
  1504.             case BASIC:
  1505.                 credenzialiSoggetto.setUser(user);
  1506.                 credenzialiSoggetto.setPassword(password);
  1507.                 break;
  1508.             case APIKEY:
  1509.                 credenzialiSoggetto.setUser(user);
  1510.                 credenzialiSoggetto.setPassword(password);
  1511.                 credenzialiSoggetto.setAppId(appId);
  1512.                 break;
  1513.             case SSL:
  1514.                 credenzialiSoggetto.setSubject(aSubject);
  1515.                 credenzialiSoggetto.setIssuer(aIssuer);
  1516.                 if(aCertificate!=null) {
  1517.                     try {
  1518.                         credenzialiSoggetto.setCertificate(aCertificate.getCertificate().getEncoded());
  1519.                     }catch(Exception e) {
  1520.                         throw new DriverRegistroServiziException(e.getMessage(),e);
  1521.                     }
  1522.                 }
  1523.                 credenzialiSoggetto.setCertificateStrictVerification(aStrictVerifier);
  1524.                 break;
  1525.             case PRINCIPAL:
  1526.                 credenzialiSoggetto.setUser(principal);
  1527.                 break;
  1528.             }
  1529.             filtroRicerca.setCredenzialiSoggetto(credenzialiSoggetto, config);
  1530.             List<IDSoggetto> l = this.getAllIdSoggetti(filtroRicerca);
  1531.             if(l.size()>1){
  1532.                 throw new DriverRegistroServiziException("Trovato più di un soggetto che possiede le credenziali '"+tipoCredenziale.toString()+"' fornite");
  1533.             }
  1534.             else if(l.size()==1){
  1535.                 idSoggetto = l.get(0);
  1536.             }
  1537.         }catch(DriverRegistroServiziNotFound notFound){
  1538.             // ignore
  1539.         }
  1540.        
  1541.         if(idSoggetto==null){
  1542.             throw new DriverRegistroServiziNotFound("Nessun soggetto trovato che possiede le credenziali '"+tipoCredenziale.toString()+"' fornite");
  1543.         }
  1544.         else{
  1545.             return this.getSoggetto(idSoggetto);
  1546.         }
  1547.     }
  1548.    
  1549.     /**
  1550.      *  Ritorna gli identificatori dei soggetti che rispettano il parametro di ricerca
  1551.      *
  1552.      * @param filtroRicerca
  1553.      * @return Una lista di ID dei soggetti trovati
  1554.      * @throws DriverRegistroServiziException
  1555.      * @throws DriverRegistroServiziNotFound
  1556.      */
  1557.     @Override
  1558.     public List<IDSoggetto> getAllIdSoggetti(FiltroRicercaSoggetti filtroRicerca) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1559.         try{
  1560.             if(this.generatoreXML==null)
  1561.                 throw new DriverRegistroServiziException("[getAllIdSoggettiRegistro] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  1562.             org.openspcoop2.core.registry.Soggetto[] ssList = this.generatoreXML.getSoggetti();
  1563.             if(ssList==null)
  1564.                 throw new DriverRegistroServiziNotFound("Soggetti non esistenti nel repository WEB");

  1565.             boolean testInChiaro = false;
  1566.             ICrypt crypt = null;
  1567.             if(filtroRicerca!=null && filtroRicerca.getCredenzialiSoggetto()!=null && filtroRicerca.getCredenzialiSoggetto().getPassword()!=null){
  1568.                 CredenzialeTipo cTipo = filtroRicerca.getCredenzialiSoggetto().getTipo();
  1569.                 if(CredenzialeTipo.BASIC.equals(cTipo)){
  1570.                     CryptConfig config = filtroRicerca.getCryptConfig();
  1571.                     if(config==null || config.isBackwardCompatibility()) {
  1572.                         testInChiaro = true;
  1573.                     }
  1574.                     if(config!=null) {
  1575.                         try {
  1576.                             crypt = CryptFactory.getCrypt(this.log, config);
  1577.                         }catch(Exception e) {
  1578.                             throw new DriverRegistroServiziException(e.getMessage(),e);
  1579.                         }
  1580.                     }
  1581.                 }
  1582.                 else if(CredenzialeTipo.APIKEY.equals(cTipo)){
  1583.                     CryptConfig config = filtroRicerca.getCryptConfig();
  1584.                     if(config!=null) {
  1585.                         try {
  1586.                             crypt = CryptFactory.getCrypt(this.log, config);
  1587.                         }catch(Exception e) {
  1588.                             throw new DriverRegistroServiziException(e.getMessage(),e);
  1589.                         }
  1590.                     }
  1591.                     else {
  1592.                         testInChiaro = true;
  1593.                     }
  1594.                 }
  1595.             }
  1596.            
  1597.             // Esamina dei soggetti
  1598.             List<IDSoggetto> idSoggetti = new ArrayList<IDSoggetto>();
  1599.             for(int i=0; i<ssList.length; i++){

  1600.                 String idSoggettoXML = ssList[i].getTipo() + ssList[i].getNome();
  1601.                 String urlXMLSoggetto = this.urlPrefix + idSoggettoXML +CostantiRegistroServizi.URL_SEPARATOR  + idSoggettoXML + ".xml";

  1602.                 /* --- Validazione XSD -- */
  1603.                 try{
  1604.                     this.validatoreRegistro.valida(urlXMLSoggetto);  
  1605.                 }catch (Exception e) {
  1606.                     throw new DriverRegistroServiziException("[getAllIdSoggettiRegistro] Riscontrato errore durante la validazione XSD ("+urlXMLSoggetto+"): "+e.getMessage(),e);
  1607.                 }

  1608.                 if(filtroRicerca!=null){
  1609.                     // Filtro By Data
  1610.                     if(filtroRicerca.getMinDate()!=null){
  1611.                         if(ssList[i].getOraRegistrazione()==null){
  1612.                             this.log.debug("[getAllIdSoggettiRegistro](FiltroByMinDate) Soggetto ["+ssList[i].getTipo()+"/"+ssList[i].getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1613.                             continue;
  1614.                         }else if(ssList[i].getOraRegistrazione().before(filtroRicerca.getMinDate())){
  1615.                             continue;
  1616.                         }
  1617.                     }
  1618.                     if(filtroRicerca.getMaxDate()!=null){
  1619.                         if(ssList[i].getOraRegistrazione()==null){
  1620.                             this.log.debug("[getAllIdSoggettiRegistro](FiltroByMaxDate) Soggetto ["+ssList[i].getTipo()+"/"+ssList[i].getNome()+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  1621.                             continue;
  1622.                         }else if(ssList[i].getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  1623.                             continue;
  1624.                         }
  1625.                     }
  1626.                     // Filtro By Tipo e Nome
  1627.                     if(filtroRicerca.getTipo()!=null){
  1628.                         if(ssList[i].getTipo().equals(filtroRicerca.getTipo()) == false){
  1629.                             continue;
  1630.                         }
  1631.                     }
  1632.                     if(filtroRicerca.getNome()!=null){
  1633.                         if(ssList[i].getNome().equals(filtroRicerca.getNome()) == false){
  1634.                             continue;
  1635.                         }
  1636.                     }
  1637.                     // Filtro By Pdd
  1638.                     if(filtroRicerca.getNomePdd()!=null){
  1639.                         if(ssList[i].getPortaDominio().equals(filtroRicerca.getNomePdd()) == false){
  1640.                             continue;
  1641.                         }
  1642.                     }
  1643.                     // ProtocolProperties
  1644.                     if(ProtocolPropertiesUtilities.isMatch(ssList[i], filtroRicerca.getProtocolProperties())==false){
  1645.                         continue;
  1646.                     }
  1647.                     // Filtro By Ruoli
  1648.                     if(filtroRicerca.getIdRuolo()!=null && filtroRicerca.getIdRuolo().getNome()!=null){
  1649.                         if(ssList[i].getRuoli()==null){
  1650.                             continue;
  1651.                         }
  1652.                         boolean contains = false;
  1653.                         for (int j = 0; j < ssList[i].getRuoli().sizeRuoloList(); j++) {
  1654.                             if(filtroRicerca.getIdRuolo().getNome().equals(ssList[i].getRuoli().getRuolo(j).getNome())){
  1655.                                 contains = true;
  1656.                                 break;
  1657.                             }
  1658.                         }
  1659.                         if(!contains){
  1660.                             continue;
  1661.                         }
  1662.                     }
  1663.                     // Filtro By Credenziali
  1664.                     if(filtroRicerca.getCredenzialiSoggetto()!=null){
  1665.                         CredenzialiSoggetto credenziali = (ssList[i].sizeCredenzialiList() > 0 ? ssList[i].getCredenziali(0) : null);
  1666.                         if(credenziali==null){
  1667.                             continue;
  1668.                         }
  1669.                         if(filtroRicerca.getCredenzialiSoggetto().getTipo()!=null){
  1670.                             if(credenziali.getTipo()==null){
  1671.                                 if(filtroRicerca.getCredenzialiSoggetto().getTipo().equals(CredenzialeTipo.SSL) == false){ // ssl è il default
  1672.                                     continue;
  1673.                                 }  
  1674.                             }
  1675.                             else{
  1676.                                 if(filtroRicerca.getCredenzialiSoggetto().getTipo().equals(credenziali.getTipo())==false){
  1677.                                     continue;
  1678.                                 }
  1679.                                 if(CredenzialeTipo.APIKEY.equals(filtroRicerca.getCredenzialiSoggetto().getTipo())){
  1680.                                     if(filtroRicerca.getCredenzialiSoggetto().isAppId()) {
  1681.                                         if(!credenziali.isAppId()) {
  1682.                                             continue;
  1683.                                         }
  1684.                                     }
  1685.                                     else {
  1686.                                         if(credenziali.isAppId()) {
  1687.                                             continue;
  1688.                                         }
  1689.                                     }
  1690.                                 }
  1691.                             }
  1692.                         }
  1693.                         if(filtroRicerca.getCredenzialiSoggetto().getUser()!=null){
  1694.                             if(filtroRicerca.getCredenzialiSoggetto().getUser().equals(credenziali.getUser())==false){
  1695.                                 continue;
  1696.                             }
  1697.                         }
  1698.                         if(filtroRicerca.getCredenzialiSoggetto().getPassword()!=null){
  1699.                             String passwordSaved =  credenziali.getPassword();
  1700.                             boolean found = false;
  1701.                             if(testInChiaro) {
  1702.                                 found = filtroRicerca.getCredenzialiSoggetto().getPassword().equals(passwordSaved);
  1703.                             }
  1704.                             if(!found && crypt!=null) {
  1705.                                 found = crypt.check(filtroRicerca.getCredenzialiSoggetto().getPassword(), passwordSaved);
  1706.                             }
  1707.                            
  1708.                             if( !found ) {
  1709.                                 continue;
  1710.                             }
  1711.                         }
  1712.                         if(filtroRicerca.getCredenzialiSoggetto().getSubject()!=null){
  1713.                             try{
  1714.                                 if(credenziali.getSubject()==null){
  1715.                                     continue;
  1716.                                 }
  1717.                                 boolean subjectValid = CertificateUtils.sslVerify(credenziali.getSubject(), filtroRicerca.getCredenzialiSoggetto().getSubject(), PrincipalType.SUBJECT, this.log);
  1718.                                 boolean issuerValid = true;
  1719.                                 if(filtroRicerca.getCredenzialiSoggetto().getIssuer()!=null) {
  1720.                                     issuerValid = CertificateUtils.sslVerify(credenziali.getIssuer(), filtroRicerca.getCredenzialiSoggetto().getIssuer(), PrincipalType.ISSUER, this.log);
  1721.                                 }
  1722.                                 else {
  1723.                                     issuerValid = (credenziali.getIssuer() == null);
  1724.                                 }
  1725.                                 if(!subjectValid || !issuerValid){
  1726.                                     continue;
  1727.                                 }
  1728.                             }catch(Exception e){
  1729.                                 throw new DriverRegistroServiziException(e.getMessage(),e);
  1730.                             }
  1731.                         }
  1732.                         if(filtroRicerca.getCredenzialiSoggetto().getCnSubject()!=null && filtroRicerca.getCredenzialiSoggetto().getCertificate()!=null) {
  1733.                             if(filtroRicerca.getCredenzialiSoggetto().getCnSubject().equals(credenziali.getCnSubject())==false) {
  1734.                                 continue;
  1735.                             }
  1736.                             // Possono esistere piu' soggetti che hanno un CN con subject e issuer diverso.
  1737.                             Certificate certificato = ArchiveLoader.load(ArchiveType.CER, credenziali.getCertificate(), 0, null);
  1738.                             Certificate certificatoFiltro = ArchiveLoader.load(ArchiveType.CER, filtroRicerca.getCredenzialiSoggetto().getCertificate(), 0, null);                          
  1739.                             if(!certificatoFiltro.getCertificate().equals(certificato.getCertificate(),filtroRicerca.getCredenzialiSoggetto().isCertificateStrictVerification())) {
  1740.                                 continue;
  1741.                             }
  1742.                         }
  1743.                     }
  1744.                 }
  1745.                 IDSoggetto idS = new IDSoggetto(ssList[i].getTipo(),ssList[i].getNome());
  1746.                 idSoggetti.add(idS);
  1747.             }
  1748.             if(idSoggetti.size()==0){
  1749.                 throw new DriverRegistroServiziNotFound("Soggetti non trovati che rispettano il filtro di ricerca selezionato: "+filtroRicerca.toString());
  1750.             }else{
  1751.                 return idSoggetti;
  1752.             }
  1753.         }catch(Exception e){
  1754.             if(e instanceof DriverRegistroServiziNotFound)
  1755.                 throw (DriverRegistroServiziNotFound)e;
  1756.             else
  1757.                 throw new DriverRegistroServiziException("getAllIdSoggettiRegistro error",e);
  1758.         }
  1759.     }

  1760.    
  1761.    
  1762.    
  1763.    
  1764.    
  1765.     /* Accordi di Servizio Parte Specifica */
  1766.    
  1767.     /**
  1768.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1769.      * contenente le informazioni sulle funzionalita' associate
  1770.      * al servizio  identificato grazie ai fields Soggetto,
  1771.      * 'Servizio','TipoServizio' e 'Azione' impostati
  1772.      * all'interno del parametro <var>idService</var> di tipo {@link org.openspcoop2.core.id.IDServizio}.
  1773.      *
  1774.      * @param idService Identificatore del Servizio di tipo {@link org.openspcoop2.core.id.IDServizio}.
  1775.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1776.      *
  1777.      */
  1778.     @Override
  1779.     public org.openspcoop2.core.registry.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idService) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  1780.         if(idService == null)
  1781.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Parametro Non Valido");
  1782.         String servizio = idService.getNome();
  1783.         String tipoServizio = idService.getTipo();
  1784.         Integer versioneServizio = idService.getVersione();
  1785.         String uri = this.idServizioFactory.getUriFromIDServizio(idService);
  1786.         if(servizio == null || tipoServizio == null)
  1787.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Parametri (Servizio) Non Validi");
  1788.         String tipoSogg = idService.getSoggettoErogatore().getTipo();
  1789.         String nomeSogg = idService.getSoggettoErogatore().getNome();
  1790.         if(tipoSogg == null || nomeSogg == null)
  1791.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Parametri (Soggetto) Non Validi");


  1792.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica servRichiesto = null;
  1793.         // get URL XML Servizio
  1794.         String idSoggettoXML = tipoSogg + nomeSogg;
  1795.         String idServizioXML = tipoServizio + servizio + versioneServizio;
  1796.         String urlXMLServizio = this.urlPrefix + idSoggettoXML + CostantiRegistroServizi.URL_SEPARATOR+CostantiXMLRepository.SERVIZI+
  1797.         CostantiRegistroServizi.URL_SEPARATOR + idServizioXML  + ".xml";

  1798.         ByteArrayInputStream bin = null;
  1799.         try{
  1800.             byte[] fileXML = null;
  1801.             try{
  1802.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLServizio);
  1803.             }catch(UtilsException e){
  1804.                 // Controllo pre-esistenza dell'accordo
  1805.                 if( "404".equals(e.getMessage()) ){
  1806.                     throw new DriverRegistroServiziNotFound("[getServizio] Il servizio ["+uri+"] non risulta gia' registrato nel registro");
  1807.                 } else
  1808.                     throw e;
  1809.             }

  1810.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1811.             try{
  1812.                 this.validatoreRegistro.valida(urlXMLServizio);  
  1813.             }catch (Exception e) {
  1814.                 throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  1815.             }

  1816.             // parsing
  1817.             bin = new ByteArrayInputStream(fileXML);
  1818.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1819.             org.openspcoop2.core.registry.RegistroServizi rs =
  1820.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1821.             if(rs.sizeSoggettoList()>0){
  1822.                 if(rs.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0){
  1823.                     servRichiesto = rs.getSoggetto(0).getAccordoServizioParteSpecifica(0);
  1824.                     servRichiesto.setNomeSoggettoErogatore(idService.getSoggettoErogatore().getNome());
  1825.                     servRichiesto.setTipoSoggettoErogatore(idService.getSoggettoErogatore().getTipo());
  1826.                 }
  1827.             }
  1828.             bin.close();
  1829.         }catch(DriverRegistroServiziNotFound e){
  1830.             throw e;
  1831.         }catch(DriverRegistroServiziException e){
  1832.             throw e;
  1833.         }catch(Exception e){
  1834.             try{
  1835.                 if(bin!=null)
  1836.                     bin.close();
  1837.             } catch(Exception eis) {
  1838.                 // close
  1839.             }
  1840.             if(e instanceof DriverRegistroServiziNotFound)
  1841.                 throw (DriverRegistroServiziNotFound)e;
  1842.             else
  1843.                 throw new DriverRegistroServiziException("[getServizio] Errore durante il parsing xml: "+e.getMessage(),e);
  1844.         }

  1845.         if(servRichiesto==null)
  1846.             throw new DriverRegistroServiziNotFound("[getServizio] Servizio non trovato.");

  1847.         return servRichiesto;
  1848.     }
  1849.    

  1850.     /**
  1851.      * Si occupa di ritornare l'oggetto {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1852.      * contenente le informazioni sulle funzionalita' associate
  1853.      * al servizio  correlato identificato grazie ai fields Soggetto
  1854.      * e nomeAccordo
  1855.      *
  1856.      * @param idSoggetto Identificatore del Soggetto di tipo {@link org.openspcoop2.core.id.IDSoggetto}.
  1857.      * @param idAccordo ID dell'accordo che deve implementare il servizio correlato
  1858.      * @return l'oggetto di tipo {@link org.openspcoop2.core.registry.AccordoServizioParteSpecifica}
  1859.      *
  1860.      */
  1861.     @Override
  1862.     public org.openspcoop2.core.registry.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica_ServizioCorrelato(IDSoggetto idSoggetto, IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{

  1863.         if(idSoggetto == null)
  1864.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Parametro Non Valido");
  1865.         String nomeSoggetto = idSoggetto.getNome();
  1866.         String tipoSoggetto = idSoggetto.getTipo();
  1867.         if(nomeSoggetto == null || tipoSoggetto == null)
  1868.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Parametri (Soggetto) Non Validi");
  1869.         if(idAccordo == null || idAccordo.getNome()==null)
  1870.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Parametri (Accordo) Non Valido");

  1871.         org.openspcoop2.core.registry.AccordoServizioParteSpecifica servRichiesto = null;

  1872.         // get URL XML Index
  1873.         String idSoggettoXML = tipoSoggetto + nomeSoggetto;
  1874.         String urlXMLIndexServizi = this.urlPrefix + idSoggettoXML + CostantiRegistroServizi.URL_SEPARATOR+CostantiXMLRepository.SERVIZI+
  1875.         CostantiRegistroServizi.URL_SEPARATOR + CostantiXMLRepository.INDEX_SERVIZI;

  1876.         String uriAccordo = this.idAccordoFactory.getUriFromIDAccordo(idAccordo);

  1877.         IDServizio [] lista = null;
  1878.         try{
  1879.             byte[] fileXML = null;
  1880.             try{
  1881.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLIndexServizi);
  1882.             }catch(UtilsException e){
  1883.                 // Controllo pre-esistenza dell'accordo
  1884.                 if( "404".equals(e.getMessage()) ){
  1885.                     throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Il soggetto ["+idSoggetto+"] non possiede un index dei servizi erogati");
  1886.                 } else
  1887.                     throw e;
  1888.             }
  1889.             lista = XMLLib.mappingIndexServizi(new String(fileXML));
  1890.             if(lista==null){
  1891.                 throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Il soggetto ["+idSoggetto+"] non possiede una lista di servizi erogati");
  1892.             }

  1893.         }catch(DriverRegistroServiziNotFound e){
  1894.             throw e;
  1895.         }catch(DriverRegistroServiziException e){
  1896.             throw e;
  1897.         }catch(Exception e){
  1898.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Errore durante la get Servizi List Index: "+e.getMessage(),e);
  1899.         }

  1900.         // leggo index file
  1901.         String urlXMLServizio = null;
  1902.         String tipoServizio = null;
  1903.         String nomeServizio = null;
  1904.         Integer versioneServizio = null;
  1905.         try{
  1906.             for(int i=0;i<lista.length;i++){
  1907.                 if(uriAccordo.equals(lista[i].getUriAccordoServizioParteComune()) &&
  1908.                         TipologiaServizio.CORRELATO.getValue().equals(lista[i].getTipologia().getValue()) &&
  1909.                         idSoggetto.getTipo().equals(lista[i].getSoggettoErogatore().getTipo()) &&
  1910.                         idSoggetto.getNome().equals(lista[i].getSoggettoErogatore().getNome())
  1911.                 ){
  1912.                     urlXMLServizio = this.urlPrefix + idSoggettoXML + CostantiRegistroServizi.URL_SEPARATOR+CostantiXMLRepository.SERVIZI+
  1913.                     CostantiRegistroServizi.URL_SEPARATOR + lista[i].getTipo()+lista[i].getNome()+lista[i].getVersione()+ ".xml";
  1914.                     tipoServizio = lista[i].getTipo();
  1915.                     nomeServizio = lista[i].getNome();
  1916.                     versioneServizio = lista[i].getVersione();
  1917.                     break;
  1918.                 }
  1919.             }
  1920.             if(urlXMLServizio==null){
  1921.                 throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Il soggetto ["+idSoggetto+"] non possiede un servizio correlato che implementa l'accordo con uri ["+uriAccordo+"]");
  1922.             }

  1923.         }catch(DriverRegistroServiziNotFound e){
  1924.             throw e;
  1925.         }catch(Exception e){
  1926.             throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Errore durante la ricerca: "+e.getMessage(),e);  
  1927.         }

  1928.         ByteArrayInputStream bin = null;
  1929.         try{
  1930.             byte[] fileXML = null;
  1931.             try{
  1932.                 fileXML = HttpUtilities.requestHTTPFile(urlXMLServizio);
  1933.             }catch(UtilsException e){
  1934.                 // Controllo pre-esistenza dell'accordo
  1935.                 if( "404".equals(e.getMessage()) ){
  1936.                     throw new DriverRegistroServiziNotFound("[getAccordoServizioParteSpecifica_ServizioCorrelato] Il servizio ["+tipoServizio+"/"+nomeServizio+":"+versioneServizio
  1937.                             +"] erogato dal soggetto ["+idSoggetto+"] non risulta gia' registrato nel registro");
  1938.                 } else
  1939.                     throw e;
  1940.             }

  1941.             /* --- Validazione XSD (ora che sono sicuro che non ho un 404) -- */
  1942.             try{
  1943.                 this.validatoreRegistro.valida(urlXMLServizio);  
  1944.             }catch (Exception e) {
  1945.                 throw new DriverRegistroServiziException("[getAccordoServizioParteSpecifica_ServizioCorrelato] Riscontrato errore durante la validazione XSD del Registro dei Servizi XML di OpenSPCoop: "+e.getMessage(),e);
  1946.             }

  1947.             // parsing
  1948.             bin = new ByteArrayInputStream(fileXML);
  1949.             org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
  1950.             org.openspcoop2.core.registry.RegistroServizi rs =
  1951.                 (org.openspcoop2.core.registry.RegistroServizi) deserializer.readRegistroServizi(bin);
  1952.             if(rs.sizeSoggettoList()>0){
  1953.                 if(rs.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0){
  1954.                     servRichiesto = rs.getSoggetto(0).getAccordoServizioParteSpecifica(0);
  1955.                     servRichiesto.setNomeSoggettoErogatore(idSoggetto.getNome());
  1956.                     servRichiesto.setTipoSoggettoErogatore(idSoggetto.getTipo());
  1957.                 }
  1958.             }
  1959.             bin.close();
  1960.         }catch(DriverRegistroServiziNotFound e){
  1961.             throw e;
  1962.         }catch(DriverRegistroServiziException e){
  1963.             throw e;
  1964.         }catch(Exception e){
  1965.             try{
  1966.                 if(bin!=null)
  1967.                     bin.close();
  1968.             } catch(Exception eis) {
  1969.                 // close
  1970.             }
  1971.             if(e instanceof DriverRegistroServiziNotFound)
  1972.                 throw (DriverRegistroServiziNotFound)e;
  1973.             else
  1974.                 throw new DriverRegistroServiziException("[getServizioCorrelatoByAccordo] Errore durante il parsing xml: "+e.getMessage(),e);
  1975.         }

  1976.         if(servRichiesto==null)
  1977.             throw new DriverRegistroServiziNotFound("[getServizioCorrelatoByAccordo] Servizio non trovato.");

  1978.         return servRichiesto;

  1979.     }

  1980.    
  1981.     @Override
  1982.     public List<IDServizio> getAllIdServizi(FiltroRicercaServizi filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1983.        
  1984.         List<IDServizio> list = new ArrayList<IDServizio>();
  1985.         _fillAllIdServiziEngine("getAllIdServizi", filtroRicerca, list);
  1986.         return list;
  1987.        
  1988.     }
  1989.    
  1990.     @Override
  1991.     public List<IDFruizione> getAllIdFruizioniServizio(
  1992.             FiltroRicercaFruizioniServizio filtroRicerca) throws DriverRegistroServiziException, DriverRegistroServiziNotFound{
  1993.    
  1994.         List<IDFruizione> list = new ArrayList<IDFruizione>();
  1995.         _fillAllIdServiziEngine("getAllIdFruizioniServizio", filtroRicerca, list);
  1996.         return list;
  1997.        
  1998.     }
  1999.    
  2000.     @SuppressWarnings("unchecked")
  2001.     public <T> void _fillAllIdServiziEngine(String nomeMetodo,
  2002.             FiltroRicercaServizi filtroRicerca,
  2003.             List<T> listReturn) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2004.        
  2005.    
  2006.         try{

  2007.             FiltroRicercaFruizioniServizio filtroFruizioni = null;
  2008.             if(filtroRicerca instanceof FiltroRicercaFruizioniServizio){
  2009.                 filtroFruizioni = (FiltroRicercaFruizioniServizio) filtroRicerca;
  2010.             }
  2011.            
  2012.             if(this.generatoreXML==null)
  2013.                 throw new DriverRegistroServiziException("["+nomeMetodo+"] Gestore repository XML non istanziato. Necessario per l'implementazione di questo metodo.");

  2014.             org.openspcoop2.core.registry.AccordoServizioParteSpecifica[] servList = this.generatoreXML.getAccordiServiziParteSpecifica();
  2015.             if(servList==null)
  2016.                 throw new DriverRegistroServiziNotFound("Servizi non esistenti nel repository WEB");

  2017.             // Esamina dei servizi
  2018.             for(int i=0; i<servList.length; i++){

  2019.                 String idSoggettoXML = servList[i].getTipoSoggettoErogatore() + servList[i].getNomeSoggettoErogatore();
  2020.                 String idServizioXML = servList[i].getTipo() + servList[i].getNome() + servList[i].getVersione();
  2021.                 String urlXMLServizio = this.urlPrefix + idSoggettoXML + CostantiRegistroServizi.URL_SEPARATOR+CostantiXMLRepository.SERVIZI+
  2022.                 CostantiRegistroServizi.URL_SEPARATOR + idServizioXML  + ".xml";


  2023.                 /* --- Validazione XSD -- */
  2024.                 try{
  2025.                     this.validatoreRegistro.valida(urlXMLServizio);  
  2026.                 }catch (Exception e) {
  2027.                     throw new DriverRegistroServiziException("["+nomeMetodo+"] Riscontrato errore durante la validazione XSD URL("+urlXMLServizio+"): "+e.getMessage(),e);
  2028.                 }

  2029.                 if(filtroRicerca!=null){
  2030.                     // Filtro By Tipo e Nome Soggetto Erogatore
  2031.                     if(filtroRicerca.getTipoSoggettoErogatore()!=null){
  2032.                         if(servList[i].getTipoSoggettoErogatore().equals(filtroRicerca.getTipoSoggettoErogatore()) == false){
  2033.                             continue;
  2034.                         }
  2035.                     }
  2036.                     if(filtroRicerca.getNomeSoggettoErogatore()!=null){
  2037.                         if(servList[i].getNomeSoggettoErogatore().equals(filtroRicerca.getNomeSoggettoErogatore()) == false){
  2038.                             continue;
  2039.                         }
  2040.                     }
  2041.                     // Filtro By Data
  2042.                     if(filtroRicerca.getMinDate()!=null){
  2043.                         if(servList[i].getOraRegistrazione()==null){
  2044.                             this.log.debug("["+nomeMetodo+"](FiltroByMinDate) Servizio["+this.idServizioFactory.getUriFromAccordo(servList[i])+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  2045.                             continue;
  2046.                         }else if(servList[i].getOraRegistrazione().before(filtroRicerca.getMinDate())){
  2047.                             continue;
  2048.                         }
  2049.                     }
  2050.                     if(filtroRicerca.getMaxDate()!=null){
  2051.                         if(servList[i].getOraRegistrazione()==null){
  2052.                             this.log.debug("["+nomeMetodo+"](FiltroByMaxDate) Servizio["+this.idServizioFactory.getUriFromAccordo(servList[i])+"] non valorizzato nell'ora-registrazione. Non inserito nella lista ritornata.");
  2053.                             continue;
  2054.                         }else if(servList[i].getOraRegistrazione().after(filtroRicerca.getMaxDate())){
  2055.                             continue;
  2056.                         }
  2057.                     }
  2058.                     // Filtro By Tipo, Nome e Versione
  2059.                     if(filtroRicerca.getTipo()!=null){
  2060.                         if(servList[i].getTipo().equals(filtroRicerca.getTipo()) == false){
  2061.                             continue;
  2062.                         }
  2063.                     }
  2064.                     if(filtroRicerca.getNome()!=null){
  2065.                         if(servList[i].getNome().equals(filtroRicerca.getNome()) == false){
  2066.                             continue;
  2067.                         }
  2068.                     }
  2069.                     if(filtroRicerca.getVersione()!=null){
  2070.                         if(servList[i].getVersione().intValue() != filtroRicerca.getVersione().intValue()){
  2071.                             continue;
  2072.                         }
  2073.                     }
  2074.                     if(filtroRicerca.getPortType()!=null){
  2075.                         if(servList[i].getPortType().equals(filtroRicerca.getPortType()) == false){
  2076.                             continue;
  2077.                         }
  2078.                     }
  2079.                     // Filtro by Accordo
  2080.                     if(filtroRicerca.getIdAccordoServizioParteComune()!=null){
  2081.                         String uriAccordo = this.idAccordoFactory.getUriFromIDAccordo(filtroRicerca.getIdAccordoServizioParteComune());
  2082.                         if(servList[i].getAccordoServizioParteComune().equals(uriAccordo) == false){
  2083.                             continue;
  2084.                         }
  2085.                     }
  2086.                     // ProtocolProperties
  2087.                     if(ProtocolPropertiesUtilities.isMatch(servList[i], filtroRicerca.getProtocolProperties())==false){
  2088.                         continue;
  2089.                     }
  2090.                     // Filtro By Tipo e/o Nome Soggetto Fruitore
  2091.                     if(filtroRicerca.getTipoSoggettoFruitore()!=null || filtroRicerca.getNomeSoggettoFruitore()!=null){
  2092.                         if(servList[i].sizeFruitoreList()<=0){
  2093.                             continue;
  2094.                         }
  2095.                         boolean found = false;
  2096.                         for (int k = 0; k < servList[i].sizeFruitoreList(); k++) {
  2097.                             Fruitore fruitore = servList[i].getFruitore(k);
  2098.                             if(filtroRicerca.getTipoSoggettoFruitore()!=null){
  2099.                                 if(fruitore.getTipo().equals(filtroRicerca.getTipoSoggettoFruitore()) == false){
  2100.                                     continue;
  2101.                                 }
  2102.                             }
  2103.                             if(filtroRicerca.getNomeSoggettoFruitore()!=null){
  2104.                                 if(fruitore.getNome().equals(filtroRicerca.getNomeSoggettoFruitore()) == false){
  2105.                                     continue;
  2106.                                 }
  2107.                             }
  2108.                             found = true;
  2109.                             break;
  2110.                         }
  2111.                         if(!found){
  2112.                             continue;
  2113.                         }
  2114.                     }
  2115.                 }
  2116.                
  2117.                 IDServizio idServ = this.idServizioFactory.getIDServizioFromAccordo(servList[i]);
  2118.                
  2119.                 if(filtroFruizioni!=null){
  2120.                    
  2121.                     for (Fruitore fruitore : servList[i].getFruitoreList()) {
  2122.                        
  2123.                         // Tipo
  2124.                         if(filtroFruizioni.getTipoSoggettoFruitore()!=null){
  2125.                             if(fruitore.getTipo().equals(filtroFruizioni.getTipoSoggettoFruitore()) == false){
  2126.                                 continue;
  2127.                             }
  2128.                         }
  2129.                         // Nome
  2130.                         if(filtroFruizioni.getNomeSoggettoFruitore()!=null){
  2131.                             if(fruitore.getNome().equals(filtroFruizioni.getNomeSoggettoFruitore()) == false){
  2132.                                 continue;
  2133.                             }
  2134.                         }
  2135.                         // ProtocolProperties
  2136.                         if(ProtocolPropertiesUtilities.isMatch(fruitore, filtroFruizioni.getProtocolPropertiesFruizione())==false){
  2137.                             continue;
  2138.                         }
  2139.                        
  2140.                         IDFruizione idFruizione = new IDFruizione();
  2141.                         idFruizione.setIdServizio(idServ);
  2142.                         idFruizione.setIdFruitore(new IDSoggetto(fruitore.getTipo(), fruitore.getNome()));
  2143.                         listReturn.add((T)idFruizione);
  2144.                     }
  2145.                    
  2146.                 }
  2147.                 else{
  2148.                     listReturn.add((T)idServ);
  2149.                 }
  2150.             }
  2151.             if(listReturn.size()<=0){
  2152.                 String msgFiltro = "Elementi non trovati che rispettano il filtro di ricerca selezionato: ";
  2153.                 if(filtroFruizioni!=null){
  2154.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroFruizioni.toString());
  2155.                 }
  2156.                 else if(filtroRicerca!=null){
  2157.                     throw new DriverRegistroServiziNotFound(msgFiltro+filtroRicerca.toString());
  2158.                 }
  2159.                 else
  2160.                     throw new DriverRegistroServiziNotFound("Elementi non trovati");
  2161.             }

  2162.         }catch(Exception e){
  2163.             if(e instanceof DriverRegistroServiziNotFound)
  2164.                 throw (DriverRegistroServiziNotFound)e;
  2165.             else
  2166.                 throw new DriverRegistroServiziException("["+nomeMetodo+"] error",e);
  2167.         }
  2168.     }

  2169.    
  2170.     @Override
  2171.     public Documento getAllegato(IDServizio idASPS, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2172.         throw new DriverRegistroServiziException("Not Implemented");
  2173.     }
  2174.     @Override
  2175.     public Documento getSpecificaSemiformale(IDServizio idASPS, TipiDocumentoSemiformale tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2176.         throw new DriverRegistroServiziException("Not Implemented");
  2177.     }
  2178.     @Override
  2179.     public Documento getSpecificaSicurezza(IDServizio idASPS, TipiDocumentoSicurezza tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2180.         throw new DriverRegistroServiziException("Not Implemented");
  2181.     }
  2182.     @Override
  2183.     public Documento getSpecificaLivelloServizio(IDServizio idASPS, TipiDocumentoLivelloServizio tipo, String nome)throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
  2184.         throw new DriverRegistroServiziException("Not Implemented");
  2185.     }
















  2186.     /* ********  INTERFACCIA IDriverRegistroServiziCRUD ******** */
  2187.    
  2188.     /**
  2189.      * Crea un nuovo AccordoCooperazione
  2190.      *
  2191.      * @param accordoCooperazione
  2192.      * @throws DriverRegistroServiziException
  2193.      */
  2194.     @Override
  2195.     public void createAccordoCooperazione(AccordoCooperazione accordoCooperazione) throws DriverRegistroServiziException{
  2196.        
  2197.         if( accordoCooperazione == null)
  2198.             throw new DriverRegistroServiziException("[createAccordoCooperazione] Parametro Non Valido");

  2199.         IDAccordoCooperazione idAccordo = null;
  2200.         try {

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

  2202.             // Controllo elementi obbligatori
  2203.             if( accordoCooperazione.getNome() == null  ){
  2204.                 throw new DriverRegistroServiziException("Accordo Cooperazione non completamente definito nei parametri obbligatori");
  2205.             }

  2206.             // Controllo pre-esistenza dell'accordo
  2207.             if( this.generatoreXML.existsAccordoCooperazione(idAccordo) == true){
  2208.                 throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordo.toString()
  2209.                         +"] risulta gia' inserito nel registro dei servizi.");
  2210.             }

  2211.             // Generazione XML
  2212.             this.generatoreXML.createAccordoCooperazione(idAccordo,accordoCooperazione);

  2213.         }catch (Exception e) {
  2214.             throw new DriverRegistroServiziException("[createAccordoCooperazione] Errore generatosi durante la creazione di un nuovo accordo di cooperazione ["+idAccordo+"]: "+e.getMessage(),e);
  2215.         }
  2216.     }
  2217.    
  2218.     /**
  2219.      * Verifica l'esistenza di un accordo registrato.
  2220.      *
  2221.      * @param idAccordo dell'accordo da verificare
  2222.      * @return true se l'accordo esiste, false altrimenti
  2223.      * @throws DriverRegistroServiziException
  2224.      */    
  2225.     @Override
  2226.     public boolean existsAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException{
  2227.         if( idAccordo == null)
  2228.             return false;
  2229.         if( idAccordo.getNome() == null)
  2230.             return false;

  2231.         try{
  2232.             return this.generatoreXML.existsAccordoCooperazione(idAccordo);
  2233.         }catch(Exception e){
  2234.             this.log.error("[existsAccordoCooperazione] Accordo non trovato: "+e.getMessage());
  2235.             return false;
  2236.         }
  2237.     }
  2238.    
  2239.     /**
  2240.      * Aggiorna l'AccordoCooperazione con i nuovi valori.
  2241.      *  
  2242.      * @param accordoCooperazione
  2243.      * @throws DriverRegistroServiziException
  2244.      */
  2245.     @Override
  2246.     public void updateAccordoCooperazione(AccordoCooperazione accordoCooperazione) throws DriverRegistroServiziException{
  2247.         if( accordoCooperazione == null)
  2248.             throw new DriverRegistroServiziException("[updateAccordoCooperazione] Parametro Non Valido");

  2249.         IDAccordoCooperazione idAccordoOLD = null;
  2250.         if(accordoCooperazione.getOldIDAccordoForUpdate()!=null){
  2251.             idAccordoOLD = accordoCooperazione.getOldIDAccordoForUpdate();
  2252.         }else{
  2253.             idAccordoOLD = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);
  2254.         }

  2255.         try {

  2256.             // Controllo  dell'accordo da Modificare
  2257.             if(idAccordoOLD==null){
  2258.                 throw new DriverRegistroServiziException("Accordo Cooperazione da modificare non definito");
  2259.             }

  2260.             // Controllo elementi obbligatori dell'accordo modificato
  2261.             if( accordoCooperazione.getNome() == null ){
  2262.                 throw new DriverRegistroServiziException("Accordo Cooperazione modificato non completamente definito nei parametri obbligatori");
  2263.             }

  2264.             // Controllo pre-esistenza dell'accordo da modificare
  2265.             if( this.generatoreXML.existsAccordoCooperazione(idAccordoOLD) == false){
  2266.                 throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordoOLD
  2267.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2268.             }

  2269.             // Controllo non esistenza della nuova identita dell'accordo (se da modificare)
  2270.             IDAccordoCooperazione idAccordoNEW = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);
  2271.             if(idAccordoOLD.equals(idAccordoNEW) == false){
  2272.                 if( this.generatoreXML.existsAccordoCooperazione(idAccordoNEW) == true){
  2273.                     throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordoNEW
  2274.                             +"] risulta gia' inserito nel registro dei servizi.");
  2275.                 }
  2276.             }

  2277.             // Ri-Generazione XML
  2278.             this.generatoreXML.createAccordoCooperazione(idAccordoOLD,accordoCooperazione);

  2279.         }catch (Exception e) {
  2280.             throw new DriverRegistroServiziException("[updateAccordoCooperazione] Errore generatosi durante la modifica dell'accordo di cooperazione ["+idAccordoOLD+"]: "+e,e);
  2281.         }
  2282.     }
  2283.    
  2284.     /**
  2285.      * Elimina un AccordoCooperazione
  2286.      *  
  2287.      * @param accordoCooperazione
  2288.      * @throws DriverRegistroServiziException
  2289.      */
  2290.     @Override
  2291.     public void deleteAccordoCooperazione(AccordoCooperazione accordoCooperazione) throws DriverRegistroServiziException{
  2292.         if( accordoCooperazione == null)
  2293.             throw new DriverRegistroServiziException("[deleteAccordoCooperazione] Parametro Non Valido");

  2294.         IDAccordoCooperazione idAccordo = null;
  2295.         try {
  2296.             idAccordo = this.idAccordoCooperazioneFactory.getIDAccordoFromAccordo(accordoCooperazione);

  2297.             // Controllo id dell'accordo da eliminare
  2298.             if(accordoCooperazione.getNome()==null){
  2299.                 throw new DriverRegistroServiziException("Accordo Cooperazione da eliminare non definito");
  2300.             }

  2301.             // Controllo pre-esistenza dell'accordo da eliminare
  2302.             if( this.generatoreXML.existsAccordoCooperazione(idAccordo) == false){
  2303.                 throw new DriverRegistroServiziException("L'accordo di cooperazione ["+idAccordo
  2304.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2305.             }

  2306.             // Delete from Repository
  2307.             this.generatoreXML.deleteAccordoCooperazione(idAccordo);

  2308.         }catch (Exception e) {
  2309.             throw new DriverRegistroServiziException("[deleteAccordoCooperazione] Errore generatosi durante l'eliminazione dell'accordo di cooperazione ["+idAccordo+"]: "+e.getMessage(),e);
  2310.         }
  2311.     }
  2312.    
  2313.    
  2314.     /**
  2315.      * Crea un nuovo AccordoServizio
  2316.      *
  2317.      * @param accordoServizio
  2318.      * @throws DriverRegistroServiziException
  2319.      */
  2320.     @Override
  2321.     public void createAccordoServizioParteComune(AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException{
  2322.         if( accordoServizio == null)
  2323.             throw new DriverRegistroServiziException("[createAccordoServizioParteComune] Parametro Non Valido");

  2324.         IDAccordo idAccordo = null;
  2325.         try {

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

  2327.             // Controllo elementi obbligatori
  2328.             if( (accordoServizio.getNome() == null) ||
  2329.                     (accordoServizio.getProfiloCollaborazione() == null) ){
  2330.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune non completamente definito nei parametri obbligatori");
  2331.             }

  2332.             // Controllo pre-esistenza dell'accordo
  2333.             if( this.generatoreXML.existsAccordoServizioParteComune(idAccordo) == true){
  2334.                 throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordo.toString()
  2335.                         +"] risulta gia' inserito nel registro dei servizi.");
  2336.             }

  2337.             // Generazione XML
  2338.             this.generatoreXML.createAccordoServizioParteComune(idAccordo,accordoServizio);

  2339.         }catch (Exception e) {
  2340.             throw new DriverRegistroServiziException("[createAccordoServizioParteComune] Errore generatosi durante la creazione di un nuovo accordo di servizio ["+idAccordo+"]: "+e.getMessage(),e);
  2341.         }
  2342.     }

  2343.     /**
  2344.      * Verifica l'esistenza di un accordo registrato.
  2345.      *
  2346.      * @param idAccordo dell'accordo da verificare
  2347.      * @return true se l'accordo esiste, false altrimenti
  2348.      * @throws DriverRegistroServiziException
  2349.      */    
  2350.     @Override
  2351.     public boolean existsAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException{
  2352.         if( idAccordo == null)
  2353.             return false;
  2354.         if( idAccordo.getNome() == null)
  2355.             return false;

  2356.         try{
  2357.             return this.generatoreXML.existsAccordoServizioParteComune(idAccordo);
  2358.         }catch(Exception e){
  2359.             this.log.error("[existsAccordoServizioParteComune] Accordo non trovato: "+e.getMessage());
  2360.             return false;
  2361.         }
  2362.     }

  2363.     /**
  2364.      * Aggiorna l'AccordoServizio con i nuovi valori.
  2365.      *  
  2366.      * @param accordoServizio
  2367.      * @throws DriverRegistroServiziException
  2368.      */
  2369.     @Override
  2370.     public void updateAccordoServizioParteComune(AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException{
  2371.         if( accordoServizio == null)
  2372.             throw new DriverRegistroServiziException("[updateAccordoServizioParteComune] Parametro Non Valido");

  2373.         IDAccordo idAccordoOLD = null;
  2374.         if(accordoServizio.getOldIDAccordoForUpdate()!=null){
  2375.             idAccordoOLD = accordoServizio.getOldIDAccordoForUpdate();
  2376.         }else{
  2377.             idAccordoOLD = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  2378.         }

  2379.         try {

  2380.             // Controllo  dell'accordo da Modificare
  2381.             if(idAccordoOLD==null){
  2382.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune da modificare non definito");
  2383.             }

  2384.             // Controllo elementi obbligatori dell'accordo modificato
  2385.             if( (accordoServizio.getNome() == null) ||
  2386.                     (accordoServizio.getProfiloCollaborazione() == null) ){
  2387.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune modificato non completamente definito nei parametri obbligatori");
  2388.             }

  2389.             // Controllo pre-esistenza dell'accordo da modificare
  2390.             if( this.generatoreXML.existsAccordoServizioParteComune(idAccordoOLD) == false){
  2391.                 throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordoOLD
  2392.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2393.             }

  2394.             // Controllo non esistenza della nuova identita dell'accordo (se da modificare)
  2395.             IDAccordo idAccordoNEW = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  2396.             if(idAccordoOLD.equals(idAccordoNEW) == false){
  2397.                 if( this.generatoreXML.existsAccordoServizioParteComune(idAccordoNEW) == true){
  2398.                     throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordoNEW
  2399.                             +"] risulta gia' inserito nel registro dei servizi.");
  2400.                 }
  2401.             }

  2402.             // Ri-Generazione XML
  2403.             this.generatoreXML.createAccordoServizioParteComune(idAccordoOLD,accordoServizio);

  2404.         }catch (Exception e) {
  2405.             throw new DriverRegistroServiziException("[updateAccordoServizioParteComune] Errore generatosi durante la modifica dell'accordo di servizio ["+idAccordoOLD+"]: "+e,e);
  2406.         }
  2407.     }

  2408.     /**
  2409.      * Elimina un AccordoServizio
  2410.      *  
  2411.      * @param accordoServizio
  2412.      * @throws DriverRegistroServiziException
  2413.      */
  2414.     @Override
  2415.     public void deleteAccordoServizioParteComune(AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException{
  2416.         if( accordoServizio == null)
  2417.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteComune] Parametro Non Valido");

  2418.         IDAccordo idAccordo = null;
  2419.         try {
  2420.             idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);

  2421.             // Controllo id dell'accordo da eliminare
  2422.             if(accordoServizio.getNome()==null){
  2423.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Comune da eliminare non definito");
  2424.             }

  2425.             // Controllo pre-esistenza dell'accordo da eliminare
  2426.             if( this.generatoreXML.existsAccordoServizioParteComune(idAccordo) == false){
  2427.                 throw new DriverRegistroServiziException("L'accordo di servizio ["+idAccordo
  2428.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2429.             }

  2430.             // Delete from Repository
  2431.             this.generatoreXML.deleteAccordoServizioParteComune(idAccordo);

  2432.         }catch (Exception e) {
  2433.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteComune] Errore generatosi durante l'eliminazione dell'accordo di servizio ["+idAccordo+"]: "+e.getMessage(),e);
  2434.         }
  2435.     }





  2436.     /**
  2437.      * Crea una nuova Porta di Dominio
  2438.      *
  2439.      * @param pdd
  2440.      * @throws DriverRegistroServiziException
  2441.      */
  2442.     @Override
  2443.     public void createPortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  2444.         if( pdd == null)
  2445.             throw new DriverRegistroServiziException("[createPortaDominio] Parametro Non Valido");

  2446.         try {

  2447.             // Controllo elementi obbligatori
  2448.             if( (pdd.getNome() == null) ){
  2449.                 throw new DriverRegistroServiziException("Porta di dominio non completamente definita nei parametri obbligatori");
  2450.             }

  2451.             // Controllo pre-esistenza della pdd
  2452.             if( this.generatoreXML.existsPortaDominio(pdd.getNome()) == true){
  2453.                 throw new DriverRegistroServiziException("La porta di dominio ["+pdd.getNome()
  2454.                         +"] risulta gia' inserita nel registro dei servizi.");
  2455.             }

  2456.             // Generazione XML
  2457.             this.generatoreXML.createPortaDominio(pdd.getNome(),pdd);

  2458.         }catch (Exception e) {
  2459.             throw new DriverRegistroServiziException("[createPortaDominio] Errore generatosi durante la creazione di una nuova porta di dominio ["+pdd.getNome()+"]: "+e.getMessage(),e);
  2460.         }
  2461.     }

  2462.     /**
  2463.      * Verifica l'esistenza di una Porta di Dominio.
  2464.      *
  2465.      * @param nome della porta di dominio da verificare
  2466.      * @return true se la porta di dominio esiste, false altrimenti
  2467.      * @throws DriverRegistroServiziException
  2468.      */    
  2469.     @Override
  2470.     public boolean existsPortaDominio(String nome) throws DriverRegistroServiziException{
  2471.         if( nome == null)
  2472.             return false;

  2473.         try{
  2474.             return this.generatoreXML.existsPortaDominio(nome);
  2475.         }catch(Exception e){
  2476.             this.log.error("[existsPortaDominio] Porta di dominio non trovata: "+e.getMessage());
  2477.             return false;
  2478.         }
  2479.     }

  2480.     /**
  2481.      * Aggiorna la Porta di Dominio con i nuovi valori.
  2482.      *  
  2483.      * @param pdd
  2484.      * @throws DriverRegistroServiziException
  2485.      */
  2486.     @Override
  2487.     public void updatePortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  2488.         if( pdd == null)
  2489.             throw new DriverRegistroServiziException("[updatePortaDominio] Parametro Non Valido");

  2490.         String pddOLD = null;
  2491.         //pddOLD = pdd.getOldNomeForUpdate();
  2492.         //if(pddOLD==null)
  2493.         pddOLD = pdd.getNome();

  2494.         try {

  2495.             // Controllo  dell'accordo da Modificare
  2496.             if(pddOLD==null){
  2497.                 throw new DriverRegistroServiziException("Porta di dominio da modificare non definita");
  2498.             }

  2499.             // Controllo elementi obbligatori dell'accordo modificato
  2500.             if( (pdd.getNome() == null) ){
  2501.                 throw new DriverRegistroServiziException("Porta di dominio modificata non completamente definita nei parametri obbligatori");
  2502.             }

  2503.             // Controllo pre-esistenza della pdd da modificare
  2504.             if( this.generatoreXML.existsPortaDominio(pddOLD) == false){
  2505.                 throw new DriverRegistroServiziException("La porta di dominio ["+pddOLD
  2506.                         +"] non risulta gia' inserita nel registro dei servizi.");
  2507.             }

  2508.             // Controllo non esistenza della nuova identita della pdd (se da modificare)
  2509.             String pddNEW = pdd.getNome();
  2510.             if(pddOLD.equals(pddNEW) == false){
  2511.                 if( this.generatoreXML.existsPortaDominio(pddNEW) == true){
  2512.                     throw new DriverRegistroServiziException("La porta di dominio ["+pddNEW
  2513.                             +"] risulta gia' inserita nel registro dei servizi.");
  2514.                 }
  2515.             }

  2516.             // Ri-Generazione XML
  2517.             this.generatoreXML.createPortaDominio(pddOLD,pdd);

  2518.         }catch (Exception e) {
  2519.             throw new DriverRegistroServiziException("[updatePortaDominio] Errore generatosi durante la modifica della porta di dominio ["+pddOLD+"]: "+e,e);
  2520.         }
  2521.     }

  2522.     /**
  2523.      * Elimina una Porta di Dominio
  2524.      *  
  2525.      * @param pdd
  2526.      * @throws DriverRegistroServiziException
  2527.      */
  2528.     @Override
  2529.     public void deletePortaDominio(PortaDominio pdd) throws DriverRegistroServiziException{
  2530.         if( pdd == null)
  2531.             throw new DriverRegistroServiziException("[deletePortaDominio] Parametro Non Valido");

  2532.         try {
  2533.             // Controllo id dell'accordo da eliminare
  2534.             if(pdd.getNome()==null){
  2535.                 throw new DriverRegistroServiziException("Porta di dominio da eliminare non definita");
  2536.             }

  2537.             // Controllo pre-esistenza della porta di dominio da eliminare
  2538.             if( this.generatoreXML.existsPortaDominio(pdd.getNome()) == false){
  2539.                 throw new DriverRegistroServiziException("La porta di dominio ["+pdd.getNome()
  2540.                         +"] non risulta gia' inserita nel registro dei servizi.");
  2541.             }

  2542.             // Delete from Repository
  2543.             this.generatoreXML.deletePortaDominio(pdd.getNome());

  2544.         }catch (Exception e) {
  2545.             throw new DriverRegistroServiziException("[deletePortaDominio] Errore generatosi durante l'eliminazione della porta di dominio ["+pdd.getNome()+"]: "+e.getMessage(),e);
  2546.         }
  2547.     }





  2548.    
  2549.    
  2550.    
  2551.    
  2552.    
  2553.    
  2554.    
  2555.     /**
  2556.      * Crea un nuovo Gruppo
  2557.      *
  2558.      * @param gruppo
  2559.      * @throws DriverRegistroServiziException
  2560.      */
  2561.     @Override
  2562.     public void createGruppo(Gruppo gruppo) throws DriverRegistroServiziException{
  2563.         if( gruppo == null)
  2564.             throw new DriverRegistroServiziException("[createGruppo] Parametro Non Valido");

  2565.         try {

  2566.             // Controllo elementi obbligatori
  2567.             if( (gruppo.getNome() == null) ){
  2568.                 throw new DriverRegistroServiziException("Gruppo non completamente definita nei parametri obbligatori");
  2569.             }

  2570.             // Controllo pre-esistenza del gruppo
  2571.             if( this.generatoreXML.existsGruppo(gruppo.getNome()) == true){
  2572.                 throw new DriverRegistroServiziException("Il Gruppo ["+gruppo.getNome()
  2573.                         +"] risulta gia' inserita nel registro dei servizi.");
  2574.             }

  2575.             // Generazione XML
  2576.             this.generatoreXML.createGruppo(gruppo.getNome(),gruppo);

  2577.         }catch (Exception e) {
  2578.             throw new DriverRegistroServiziException("[createGruppo] Errore generatosi durante la creazione di un nuovo gruppo ["+gruppo.getNome()+"]: "+e.getMessage(),e);
  2579.         }
  2580.     }
  2581.    
  2582.     /**
  2583.      * Verifica l'esistenza di un Gruppo
  2584.      *
  2585.      * @param idGruppo idGruppo del gruppo da verificare
  2586.      * @return true se il gruppo esiste, false altrimenti
  2587.      * @throws DriverRegistroServiziException
  2588.      */    
  2589.     @Override
  2590.     public boolean existsGruppo(IDGruppo idGruppo) throws DriverRegistroServiziException{
  2591.         if( idGruppo == null || idGruppo.getNome()==null)
  2592.             return false;

  2593.         try{
  2594.             return this.generatoreXML.existsGruppo(idGruppo.getNome());
  2595.         }catch(Exception e){
  2596.             this.log.error("[existsGruppo] Gruppo non trovato: "+e.getMessage());
  2597.             return false;
  2598.         }
  2599.     }
  2600.    
  2601.     /**
  2602.      * Aggiorna il Gruppo con i nuovi valori.
  2603.      *  
  2604.      * @param gruppo
  2605.      * @throws DriverRegistroServiziException
  2606.      */
  2607.     @Override
  2608.     public void updateGruppo(Gruppo gruppo) throws DriverRegistroServiziException{
  2609.         if( gruppo == null)
  2610.             throw new DriverRegistroServiziException("[updateGruppo] Parametro Non Valido");

  2611.         IDGruppo idGruppoOLD = null;
  2612.         //idGruppoOLD = gruppo.getOldIDGruppoForUpdate();
  2613.         //if(idGruppoOLD==null)
  2614.         idGruppoOLD = new IDGruppo(gruppo.getNome());

  2615.         try {

  2616.             // Controllo  dell'accordo da Modificare
  2617.             if(idGruppoOLD==null || idGruppoOLD.getNome()==null){
  2618.                 throw new DriverRegistroServiziException("Gruppo da modificare non definito");
  2619.             }

  2620.             // Controllo elementi obbligatori del gruppo modificato
  2621.             if( (gruppo.getNome() == null) ){
  2622.                 throw new DriverRegistroServiziException("Gruppo modificato non completamente definito nei parametri obbligatori");
  2623.             }

  2624.             // Controllo pre-esistenza del gruppo da modificare
  2625.             if( this.generatoreXML.existsGruppo(idGruppoOLD.getNome()) == false){
  2626.                 throw new DriverRegistroServiziException("Il Gruppo ["+idGruppoOLD
  2627.                         +"] non risulta gia' inserita nel registro dei servizi.");
  2628.             }

  2629.             // Controllo non esistenza della nuova identita del gruppo (se da modificare)
  2630.             IDGruppo idGruppoNEW = new IDGruppo(gruppo.getNome());
  2631.             if(idGruppoOLD.equals(idGruppoNEW) == false){
  2632.                 if( this.generatoreXML.existsGruppo(idGruppoNEW.getNome()) == true){
  2633.                     throw new DriverRegistroServiziException("Il Gruppo ["+idGruppoNEW
  2634.                             +"] risulta gia' inserita nel registro dei servizi.");
  2635.                 }
  2636.             }

  2637.             // Ri-Generazione XML
  2638.             this.generatoreXML.createGruppo(idGruppoOLD.getNome(),gruppo);

  2639.         }catch (Exception e) {
  2640.             throw new DriverRegistroServiziException("[updateGruppo] Errore generatosi durante la modifica della porta di dominio ["+idGruppoOLD+"]: "+e,e);
  2641.         }
  2642.     }
  2643.    
  2644.     /**
  2645.      * Elimina un Gruppo
  2646.      *  
  2647.      * @param gruppo
  2648.      * @throws DriverRegistroServiziException
  2649.      */
  2650.     @Override
  2651.     public void deleteGruppo(Gruppo gruppo) throws DriverRegistroServiziException{
  2652.         if( gruppo == null)
  2653.             throw new DriverRegistroServiziException("[deleteGruppo] Parametro Non Valido");

  2654.         try {
  2655.             // Controllo id del gruppo da eliminare
  2656.             if(gruppo.getNome()==null){
  2657.                 throw new DriverRegistroServiziException("Gruppo da eliminare non definito");
  2658.             }

  2659.             // Controllo pre-esistenza del gruppo da eliminare
  2660.             if( this.generatoreXML.existsGruppo(gruppo.getNome()) == false){
  2661.                 throw new DriverRegistroServiziException("Il Gruppo ["+gruppo.getNome()
  2662.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2663.             }

  2664.             // Delete from Repository
  2665.             this.generatoreXML.deleteGruppo(gruppo.getNome());

  2666.         }catch (Exception e) {
  2667.             throw new DriverRegistroServiziException("[deleteGruppo] Errore generatosi durante l'eliminazione del gruppo ["+gruppo.getNome()+"]: "+e.getMessage(),e);
  2668.         }
  2669.     }
  2670.    
  2671.    
  2672.    
  2673.    
  2674.    
  2675.    

  2676.    
  2677.    
  2678.    
  2679.    
  2680.     /**
  2681.      * Crea un nuovo Ruolo
  2682.      *
  2683.      * @param ruolo
  2684.      * @throws DriverRegistroServiziException
  2685.      */
  2686.     @Override
  2687.     public void createRuolo(Ruolo ruolo) throws DriverRegistroServiziException{
  2688.         if( ruolo == null)
  2689.             throw new DriverRegistroServiziException("[createRuolo] Parametro Non Valido");

  2690.         try {

  2691.             // Controllo elementi obbligatori
  2692.             if( (ruolo.getNome() == null) ){
  2693.                 throw new DriverRegistroServiziException("Ruolo non completamente definita nei parametri obbligatori");
  2694.             }

  2695.             // Controllo pre-esistenza del ruolo
  2696.             if( this.generatoreXML.existsRuolo(ruolo.getNome()) == true){
  2697.                 throw new DriverRegistroServiziException("Il Ruolo ["+ruolo.getNome()
  2698.                         +"] risulta gia' inserita nel registro dei servizi.");
  2699.             }

  2700.             // Generazione XML
  2701.             this.generatoreXML.createRuolo(ruolo.getNome(),ruolo);

  2702.         }catch (Exception e) {
  2703.             throw new DriverRegistroServiziException("[createRuolo] Errore generatosi durante la creazione di un nuovo ruolo ["+ruolo.getNome()+"]: "+e.getMessage(),e);
  2704.         }
  2705.     }
  2706.    
  2707.     /**
  2708.      * Verifica l'esistenza di un Ruolo
  2709.      *
  2710.      * @param idRuolo idRuolo del ruolo da verificare
  2711.      * @return true se il ruolo esiste, false altrimenti
  2712.      * @throws DriverRegistroServiziException
  2713.      */    
  2714.     @Override
  2715.     public boolean existsRuolo(IDRuolo idRuolo) throws DriverRegistroServiziException{
  2716.         if( idRuolo == null || idRuolo.getNome()==null)
  2717.             return false;

  2718.         try{
  2719.             return this.generatoreXML.existsRuolo(idRuolo.getNome());
  2720.         }catch(Exception e){
  2721.             this.log.error("[existsRuolo] Ruolo non trovato: "+e.getMessage());
  2722.             return false;
  2723.         }
  2724.     }
  2725.    
  2726.     /**
  2727.      * Aggiorna il Ruolo con i nuovi valori.
  2728.      *  
  2729.      * @param ruolo
  2730.      * @throws DriverRegistroServiziException
  2731.      */
  2732.     @Override
  2733.     public void updateRuolo(Ruolo ruolo) throws DriverRegistroServiziException{
  2734.         if( ruolo == null)
  2735.             throw new DriverRegistroServiziException("[updateRuolo] Parametro Non Valido");

  2736.         IDRuolo idRuoloOLD = null;
  2737.         //idRuoloOLD = ruolo.getOldIDRuoloForUpdate();
  2738.         //if(idRuoloOLD==null)
  2739.         idRuoloOLD = new IDRuolo(ruolo.getNome());

  2740.         try {

  2741.             // Controllo  dell'accordo da Modificare
  2742.             if(idRuoloOLD==null || idRuoloOLD.getNome()==null){
  2743.                 throw new DriverRegistroServiziException("Ruolo da modificare non definito");
  2744.             }

  2745.             // Controllo elementi obbligatori del ruolo modificato
  2746.             if( (ruolo.getNome() == null) ){
  2747.                 throw new DriverRegistroServiziException("Ruolo modificato non completamente definito nei parametri obbligatori");
  2748.             }

  2749.             // Controllo pre-esistenza del ruolo da modificare
  2750.             if( this.generatoreXML.existsRuolo(idRuoloOLD.getNome()) == false){
  2751.                 throw new DriverRegistroServiziException("Il Ruolo ["+idRuoloOLD
  2752.                         +"] non risulta gia' inserita nel registro dei servizi.");
  2753.             }

  2754.             // Controllo non esistenza della nuova identita del ruolo (se da modificare)
  2755.             IDRuolo idRuoloNEW = new IDRuolo(ruolo.getNome());
  2756.             if(idRuoloOLD.equals(idRuoloNEW) == false){
  2757.                 if( this.generatoreXML.existsRuolo(idRuoloNEW.getNome()) == true){
  2758.                     throw new DriverRegistroServiziException("Il Ruolo ["+idRuoloNEW
  2759.                             +"] risulta gia' inserita nel registro dei servizi.");
  2760.                 }
  2761.             }

  2762.             // Ri-Generazione XML
  2763.             this.generatoreXML.createRuolo(idRuoloOLD.getNome(),ruolo);

  2764.         }catch (Exception e) {
  2765.             throw new DriverRegistroServiziException("[updateRuolo] Errore generatosi durante la modifica della porta di dominio ["+idRuoloOLD+"]: "+e,e);
  2766.         }
  2767.     }
  2768.    
  2769.     /**
  2770.      * Elimina un Ruolo
  2771.      *  
  2772.      * @param ruolo
  2773.      * @throws DriverRegistroServiziException
  2774.      */
  2775.     @Override
  2776.     public void deleteRuolo(Ruolo ruolo) throws DriverRegistroServiziException{
  2777.         if( ruolo == null)
  2778.             throw new DriverRegistroServiziException("[deleteRuolo] Parametro Non Valido");

  2779.         try {
  2780.             // Controllo id del ruolo da eliminare
  2781.             if(ruolo.getNome()==null){
  2782.                 throw new DriverRegistroServiziException("Ruolo da eliminare non definito");
  2783.             }

  2784.             // Controllo pre-esistenza del ruolo da eliminare
  2785.             if( this.generatoreXML.existsRuolo(ruolo.getNome()) == false){
  2786.                 throw new DriverRegistroServiziException("Il Ruolo ["+ruolo.getNome()
  2787.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2788.             }

  2789.             // Delete from Repository
  2790.             this.generatoreXML.deleteRuolo(ruolo.getNome());

  2791.         }catch (Exception e) {
  2792.             throw new DriverRegistroServiziException("[deleteRuolo] Errore generatosi durante l'eliminazione del ruolo ["+ruolo.getNome()+"]: "+e.getMessage(),e);
  2793.         }
  2794.     }
  2795.    
  2796.    
  2797.    
  2798.    
  2799.    
  2800.    
  2801.    
  2802.    
  2803.    
  2804.    
  2805.    
  2806.    
  2807.    
  2808.    
  2809.    

  2810.     /**
  2811.      * Crea un nuovo Scope
  2812.      *
  2813.      * @param scope
  2814.      * @throws DriverRegistroServiziException
  2815.      */
  2816.     @Override
  2817.     public void createScope(Scope scope) throws DriverRegistroServiziException{
  2818.         if( scope == null)
  2819.             throw new DriverRegistroServiziException("[createScope] Parametro Non Valido");

  2820.         try {

  2821.             // Controllo elementi obbligatori
  2822.             if( (scope.getNome() == null) ){
  2823.                 throw new DriverRegistroServiziException("Scope non completamente definita nei parametri obbligatori");
  2824.             }

  2825.             // Controllo pre-esistenza del scope
  2826.             if( this.generatoreXML.existsScope(scope.getNome()) == true){
  2827.                 throw new DriverRegistroServiziException("Il Scope ["+scope.getNome()
  2828.                         +"] risulta gia' inserita nel registro dei servizi.");
  2829.             }

  2830.             // Generazione XML
  2831.             this.generatoreXML.createScope(scope.getNome(),scope);

  2832.         }catch (Exception e) {
  2833.             throw new DriverRegistroServiziException("[createScope] Errore generatosi durante la creazione di un nuovo scope ["+scope.getNome()+"]: "+e.getMessage(),e);
  2834.         }
  2835.     }
  2836.    
  2837.     /**
  2838.      * Verifica l'esistenza di un Scope
  2839.      *
  2840.      * @param idScope idScope del scope da verificare
  2841.      * @return true se il scope esiste, false altrimenti
  2842.      * @throws DriverRegistroServiziException
  2843.      */    
  2844.     @Override
  2845.     public boolean existsScope(IDScope idScope) throws DriverRegistroServiziException{
  2846.         if( idScope == null || idScope.getNome()==null)
  2847.             return false;

  2848.         try{
  2849.             return this.generatoreXML.existsScope(idScope.getNome());
  2850.         }catch(Exception e){
  2851.             this.log.error("[existsScope] Scope non trovato: "+e.getMessage());
  2852.             return false;
  2853.         }
  2854.     }
  2855.    
  2856.     /**
  2857.      * Aggiorna il Scope con i nuovi valori.
  2858.      *  
  2859.      * @param scope
  2860.      * @throws DriverRegistroServiziException
  2861.      */
  2862.     @Override
  2863.     public void updateScope(Scope scope) throws DriverRegistroServiziException{
  2864.         if( scope == null)
  2865.             throw new DriverRegistroServiziException("[updateScope] Parametro Non Valido");

  2866.         IDScope idScopeOLD = null;
  2867.         //idScopeOLD = scope.getOldIDScopeForUpdate();
  2868.         //if(idScopeOLD==null)
  2869.         idScopeOLD = new IDScope(scope.getNome());

  2870.         try {

  2871.             // Controllo  dell'accordo da Modificare
  2872.             if(idScopeOLD==null || idScopeOLD.getNome()==null){
  2873.                 throw new DriverRegistroServiziException("Scope da modificare non definito");
  2874.             }

  2875.             // Controllo elementi obbligatori del scope modificato
  2876.             if( (scope.getNome() == null) ){
  2877.                 throw new DriverRegistroServiziException("Scope modificato non completamente definito nei parametri obbligatori");
  2878.             }

  2879.             // Controllo pre-esistenza del scope da modificare
  2880.             if( this.generatoreXML.existsScope(idScopeOLD.getNome()) == false){
  2881.                 throw new DriverRegistroServiziException("Il Scope ["+idScopeOLD
  2882.                         +"] non risulta gia' inserita nel registro dei servizi.");
  2883.             }

  2884.             // Controllo non esistenza della nuova identita del scope (se da modificare)
  2885.             IDScope idScopeNEW = new IDScope(scope.getNome());
  2886.             if(idScopeOLD.equals(idScopeNEW) == false){
  2887.                 if( this.generatoreXML.existsScope(idScopeNEW.getNome()) == true){
  2888.                     throw new DriverRegistroServiziException("Il Scope ["+idScopeNEW
  2889.                             +"] risulta gia' inserita nel registro dei servizi.");
  2890.                 }
  2891.             }

  2892.             // Ri-Generazione XML
  2893.             this.generatoreXML.createScope(idScopeOLD.getNome(),scope);

  2894.         }catch (Exception e) {
  2895.             throw new DriverRegistroServiziException("[updateScope] Errore generatosi durante la modifica della porta di dominio ["+idScopeOLD+"]: "+e,e);
  2896.         }
  2897.     }
  2898.    
  2899.     /**
  2900.      * Elimina un Scope
  2901.      *  
  2902.      * @param scope
  2903.      * @throws DriverRegistroServiziException
  2904.      */
  2905.     @Override
  2906.     public void deleteScope(Scope scope) throws DriverRegistroServiziException{
  2907.         if( scope == null)
  2908.             throw new DriverRegistroServiziException("[deleteScope] Parametro Non Valido");

  2909.         try {
  2910.             // Controllo id del scope da eliminare
  2911.             if(scope.getNome()==null){
  2912.                 throw new DriverRegistroServiziException("Scope da eliminare non definito");
  2913.             }

  2914.             // Controllo pre-esistenza del scope da eliminare
  2915.             if( this.generatoreXML.existsScope(scope.getNome()) == false){
  2916.                 throw new DriverRegistroServiziException("Il Scope ["+scope.getNome()
  2917.                         +"] non risulta gia' inserito nel registro dei servizi.");
  2918.             }

  2919.             // Delete from Repository
  2920.             this.generatoreXML.deleteScope(scope.getNome());

  2921.         }catch (Exception e) {
  2922.             throw new DriverRegistroServiziException("[deleteScope] Errore generatosi durante l'eliminazione del scope ["+scope.getNome()+"]: "+e.getMessage(),e);
  2923.         }
  2924.     }
  2925.    
  2926.    
  2927.    
  2928.    
  2929.    
  2930.    
  2931.    




  2932.     /**
  2933.      * Crea un nuovo Soggetto
  2934.      *
  2935.      * @param soggetto
  2936.      * @throws DriverRegistroServiziException
  2937.      */
  2938.     @Override
  2939.     public void createSoggetto(Soggetto soggetto) throws DriverRegistroServiziException{
  2940.         if( soggetto == null)
  2941.             throw new DriverRegistroServiziException("[createSoggetto] Parametro Non Valido");

  2942.         try {
  2943.             // Controllo elementi obbligatori
  2944.             if( (soggetto.getNome() == null) ||
  2945.                     (soggetto.getTipo() == null) ){
  2946.                 throw new DriverRegistroServiziException("Soggetto non definito");
  2947.             }
  2948.             if(soggetto.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(soggetto.getConnettore().getTipo())){
  2949.                 boolean connettoreNonDefinito = false;
  2950.                 if( soggetto.getConnettore().getTipo() == null ){
  2951.                     connettoreNonDefinito = true;
  2952.                 }
  2953.                 if(connettoreNonDefinito){
  2954.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del soggetto non corretta");
  2955.                 }
  2956.             }

  2957.             //  Definizione dati opzionali
  2958.             if( (soggetto.getIdentificativoPorta() == null) || ("".equals(soggetto.getIdentificativoPorta())) ){
  2959.                 soggetto.setIdentificativoPorta(soggetto.getNome() + "SPCoopIT");
  2960.             }
  2961.             if( (soggetto.getDescrizione() == null) ||  ("".equals(soggetto.getDescrizione())) ){
  2962.                 soggetto.setDescrizione("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome());
  2963.             }
  2964.             IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome(),soggetto.getIdentificativoPorta());
  2965. //          if( (soggetto.getCodiceIpa() == null) || ("".equals(soggetto.getCodiceIpa())) ){
  2966. //              // GESTIRE TRAMITE FACTORY?            
  2967. //              //soggetto.setCodiceIpa(SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(idSoggetto,false));
  2968. //          }


  2969.             // Controllo pre-esistenza del soggetto
  2970.             String idSoggetto_string = soggetto.getTipo() + soggetto.getNome();
  2971.             if(this.generatoreXML.existsSoggetto(idSoggetto) == true){
  2972.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggetto_string
  2973.                         +"] risulta gia' inserito nel registro dei servizi.");
  2974.             }


  2975.             // Generazione XML
  2976.             this.generatoreXML.createSoggetto(idSoggetto,soggetto);

  2977.         }catch (Exception e) {
  2978.             throw new DriverRegistroServiziException("[createSoggetto] Errore generatosi durante la creazione del nuovo Soggetto ["+soggetto.getTipo()+soggetto.getNome()+"]: "+e.getMessage(),e);
  2979.         }
  2980.     }

  2981.     /**
  2982.      * Verifica l'esistenza di un soggetto registrato.
  2983.      *
  2984.      * @param idSoggetto Identificativo del soggetto
  2985.      * @return true se il soggetto esiste, false altrimenti
  2986.      */    
  2987.     @Override
  2988.     public boolean existsSoggetto(IDSoggetto idSoggetto) throws DriverRegistroServiziException{
  2989.         if( idSoggetto == null)
  2990.             return false;
  2991.         try{
  2992.             return this.generatoreXML.existsSoggetto(idSoggetto);
  2993.         }catch(Exception e) {
  2994.             return false;
  2995.         }
  2996.     }

  2997.     /**
  2998.      * Aggiorna un Soggetto
  2999.      *
  3000.      * @param soggetto
  3001.      * @throws DriverRegistroServiziException
  3002.      */
  3003.     @Override
  3004.     public void updateSoggetto(Soggetto soggetto) throws DriverRegistroServiziException{
  3005.         if( soggetto == null)
  3006.             throw new DriverRegistroServiziException("[updateSoggetto] Parametro Non Valido");

  3007.         String tipoOLD = null;
  3008.         String nomeOLD = null;
  3009.         if(soggetto.getOldIDSoggettoForUpdate()!=null){
  3010.             tipoOLD = soggetto.getOldIDSoggettoForUpdate().getTipo();
  3011.             nomeOLD = soggetto.getOldIDSoggettoForUpdate().getNome();
  3012.         }
  3013.         if(tipoOLD==null||nomeOLD==null){
  3014.             tipoOLD = soggetto.getTipo();
  3015.             nomeOLD = soggetto.getNome();
  3016.         }
  3017.         String idSoggettoOLD_string = tipoOLD + nomeOLD;
  3018.         IDSoggetto idSoggettoOLD = new IDSoggetto(tipoOLD,nomeOLD);

  3019.         try {

  3020.             // Controllo id del soggetto da Modificare
  3021.             if(tipoOLD==null || nomeOLD==null){
  3022.                 throw new DriverRegistroServiziException("Soggetto da modificare non definito");
  3023.             }

  3024.             // Controllo elementi obbligatori del soggetto modificato
  3025.             if( (soggetto.getNome() == null) ||
  3026.                     (soggetto.getTipo() == null) ){
  3027.                 throw new DriverRegistroServiziException("Soggetto modificato non definito");
  3028.             }
  3029.             if(soggetto.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(soggetto.getConnettore().getTipo())){
  3030.                 boolean connettoreNonDefinito = false;
  3031.                 if( soggetto.getConnettore().getTipo() == null ){
  3032.                     connettoreNonDefinito = true;
  3033.                 }
  3034.                 if(connettoreNonDefinito){
  3035.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del soggetto non corretta");
  3036.                 }
  3037.             }

  3038.             // Definizione dati opzionali
  3039.             if( (soggetto.getIdentificativoPorta() == null) || ("".equals(soggetto.getIdentificativoPorta())) ){
  3040.                 soggetto.setIdentificativoPorta(soggetto.getNome() + "SPCoopIT");
  3041.             }
  3042.             if( (soggetto.getDescrizione() == null) ||  ("".equals(soggetto.getDescrizione())) ){
  3043.                 soggetto.setDescrizione("Soggetto "+soggetto.getTipo()+"/"+soggetto.getNome());
  3044.             }
  3045.             IDSoggetto idSoggettoNEW = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  3046. //          if( (soggetto.getCodiceIpa() == null) || ("".equals(soggetto.getCodiceIpa())) ){
  3047. //              // GESTIRE TRAMITE FACTORY?            
  3048. //              //soggetto.setCodiceIpa(SICAtoOpenSPCoopUtilities.buildIDSoggettoSica(idSoggettoNEW,false));
  3049. //          }

  3050.             // Controllo pre-esistenza del soggetto da modificare
  3051.             if( this.generatoreXML.existsSoggetto(idSoggettoOLD) == false){
  3052.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoOLD_string
  3053.                         +"] non risulta gia' inserito nel registro dei servizi.");
  3054.             }

  3055.             // Controllo non esistenza della nuova identita del soggetto (se da modificare)
  3056.             String idSoggettoNEW_string = soggetto.getTipo() + soggetto.getNome();
  3057.             if(idSoggettoOLD_string.equals(idSoggettoNEW_string) == false){
  3058.                 if( this.generatoreXML.existsSoggetto(idSoggettoNEW) == true){
  3059.                     throw new DriverRegistroServiziException("La nuova identita da associare al soggetto ["+idSoggettoNEW_string
  3060.                             +"] risulta gia' utilizzata nel registro dei servizi.");
  3061.                 }
  3062.             }

  3063.             // Ri-Generazione XML
  3064.             this.generatoreXML.createSoggetto(idSoggettoOLD,soggetto);

  3065.         }catch (Exception e) {
  3066.             throw new DriverRegistroServiziException("[updateSoggetto] Errore generatosi durante la modifica del Soggetto ["+idSoggettoOLD+"]: "+e.getMessage(),e);
  3067.         }
  3068.     }

  3069.     /**
  3070.      * Cancella un Soggetto
  3071.      *
  3072.      * @param soggetto
  3073.      * @throws DriverRegistroServiziException
  3074.      */
  3075.     @Override
  3076.     public void deleteSoggetto(Soggetto soggetto) throws DriverRegistroServiziException{
  3077.         if( soggetto == null)
  3078.             throw new DriverRegistroServiziException("[deleteSoggetto] Parametro Non Valido");

  3079.         try {
  3080.             // Controllo id del soggetto da eliminare
  3081.             if(soggetto.getTipo()==null || soggetto.getNome()==null){
  3082.                 throw new DriverRegistroServiziException("Soggetto da eliminare non definito");
  3083.             }

  3084.             // Controllo pre-esistenza del soggetto da modificare
  3085.             IDSoggetto idSoggetto = new IDSoggetto(soggetto.getTipo(),soggetto.getNome());
  3086.             if( this.generatoreXML.existsSoggetto(idSoggetto) == false){
  3087.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggetto
  3088.                         +"] non risulta gia' inserito nel registro dei servizi.");
  3089.             }

  3090.             // Delete from Repository
  3091.             this.generatoreXML.deleteSoggetto(idSoggetto);

  3092.         }catch (Exception e) {
  3093.             throw new DriverRegistroServiziException("[deleteSoggetto] Errore generatosi durante l'eliminazione del Soggetto ["+soggetto.getTipo()+soggetto.getNome()+"]: "+e.getMessage(),e);
  3094.         }
  3095.     }







  3096.     /**
  3097.      * Crea un Accordo Servizio Parte Specifica
  3098.      *
  3099.      * @param asps
  3100.      * @throws DriverRegistroServiziException
  3101.      */
  3102.     @Override
  3103.     public void createAccordoServizioParteSpecifica(AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
  3104.        
  3105.         if( asps == null)
  3106.             throw new DriverRegistroServiziException("[createAccordoServizioParteSpecifica] Parametro Non Valido");
  3107.        
  3108.         try {
  3109.             // Controllo elementi obbligatori
  3110.             if( (asps.getNomeSoggettoErogatore() == null) ||
  3111.                     (asps.getTipoSoggettoErogatore() == null) ){
  3112.                 throw new DriverRegistroServiziException("Soggetto, erogatore del servizio, non definito");
  3113.             }
  3114.             if( (asps.getNome() == null) ||
  3115.                     (asps.getTipo() == null)  ||
  3116.                     (asps.getVersione() == null)  ){
  3117.                 throw new DriverRegistroServiziException("Accordo Servizio Parte Specifica, non definito");
  3118.             }
  3119.             if(asps.getAccordoServizioParteComune()==null){
  3120.                 throw new DriverRegistroServiziException("Accordo di Servizio, da associare al servizio, non definito");
  3121.             }
  3122.             if(asps.getConfigurazioneServizio()!=null && asps.getConfigurazioneServizio().getConnettore() !=null &&
  3123.                     !CostantiRegistroServizi.DISABILITATO.equals(asps.getConfigurazioneServizio().getConnettore().getTipo())){
  3124.                 boolean connettoreNonDefinito = false;
  3125.                 if( asps.getConfigurazioneServizio().getConnettore().getTipo() == null ){
  3126.                     connettoreNonDefinito = true;
  3127.                 }
  3128.                 if(connettoreNonDefinito){
  3129.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del servizio non corretta");
  3130.                 }
  3131.             }
  3132.             for(int i=0;i<asps.sizeFruitoreList();i++){
  3133.                 Fruitore checkFr = asps.getFruitore(i);
  3134.                 if( (checkFr.getNome()==null) || (checkFr.getTipo()==null)){
  3135.                     throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o tipo");
  3136.                 }
  3137.                 for(int j=0;j<checkFr.sizeConfigurazioneAzioneList();j++){
  3138.                     ConfigurazioneServizioAzione checkAz = checkFr.getConfigurazioneAzione(i);
  3139.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3140.                         throw new DriverRegistroServiziException("Definizione di un azione senza nome o connettore");
  3141.                     }
  3142.                     // controllo connettore
  3143.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3144.                         boolean connettoreNonDefinito = false;
  3145.                         if( checkAz.getConnettore().getTipo() == null ){
  3146.                             connettoreNonDefinito = true;
  3147.                         }
  3148.                         if(connettoreNonDefinito){
  3149.                             throw new DriverRegistroServiziException("Definizione del punto di accesso dell'azione "+checkAz.getAzioneList()+" della fruizione del servizio non corretta");
  3150.                         }
  3151.                     }
  3152.                 }
  3153.                 // Controllo pre-esistenza del soggetto fruitore
  3154.                 String idSoggettoFruitore_string = checkFr.getTipo() + checkFr.getNome();
  3155.                 IDSoggetto idSoggettoFruitore = new IDSoggetto(checkFr.getTipo(),checkFr.getNome());
  3156.                 if( this.generatoreXML.existsSoggetto(idSoggettoFruitore) == false){
  3157.                     throw new DriverRegistroServiziException("Il fruitore ["+idSoggettoFruitore_string
  3158.                             +"] non risulta gia' inserito nel registro dei servizi.");
  3159.                 }
  3160.             }
  3161.             if(asps.getConfigurazioneServizio()!=null){
  3162.                 for(int i=0;i<asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();i++){
  3163.                     ConfigurazioneServizioAzione checkAz = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  3164.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3165.                         throw new DriverRegistroServiziException("Definizione di un azione senza nome o connettore");
  3166.                     }
  3167.                     // controllo connettore
  3168.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3169.                         boolean connettoreNonDefinito = false;
  3170.                         if( checkAz.getConnettore().getTipo() == null ){
  3171.                             connettoreNonDefinito = true;
  3172.                         }
  3173.                         if(connettoreNonDefinito){
  3174.                             throw new DriverRegistroServiziException("Definizione del punto di accesso dell'azione "+checkAz.getAzioneList()+" del servizio non corretta");
  3175.                         }
  3176.                     }
  3177.                 }
  3178.             }

  3179.             // Controllo pre-esistenza del soggetto erogatore
  3180.             IDSoggetto idSoggettoErogatore = new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  3181.             String idSoggettoErogatore_string = asps.getTipoSoggettoErogatore()+asps.getNomeSoggettoErogatore();
  3182.             if( this.generatoreXML.existsSoggetto(idSoggettoErogatore) == false){
  3183.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoErogatore_string
  3184.                         +"] non risulta gia' inserito nel registro dei servizi.");
  3185.             }

  3186.             // Controllo pre-esistenza del servizio
  3187.             String idServizio_string = asps.getTipo() + asps.getNome() + asps.getVersione();
  3188.             IDServizio idServizio = this.idServizioFactory.getIDServizioFromAccordo(asps);
  3189.             if (this.generatoreXML.existsAccordoServizioParteSpecifica(idServizio)==true){
  3190.                 throw new DriverRegistroServiziException("Il servizio ["+idServizio_string+"] erogato dal soggetto ["+idSoggettoErogatore_string+"] risulta gia' registrato nel registro");
  3191.             }

  3192.             // Generazione XML
  3193.             this.generatoreXML.createAccordoServizioParteSpecifica(idServizio,asps);

  3194.         }catch (Exception e) {
  3195.             throw new DriverRegistroServiziException("[createAccordoServizioParteSpecifica] Errore generatosi durante la creazione del nuovo Servizio ["+
  3196.                     this.idServizioFactory.getIDServizioFromAccordo(asps)+"]: "+e.getMessage(),e);
  3197.         }
  3198.     }


  3199.     /**
  3200.      * Verifica l'esistenza di un servizio registrato.
  3201.      *
  3202.      * @param idServizio Identificativo del servizio
  3203.      * @return true se il servizio esiste, false altrimenti
  3204.      */    
  3205.     @Override
  3206.     public boolean existsAccordoServizioParteSpecifica(IDServizio idServizio) throws DriverRegistroServiziException{
  3207.        
  3208.         if( idServizio == null)
  3209.             return false;

  3210.         try{
  3211.             this.getAccordoServizioParteSpecifica(idServizio);

  3212.             return true;
  3213.         }catch(DriverRegistroServiziNotFound notFound){
  3214.             return false;
  3215.         }
  3216.         catch(Exception e){
  3217.             this.log.error("[existsAccordoServizioParteSpecifica] Servizio non trovato: "+e.getMessage());
  3218.             return false;
  3219.         }
  3220.     }
  3221.        
  3222.        
  3223.        
  3224.        
  3225.        
  3226.     /**
  3227.      * Aggiorna un Accordo Servizio Parte Specifica
  3228.      *
  3229.      * @param asps
  3230.      * @throws DriverRegistroServiziException
  3231.      */
  3232.     @Override
  3233.     public void updateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
  3234.         if( asps == null)
  3235.             throw new DriverRegistroServiziException("[updateAccordoServizioParteSpecifica] Parametro Non Valido");
  3236.        
  3237.         String tipoServizioOLD = null;
  3238.         String nomeServizioOLD = null;
  3239.         Integer versioneServizioOLD = null;
  3240.         if(asps.getOldIDServizioForUpdate()!=null){
  3241.             tipoServizioOLD = asps.getOldIDServizioForUpdate().getTipo();
  3242.             nomeServizioOLD = asps.getOldIDServizioForUpdate().getNome();
  3243.             versioneServizioOLD = asps.getOldIDServizioForUpdate().getVersione();
  3244.         }
  3245.         if(tipoServizioOLD==null||nomeServizioOLD==null||versioneServizioOLD==null){
  3246.             tipoServizioOLD = asps.getTipo();
  3247.             nomeServizioOLD = asps.getNome();
  3248.             versioneServizioOLD = asps.getVersione();
  3249.         }
  3250.         String tipoSoggettoOLD = null;
  3251.         String nomeSoggettoOLD = null;
  3252.         if(asps.getOldIDServizioForUpdate()!=null && asps.getOldIDServizioForUpdate().getSoggettoErogatore()!=null){
  3253.             tipoSoggettoOLD = asps.getOldIDServizioForUpdate().getSoggettoErogatore().getTipo();
  3254.             nomeSoggettoOLD = asps.getOldIDServizioForUpdate().getSoggettoErogatore().getNome();
  3255.         }
  3256.         if(tipoSoggettoOLD==null||nomeSoggettoOLD==null){
  3257.             tipoSoggettoOLD = asps.getTipoSoggettoErogatore();
  3258.             nomeSoggettoOLD = asps.getNomeSoggettoErogatore();
  3259.         }
  3260.         String idSoggettoOLD_string = tipoSoggettoOLD+nomeSoggettoOLD;
  3261.         IDSoggetto idSoggettoOLD = new IDSoggetto(tipoSoggettoOLD,nomeSoggettoOLD);
  3262.         String idServizioOLD_string = tipoServizioOLD + nomeServizioOLD+versioneServizioOLD;
  3263.         IDServizio idServizioOLD = this.idServizioFactory.getIDServizioFromValues(tipoServizioOLD,nomeServizioOLD, idSoggettoOLD, versioneServizioOLD);

  3264.         try {

  3265.             // Controllo elementi obbligatori
  3266.             // vecchio ID Soggetto
  3267.             if( (tipoSoggettoOLD == null) ||
  3268.                     (nomeSoggettoOLD == null) ){
  3269.                 throw new DriverRegistroServiziException("Soggetto da modificare, erogatore del servizio, non definito");
  3270.             }
  3271.             // nuovo ID Soggetto
  3272.             if( (asps.getTipoSoggettoErogatore() == null) ||
  3273.                     (asps.getNomeSoggettoErogatore() == null) ){
  3274.                 throw new DriverRegistroServiziException("Soggetto, erogatore del servizio, non definito");
  3275.             }
  3276.             // vecchio ID Servizio
  3277.             if( (tipoServizioOLD == null) ||
  3278.                     (nomeServizioOLD == null) ){
  3279.                 throw new DriverRegistroServiziException("Servizio da modificare non definito");
  3280.             }
  3281.             // nuovo ID Servizio
  3282.             if( (asps.getNome() == null) ||
  3283.                     (asps.getTipo() == null) ||
  3284.                     (asps.getVersione() == null) ){
  3285.                 throw new DriverRegistroServiziException("Dati del nuovo servizio, non definiti");
  3286.             }
  3287.             // accordo
  3288.             if(asps.getAccordoServizioParteComune()==null){
  3289.                 throw new DriverRegistroServiziException("Accordo di Servizio, da associare al servizio, non definito");
  3290.             }
  3291.             // connettore
  3292.             if(asps.getConfigurazioneServizio()!=null && asps.getConfigurazioneServizio().getConnettore() !=null &&
  3293.                     !CostantiRegistroServizi.DISABILITATO.equals(asps.getConfigurazioneServizio().getConnettore().getTipo())){
  3294.                 boolean connettoreNonDefinito = false;
  3295.                 if( asps.getConfigurazioneServizio().getConnettore().getTipo() == null ){
  3296.                     connettoreNonDefinito = true;
  3297.                 }
  3298.                 if(connettoreNonDefinito){
  3299.                     throw new DriverRegistroServiziException("Definizione del punto di accesso del dominio del servizio non corretta");
  3300.                 }
  3301.             }
  3302.             // fruitori
  3303.             for(int i=0;i<asps.sizeFruitoreList();i++){
  3304.                 Fruitore checkFr = asps.getFruitore(i);
  3305.                 if( (checkFr.getNome()==null) || (checkFr.getTipo()==null)){
  3306.                     throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o tipo");
  3307.                 }
  3308.                 for(int j=0;j<checkFr.sizeConfigurazioneAzioneList();j++){
  3309.                     ConfigurazioneServizioAzione checkAz = checkFr.getConfigurazioneAzione(j);
  3310.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3311.                         throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o connettore");
  3312.                     }
  3313.                     // controllo connettore
  3314.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3315.                         boolean connettoreNonDefinito = false;
  3316.                         if( checkAz.getConnettore().getTipo() == null ){
  3317.                             connettoreNonDefinito = true;
  3318.                         }
  3319.                         if(connettoreNonDefinito){
  3320.                             throw new DriverRegistroServiziException("Definizione del punto di accesso dell'azione "+checkAz.getAzioneList()+" della fruizione del servizio non corretta");
  3321.                         }
  3322.                     }
  3323.                 }
  3324.                 // Controllo pre-esistenza del soggetto fruitore
  3325.                 /*String idSoggettoFruitore_string = checkFr.getTipo() + checkFr.getNome();
  3326.                 IDSoggetto idSoggettoFruitore = new IDSoggetto(checkFr.getTipo(),checkFr.getNome());
  3327.                 if( this.generatoreXML.existsSoggetto(idSoggettoFruitore) == false){
  3328.                     throw new DriverRegistroServiziException("Il fruitore ["+idSoggettoFruitore_string
  3329.                     +"] non risulta gia' inserito nel registro dei servizi.");
  3330.                 } */
  3331.             }
  3332.             // azioni-fruitori-connettori
  3333.             if(asps.getConfigurazioneServizio()!=null){
  3334.                 for(int i=0;i<asps.getConfigurazioneServizio().sizeConfigurazioneAzioneList();i++){
  3335.                     ConfigurazioneServizioAzione checkAz = asps.getConfigurazioneServizio().getConfigurazioneAzione(i);
  3336.                     if( (checkAz.sizeAzioneList()<=0) || (checkAz.getConnettore()==null)){
  3337.                         throw new DriverRegistroServiziException("Definizione di un fruitore senza nome o connettore");
  3338.                     }
  3339.                     // controllo connettore
  3340.                     if(checkAz.getConnettore() !=null && !CostantiRegistroServizi.DISABILITATO.equals(checkAz.getConnettore().getTipo())){
  3341.                         boolean connettoreNonDefinito = false;
  3342.                         if( checkAz.getConnettore().getTipo() == null ){
  3343.                             connettoreNonDefinito = true;
  3344.                         }
  3345.                         if(connettoreNonDefinito){
  3346.                             throw new DriverRegistroServiziException("Definizione del punto di accesso dell'azione "+checkAz.getAzioneList()+" del servizio non corretta");
  3347.                         }
  3348.                     }
  3349.                 }
  3350.             }


  3351.             // Controllo pre-esistenza del soggetto erogatore da modificare
  3352.             if( this.generatoreXML.existsSoggetto(idSoggettoOLD) == false){
  3353.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoOLD_string
  3354.                         +"] da modificare, non risulta gia' inserito nel registro dei servizi.");
  3355.             }

  3356.             // Controllo pre-esistenza del nuovo soggetto erogatore
  3357.             String idSoggettoNEW_string = asps.getTipoSoggettoErogatore() + asps.getNomeSoggettoErogatore();
  3358.             IDSoggetto idSoggettoNEW = new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  3359.             if( idSoggettoOLD_string.equals(idSoggettoNEW_string) == false ){
  3360.                 if( this.generatoreXML.existsSoggetto(idSoggettoNEW) == false){
  3361.                     throw new DriverRegistroServiziException("Il soggetto ["+idSoggettoNEW_string
  3362.                             +"] a cui re-assegnare il servizio, non risulta gia' inserito nel registro dei servizi.");
  3363.                 }
  3364.             }

  3365.             // Controllo pre-esistenza del servizio da modificare
  3366.             if (this.generatoreXML.existsAccordoServizioParteSpecifica(idServizioOLD)==false){
  3367.                 throw new DriverRegistroServiziException("Il servizio ["+idServizioOLD_string+"] erogato dal soggetto ["+idSoggettoOLD_string+"] non risulta gia' registrato nel registro");
  3368.             }

  3369.             // check esistenza nuovo servizio
  3370.             IDServizio idServizioNEW = this.idServizioFactory.getIDServizioFromValues(asps.getTipo(),asps.getNome(), idSoggettoNEW, asps.getVersione());
  3371.             String idServizioNEW_string = asps.getTipo() + asps.getNome() + asps.getVersione();
  3372.             if((idServizioOLD_string.equals(idServizioNEW_string) == false) || (idSoggettoOLD_string.equals(idSoggettoNEW_string) == false)){
  3373.                 // Controllo non esistenza del servizio da creare
  3374.                 if (this.generatoreXML.existsAccordoServizioParteSpecifica(idServizioNEW)==true){
  3375.                     throw new DriverRegistroServiziException("Il servizio ["+idServizioNEW_string+"] erogato dal soggetto ["+idSoggettoNEW_string+"] risulta gia' registrato nel registro");
  3376.                 }
  3377.             }


  3378.             if( idSoggettoOLD_string.equals(idSoggettoNEW_string) == true ){
  3379.                 // NON e' CAMBIATO IL SOGGETTO EROGATORE.

  3380.                 // Ri-Generazione XML
  3381.                 this.generatoreXML.createAccordoServizioParteSpecifica(idServizioOLD,asps);

  3382.             }else{
  3383.                 // E' CAMBIATO IL SOGGETTO EROGATORE

  3384.                 // Delete from Repository
  3385.                 this.generatoreXML.deleteAccordoServizioParteSpecifica(idServizioOLD);

  3386.                 // Generazione XML
  3387.                 this.generatoreXML.createAccordoServizioParteSpecifica(idServizioNEW,asps);

  3388.             }

  3389.         }catch (Exception e) {
  3390.             throw new DriverRegistroServiziException("[updateAccordoServizioParteSpecifica] Errore generatosi durante la modifica del Servizio ["+idServizioOLD_string+"] erogato dal soggetto ["+
  3391.                     idSoggettoOLD_string+"]: "+e.getMessage(),e);
  3392.         }
  3393.     }


  3394.     /**
  3395.      * Cancella un Accordo Servizio Parte Specifica
  3396.      *
  3397.      * @param asps
  3398.      * @throws DriverRegistroServiziException
  3399.      */
  3400.     @Override
  3401.     public void deleteAccordoServizioParteSpecifica(AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
  3402.        
  3403.         if( asps == null)
  3404.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteSpecifica] Parametro Non Valido");
  3405.        
  3406.        
  3407.         String idSoggetto_string = asps.getTipoSoggettoErogatore() + asps.getNomeSoggettoErogatore();
  3408.         String idServizio_string = asps.getTipo() + asps.getNome()+ asps.getVersione();

  3409.         try {
  3410.             // Controllo id del soggetto
  3411.             if(asps.getTipoSoggettoErogatore()==null || asps.getNomeSoggettoErogatore()==null){
  3412.                 throw new DriverRegistroServiziException("Soggetto non definito");
  3413.             }
  3414.             // Controllo id del servizio da eliminare
  3415.             if(asps.getTipo()==null || asps.getNome()==null || asps.getVersione()==null){
  3416.                 throw new DriverRegistroServiziException("Servizio da eliminare non definito");
  3417.             }
  3418.             // Controllo pre-esistenza del soggetto
  3419.             IDSoggetto idSoggetto = new IDSoggetto(asps.getTipoSoggettoErogatore(),asps.getNomeSoggettoErogatore());
  3420.             if( this.generatoreXML.existsSoggetto(idSoggetto) == false){
  3421.                 throw new DriverRegistroServiziException("Il soggetto ["+idSoggetto_string
  3422.                         +"] non risulta gia' inserito nel registro dei servizi.");
  3423.             }
  3424.             // Controllo pre-esistenza del servizio
  3425.             IDServizio idServizio = this.idServizioFactory.getIDServizioFromValues(asps.getTipo(),asps.getNome(), idSoggetto, asps.getVersione());
  3426.             if (this.generatoreXML.existsAccordoServizioParteSpecifica(idServizio)==false){
  3427.                 throw new DriverRegistroServiziException("Il servizio ["+idServizio_string+"] erogato dal soggetto ["+idSoggetto_string+"] non risulta gia' registrato nel registro");
  3428.             }

  3429.             // Delete from Repository
  3430.             this.generatoreXML.deleteAccordoServizioParteSpecifica(idServizio);

  3431.         }catch (Exception e) {
  3432.             throw new DriverRegistroServiziException("[deleteAccordoServizioParteSpecifica] Errore generatosi durante l'eliminazione del Servizio ["+idServizio_string
  3433.                     +"] erogato dal soggetto ["+idSoggetto_string+"]: "+e.getMessage(),e);
  3434.         }
  3435.     }

  3436.    
  3437.    

  3438.     //RESET
  3439.     @Override
  3440.     public void reset() throws DriverRegistroServiziException{
  3441.         try{
  3442.             AccordoServizioParteComune[] accordiRegistrati = this.generatoreXML.getAccordiServizioParteComune();
  3443.             if(accordiRegistrati!=null){
  3444.                 for(int i=0; i<accordiRegistrati.length;i++){
  3445.                     this.log.info("eliminazione accordo di servizio ["+this.idAccordoFactory.getUriFromAccordo(accordiRegistrati[i])+"] in corso...");
  3446.                     this.deleteAccordoServizioParteComune(accordiRegistrati[i]);
  3447.                     this.log.info("eliminazione accordo di servizio ["+this.idAccordoFactory.getUriFromAccordo(accordiRegistrati[i])+"] effettuata.");
  3448.                 }
  3449.             }
  3450.         }catch (Exception e) {
  3451.             throw new DriverRegistroServiziException("Errore durante la cancellazione degli accordi registrati: "+e.getMessage(),e);
  3452.         }
  3453.         try{
  3454.             AccordoCooperazione[] accordiCooperazioneRegistrati = this.generatoreXML.getAccordiCooperazione();
  3455.             if(accordiCooperazioneRegistrati!=null){
  3456.                 for(int i=0; i<accordiCooperazioneRegistrati.length;i++){
  3457.                     this.log.info("eliminazione accordo di cooperazione ["+this.idAccordoCooperazioneFactory.getUriFromAccordo(accordiCooperazioneRegistrati[i])+"] in corso...");
  3458.                     this.deleteAccordoCooperazione(accordiCooperazioneRegistrati[i]);
  3459.                     this.log.info("eliminazione accordo di cooperazione ["+this.idAccordoCooperazioneFactory.getUriFromAccordo(accordiCooperazioneRegistrati[i])+"] effettuata.");
  3460.                 }
  3461.             }
  3462.         }catch (Exception e) {
  3463.             throw new DriverRegistroServiziException("Errore durante la cancellazione degli accordi di cooperazione registrati: "+e.getMessage(),e);
  3464.         }
  3465.         try{
  3466.             AccordoServizioParteSpecifica[] serviziRegistrati = this.generatoreXML.getAccordiServiziParteSpecifica();
  3467.             if(serviziRegistrati!=null){
  3468.                 for(int i=0; i<serviziRegistrati.length;i++){
  3469.                     this.log.info("eliminazione servizio ["+this.idServizioFactory.getUriFromAccordo(serviziRegistrati[i])+"] in corso...");
  3470.                     this.deleteAccordoServizioParteSpecifica(serviziRegistrati[i]);
  3471.                     this.log.info("eliminazione servizio ["+this.idServizioFactory.getUriFromAccordo(serviziRegistrati[i])+"] effettuata.");
  3472.                 }
  3473.             }
  3474.         }catch (Exception e) {
  3475.             throw new DriverRegistroServiziException("Errore durante la cancellazione dei servizi registrati: "+e.getMessage(),e);
  3476.         }
  3477.         try{
  3478.             Soggetto[] soggettiRegistrati = this.generatoreXML.getSoggetti();
  3479.             if(soggettiRegistrati!=null){
  3480.                 for(int i=0; i<soggettiRegistrati.length;i++){
  3481.                     this.log.info("eliminazione soggetto ["+soggettiRegistrati[i].getTipo()+"/"+soggettiRegistrati[i].getNome()+"] in corso...");
  3482.                     this.deleteSoggetto(soggettiRegistrati[i]);
  3483.                     this.log.info("eliminazione soggetto ["+soggettiRegistrati[i].getTipo()+"/"+soggettiRegistrati[i].getNome()+"] effettuata.");
  3484.                 }
  3485.             }
  3486.         }catch (Exception e) {
  3487.             throw new DriverRegistroServiziException("Errore durante la cancellazione dei soggetti registrati: "+e.getMessage(),e);
  3488.         }
  3489.         try{
  3490.             PortaDominio[] pddRegistrate = this.generatoreXML.getPorteDominio();
  3491.             if(pddRegistrate!=null){
  3492.                 for(int i=0; i<pddRegistrate.length;i++){
  3493.                     this.log.info("eliminazione porta di dominio ["+pddRegistrate[i].getNome()+"] in corso...");
  3494.                     this.deletePortaDominio(pddRegistrate[i]);
  3495.                     this.log.info("eliminazione porta di dominio ["+pddRegistrate[i].getNome()+"] effettuata.");
  3496.                 }
  3497.             }
  3498.         }catch (Exception e) {
  3499.             throw new DriverRegistroServiziException("Errore durante la cancellazione delle porte di dominio registrate: "+e.getMessage(),e);
  3500.         }
  3501.     }
  3502.    
  3503.     //RESET PDD CONSOLE
  3504.     public void resetCtrlstat() throws DriverRegistroServiziException{
  3505.         return;
  3506.     }


  3507.     /**
  3508.      * Metodo che verica la connessione ad una risorsa.
  3509.      * Se la connessione non e' presente, viene lanciata una eccezione che contiene il motivo della mancata connessione
  3510.      *
  3511.      * @throws DriverException eccezione che contiene il motivo della mancata connessione
  3512.      */
  3513.     @Override
  3514.     public void isAlive() throws CoreException{

  3515.         if(this.create==false)
  3516.             throw new CoreException("Driver non inizializzato");

  3517.         String urlVerifica = this.urlPrefix + CostantiRegistroServizi.URL_SEPARATOR;
  3518.         try{
  3519.             byte[] dir = HttpUtilities.requestHTTPFile(urlVerifica);
  3520.             if(dir==null)
  3521.                 throw new Exception("Directory accordi richiesta non ritornata");
  3522.         }catch(Exception e){
  3523.             throw new CoreException("Connessione al registro non disponibile ["+urlVerifica+"]: "+e.getMessage(),e);
  3524.         }
  3525.     }

  3526. }