XMLLib.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.BufferedReader;
  22. import java.io.ByteArrayOutputStream;
  23. import java.io.File;
  24. import java.io.FileInputStream;
  25. import java.io.FileOutputStream;
  26. import java.io.FileReader;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.StringTokenizer;

  30. import org.openspcoop2.core.id.IDAccordo;
  31. import org.openspcoop2.core.id.IDAccordoCooperazione;
  32. import org.openspcoop2.core.id.IDServizio;
  33. import org.openspcoop2.core.id.IDSoggetto;
  34. import org.openspcoop2.core.registry.AccordoCooperazione;
  35. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  36. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  37. import org.openspcoop2.core.registry.Fruitore;
  38. import org.openspcoop2.core.registry.Gruppo;
  39. import org.openspcoop2.core.registry.PortaDominio;
  40. import org.openspcoop2.core.registry.Ruolo;
  41. import org.openspcoop2.core.registry.Scope;
  42. import org.openspcoop2.core.registry.Soggetto;
  43. import org.openspcoop2.core.registry.constants.CostantiXMLRepository;
  44. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  45. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  46. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  47. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  48. import org.openspcoop2.utils.xml.JaxbUtils;

  49. /**
  50.  * Classe utilizzata per creare/modificare/eliminare entita XML di un registro dei servizi OpenSPCoop.
  51.  *
  52.  * @author Poli Andrea (apoli@link.it)
  53.  * @author $Author$
  54.  * @version $Rev$, $Date$
  55.  */
  56. public class XMLLib{

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

  58.     /** --- Location del repository dove memorizzare i file XML associate alle entita create nel registro UDDI ---- */
  59.     private String pathPrefix;
  60.     /** --- URL Prefix utilizzato come prefisso da associare alle url memorizzate nelle entita create nell'UDDI
  61.     e contenenti le definizioni XML ------*/
  62.     private String urlPrefix;
  63.    
  64.     // Factory
  65.     private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  66.     private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
  67.     private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();

  68.     private org.openspcoop2.core.registry.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsRegistry = null;


  69.     /**
  70.      * Costruttore.
  71.      *
  72.      * @param path Contiene il path del repository necessario al registro dei servizi
  73.      * @param url URL Prefix utilizzato come prefisso da associare alle url memorizzate per i WSDL
  74.      */    
  75.     public XMLLib(String path,String url) throws DriverRegistroServiziException{

  76.         this.cleanerOpenSPCoop2ExtensionsRegistry = new org.openspcoop2.core.registry.utils.CleanerOpenSPCoop2Extensions();
  77.        
  78.         if(path!=null){
  79.             if (!path.endsWith(File.separator))
  80.                 this.pathPrefix= path + File.separator;
  81.             else
  82.                 this.pathPrefix = path;
  83.         }
  84.        
  85.         if(url!=null){
  86.             if (!url.endsWith(CostantiXMLRepository.URL_SEPARATOR))
  87.                 this.urlPrefix= url + CostantiXMLRepository.URL_SEPARATOR;
  88.             else
  89.                 this.urlPrefix = url;
  90.         }
  91.        
  92.         if(path!=null){
  93.             try {

  94.                 // Creazione/Controllo Esistenza directory accordo
  95.                 File dir = new File(this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO);
  96.                 if(dir.exists() == false){
  97.                     if(dir.mkdir()==false){
  98.                         throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di servizio ["+
  99.                                 this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+"]");
  100.                     }
  101.                 }

  102.             }catch(DriverRegistroServiziException e){
  103.                 throw e;
  104.             }catch(Exception io){
  105.                 throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di servizio ["+
  106.                         this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+"]: "+io.getMessage());
  107.             }  
  108.            
  109.            
  110.             try {

  111.                 // Creazione/Controllo Esistenza directory accordo cooperazione
  112.                 File dir = new File(this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE);
  113.                 if(dir.exists() == false){
  114.                     if(dir.mkdir()==false){
  115.                         throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di cooperazione ["+
  116.                                 this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE+"]");
  117.                     }
  118.                 }

  119.             }catch(DriverRegistroServiziException e){
  120.                 throw e;
  121.             }catch(Exception io){
  122.                 throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di servizio ["+
  123.                         this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+"]: "+io.getMessage());
  124.             }  
  125.            
  126.            
  127.             try {
  128.                
  129.                 // Creazione/Controllo Esistenza directory porte di dominio
  130.                 File dirPDD = new File(this.pathPrefix+CostantiXMLRepository.PORTE_DI_DOMINIO);
  131.                 if(dirPDD.exists() == false){
  132.                     if(dirPDD.mkdir()==false){
  133.                         throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per le porte di dominio ["+
  134.                                 this.pathPrefix+CostantiXMLRepository.PORTE_DI_DOMINIO+"]");
  135.                     }
  136.                 }

  137.             }catch(DriverRegistroServiziException e){
  138.                 throw e;
  139.             }catch(Exception io){
  140.                 throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per le porte di dominio ["+
  141.                         this.pathPrefix+CostantiXMLRepository.PORTE_DI_DOMINIO+"]: "+io.getMessage());
  142.             }  
  143.         }
  144.     }














  145.     /* ---------------- GENERAZIONE XML DA/A FILE ------------------------- */

  146.     /**
  147.      * Metodo che si occupa della generazione di un file a partire da un array di byte
  148.      * Sono richiesti interattivamente i parametri che identificano il file da generare e l'array di byte.
  149.      *
  150.      * @param date Array di Byte da trasformare in file.
  151.      * @param fileName Nome del File
  152.      */  
  153.     public void generaFile(byte[]date, String fileName) throws DriverRegistroServiziException{

  154.         FileOutputStream fos = null;
  155.         try{
  156.             File file = new File(fileName);
  157.             if(file.exists()){
  158.                 if(!file.delete()) {
  159.                     // ignore
  160.                 }
  161.             }  

  162.             fos =new FileOutputStream(fileName);
  163.             fos.write(date);
  164.             fos.close();

  165.         }catch(Exception e){
  166.             try{
  167.                 if( fos != null )
  168.                     fos.close();
  169.             } catch(Exception er) {
  170.                 // close
  171.             }
  172.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante il salvataggio del file ("+fileName+"): "+e.getMessage(),e);
  173.         }
  174.     }


  175.     /**
  176.      * Legge un indice dei servizi di un soggetto
  177.      *
  178.      * @param directoryServiziSoggetto
  179.      * @return L'indice dei servizi di un soggetto
  180.      * @throws DriverRegistroServiziException
  181.      */
  182.     public String getContenutoIndexServizi( String directoryServiziSoggetto ) throws DriverRegistroServiziException{
  183.         String indexServizi = directoryServiziSoggetto;
  184.         if(directoryServiziSoggetto.endsWith(File.separator)==false){
  185.             indexServizi = directoryServiziSoggetto + File.separator;
  186.         }
  187.         indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
  188.         BufferedReader bf = null;
  189.         FileReader fr = null;
  190.         try{

  191.             File f = new File(indexServizi);
  192.             StringBuilder contenuto = new StringBuilder();
  193.             if(f.exists()){
  194.                 if(f.isFile()==false){
  195.                     throw new Exception("Non e' un file regolare");
  196.                 }
  197.                 fr = new FileReader(f);
  198.                 bf = new BufferedReader(fr);
  199.                 char[]buffer = new char[1024];
  200.                 int byteLetti = -1;
  201.                 while( (byteLetti = fr.read(buffer))!=-1){
  202.                     contenuto.append(buffer,0,byteLetti);  
  203.                 }
  204.             }

  205.             if(contenuto.length()>0)
  206.                 return contenuto.toString();
  207.             else
  208.                 return null;

  209.         }catch(Exception e){
  210.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la elaborazione del file di index ("+indexServizi+"): "+e.getMessage(),e);
  211.         }
  212.         finally {
  213.             try{
  214.                 if( fr != null )
  215.                     fr.close();
  216.             } catch(Exception er) {
  217.                 // close
  218.             }
  219.             try{
  220.                 if( bf != null )
  221.                     bf.close();
  222.             } catch(Exception er) {
  223.                 // close
  224.             }
  225.         }
  226.     }

  227.     /**
  228.      * Genera l'indice dei servizi
  229.      *
  230.      * @param directoryServiziSoggetto
  231.      * @param contenuto
  232.      * @throws DriverRegistroServiziException
  233.      */
  234.     private void setContenutoIndexServizi( String directoryServiziSoggetto , String contenuto ) throws DriverRegistroServiziException{

  235.         // index name
  236.         String indexServizi = directoryServiziSoggetto;
  237.         if(directoryServiziSoggetto.endsWith(File.separator)==false){
  238.             indexServizi = directoryServiziSoggetto + File.separator;
  239.         }
  240.         indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;

  241.         if(contenuto==null)
  242.             throw new DriverRegistroServiziException("Contenuto da inserire nell'indice dei servizi is null");

  243.         // intestazione
  244.         String content = null;
  245.         if( contenuto.startsWith(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST)==false ){
  246.             content = CostantiXMLRepository.INDEX_SERVIZI_MANIFEST + contenuto;
  247.         }else{
  248.             content = contenuto;
  249.         }
  250.         FileOutputStream fos = null;
  251.         try{

  252.             File f = new File(indexServizi);
  253.             if(f.exists()){
  254.                 if(!f.delete()) {
  255.                     // ignore
  256.                 }
  257.             }  

  258.             fos = new FileOutputStream(f);
  259.             fos.write(content.getBytes());
  260.             fos.close();

  261.         }catch(Exception e){
  262.             try{
  263.                 if( fos != null )
  264.                     fos.close();
  265.             } catch(Exception er) {
  266.                 // close
  267.             }
  268.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'impostazione del file di index ("+indexServizi+"): "+e.getMessage(),e);
  269.         }
  270.     }
  271.     private void setContenutoIndexServizi(String directoryServiziSoggetto,IDServizio[]index)throws DriverRegistroServiziException {

  272.         // genero stringa
  273.         StringBuilder bf = new StringBuilder();
  274.         for(int i=0; i<index.length; i++){
  275.             bf.append(this.generaIndexServiziLine(index[i]));
  276.         }
  277.         this.setContenutoIndexServizi(directoryServiziSoggetto, bf.toString());
  278.     }

  279.     /**
  280.      * Genera la linea di un servizio nell'indice
  281.      * @return linea di un servizio nell'indice
  282.      */
  283.     private String generaIndexServiziLine(IDServizio idS) throws DriverRegistroServiziException{
  284.         if(idS.getUriAccordoServizioParteComune()==null){
  285.             throw new DriverRegistroServiziException("[generaIndexServiziLine] uri accordo is null");
  286.         }
  287.         if(idS.getTipo()==null){
  288.             throw new DriverRegistroServiziException("[generaIndexServiziLine] tipo Servizio is null");
  289.         }
  290.         if(idS.getNome()==null){
  291.             throw new DriverRegistroServiziException("[generaIndexServiziLine] nome Servizio is null");
  292.         }
  293.         if(idS.getVersione()==null){
  294.             throw new DriverRegistroServiziException("[generaIndexServiziLine] versione Servizio is null");
  295.         }
  296.         if(idS.getSoggettoErogatore()==null){
  297.             throw new DriverRegistroServiziException("[generaIndexServiziLine] soggetto Erogatore is null");
  298.         }
  299.         if(idS.getSoggettoErogatore().getTipo()==null){
  300.             throw new DriverRegistroServiziException("[generaIndexServiziLine] tipo soggetto Erogatore is null");
  301.         }
  302.         if(idS.getSoggettoErogatore().getNome()==null){
  303.             throw new DriverRegistroServiziException("[generaIndexServiziLine] nome soggetto Erogatore is null");
  304.         }
  305.         return idS.getUriAccordoServizioParteComune() +CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+
  306.             idS.getSoggettoErogatore().getTipo()+"/"+idS.getSoggettoErogatore().getNome()+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+
  307.             idS.getTipo()+"/"+idS.getNome()+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+idS.getVersione()+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+
  308.             "tipologiaServizio("+idS.getTipologia().getValue()+")"+"\n";
  309.     }

  310.     private boolean existsIndexServizi(String directoryServiziSoggetto){

  311.         String indexServizi = directoryServiziSoggetto;
  312.         if(directoryServiziSoggetto.endsWith(File.separator)==false){
  313.             indexServizi = directoryServiziSoggetto + File.separator;
  314.         }
  315.         indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;

  316.         File f = new File(indexServizi);
  317.         return f.exists();
  318.     }
  319.    
  320.     private boolean isIndexServizi(File file)throws DriverRegistroServiziException{

  321.         FileInputStream fin = null;
  322.         ByteArrayOutputStream bout = null;
  323.         try{
  324.             fin = new FileInputStream(file);
  325.             byte[] readB = new byte[1024];
  326.             int letti =0;
  327.             bout = new ByteArrayOutputStream();
  328.             while( (letti=fin.read(readB))!=-1 ){
  329.                 bout.write(readB,0,letti);
  330.             }
  331.             fin.close();
  332.             if(bout.size()>0 && bout.toString()!=null && bout.toString().startsWith(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST))
  333.                 return true;
  334.             else
  335.                 return false;
  336.         }catch(Exception e){
  337.             try{
  338.                 if( fin != null )
  339.                     fin.close();
  340.             } catch(Exception er) {
  341.                 // close
  342.             }
  343.             try{
  344.                 if( bout != null )
  345.                     bout.close();
  346.             } catch(Exception er) {
  347.                 // close
  348.             }
  349.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante il check del file di index ("+file.getName()+"): "+e.getMessage(),e);
  350.         }
  351.     }

  352.     private void deleteIndexServizi(String directoryServiziSoggetto)throws DriverRegistroServiziException{

  353.         String indexServizi = directoryServiziSoggetto;
  354.         if(directoryServiziSoggetto.endsWith(File.separator)==false){
  355.             indexServizi = directoryServiziSoggetto + File.separator;
  356.         }
  357.         indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
  358.         try{
  359.             File f = new File(indexServizi);
  360.             if(f.exists()){
  361.                 if (f.delete()==false){
  362.                     throw new DriverRegistroServiziException("Eliminazione file di index ["+indexServizi+"] non riuscita");
  363.                 }
  364.             }
  365.         }catch(DriverRegistroServiziException de){
  366.             throw de;
  367.         }catch(Exception e){
  368.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'eliminazione del file di index ("+indexServizi+"): "+e.getMessage(),e);
  369.         }
  370.     }

  371.     /**
  372.      * Legge un index dei servizi
  373.      *
  374.      * @param contenuto
  375.      * @return La lettura di un indice dei servizi come array di IDServizio
  376.      */
  377.     public static IDServizio[] mappingIndexServizi(String contenuto)throws DriverRegistroServiziException{
  378.         XMLLib xmlLib = new XMLLib(null,null);
  379.         return xmlLib.readIndexServizi(contenuto);
  380.     }
  381.    
  382.     /**
  383.      * Legge un index dei servizi
  384.      *
  385.      * @param directoryServiziSoggetto
  386.      * @return indice dei servizi
  387.      */
  388.     private IDServizio[] readIndexServizi(String contenuto)throws DriverRegistroServiziException{

  389.         try{

  390.             if(contenuto.toString().startsWith(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST)==false){
  391.                 throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop");
  392.             }

  393.            
  394.             String cont = contenuto.replace(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST,"");
  395.             StringTokenizer st = new StringTokenizer(cont,"\n");
  396.             List<IDServizio> ids = new ArrayList<IDServizio>();
  397.             while(st.hasMoreTokens()){
  398.                 String line = null;
  399.                 try{
  400.                     line = st.nextToken();
  401.                 }catch(Exception e){
  402.                     break;
  403.                 }

  404.                
  405.                 byte condizioneUscita = 0;
  406.                 if( (line!=null) && (line.length()>0) && (line.getBytes()[0]==condizioneUscita) )
  407.                     break;

  408.                 String [] splitLine = null;
  409.                 if(line!=null) {
  410.                     splitLine = line.split(CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE);
  411.                 }
  412.                 if(splitLine==null){
  413.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"]");
  414.                 }else if(splitLine.length!=5){
  415.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"][lenght:"+splitLine.length+"]");
  416.                 }else if(splitLine[0]==null){
  417.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"][split[0]:"+splitLine[0]+"]");
  418.                 }else if(splitLine[1]==null){
  419.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"][split[1]:"+splitLine[1]+"]");
  420.                 }else if(splitLine[2]==null){
  421.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"][split[2]:"+splitLine[2]+"]");
  422.                 }else if(splitLine[3]==null){
  423.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"][split[3]:"+splitLine[3]+"]");
  424.                 }else if(splitLine[4]==null){
  425.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"][split[4]:"+splitLine[4]+"]");
  426.                 }else if(splitLine[1].indexOf("/")==-1){
  427.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') '/' ["+line+"][split[1]:"+splitLine[1]+"]");
  428.                 }else if(splitLine[2].indexOf("/")==-1){
  429.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') '/' ["+line+"][split[2]:"+splitLine[2]+"]");
  430.                 }else if( (splitLine[4].equals("tipologiaServizio(normale)")==false) && (splitLine[4].equals("tipologiaServizio(correlato)")==false) ){
  431.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') 'tipologiaServizio' ["+line+"][split[4]:"+splitLine[4]+"]");
  432.                 }

  433.                 // soggetto Erogatore
  434.                 IDSoggetto idSoggettoErogatore = null;
  435.                 String [] splitSoggetto = splitLine[1].split("/");
  436.                 if(splitSoggetto==null || splitSoggetto.length!=2 || splitSoggetto[0]==null || splitSoggetto[1]==null){
  437.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read soggetto ':') ["+splitLine[1]+"]");
  438.                 }
  439.                 idSoggettoErogatore = new IDSoggetto(splitSoggetto[0], splitSoggetto[1]);
  440.                
  441.                 // servizio
  442.                 String [] splitServizio = splitLine[2].split("/");
  443.                 if(splitServizio==null || splitServizio.length!=2 || splitServizio[0]==null || splitServizio[1]==null){
  444.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read servizio ':') ["+splitLine[2]+"]");
  445.                 }
  446.                 String tipoServizio = splitServizio[0];
  447.                 String nomeServizio = splitServizio[1];
  448.                
  449.                 // versioneServizio
  450.                 Integer versioneServizio = null;
  451.                 try{
  452.                     versioneServizio = Integer.parseInt(splitLine[3]);
  453.                 }catch(Exception e){
  454.                     throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read versioneServizio) ["+splitLine[3]+"]: " +e.getMessage(),e);
  455.                 }
  456.                
  457.                 IDServizio idServ = this.idServizioFactory.getIDServizioFromValues(tipoServizio, nomeServizio, idSoggettoErogatore, versioneServizio);
  458.                
  459.                 // uri accordo
  460.                 String uriAccordoServizioParteComune = splitLine[0];
  461.                 idServ.setUriAccordoServizioParteComune(uriAccordoServizioParteComune);
  462.                
  463.                 // servizio correlato
  464.                 if( splitLine[3].equals("tipologiaServizio(correlato)") )
  465.                     idServ.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.CORRELATO);
  466.                 else
  467.                     idServ.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.NORMALE);
  468.                 ids.add(idServ);
  469.             }

  470.             if(ids.size()==0){
  471.                 return null;
  472.             }else{
  473.                 IDServizio [] rIDS = new IDServizio[1];
  474.                 return ids.toArray(rIDS);
  475.             }

  476.         }catch(DriverRegistroServiziException de){
  477.             throw de;
  478.         }catch(Exception e){
  479.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la lettura del file di index: "+e.getMessage(),e);
  480.         }
  481.     }

  482.     /**
  483.      * Legge un file di index dei servizi
  484.      *
  485.      * @param directoryServiziSoggetto
  486.      * @return index dei servizi
  487.      */
  488.     private IDServizio[] readIndexServiziFromFile(String directoryServiziSoggetto)throws DriverRegistroServiziException{

  489.         String indexServizi = directoryServiziSoggetto;
  490.         if(directoryServiziSoggetto.endsWith(File.separator)==false){
  491.             indexServizi = directoryServiziSoggetto + File.separator;
  492.         }
  493.         indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;

  494.         BufferedReader bf = null;
  495.         FileReader fr = null;
  496.         try{

  497.             File f = new File(indexServizi);
  498.             StringBuilder contenuto = new StringBuilder();
  499.             if(f.exists()){
  500.                 if(f.isFile()==false){
  501.                     throw new Exception("Non e' un file regolare");
  502.                 }
  503.                 fr = new FileReader(f);
  504.                 bf = new BufferedReader(fr);
  505.                 char[]buffer = new char[1024];
  506.                 int letti=0;
  507.                 while( (letti=fr.read(buffer))!=-1){
  508.                     contenuto.append(buffer,0,letti);  
  509.                 }
  510.             }else{
  511.                 throw new DriverRegistroServiziException("File di index non esistente");
  512.             }

  513.             return this.readIndexServizi(contenuto.toString());

  514.         }catch(DriverRegistroServiziException de){
  515.             throw de;
  516.         }catch(Exception e){
  517.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la lettura del file di index ("+indexServizi+"): "+e.getMessage(),e);
  518.         }finally{
  519.             try{
  520.                 if( fr != null )
  521.                     fr.close();
  522.             } catch(Exception er) {
  523.                 // close
  524.             }
  525.             try{
  526.                 if( bf != null )
  527.                     bf.close();
  528.             } catch(Exception er) {
  529.                 // close
  530.             }
  531.         }
  532.     }









  533.     /* ---------------- GENERAZIONE XML ACCORDO DI COOPERAZIONE ------------------------- */
  534.    
  535.     public String mappingIDAccordoCooperazioneToFileName(IDAccordoCooperazione idAccordo)throws DriverRegistroServiziException{
  536.         return this.mappingUriToFileName_accordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordo));
  537.     }
  538.     public String mappingUriToFileName_accordoCooperazione(String uriAccordo)throws DriverRegistroServiziException{
  539.         String tmp = uriAccordo.replaceAll("/", "_");
  540.         tmp = tmp.replaceAll(":", "_");
  541.         return tmp;
  542.     }
  543.    
  544.     /**
  545.      * Metodo che controlla se l'accordo risulta gia' registrato
  546.      *
  547.      * @param idAccordo ID dell'accordo di cooperazione da creare/modificare
  548.      * @return true se l'accordo risulta registrato, false altrimenti.
  549.      *
  550.      */  
  551.     public boolean existsAccordoCooperazione(IDAccordoCooperazione idAccordo)throws DriverRegistroServiziException{

  552.         String fileNameAccordo = null;
  553.         try {
  554.             fileNameAccordo = mappingIDAccordoCooperazioneToFileName(idAccordo);
  555.             File fileXML = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + fileNameAccordo + ".xml");
  556.             File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.ALLEGATI_DIR +fileNameAccordo);
  557.             File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR +fileNameAccordo);
  558.             if( (fileXML.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
  559.                 return false;
  560.             }else
  561.                 return true;
  562.         }catch(Exception e){
  563.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE+")  ["+fileNameAccordo+"]: "+e.getMessage(),e);
  564.         }
  565.        
  566.     }

  567.     /**
  568.      * Metodo che si occupa della generazione/modifica di un file XML a partire da un accordo di cooperazione.
  569.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  570.      *
  571.      * @param idAccordo ID dell'accordo di cooperazione da creare/modificare
  572.      * @param accordo Dati dell'accordo di cooperazione da trasformare in XML.
  573.      *
  574.      */  
  575.     public void createAccordoCooperazione(IDAccordoCooperazione idAccordo,AccordoCooperazione accordo) throws DriverRegistroServiziException{

  576.         String fileNameAccordo = null;
  577.         try {
  578.             fileNameAccordo = mappingIDAccordoCooperazioneToFileName(idAccordo);
  579.             String accordoDir = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator;
  580.             String accordoOLD = fileNameAccordo;
  581.             String accordoNEW = mappingUriToFileName_accordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromAccordo(accordo));

  582.             if(accordoOLD.equals(accordoNEW)==false){
  583.                 // Esiste gia' deve essere modificato il nome.
  584.                 // Controllo esistenza per modifica
  585.                 File fileXML = new File(accordoDir + accordoOLD + ".xml");
  586.                 File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoOLD);
  587.                 File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoOLD);
  588.                
  589.                 if( (fileXML.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
  590.                     throw new DriverRegistroServiziException("Richiesta modifica di un accordo non registrato ["+accordoOLD + "]");
  591.                 }
  592.                 else{
  593.                     try{
  594.                         // elimino vecchia definizione Accordo Servizio
  595.                         if(fileXML.delete()==false){
  596.                             throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per l'accordo ["+fileXML.getAbsolutePath()+"] non riuscita");
  597.                         }
  598.                         // Elimino vecchi allegati
  599.                         String[]listAllegati = dirAllegati.list();
  600.                         if(listAllegati!=null) {
  601.                             for(int j=0; j<listAllegati.length;j++){
  602.                                 File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
  603.                                 if(fileAllegati.delete()==false){
  604.                                     throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  605.                                 }
  606.                             }
  607.                         }
  608.                         // Elimina vecchia directory degli allegati
  609.                         if(dirAllegati.delete()==false){
  610.                             throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+accordoOLD + "] non riuscita");
  611.                         }
  612.                         // Elimino vecche specificheSemiformali
  613.                         String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
  614.                         if(listSpecificheSemiformali!=null) {
  615.                             for(int j=0; j<listSpecificheSemiformali.length;j++){
  616.                                 File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
  617.                                 if(fileSpecificheSemiformali.delete()==false){
  618.                                     throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  619.                                 }
  620.                             }
  621.                         }
  622.                         // Elimina vecchia directory delle specifiche semiformali
  623.                         if(dirSpecificheSemiformali.delete()==false){
  624.                             throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+accordoOLD + "] non riuscita");
  625.                         }

  626.                     }catch(Exception io){
  627.                         throw new DriverRegistroServiziException("Rinominazione della directory/file per l'accordo ["+accordoOLD+ "] non riuscita: "+io.toString());
  628.                     }
  629.                 }
  630.             }


  631.             // Crea directory
  632.             File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW);
  633.             File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW);
  634.             String prefixUrlAllegato = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  635.             String prefixUrlSpecificaSemiformale = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  636.            
  637.             // Gestione Allegati
  638.             if(dirAllegati.exists()==false){
  639.                 if(dirAllegati.mkdir()==false){
  640.                     throw new DriverRegistroServiziException("Creazione della directory per gli allegati dell'accordo ["+accordoNEW + "] non riuscita");
  641.                 }  
  642.             } else {
  643.                 // elimino vecchi allegati
  644.                 String [] files = dirAllegati.list();
  645.                 if(files!=null){
  646.                     for(int i=0; i<files.length; i++){
  647.                         File file = new File(files[i]);
  648.                         if(file.exists()){
  649.                             if(file.delete()==false){
  650.                                 throw new DriverRegistroServiziException("Eliminazione allegato ["+files[i]+ "] non riuscita");
  651.                             }
  652.                         }
  653.                     }
  654.                 }
  655.             }
  656.             // Gestione SpecificheSemiformali
  657.             if(dirSpecificheSemiformali.exists()==false){
  658.                 if(dirSpecificheSemiformali.mkdir()==false){
  659.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche semiformali dell'accordo ["+accordoNEW + "] non riuscita");
  660.                 }  
  661.             } else {
  662.                 // elimino vecche specifiche semiformali
  663.                 String [] files = dirSpecificheSemiformali.list();
  664.                 if(files!=null){
  665.                     for(int i=0; i<files.length; i++){
  666.                         File file = new File(files[i]);
  667.                         if(file.exists()){
  668.                             if(file.delete()==false){
  669.                                 throw new DriverRegistroServiziException("Eliminazione spacifica semiformale ["+files[i]+ "] non riuscita");
  670.                             }
  671.                         }
  672.                     }
  673.                 }
  674.             }

  675.             // File che definisce l'accordo
  676.             String fileXML = accordoDir + accordoNEW + ".xml";

  677.             // Definizione accordo
  678.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
  679.            
  680.             // Allegati
  681.             for(int i=0; i<accordo.sizeAllegatoList();i++){
  682.                 String path = null;
  683.                 if(accordo.getAllegato(i).getFile().startsWith(prefixUrlAllegato)){
  684.                     path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile().substring(prefixUrlAllegato.length());
  685.                 }else{
  686.                     path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile();
  687.                 }
  688.                 generaFile(accordo.getAllegato(i).getByteContenuto(),path);
  689.                 String url = prefixUrlAllegato + accordo.getAllegato(i).getFile();
  690.                 accordo.getAllegato(i).setFile(url);
  691.             }
  692.            
  693.             // SpecificheSemiformali
  694.             for(int i=0; i<accordo.sizeSpecificaSemiformaleList();i++){
  695.                 String path = null;
  696.                 if(accordo.getSpecificaSemiformale(i).getFile().startsWith(prefixUrlSpecificaSemiformale)){
  697.                     path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile().substring(prefixUrlSpecificaSemiformale.length());
  698.                 }else{
  699.                     path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile();
  700.                 }
  701.                 generaFile(accordo.getSpecificaSemiformale(i).getByteContenuto(),path);
  702.                 String url = prefixUrlSpecificaSemiformale + accordo.getSpecificaSemiformale(i).getFile();
  703.                 accordo.getSpecificaSemiformale(i).setFile(url);
  704.             }

  705.             // generazione XML
  706.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
  707.             registroXML.addAccordoCooperazione(accordo);
  708.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  709.         }catch(DriverRegistroServiziException e){
  710.             throw e;
  711.         }catch(Exception e){
  712.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML dell'accordo  ["+fileNameAccordo+"]: "+e.getMessage(),e);
  713.         }
  714.     }  

  715.     /**
  716.      * Metodo che si occupa dell'eliminazione dell'accordo dal repository.
  717.      *
  718.      * @param idAccordo ID dell'accordo da eliminare
  719.      */  
  720.     public void deleteAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException {

  721.         String fileNameAccordo = null;
  722.         try {
  723.             fileNameAccordo = mappingIDAccordoCooperazioneToFileName(idAccordo);
  724.             String fileXML = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + fileNameAccordo + ".xml";
  725.             File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.ALLEGATI_DIR + fileNameAccordo);
  726.             File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + fileNameAccordo);
  727.            
  728.             // Elimino accordo
  729.             File accordo = new File(fileXML);
  730.             if(accordo.delete() == false){
  731.                 throw new DriverRegistroServiziException("Eliminazione XML dell'accordo ["+fileNameAccordo+"] non riuscta");
  732.             }
  733.             // Elimino vecchi allegati
  734.             String[]listAllegati = dirAllegati.list();
  735.             if(listAllegati!=null) {
  736.                 for(int j=0; j<listAllegati.length;j++){
  737.                     File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
  738.                     if(fileAllegati.delete()==false){
  739.                         throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  740.                     }
  741.                 }
  742.             }
  743.             // Elimina vecchia directory degli allegati
  744.             if(dirAllegati.delete()==false){
  745.                 throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+fileNameAccordo + "] non riuscita");
  746.             }
  747.             // Elimino vecche specificheSemiformali
  748.             String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
  749.             if(listSpecificheSemiformali!=null) {
  750.                 for(int j=0; j<listSpecificheSemiformali.length;j++){
  751.                     File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
  752.                     if(fileSpecificheSemiformali.delete()==false){
  753.                         throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  754.                     }
  755.                 }
  756.             }
  757.             // Elimina vecchia directory delle specifiche semiformali
  758.             if(dirSpecificheSemiformali.delete()==false){
  759.                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+fileNameAccordo + "] non riuscita");
  760.             }

  761.         }catch(DriverRegistroServiziException e){
  762.             throw e;
  763.         }catch(Exception e){
  764.             throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML dell'accordo ["+fileNameAccordo+"]: "+e.getMessage(),e);
  765.         }
  766.     }  

  767.     /**
  768.      * Lista di accordi registrati
  769.      *
  770.      * @return lista di accordi registrati.
  771.      *
  772.      */  
  773.     public AccordoCooperazione[] getAccordiCooperazione()throws DriverRegistroServiziException{

  774.         AccordoCooperazione [] accordiRegistrati = null;
  775.         try {
  776.             File dir = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE);
  777.             if(dir.exists()==false)
  778.                 return null;
  779.             File[] accordi = dir.listFiles();
  780.             int numAccordi = 0;
  781.             if(accordi!=null){
  782.                 for(int i=0; i<accordi.length;i++){
  783.                     if(accordi[i].isFile()){
  784.                         numAccordi++;
  785.                     }
  786.                 }
  787.             }
  788.             if(numAccordi>0){
  789.                 accordiRegistrati = new AccordoCooperazione[numAccordi];
  790.                 for(int i=0,index=0; i<accordi.length;i++){
  791.                     if(accordi[i].isFile()){
  792.                         org.openspcoop2.core.registry.RegistroServizi r =
  793.                             (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(accordi[i].getAbsolutePath(),
  794.                                     org.openspcoop2.core.registry.RegistroServizi.class);
  795.                         accordiRegistrati[index] = r.getAccordoCooperazione(0);
  796.                         index++;
  797.                     }
  798.                 }
  799.             }
  800.             return accordiRegistrati;
  801.         }catch(Exception e){
  802.             e.printStackTrace(System.err);
  803.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca degli accordi di cooperazione: "+e.getMessage(),e);
  804.         }
  805.     }
  806.    
  807.    
  808.    
  809.    
  810.    
  811.    
  812.    
  813.    
  814.    
  815.    
  816.    
  817.    
  818.    
  819.     /* ---------------- GENERAZIONE XML ACCORDO DI SERVIZIO ------------------------- */
  820.    
  821.     public String mappingIDAccordoToFileName(IDAccordo idAccordo)throws DriverRegistroServiziException{
  822.         return this.mappingUriToFileName(this.idAccordoFactory.getUriFromIDAccordo(idAccordo));
  823.     }
  824.     public String mappingUriToFileName(String uriAccordo)throws DriverRegistroServiziException{
  825.         String tmp = uriAccordo.replaceAll("/", "_");
  826.         tmp = tmp.replaceAll(":", "_");
  827.         return tmp;
  828.     }
  829.    
  830.     /**
  831.      * Metodo che controlla se l'accordo risulta gia' registrato
  832.      *
  833.      * @param idAccordo ID dell'accordo di servizio da creare/modificare
  834.      * @return true se l'accordo risulta registrato, false altrimenti.
  835.      *
  836.      */  
  837.     public boolean existsAccordoServizioParteComune(IDAccordo idAccordo)throws DriverRegistroServiziException{

  838.         String fileNameAccordo = null;
  839.         try {
  840.             fileNameAccordo = mappingIDAccordoToFileName(idAccordo);
  841.             File fileXML = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + fileNameAccordo + ".xml");
  842.             File dirWSDL = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.WSDL_DIR +fileNameAccordo);
  843.             File dirSpecificheConversazioni = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR +fileNameAccordo);
  844.             File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.ALLEGATI_DIR +fileNameAccordo);
  845.             File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR +fileNameAccordo);
  846.             if( (fileXML.exists()==false) || (dirWSDL.exists()==false) || (dirSpecificheConversazioni.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
  847.                 return false;
  848.             }else
  849.                 return true;
  850.         }catch(Exception e){
  851.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+")  ["+fileNameAccordo+"]: "+e.getMessage(),e);
  852.         }
  853.        
  854.     }

  855.     /**
  856.      * Metodo che si occupa della generazione/modifica di un file XML a partire da un accordo di servizio.
  857.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  858.      *
  859.      * @param idAccordo ID dell'accordo di servizio da creare/modificare
  860.      * @param accordo Dati dell'accordo di servizio da trasformare in XML.
  861.      *
  862.      */  
  863.     public void createAccordoServizioParteComune(IDAccordo idAccordo,AccordoServizioParteComune accordo) throws DriverRegistroServiziException{

  864.         String fileNameAccordo = null;
  865.         try {
  866.             fileNameAccordo = mappingIDAccordoToFileName(idAccordo);
  867.             String accordoDir = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator;
  868.             String accordoOLD = fileNameAccordo;
  869.             String accordoNEW = mappingUriToFileName(this.idAccordoFactory.getUriFromAccordo(accordo));

  870.             if(accordoOLD.equals(accordoNEW)==false){
  871.                 // Esiste gia' deve essere modificato il nome.
  872.                 // Controllo esistenza per modifica
  873.                 File fileXML = new File(accordoDir + accordoOLD + ".xml");
  874.                 File dirWSDL = new File(accordoDir + CostantiXMLRepository.WSDL_DIR + accordoOLD);
  875.                 File dirSpecificheConversazioni = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + accordoOLD);
  876.                 File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoOLD);
  877.                 File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoOLD);
  878.                 File dirSpecificheCoordinamento = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + accordoOLD);
  879.                
  880.                 if( (fileXML.exists()==false) || (dirWSDL.exists()==false) || (dirSpecificheConversazioni.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
  881.                     throw new DriverRegistroServiziException("Richiesta modifica di un accordo non registrato ["+accordoOLD + "]");
  882.                 }
  883.                 else{
  884.                     try{
  885.                         // elimino vecchia definizione Accordo Servizio
  886.                         if(fileXML.delete()==false){
  887.                             throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per l'accordo ["+fileXML.getAbsolutePath()+"] non riuscita");
  888.                         }
  889.                         // Elimino vecchi WSDL
  890.                         String[]listWSDL = dirWSDL.list();
  891.                         if(listWSDL!=null) {
  892.                             for(int j=0; j<listWSDL.length;j++){
  893.                                 File fileWSDL = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
  894.                                 if(fileWSDL.delete()==false){
  895.                                     throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWSDL.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  896.                                 }
  897.                             }
  898.                         }
  899.                         // Elimina vecchia directory dei WSDL
  900.                         if(dirWSDL.delete()==false){
  901.                             throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL dell'accordo ["+accordoOLD + "] non riuscita");
  902.                         }
  903.                         // Elimino vecche specofiche conversazione
  904.                         String[]listSpecificheConversazione = dirSpecificheConversazioni.list();
  905.                         if(listSpecificheConversazione!=null) {
  906.                             for(int j=0; j<listSpecificheConversazione.length;j++){
  907.                                 File fileSpecificaConversazione = new File(dirSpecificheConversazioni.getAbsolutePath() + File.separator +listSpecificheConversazione[j]);
  908.                                 if(fileSpecificaConversazione.delete()==false){
  909.                                     throw new DriverRegistroServiziException("Eliminazione del file di specifica conversazione ["+ fileSpecificaConversazione.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  910.                                 }
  911.                             }
  912.                         }
  913.                         // Elimina vecchia directory delle specifiche di conversazione
  914.                         if(dirSpecificheConversazioni.delete()==false){
  915.                             throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di conversazione dell'accordo ["+accordoOLD + "] non riuscita");
  916.                         }
  917.                         // Elimino vecchi allegati
  918.                         String[]listAllegati = dirAllegati.list();
  919.                         if(listAllegati!=null) {
  920.                             for(int j=0; j<listAllegati.length;j++){
  921.                                 File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
  922.                                 if(fileAllegati.delete()==false){
  923.                                     throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  924.                                 }
  925.                             }
  926.                         }
  927.                         // Elimina vecchia directory degli allegati
  928.                         if(dirAllegati.delete()==false){
  929.                             throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+accordoOLD + "] non riuscita");
  930.                         }
  931.                         // Elimino vecche specificheSemiformali
  932.                         String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
  933.                         if(listSpecificheSemiformali!=null) {
  934.                             for(int j=0; j<listSpecificheSemiformali.length;j++){
  935.                                 File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
  936.                                 if(fileSpecificheSemiformali.delete()==false){
  937.                                     throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  938.                                 }
  939.                             }
  940.                         }
  941.                         // Elimina vecchia directory delle specifiche semiformali
  942.                         if(dirSpecificheSemiformali.delete()==false){
  943.                             throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+accordoOLD + "] non riuscita");
  944.                         }
  945.                         // Gestione specifiche di coordinamento se esistenti
  946.                         if(dirSpecificheCoordinamento.exists()){
  947.                             // Elimino vecche specificheCoordinamento
  948.                             String[]listSpecificheCoordinamento = dirSpecificheCoordinamento.list();
  949.                             if(listSpecificheCoordinamento!=null) {
  950.                                 for(int j=0; j<listSpecificheCoordinamento.length;j++){
  951.                                     File fileSpecificheCoordinamento = new File(dirSpecificheCoordinamento.getAbsolutePath() + File.separator +listSpecificheCoordinamento[j]);
  952.                                     if(fileSpecificheCoordinamento.delete()==false){
  953.                                         throw new DriverRegistroServiziException("Eliminazione della specifica coordinamento ["+ fileSpecificheCoordinamento.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
  954.                                     }
  955.                                 }
  956.                             }
  957.                             // Elimina vecchia directory delle specifiche coordinamento
  958.                             if(dirSpecificheCoordinamento.delete()==false){
  959.                                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche coordinamento dell'accordo ["+accordoOLD + "] non riuscita");
  960.                             }
  961.                         }

  962.                     }catch(Exception io){
  963.                         throw new DriverRegistroServiziException("Rinominazione della directory/file per l'accordo ["+accordoOLD+ "] non riuscita: "+io.toString());
  964.                     }
  965.                 }
  966.             }


  967.             // Crea directory dei WSDL
  968.             File dirWSDL = new File(accordoDir +CostantiXMLRepository.WSDL_DIR +accordoNEW);
  969.             File dirSpecificaConversazioni = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + accordoNEW);
  970.             File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW);
  971.             File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW);
  972.             File dirSpecificheCoordinamento = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + accordoNEW);
  973.             String prefixUrlWSDL = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.WSDL_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  974.             String prefixUrlSpecificaConversazione = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  975.             String prefixUrlAllegato = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  976.             String prefixUrlSpecificaSemiformale = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  977.             String prefixUrlSpecificaCoordinamento = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + accordoNEW +  CostantiXMLRepository.URL_SEPARATOR;
  978.            
  979.             // Gestione WSDL
  980.             if(dirWSDL.exists()==false){
  981.                 if(dirWSDL.mkdir()==false){
  982.                     throw new DriverRegistroServiziException("Creazione della directory per i WSDL dell'accordo ["+accordoNEW + "] non riuscita");
  983.                 }  
  984.             } else {
  985.                 // elimino vecchi wsdl

  986.                 // definitorio
  987.                 String definitorioPath = dirWSDL.getAbsolutePath() + File.separator  + CostantiXMLRepository.WSDL_DEFINITORIO;
  988.                 File definitorioWSDL = new File(definitorioPath);
  989.                 if(definitorioWSDL.exists()){
  990.                     if(definitorioWSDL.delete()==false){
  991.                         throw new DriverRegistroServiziException("Eliminazione WSDL definitorio ["+definitorioPath+ "] non riuscita");
  992.                     }
  993.                 }

  994.                 // concettuale
  995.                 String concettualePath = dirWSDL.getAbsolutePath() + File.separator  + CostantiXMLRepository.WSDL_CONCETTUALE;
  996.                 File concettualeWSDL = new File(concettualePath);
  997.                 if(concettualeWSDL.exists()){
  998.                     if(concettualeWSDL.delete()==false){
  999.                         throw new DriverRegistroServiziException("Eliminazione WSDL concettuale ["+concettualePath+ "] non riuscita");
  1000.                     }
  1001.                 }

  1002.                 // logicoErogatore
  1003.                 String logicoErogatorePath = dirWSDL.getAbsolutePath() + File.separator  + CostantiXMLRepository.WSDL_LOGICO_EROGATORE;
  1004.                 File logicoErogatoreWSDL = new File(logicoErogatorePath);
  1005.                 if(logicoErogatoreWSDL.exists()){
  1006.                     if(logicoErogatoreWSDL.delete()==false){
  1007.                         throw new DriverRegistroServiziException("Eliminazione WSDL logico Erogatore ["+logicoErogatorePath+ "] non riuscita");
  1008.                     }
  1009.                 }

  1010.                 // logicoFruitore
  1011.                 String logicoFruitorePath = dirWSDL.getAbsolutePath() + File.separator  + CostantiXMLRepository.WSDL_LOGICO_FRUITORE;
  1012.                 File logicoFruitoreWSDL = new File(logicoFruitorePath);
  1013.                 if(logicoFruitoreWSDL.exists()){
  1014.                     if(logicoFruitoreWSDL.delete()==false){
  1015.                         throw new DriverRegistroServiziException("Eliminazione WSDL logico Fruitore ["+logicoFruitorePath+ "] non riuscita");
  1016.                     }
  1017.                 }
  1018.             }  
  1019.             // Gestione Specifica Conversazioni
  1020.             if(dirSpecificaConversazioni.exists()==false){
  1021.                 if(dirSpecificaConversazioni.mkdir()==false){
  1022.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche delle conversazioni dell'accordo ["+accordoNEW + "] non riuscita");
  1023.                 }  
  1024.             } else {
  1025.                 // elimino vecchie specifiche conversazioni

  1026.                 // concettuale
  1027.                 String concettualePath = dirSpecificaConversazioni.getAbsolutePath() + File.separator  + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_CONCETTUALE;
  1028.                 File concettuale = new File(concettualePath);
  1029.                 if(concettuale.exists()){
  1030.                     if(concettuale.delete()==false){
  1031.                         throw new DriverRegistroServiziException("Eliminazione specifica conversazione concettuale ["+concettualePath+ "] non riuscita");
  1032.                     }
  1033.                 }

  1034.                 // erogatore
  1035.                 String erogatorePath = dirSpecificaConversazioni.getAbsolutePath() + File.separator  + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_EROGATORE;
  1036.                 File erogatore = new File(erogatorePath);
  1037.                 if(erogatore.exists()){
  1038.                     if(erogatore.delete()==false){
  1039.                         throw new DriverRegistroServiziException("Eliminazione specifica conversazione erogatore ["+erogatorePath+ "] non riuscita");
  1040.                     }
  1041.                 }

  1042.                 // fruitore
  1043.                 String fruitorePath = dirSpecificaConversazioni.getAbsolutePath() + File.separator  + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_FRUITORE;
  1044.                 File fruitore = new File(fruitorePath);
  1045.                 if(fruitore.exists()){
  1046.                     if(fruitore.delete()==false){
  1047.                         throw new DriverRegistroServiziException("Eliminazione specifica conversazione fruitore ["+fruitorePath+ "] non riuscita");
  1048.                     }
  1049.                 }
  1050.             }  
  1051.             // Gestione Allegati
  1052.             if(dirAllegati.exists()==false){
  1053.                 if(dirAllegati.mkdir()==false){
  1054.                     throw new DriverRegistroServiziException("Creazione della directory per gli allegati dell'accordo ["+accordoNEW + "] non riuscita");
  1055.                 }  
  1056.             } else {
  1057.                 // elimino vecchi allegati
  1058.                 String [] files = dirAllegati.list();
  1059.                 if(files!=null){
  1060.                     for(int i=0; i<files.length; i++){
  1061.                         File file = new File(files[i]);
  1062.                         if(file.exists()){
  1063.                             if(file.delete()==false){
  1064.                                 throw new DriverRegistroServiziException("Eliminazione allegato ["+files[i]+ "] non riuscita");
  1065.                             }
  1066.                         }
  1067.                     }
  1068.                 }
  1069.             }
  1070.             // Gestione SpecificheSemiformali
  1071.             if(dirSpecificheSemiformali.exists()==false){
  1072.                 if(dirSpecificheSemiformali.mkdir()==false){
  1073.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche semiformali dell'accordo ["+accordoNEW + "] non riuscita");
  1074.                 }  
  1075.             } else {
  1076.                 // elimino vecche specifiche semiformali
  1077.                 String [] files = dirSpecificheSemiformali.list();
  1078.                 if(files!=null){
  1079.                     for(int i=0; i<files.length; i++){
  1080.                         File file = new File(files[i]);
  1081.                         if(file.exists()){
  1082.                             if(file.delete()==false){
  1083.                                 throw new DriverRegistroServiziException("Eliminazione spacifica semiformale ["+files[i]+ "] non riuscita");
  1084.                             }
  1085.                         }
  1086.                     }
  1087.                 }
  1088.             }
  1089.             // Gestione SpecificheCoordinamento
  1090.             if(dirSpecificheCoordinamento.exists()==false){
  1091.                 if( accordo.getServizioComposto()!=null &&  dirSpecificheCoordinamento.mkdir()==false){
  1092.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche di coordinamento dell'accordo ["+accordoNEW + "] non riuscita");
  1093.                 }  
  1094.             } else {
  1095.                 // elimino vecche specifiche di coordinamento
  1096.                 String [] files = dirSpecificheCoordinamento.list();
  1097.                 if(files!=null){
  1098.                     for(int i=0; i<files.length; i++){
  1099.                         File file = new File(files[i]);
  1100.                         if(file.exists()){
  1101.                             if(file.delete()==false){
  1102.                                 throw new DriverRegistroServiziException("Eliminazione spacifica di coordinamento ["+files[i]+ "] non riuscita");
  1103.                             }
  1104.                         }
  1105.                     }
  1106.                 }
  1107.             }

  1108.             // File che definisce l'accordo
  1109.             String fileXML = accordoDir + accordoNEW + ".xml";

  1110.             // Definizione accordo
  1111.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();

  1112.             // Definizione WSDL
  1113.             // WSDLDefinitorio
  1114.             if( accordo.getByteWsdlDefinitorio() == null )
  1115.                 accordo.setWsdlDefinitorio(CostantiXMLRepository.WSDL_UNDEFINED);
  1116.             else{
  1117.                 String path = dirWSDL.getAbsolutePath() + File.separator  + CostantiXMLRepository.WSDL_DEFINITORIO;
  1118.                 generaFile(accordo.getByteWsdlDefinitorio(),path);
  1119.                 String url = prefixUrlWSDL+ CostantiXMLRepository.WSDL_DEFINITORIO;
  1120.                 accordo.setWsdlDefinitorio(url);
  1121.             }
  1122.             // WSDLConcettuale
  1123.             if( accordo.getByteWsdlConcettuale() == null )
  1124.                 accordo.setWsdlConcettuale(CostantiXMLRepository.WSDL_UNDEFINED);
  1125.             else{
  1126.                 String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_CONCETTUALE;
  1127.                 generaFile(accordo.getByteWsdlConcettuale(),path);
  1128.                 String url = prefixUrlWSDL+ CostantiXMLRepository.WSDL_CONCETTUALE;
  1129.                 accordo.setWsdlConcettuale(url);
  1130.             }
  1131.             // WSDL Logico Erogatore
  1132.             if( accordo.getByteWsdlLogicoErogatore() == null  )
  1133.                 accordo.setWsdlLogicoErogatore(CostantiXMLRepository.WSDL_UNDEFINED);
  1134.             else{
  1135.                 String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_LOGICO_EROGATORE;
  1136.                 generaFile(accordo.getByteWsdlLogicoErogatore(),path);
  1137.                 String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_LOGICO_EROGATORE;
  1138.                 accordo.setWsdlLogicoErogatore(url);
  1139.             }
  1140.             // WSDL Logico Fruitore
  1141.             if( (accordo.getByteWsdlLogicoFruitore() == null))
  1142.                 accordo.setWsdlLogicoFruitore(CostantiXMLRepository.WSDL_UNDEFINED);
  1143.             else{
  1144.                 String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_LOGICO_FRUITORE;
  1145.                 generaFile(accordo.getByteWsdlLogicoFruitore(),path);
  1146.                 String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_LOGICO_FRUITORE;
  1147.                 accordo.setWsdlLogicoFruitore(url);
  1148.             }
  1149.             // SpecificaConversazioneConcettuale
  1150.             if( accordo.getByteSpecificaConversazioneConcettuale() == null )
  1151.                 accordo.setSpecificaConversazioneConcettuale(CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_UNDEFINED);
  1152.             else{
  1153.                 String path = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_CONCETTUALE;
  1154.                 generaFile(accordo.getByteSpecificaConversazioneConcettuale(),path);
  1155.                 String url = prefixUrlSpecificaConversazione+ CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_CONCETTUALE;
  1156.                 accordo.setSpecificaConversazioneConcettuale(url);
  1157.             }
  1158.             // SpecificaConversazioneErogatore
  1159.             if( accordo.getByteSpecificaConversazioneErogatore() == null  )
  1160.                 accordo.setSpecificaConversazioneErogatore(CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_UNDEFINED);
  1161.             else{
  1162.                 String path = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_EROGATORE;
  1163.                 generaFile(accordo.getByteSpecificaConversazioneErogatore(),path);
  1164.                 String url = prefixUrlSpecificaConversazione + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_EROGATORE;
  1165.                 accordo.setSpecificaConversazioneErogatore(url);
  1166.             }
  1167.             // SpecificaConversazioneFruitore
  1168.             if( (accordo.getByteSpecificaConversazioneFruitore() == null))
  1169.                 accordo.setSpecificaConversazioneFruitore(CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_UNDEFINED);
  1170.             else{
  1171.                 String path = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_FRUITORE;
  1172.                 generaFile(accordo.getByteSpecificaConversazioneFruitore(),path);
  1173.                 String url = prefixUrlSpecificaConversazione + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_FRUITORE;
  1174.                 accordo.setSpecificaConversazioneFruitore(url);
  1175.             }
  1176.            
  1177.             // Allegati
  1178.             for(int i=0; i<accordo.sizeAllegatoList();i++){
  1179.                 String path = null;
  1180.                 if(accordo.getAllegato(i).getFile().startsWith(prefixUrlAllegato)){
  1181.                     path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile().substring(prefixUrlAllegato.length());
  1182.                 }else{
  1183.                     path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile();
  1184.                 }
  1185.                 generaFile(accordo.getAllegato(i).getByteContenuto(),path);
  1186.                 String url = prefixUrlAllegato + accordo.getAllegato(i).getFile();
  1187.                 accordo.getAllegato(i).setFile(url);
  1188.             }
  1189.            
  1190.             // SpecificheSemiformali
  1191.             for(int i=0; i<accordo.sizeSpecificaSemiformaleList();i++){
  1192.                 String path = null;
  1193.                 if(accordo.getSpecificaSemiformale(i).getFile().startsWith(prefixUrlSpecificaSemiformale)){
  1194.                     path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile().substring(prefixUrlSpecificaSemiformale.length());
  1195.                 }else{
  1196.                     path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile();
  1197.                 }
  1198.                 generaFile(accordo.getSpecificaSemiformale(i).getByteContenuto(),path);
  1199.                 String url = prefixUrlSpecificaSemiformale + accordo.getSpecificaSemiformale(i).getFile();
  1200.                 accordo.getSpecificaSemiformale(i).setFile(url);
  1201.             }
  1202.            
  1203.             // Specifiche di coordinamento
  1204.             if(accordo.getServizioComposto()!=null){
  1205.                 for(int i=0; i<accordo.getServizioComposto().sizeSpecificaCoordinamentoList();i++){
  1206.                     String path = null;
  1207.                     if(accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile().startsWith(prefixUrlSpecificaCoordinamento)){
  1208.                         path = dirSpecificheCoordinamento.getAbsolutePath() + File.separator + accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile().substring(prefixUrlSpecificaCoordinamento.length());
  1209.                     }else{
  1210.                         path = dirSpecificheCoordinamento.getAbsolutePath() + File.separator + accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile();
  1211.                     }
  1212.                     generaFile(accordo.getServizioComposto().getSpecificaCoordinamento(i).getByteContenuto(),path);
  1213.                     String url = prefixUrlSpecificaCoordinamento + accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile();
  1214.                     accordo.getServizioComposto().getSpecificaCoordinamento(i).setFile(url);
  1215.                 }
  1216.             }

  1217.             // generazione XML
  1218.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
  1219.             registroXML.addAccordoServizioParteComune(accordo);
  1220.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  1221.         }catch(DriverRegistroServiziException e){
  1222.             throw e;
  1223.         }catch(Exception e){
  1224.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML dell'accordo  ["+fileNameAccordo+"]: "+e.getMessage(),e);
  1225.         }
  1226.     }  

  1227.     /**
  1228.      * Metodo che si occupa dell'eliminazione dell'accordo dal repository.
  1229.      *
  1230.      * @param idAccordo ID dell'accordo da eliminare
  1231.      */  
  1232.     public void deleteAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException {

  1233.         String fileNameAccordo = null;
  1234.         try {
  1235.             fileNameAccordo = mappingIDAccordoToFileName(idAccordo);
  1236.             String fileXML = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + fileNameAccordo + ".xml";
  1237.             File dirWSDL = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.WSDL_DIR + fileNameAccordo);
  1238.             File dirSpecificheConversazione = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + fileNameAccordo);
  1239.             File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.ALLEGATI_DIR + fileNameAccordo);
  1240.             File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + fileNameAccordo);
  1241.             File dirSpecificheCoordinamento = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + fileNameAccordo);
  1242.            
  1243.             // Elimino accordo
  1244.             File accordo = new File(fileXML);
  1245.             if(accordo.delete() == false){
  1246.                 throw new DriverRegistroServiziException("Eliminazione XML dell'accordo ["+fileNameAccordo+"] non riuscta");
  1247.             }
  1248.             // Elimino vecchi WSDL
  1249.             String[]listWSDL = dirWSDL.list();
  1250.             if(listWSDL!=null) {
  1251.                 for(int j=0; j<listWSDL.length;j++){
  1252.                     File fileWSDL = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
  1253.                     if(fileWSDL.delete()==false){
  1254.                         throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+fileWSDL.getAbsolutePath()+"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  1255.                     }
  1256.                 }  
  1257.             }
  1258.             // Elimina vecchia directory dei WSDL
  1259.             if(dirWSDL.delete()==false){
  1260.                 throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL dell'accordo ["+fileNameAccordo + "] non riuscita");
  1261.             }
  1262.             // Elimino vecchie specifiche conversazione
  1263.             String[]listSpecificheConversazione = dirSpecificheConversazione.list();
  1264.             if(listSpecificheConversazione!=null) {
  1265.                 for(int j=0; j<listSpecificheConversazione.length;j++){
  1266.                     File fileSpecificaConversazione = new File(dirSpecificheConversazione.getAbsolutePath() + File.separator +listSpecificheConversazione[j]);
  1267.                     if(fileSpecificaConversazione.delete()==false){
  1268.                         throw new DriverRegistroServiziException("Eliminazione del file specifica di conversazione ["+ fileSpecificaConversazione.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  1269.                     }
  1270.                 }
  1271.             }
  1272.             // Elimina vecchia directory delle specifiche di conversazione
  1273.             if(dirSpecificheConversazione.delete()==false){
  1274.                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di conversazione dell'accordo ["+fileNameAccordo + "] non riuscita");
  1275.             }
  1276.             // Elimino vecchi allegati
  1277.             String[]listAllegati = dirAllegati.list();
  1278.             if(listAllegati!=null) {
  1279.                 for(int j=0; j<listAllegati.length;j++){
  1280.                     File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
  1281.                     if(fileAllegati.delete()==false){
  1282.                         throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  1283.                     }
  1284.                 }
  1285.             }
  1286.             // Elimina vecchia directory degli allegati
  1287.             if(dirAllegati.delete()==false){
  1288.                 throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+fileNameAccordo + "] non riuscita");
  1289.             }
  1290.             // Elimino vecche specificheSemiformali
  1291.             String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
  1292.             if(listSpecificheSemiformali!=null) {
  1293.                 for(int j=0; j<listSpecificheSemiformali.length;j++){
  1294.                     File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
  1295.                     if(fileSpecificheSemiformali.delete()==false){
  1296.                         throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  1297.                     }
  1298.                 }
  1299.             }
  1300.             // Elimina vecchia directory delle specifiche semiformali
  1301.             if(dirSpecificheSemiformali.delete()==false){
  1302.                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+fileNameAccordo + "] non riuscita");
  1303.             }
  1304.             // Gestione specifiche di coordinamento se esistenti
  1305.             if(dirSpecificheCoordinamento.exists()){
  1306.                 // Elimino vecche specificheCoordinamento
  1307.                 String[]listSpecificheCoordinamento = dirSpecificheCoordinamento.list();
  1308.                 if(listSpecificheCoordinamento!=null) {
  1309.                     for(int j=0; j<listSpecificheCoordinamento.length;j++){
  1310.                         File fileSpecificheCoordinamento = new File(dirSpecificheCoordinamento.getAbsolutePath() + File.separator +listSpecificheCoordinamento[j]);
  1311.                         if(fileSpecificheCoordinamento.delete()==false){
  1312.                             throw new DriverRegistroServiziException("Eliminazione della specifica coordinamento ["+ fileSpecificheCoordinamento.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
  1313.                         }
  1314.                     }
  1315.                 }
  1316.                 // Elimina vecchia directory delle specifiche coordinamento
  1317.                 if(dirSpecificheCoordinamento.delete()==false){
  1318.                     throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche coordinamento dell'accordo ["+fileNameAccordo + "] non riuscita");
  1319.                 }
  1320.             }

  1321.         }catch(DriverRegistroServiziException e){
  1322.             throw e;
  1323.         }catch(Exception e){
  1324.             throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML dell'accordo ["+fileNameAccordo+"]: "+e.getMessage(),e);
  1325.         }
  1326.     }  

  1327.     /**
  1328.      * Lista di accordi registrati
  1329.      *
  1330.      * @return lista di accordi registrati.
  1331.      *
  1332.      */  
  1333.     public AccordoServizioParteComune[] getAccordiServizioParteComune()throws DriverRegistroServiziException{

  1334.         AccordoServizioParteComune [] accordiRegistrati = null;
  1335.         try {
  1336.             File dir = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO);
  1337.             if(dir.exists()==false)
  1338.                 return null;
  1339.             File[] accordi = dir.listFiles();
  1340.             int numAccordi = 0;
  1341.             if(accordi!=null){
  1342.                 for(int i=0; i<accordi.length;i++){
  1343.                     if(accordi[i].isFile()){
  1344.                         numAccordi++;
  1345.                     }
  1346.                 }
  1347.             }
  1348.             if(numAccordi>0){
  1349.                 accordiRegistrati = new AccordoServizioParteComune[numAccordi];
  1350.                 for(int i=0,index=0; i<accordi.length;i++){
  1351.                     if(accordi[i].isFile()){
  1352.                         org.openspcoop2.core.registry.RegistroServizi r =
  1353.                             (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(accordi[i].getAbsolutePath(),
  1354.                                     org.openspcoop2.core.registry.RegistroServizi.class);
  1355.                         accordiRegistrati[index] = r.getAccordoServizioParteComune(0);
  1356.                         index++;
  1357.                     }
  1358.                 }
  1359.             }
  1360.             return accordiRegistrati;
  1361.         }catch(Exception e){
  1362.             e.printStackTrace(System.err);
  1363.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca degli accordi di servizio: "+e.getMessage(),e);
  1364.         }
  1365.     }







  1366.    
  1367.    
  1368.    
  1369.    
  1370.    
  1371.    
  1372.    
  1373.     /* ---------------- GENERAZIONE XML PORTE DI DOMINIO ------------------------- */
  1374.     /**
  1375.      * Metodo che controlla se la porta di dominio risulta gia' registrata
  1376.      *
  1377.      * @param nome Nome della porta di dominio da creare/modificare
  1378.      * @return true se la porta di dominio risulta registrata, false altrimenti.
  1379.      *
  1380.      */  
  1381.     public boolean existsPortaDominio(String nome)throws DriverRegistroServiziException{

  1382.         try {
  1383.             File fileXML = new File(this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + File.separator + nome + ".xml");
  1384.             if( (fileXML.exists()==false) ){
  1385.                 return false;
  1386.             }else
  1387.                 return true;
  1388.         }catch(Exception e){
  1389.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.PORTE_DI_DOMINIO+")  ["+nome+"]: "+e.getMessage(),e);
  1390.         }

  1391.     }

  1392.     /**
  1393.      * Metodo che si occupa della generazione/modifica di un file XML a partire da una porta di dominio.
  1394.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  1395.      *
  1396.      * @param nome Nome della porta di dominio da creare/modificare
  1397.      * @param pdd Dati della porta di dominio da trasformare in XML.
  1398.      *
  1399.      */  
  1400.     public void createPortaDominio(String nome,PortaDominio pdd) throws DriverRegistroServiziException{


  1401.         try {
  1402.             String pddDir = this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + File.separator;
  1403.            
  1404.             // Controllo esistenza per modifica
  1405.             String fileXML = pddDir + nome + ".xml";
  1406.             File fileXMLF = new File(fileXML);
  1407.             if( fileXMLF.exists() ){
  1408.                 // richiesta modifica
  1409.                 // elimino vecchia definizione Porta di Dominio
  1410.                 try{
  1411.                     if(fileXMLF.delete()==false){
  1412.                         throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per la porta di dominio ["+fileXMLF.getAbsolutePath()+"] non riuscita");
  1413.                     }
  1414.                 }catch(Exception io){
  1415.                     throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per la porta di dominio ["+nome+ "] non riuscita: "+io.toString());
  1416.                 }  
  1417.             }

  1418.             // Definizione porta di dominio
  1419.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();

  1420.             // generazione XML
  1421.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(pdd);
  1422.             registroXML.addPortaDominio(pdd);
  1423.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  1424.         }catch(DriverRegistroServiziException e){
  1425.             throw e;
  1426.         }catch(Exception e){
  1427.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML della porta di dominio  ["+nome+"]: "+e.getMessage(),e);
  1428.         }
  1429.     }  

  1430.     /**
  1431.      * Metodo che si occupa dell'eliminazione della porta di dominio dal repository.
  1432.      *
  1433.      * @param nome Nome della porta di dominio da eliminare
  1434.      */  
  1435.     public void deletePortaDominio(String nome) throws DriverRegistroServiziException {

  1436.         try {
  1437.             String fileXML = this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + File.separator + nome + ".xml";
  1438.            
  1439.             // Elimino porta di dominio
  1440.             File pdd = new File(fileXML);
  1441.             if(pdd.delete() == false){
  1442.                 throw new DriverRegistroServiziException("Eliminazione XML della porta di dominio ["+nome+"] non riuscta");
  1443.             }

  1444.         }catch(DriverRegistroServiziException e){
  1445.             throw e;
  1446.         }catch(Exception e){
  1447.             throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML della porta di dominio ["+nome+"]: "+e.getMessage(),e);
  1448.         }
  1449.     }  

  1450.     /**
  1451.      * Lista delle porte di dominio registrate
  1452.      *
  1453.      * @return lista delle porte di dominio registrate
  1454.      *
  1455.      */  
  1456.     public PortaDominio[] getPorteDominio()throws DriverRegistroServiziException{

  1457.         PortaDominio [] pddRegistrate = null;
  1458.         try {
  1459.             File dir = new File(this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO);
  1460.             if(dir.exists()==false)
  1461.                 return null;
  1462.             File[] porteDiDominio = dir.listFiles();
  1463.             int numPorteDiDominio = 0;
  1464.             if(porteDiDominio!=null){
  1465.                 for(int i=0; i<porteDiDominio.length;i++){
  1466.                     if(porteDiDominio[i].isFile()){
  1467.                         numPorteDiDominio++;
  1468.                     }
  1469.                 }
  1470.             }
  1471.             if(numPorteDiDominio>0){
  1472.                 pddRegistrate = new PortaDominio[numPorteDiDominio];
  1473.                 for(int i=0,index=0; i<porteDiDominio.length;i++){
  1474.                     if(porteDiDominio[i].isFile()){
  1475.                         org.openspcoop2.core.registry.RegistroServizi r =
  1476.                             (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(porteDiDominio[i].getAbsolutePath(),
  1477.                                     org.openspcoop2.core.registry.RegistroServizi.class);
  1478.                         pddRegistrate[index] = r.getPortaDominio(0);
  1479.                         index++;
  1480.                     }
  1481.                 }
  1482.             }
  1483.             return pddRegistrate;
  1484.         }catch(Exception e){
  1485.             e.printStackTrace(System.err);
  1486.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca delle porte di dominio: "+e.getMessage(),e);
  1487.         }
  1488.     }
  1489.    
  1490.    
  1491.    
  1492.    
  1493.    
  1494.    
  1495.    
  1496.    
  1497.    
  1498.    
  1499.    
  1500.    
  1501.    
  1502.    
  1503.     /* ---------------- GENERAZIONE XML GRUPPI ------------------------- */
  1504.     /**
  1505.      * Metodo che controlla se il gruppo risulta gia' registrato
  1506.      *
  1507.      * @param nome Nome del gruppo da creare/modificare
  1508.      * @return true se il gruppo risulta registrato, false altrimenti.
  1509.      *
  1510.      */  
  1511.     public boolean existsGruppo(String nome)throws DriverRegistroServiziException{

  1512.         try {
  1513.             File fileXML = new File(this.pathPrefix + CostantiXMLRepository.GRUPPI + File.separator + nome + ".xml");
  1514.             if( (fileXML.exists()==false) ){
  1515.                 return false;
  1516.             }else
  1517.                 return true;
  1518.         }catch(Exception e){
  1519.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.GRUPPI+")  ["+nome+"]: "+e.getMessage(),e);
  1520.         }

  1521.     }

  1522.     /**
  1523.      * Metodo che si occupa della generazione/modifica di un file XML a partire da un gruppo
  1524.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  1525.      *
  1526.      * @param nome Nome del gruppo da creare/modificare
  1527.      * @param gruppo Dati del gruppo da trasformare in XML.
  1528.      *
  1529.      */  
  1530.     public void createGruppo(String nome,Gruppo gruppo) throws DriverRegistroServiziException{


  1531.         try {
  1532.             String gruppiDir = this.pathPrefix + CostantiXMLRepository.GRUPPI + File.separator;
  1533.            
  1534.             // Controllo esistenza per modifica
  1535.             String fileXML = gruppiDir + nome + ".xml";
  1536.             File fileXMLF = new File(fileXML);
  1537.             if( fileXMLF.exists() ){
  1538.                 // richiesta modifica
  1539.                 // elimino vecchia definizione Porta di Dominio
  1540.                 try{
  1541.                     if(fileXMLF.delete()==false){
  1542.                         throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il gruppo ["+fileXMLF.getAbsolutePath()+"] non riuscita");
  1543.                     }
  1544.                 }catch(Exception io){
  1545.                     throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il gruppo ["+nome+ "] non riuscita: "+io.toString());
  1546.                 }  
  1547.             }

  1548.             // Definizione gruppo
  1549.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();

  1550.             // generazione XML
  1551.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(gruppo);
  1552.             registroXML.addGruppo(gruppo);
  1553.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  1554.         }catch(DriverRegistroServiziException e){
  1555.             throw e;
  1556.         }catch(Exception e){
  1557.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del gruppo  ["+nome+"]: "+e.getMessage(),e);
  1558.         }
  1559.     }  

  1560.     /**
  1561.      * Metodo che si occupa dell'eliminazione del gruppo dal repository.
  1562.      *
  1563.      * @param nome Nome del gruppo da eliminare
  1564.      */  
  1565.     public void deleteGruppo(String nome) throws DriverRegistroServiziException {

  1566.         try {
  1567.             String fileXML = this.pathPrefix + CostantiXMLRepository.GRUPPI + File.separator + nome + ".xml";
  1568.            
  1569.             // Elimino gruppo
  1570.             File gruppo = new File(fileXML);
  1571.             if(gruppo.delete() == false){
  1572.                 throw new DriverRegistroServiziException("Eliminazione XML del gruppo ["+nome+"] non riuscta");
  1573.             }

  1574.         }catch(DriverRegistroServiziException e){
  1575.             throw e;
  1576.         }catch(Exception e){
  1577.             throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML del gruppo ["+nome+"]: "+e.getMessage(),e);
  1578.         }
  1579.     }  

  1580.     /**
  1581.      * Lista dei gruppi registrati
  1582.      *
  1583.      * @return lista dei gruppi registrati
  1584.      *
  1585.      */  
  1586.     public Gruppo[] getGruppi()throws DriverRegistroServiziException{

  1587.         Gruppo [] gruppiRegistrate = null;
  1588.         try {
  1589.             File dir = new File(this.pathPrefix + CostantiXMLRepository.GRUPPI);
  1590.             if(dir.exists()==false)
  1591.                 return null;
  1592.             File[] gruppi = dir.listFiles();
  1593.             int numGruppi = 0;
  1594.             if(gruppi!=null){
  1595.                 for(int i=0; i<gruppi.length;i++){
  1596.                     if(gruppi[i].isFile()){
  1597.                         numGruppi++;
  1598.                     }
  1599.                 }
  1600.             }
  1601.             if(numGruppi>0){
  1602.                 gruppiRegistrate = new Gruppo[numGruppi];
  1603.                 for(int i=0,index=0; i<gruppi.length;i++){
  1604.                     if(gruppi[i].isFile()){
  1605.                         org.openspcoop2.core.registry.RegistroServizi r =
  1606.                             (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(gruppi[i].getAbsolutePath(),
  1607.                                     org.openspcoop2.core.registry.RegistroServizi.class);
  1608.                         gruppiRegistrate[index] = r.getGruppo(0);
  1609.                         index++;
  1610.                     }
  1611.                 }
  1612.             }
  1613.             return gruppiRegistrate;
  1614.         }catch(Exception e){
  1615.             e.printStackTrace(System.err);
  1616.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei gruppi: "+e.getMessage(),e);
  1617.         }
  1618.     }
  1619.    
  1620.    
  1621.    
  1622.    
  1623.    
  1624.    
  1625.    
  1626.    
  1627.    
  1628.    
  1629.    
  1630.    
  1631.    
  1632.    
  1633.     /* ---------------- GENERAZIONE XML RUOLI ------------------------- */
  1634.     /**
  1635.      * Metodo che controlla se il ruolo risulta gia' registrato
  1636.      *
  1637.      * @param nome Nome del ruolo da creare/modificare
  1638.      * @return true se il ruolo risulta registrato, false altrimenti.
  1639.      *
  1640.      */  
  1641.     public boolean existsRuolo(String nome)throws DriverRegistroServiziException{

  1642.         try {
  1643.             File fileXML = new File(this.pathPrefix + CostantiXMLRepository.RUOLI + File.separator + nome + ".xml");
  1644.             if( (fileXML.exists()==false) ){
  1645.                 return false;
  1646.             }else
  1647.                 return true;
  1648.         }catch(Exception e){
  1649.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.RUOLI+")  ["+nome+"]: "+e.getMessage(),e);
  1650.         }

  1651.     }

  1652.     /**
  1653.      * Metodo che si occupa della generazione/modifica di un file XML a partire da un ruolo
  1654.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  1655.      *
  1656.      * @param nome Nome del ruolo da creare/modificare
  1657.      * @param ruolo Dati del ruolo da trasformare in XML.
  1658.      *
  1659.      */  
  1660.     public void createRuolo(String nome,Ruolo ruolo) throws DriverRegistroServiziException{


  1661.         try {
  1662.             String ruoliDir = this.pathPrefix + CostantiXMLRepository.RUOLI + File.separator;
  1663.            
  1664.             // Controllo esistenza per modifica
  1665.             String fileXML = ruoliDir + nome + ".xml";
  1666.             File fileXMLF = new File(fileXML);
  1667.             if( fileXMLF.exists() ){
  1668.                 // richiesta modifica
  1669.                 // elimino vecchia definizione Porta di Dominio
  1670.                 try{
  1671.                     if(fileXMLF.delete()==false){
  1672.                         throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il ruolo ["+fileXMLF.getAbsolutePath()+"] non riuscita");
  1673.                     }
  1674.                 }catch(Exception io){
  1675.                     throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il ruolo ["+nome+ "] non riuscita: "+io.toString());
  1676.                 }  
  1677.             }

  1678.             // Definizione ruolo
  1679.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();

  1680.             // generazione XML
  1681.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(ruolo);
  1682.             registroXML.addRuolo(ruolo);
  1683.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  1684.         }catch(DriverRegistroServiziException e){
  1685.             throw e;
  1686.         }catch(Exception e){
  1687.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del ruolo  ["+nome+"]: "+e.getMessage(),e);
  1688.         }
  1689.     }  

  1690.     /**
  1691.      * Metodo che si occupa dell'eliminazione del ruolo dal repository.
  1692.      *
  1693.      * @param nome Nome del ruolo da eliminare
  1694.      */  
  1695.     public void deleteRuolo(String nome) throws DriverRegistroServiziException {

  1696.         try {
  1697.             String fileXML = this.pathPrefix + CostantiXMLRepository.RUOLI + File.separator + nome + ".xml";
  1698.            
  1699.             // Elimino ruolo
  1700.             File ruolo = new File(fileXML);
  1701.             if(ruolo.delete() == false){
  1702.                 throw new DriverRegistroServiziException("Eliminazione XML del ruolo ["+nome+"] non riuscta");
  1703.             }

  1704.         }catch(DriverRegistroServiziException e){
  1705.             throw e;
  1706.         }catch(Exception e){
  1707.             throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML del ruolo ["+nome+"]: "+e.getMessage(),e);
  1708.         }
  1709.     }  

  1710.     /**
  1711.      * Lista dei ruoli registrati
  1712.      *
  1713.      * @return lista dei ruoli registrati
  1714.      *
  1715.      */  
  1716.     public Ruolo[] getRuoli()throws DriverRegistroServiziException{

  1717.         Ruolo [] ruoliRegistrate = null;
  1718.         try {
  1719.             File dir = new File(this.pathPrefix + CostantiXMLRepository.RUOLI);
  1720.             if(dir.exists()==false)
  1721.                 return null;
  1722.             File[] ruoli = dir.listFiles();
  1723.             int numRuoli = 0;
  1724.             if(ruoli!=null){
  1725.                 for(int i=0; i<ruoli.length;i++){
  1726.                     if(ruoli[i].isFile()){
  1727.                         numRuoli++;
  1728.                     }
  1729.                 }
  1730.             }
  1731.             if(numRuoli>0){
  1732.                 ruoliRegistrate = new Ruolo[numRuoli];
  1733.                 for(int i=0,index=0; i<ruoli.length;i++){
  1734.                     if(ruoli[i].isFile()){
  1735.                         org.openspcoop2.core.registry.RegistroServizi r =
  1736.                             (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(ruoli[i].getAbsolutePath(),
  1737.                                     org.openspcoop2.core.registry.RegistroServizi.class);
  1738.                         ruoliRegistrate[index] = r.getRuolo(0);
  1739.                         index++;
  1740.                     }
  1741.                 }
  1742.             }
  1743.             return ruoliRegistrate;
  1744.         }catch(Exception e){
  1745.             e.printStackTrace(System.err);
  1746.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei ruoli: "+e.getMessage(),e);
  1747.         }
  1748.     }
  1749.    
  1750.    
  1751.    
  1752.    
  1753.    
  1754.    
  1755.    
  1756.    
  1757.    
  1758.    
  1759.    
  1760.    
  1761.     /* ---------------- GENERAZIONE XML SCOPE ------------------------- */
  1762.     /**
  1763.      * Metodo che controlla se il scope risulta gia' registrato
  1764.      *
  1765.      * @param nome Nome del scope da creare/modificare
  1766.      * @return true se il scope risulta registrato, false altrimenti.
  1767.      *
  1768.      */  
  1769.     public boolean existsScope(String nome)throws DriverRegistroServiziException{

  1770.         try {
  1771.             File fileXML = new File(this.pathPrefix + CostantiXMLRepository.SCOPE + File.separator + nome + ".xml");
  1772.             if( (fileXML.exists()==false) ){
  1773.                 return false;
  1774.             }else
  1775.                 return true;
  1776.         }catch(Exception e){
  1777.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.SCOPE+")  ["+nome+"]: "+e.getMessage(),e);
  1778.         }

  1779.     }

  1780.     /**
  1781.      * Metodo che si occupa della generazione/modifica di un file XML a partire da un scope
  1782.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  1783.      *
  1784.      * @param nome Nome del scope da creare/modificare
  1785.      * @param scope Dati del scope da trasformare in XML.
  1786.      *
  1787.      */  
  1788.     public void createScope(String nome,Scope scope) throws DriverRegistroServiziException{


  1789.         try {
  1790.             String scopeDir = this.pathPrefix + CostantiXMLRepository.SCOPE + File.separator;
  1791.            
  1792.             // Controllo esistenza per modifica
  1793.             String fileXML = scopeDir + nome + ".xml";
  1794.             File fileXMLF = new File(fileXML);
  1795.             if( fileXMLF.exists() ){
  1796.                 // richiesta modifica
  1797.                 // elimino vecchia definizione Porta di Dominio
  1798.                 try{
  1799.                     if(fileXMLF.delete()==false){
  1800.                         throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il scope ["+fileXMLF.getAbsolutePath()+"] non riuscita");
  1801.                     }
  1802.                 }catch(Exception io){
  1803.                     throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il scope ["+nome+ "] non riuscita: "+io.toString());
  1804.                 }  
  1805.             }

  1806.             // Definizione scope
  1807.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();

  1808.             // generazione XML
  1809.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(scope);
  1810.             registroXML.addScope(scope);
  1811.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  1812.         }catch(DriverRegistroServiziException e){
  1813.             throw e;
  1814.         }catch(Exception e){
  1815.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del scope  ["+nome+"]: "+e.getMessage(),e);
  1816.         }
  1817.     }  

  1818.     /**
  1819.      * Metodo che si occupa dell'eliminazione del scope dal repository.
  1820.      *
  1821.      * @param nome Nome del scope da eliminare
  1822.      */  
  1823.     public void deleteScope(String nome) throws DriverRegistroServiziException {

  1824.         try {
  1825.             String fileXML = this.pathPrefix + CostantiXMLRepository.SCOPE + File.separator + nome + ".xml";
  1826.            
  1827.             // Elimino scope
  1828.             File scope = new File(fileXML);
  1829.             if(scope.delete() == false){
  1830.                 throw new DriverRegistroServiziException("Eliminazione XML del scope ["+nome+"] non riuscta");
  1831.             }

  1832.         }catch(DriverRegistroServiziException e){
  1833.             throw e;
  1834.         }catch(Exception e){
  1835.             throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML del scope ["+nome+"]: "+e.getMessage(),e);
  1836.         }
  1837.     }  

  1838.     /**
  1839.      * Lista dei scope registrati
  1840.      *
  1841.      * @return lista dei scope registrati
  1842.      *
  1843.      */  
  1844.     public Scope[] getScope()throws DriverRegistroServiziException{

  1845.         Scope [] scopeRegistrate = null;
  1846.         try {
  1847.             File dir = new File(this.pathPrefix + CostantiXMLRepository.SCOPE);
  1848.             if(dir.exists()==false)
  1849.                 return null;
  1850.             File[] scope = dir.listFiles();
  1851.             int numScope = 0;
  1852.             if(scope!=null){
  1853.                 for(int i=0; i<scope.length;i++){
  1854.                     if(scope[i].isFile()){
  1855.                         numScope++;
  1856.                     }
  1857.                 }
  1858.             }
  1859.             if(numScope>0){
  1860.                 scopeRegistrate = new Scope[numScope];
  1861.                 for(int i=0,index=0; i<scope.length;i++){
  1862.                     if(scope[i].isFile()){
  1863.                         org.openspcoop2.core.registry.RegistroServizi r =
  1864.                             (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(scope[i].getAbsolutePath(),
  1865.                                     org.openspcoop2.core.registry.RegistroServizi.class);
  1866.                         scopeRegistrate[index] = r.getScope(0);
  1867.                         index++;
  1868.                     }
  1869.                 }
  1870.             }
  1871.             return scopeRegistrate;
  1872.         }catch(Exception e){
  1873.             e.printStackTrace(System.err);
  1874.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei scope: "+e.getMessage(),e);
  1875.         }
  1876.     }
  1877.    
  1878.    
  1879.    
  1880.    
  1881.    
  1882.    
  1883.    





  1884.     /* ---------------- GENERAZIONE XML SOGGETTO ------------------------- */

  1885.     /**
  1886.      * Metodo che controlla se il soggetto risulta gia' registrato
  1887.      *
  1888.      * @param idSogg id del soggetto
  1889.      * @return true se il soggetto risulta registrato, false altrimenti.
  1890.      */  
  1891.     public boolean existsSoggetto(IDSoggetto idSogg) throws DriverRegistroServiziException{

  1892.         if(idSogg==null)
  1893.             throw new DriverRegistroServiziException("Alcuni parametri sono null");

  1894.         String idSoggetto = idSogg.getTipo() + idSogg.getNome();
  1895.         try {
  1896.             File dirSoggetto = new File(this.pathPrefix+idSoggetto);
  1897.             return dirSoggetto.exists();
  1898.         }catch(Exception e){
  1899.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca del soggetto  ["+idSoggetto+"]: "+e.getMessage(),e);
  1900.         }
  1901.     }

  1902.     /**
  1903.      * Metodo che si occupa della generazione di un file XML a partire da un soggetto.
  1904.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  1905.      *
  1906.      * @param idSogg id del soggetto da creare/modificare
  1907.      * @param soggetto Dati del Soggetto da trasformare in XML.
  1908.      */  
  1909.     public void createSoggetto(IDSoggetto idSogg,Soggetto soggetto) throws DriverRegistroServiziException{

  1910.         if(idSogg==null || soggetto==null)
  1911.             throw new DriverRegistroServiziException("Alcuni parametri sono null");

  1912.         String idSoggettoOLD = idSogg.getTipo() + idSogg.getNome();
  1913.         String idSoggettoNEW = soggetto.getTipo() + soggetto.getNome();

  1914.         try {

  1915.             // Creazione/Controllo Esistenza directory soggetto
  1916.             if(idSoggettoOLD.equals(idSoggettoNEW)){
  1917.                 // Controllo esistenza o creazione
  1918.                 File dir = new File(this.pathPrefix+idSoggettoNEW);
  1919.                 if(dir.exists() == false){
  1920.                     try{
  1921.                         if(dir.mkdir()==false){
  1922.                             throw new DriverRegistroServiziException("Creazione della directory per il soggetto ["+dir.getAbsolutePath()+"] non riuscita");
  1923.                         }
  1924.                     }catch(Exception io){
  1925.                         throw new DriverRegistroServiziException("Creazione della directory per il soggetto ["+dir.getAbsolutePath()+"] non riuscita: "+io.toString());
  1926.                     }
  1927.                 }
  1928.             }else{
  1929.                 // esiste gia deve essere rinominato.
  1930.                 // Controllo esistenza o creazione
  1931.                 File dir = new File(this.pathPrefix+idSoggettoOLD);
  1932.                 if(dir.exists() == false){
  1933.                     throw new DriverRegistroServiziException("Modifica di un soggetto non registrato ["+dir.getAbsolutePath()+"] non riuscita");
  1934.                 }
  1935.                 else{
  1936.                     File newdir = new File(this.pathPrefix+idSoggettoNEW);
  1937.                     try{
  1938.                         // Rinomina directory
  1939.                         if(dir.renameTo(newdir)==false){
  1940.                             throw new DriverRegistroServiziException("Rinominazione della directory per il soggetto ["+dir.getAbsolutePath()+"] in ["+newdir.getAbsolutePath()+"] non riuscita");
  1941.                         }
  1942.                         // elimino vecchia definizione
  1943.                         File oldXML = new File(this.pathPrefix+idSoggettoNEW+File.separator+idSoggettoOLD+".xml");
  1944.                         if(oldXML.delete()==false){
  1945.                             throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il soggetto ["+oldXML.getAbsolutePath()+"] non riuscita");
  1946.                         }
  1947.                     }catch(Exception io){
  1948.                         throw new DriverRegistroServiziException("Rinominazione della directory per il soggetto ["+dir.getAbsolutePath()+"] in ["+newdir.getAbsolutePath()+"] non riuscita: "+io.toString());
  1949.                     }
  1950.                 }
  1951.             }

  1952.             String dirSoggetto = this.pathPrefix + idSoggettoNEW + File.separator;

  1953.             // Creazione directory servizio
  1954.             String serviceDir = dirSoggetto + CostantiXMLRepository.SERVIZI;
  1955.             File dirS = new File(serviceDir);
  1956.             if(dirS.exists() == false){
  1957.                 try{
  1958.                     if(dirS.mkdir()==false){
  1959.                         throw new DriverRegistroServiziException("Creazione della directory per i servizi del soggetto ["+dirS.getAbsolutePath()+"] non riuscita");
  1960.                     }
  1961.                 }catch(Exception io){
  1962.                     throw new DriverRegistroServiziException("Creazione della directory per i servizi del soggetto ["+dirS.getAbsolutePath()+"] non riuscita: "+io.toString());
  1963.                 }
  1964.             }

  1965.             String fileXML = dirSoggetto + idSoggettoNEW + ".xml";

  1966.             // Definizione soggetto
  1967.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();

  1968.             // generazione XML
  1969.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(soggetto);
  1970.             registroXML.addSoggetto(soggetto);
  1971.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  1972.         }catch(DriverRegistroServiziException e){
  1973.             throw e;
  1974.         }catch(Exception e){
  1975.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del soggetto ["+idSoggettoOLD+"]: "+e.getMessage(),e);
  1976.         }
  1977.     }  



  1978.     /**
  1979.      * Metodo che si occupa dell'eliminazione del soggetto dal repository.
  1980.      *
  1981.      * @param idSogg id del soggetto da eliminare
  1982.      */  
  1983.     public void deleteSoggetto(IDSoggetto idSogg) throws DriverRegistroServiziException{

  1984.         if(idSogg==null)
  1985.             throw new DriverRegistroServiziException("Alcuni parametri sono null");

  1986.         String idSoggetto = idSogg.getTipo() + idSogg.getNome();

  1987.         try {

  1988.             String dirSoggetto = this.pathPrefix + idSoggetto + File.separator;

  1989.             // Elimino servizi del soggetto
  1990.             File dirS = new File(dirSoggetto + CostantiXMLRepository.SERVIZI);
  1991.             File[] dirSserv = dirS.listFiles();
  1992.             if(dirSserv!=null) {
  1993.                 for(int i=0; i<dirSserv.length;i++){
  1994.                     if(dirSserv[i].delete() == false){
  1995.                         throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione definizione servizio ["+dirSserv[i].getAbsolutePath()+"]) non riuscita");
  1996.                     }
  1997.                 }
  1998.             }

  1999.             // Elimino directory servizio
  2000.             if(dirS.delete() == false){
  2001.                 throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione directory servizi ["+dirS.getAbsolutePath()+"]) non riuscita");
  2002.             }

  2003.             // Elimino definizione soggetto
  2004.             File defSoggetto = new File(dirSoggetto + idSoggetto + ".xml");
  2005.             if(defSoggetto.delete() == false){
  2006.                 throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione xml soggetto ["+defSoggetto.getAbsolutePath()+"]) non riuscita");
  2007.             }

  2008.             // Elimino directory soggetto
  2009.             File dir = new File(this.pathPrefix+idSoggetto);
  2010.             if(dir.delete() == false){
  2011.                 throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione directory soggetto ["+dir.getAbsolutePath()+"]) non riuscita");
  2012.             }

  2013.         }catch(DriverRegistroServiziException e){
  2014.             throw e;
  2015.         }catch(Exception e){
  2016.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'eliminazione XML del soggetto ["+idSoggetto+"]: "+e.getMessage(),e);
  2017.         }
  2018.     }  

  2019.     /**
  2020.      * Lista di Soggetti registrati
  2021.      *
  2022.      * @return lista di soggetti registrati.
  2023.      *
  2024.      */  
  2025.     public Soggetto[] getSoggetti()throws DriverRegistroServiziException{

  2026.         Soggetto [] soggettiRegistrati = null;
  2027.         try {
  2028.             File dir = new File(this.pathPrefix);
  2029.             if(dir.exists()==false)
  2030.                 return null;
  2031.             File[] soggetti = dir.listFiles();
  2032.             int numSoggetti = 0;
  2033.             if(soggetti!=null){
  2034.                 for(int i=0; i<soggetti.length;i++){
  2035.                     if(soggetti[i].isDirectory() &&
  2036.                             !CostantiXMLRepository.ACCORDI_DI_SERVIZIO.equalsIgnoreCase(soggetti[i].getName()) &&
  2037.                             !CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE.equalsIgnoreCase(soggetti[i].getName()) &&
  2038.                             !CostantiXMLRepository.PORTE_DI_DOMINIO.equalsIgnoreCase(soggetti[i].getName())){
  2039.                         numSoggetti++;
  2040.                     }
  2041.                 }
  2042.             }
  2043.             if(numSoggetti>0){
  2044.                 soggettiRegistrati = new Soggetto[numSoggetti];
  2045.                 for(int i=0,index=0; i<soggetti.length;i++){
  2046.                     if(soggetti[i].isDirectory() &&
  2047.                             !CostantiXMLRepository.ACCORDI_DI_SERVIZIO.equalsIgnoreCase(soggetti[i].getName()) &&
  2048.                             !CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE.equalsIgnoreCase(soggetti[i].getName()) &&
  2049.                             !CostantiXMLRepository.PORTE_DI_DOMINIO.equalsIgnoreCase(soggetti[i].getName())){
  2050.                         File[] fs = soggetti[i].listFiles();
  2051.                         if(fs!=null) {
  2052.                             for(int j=0; j<fs.length;j++){
  2053.                                 if(fs[j].isFile()){
  2054.                                     org.openspcoop2.core.registry.RegistroServizi r =
  2055.                                         (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(fs[j].getAbsolutePath(),
  2056.                                                 org.openspcoop2.core.registry.RegistroServizi.class);
  2057.                                     soggettiRegistrati[index] = r.getSoggetto(0);
  2058.                                     index++;
  2059.                                     break;
  2060.                                 }
  2061.                             }
  2062.                         }
  2063.                     }
  2064.                 }
  2065.             }
  2066.             return soggettiRegistrati;
  2067.         }catch(Exception e){
  2068.             e.printStackTrace(System.err);
  2069.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei soggetti: "+e.getMessage(),e);
  2070.         }
  2071.     }







  2072.     /* ---------------- GENERAZIONE XML SERVIZIO ------------------------- */

  2073.     /**
  2074.      * Metodo che controlla se il servizio risulta gia' registrato
  2075.      *
  2076.      * @param idServ Identificativo del Servizio
  2077.      * @return true se il servizio risulta registrato, false altrimenti.
  2078.      */  
  2079.     public boolean existsAccordoServizioParteSpecifica(IDServizio idServ) throws DriverRegistroServiziException{

  2080.         if(idServ==null || idServ.getSoggettoErogatore()==null)
  2081.             throw new DriverRegistroServiziException("Alcuni parametri sono null");

  2082.         String idSoggetto = idServ.getSoggettoErogatore().getTipo()+
  2083.         idServ.getSoggettoErogatore().getNome();
  2084.         String idServizio = idServ.getTipo()+idServ.getNome()+idServ.getVersione();
  2085.         try {
  2086.             File definizioneXML = new File(this.pathPrefix+idSoggetto+File.separator+CostantiXMLRepository.SERVIZI
  2087.                     +File.separator+idServizio+ ".xml");
  2088.             File dirWSDL = new File(this.pathPrefix + idSoggetto+File.separator+CostantiXMLRepository.SERVIZI
  2089.                     +File.separator+CostantiXMLRepository.WSDL_DIR +idServizio);
  2090.             if( (definizioneXML.exists()==false) || (dirWSDL.exists()==false)){
  2091.                 return false;
  2092.             }else
  2093.                 return true;
  2094.         }catch(Exception e){
  2095.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca del servizio ["+idServizio+"]: "+e.getMessage(),e);
  2096.         }
  2097.     }

  2098.     /**
  2099.      * Metodo che si occupa della generazione di un file XML a partire da un servizio.
  2100.      * Sono richiesti interattivamente i parametri che identificano il file XML da generare.
  2101.      *
  2102.      * @param idServ Identificativo del Servizio
  2103.      * @param asps Dati del Servizio da trasformare in XML.
  2104.      */  
  2105.     public void createAccordoServizioParteSpecifica(IDServizio idServ,AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{

  2106.         if(idServ==null || idServ.getSoggettoErogatore()==null || asps==null)
  2107.             throw new DriverRegistroServiziException("Alcuni parametri sono null");

  2108.         String idSoggetto = idServ.getSoggettoErogatore().getTipo()+
  2109.         idServ.getSoggettoErogatore().getNome();
  2110.         String idServizioOLD = idServ.getTipo()+idServ.getNome()+idServ.getVersione();
  2111.         String idServizioNEW = asps.getTipo() + asps.getNome() + asps.getVersione();    

  2112.         String dirSoggetto = this.pathPrefix+idSoggetto+File.separator;
  2113.         String dirServiziSoggetto = dirSoggetto + CostantiXMLRepository.SERVIZI + File.separator;


  2114.         try {

  2115.             // contenuto index dei servizi
  2116.             List<IDServizio> nID = new ArrayList<IDServizio>();
  2117.             if(this.existsIndexServizi(dirServiziSoggetto)){
  2118.                 // elimino vecchia definizione
  2119.                 IDServizio [] oldImage = this.readIndexServiziFromFile(dirServiziSoggetto);
  2120.                 for(int i=0; i< oldImage.length; i++){
  2121.                     if( !(oldImage[i].getTipo().equals(idServ.getTipo()) &&
  2122.                             oldImage[i].getNome().equals(idServ.getNome()) &&
  2123.                             oldImage[i].getVersione().intValue() == idServ.getVersione().intValue()) ){
  2124.                         nID.add(oldImage[i]);
  2125.                     }
  2126.                 }
  2127.             }
  2128.            
  2129.            
  2130.             // esiste gia deve essere rinominato, eliminando il vecchio.
  2131.             if(idServizioOLD.equals(idServizioNEW) == false){

  2132.                
  2133.                 // Esiste gia' deve essere modificato il nome.
  2134.                 // Controllo esistenza servizio per modifica
  2135.                 File definizioneXML = new File(dirServiziSoggetto+idServizioOLD+ ".xml");
  2136.                 File dirWSDL = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR + idServizioOLD);
  2137.                 File dirAllegati = new File(dirServiziSoggetto + CostantiXMLRepository.ALLEGATI_DIR + idServizioOLD);
  2138.                 File dirSpecificheSemiformali = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizioOLD);
  2139.                 File dirSpecificheSicurezza = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizioOLD);
  2140.                 File dirSpecificheLivelliServizio = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizioOLD);
  2141.                
  2142.                 if( (definizioneXML.exists()==false) || (dirWSDL.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) || (dirSpecificheSicurezza.exists()==false) || (dirSpecificheLivelliServizio.exists()==false)){
  2143.                     throw new DriverRegistroServiziException("Modifica di un servizio non registrato ["+idServizioOLD + "] non riuscita");
  2144.                 }
  2145.                 else{

  2146.                     try{
  2147.                         //  Controllo esistenza o creazione
  2148.                         if(definizioneXML.delete()==false){
  2149.                             throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il servizio ["+definizioneXML.getAbsolutePath()+"] non riuscita");
  2150.                         }

  2151.                         // Elimino vecchi WSDL
  2152.                         String[]listWSDL = dirWSDL.list();
  2153.                         if(listWSDL!=null) {
  2154.                             for(int j=0; j<listWSDL.length;j++){
  2155.                                 File fileInterno = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
  2156.                                 if(fileInterno.isDirectory()){
  2157.                                     // wsdl-implementativo fruitore-servizio
  2158.                                     String[]listFruitoreWSDL = fileInterno.list();
  2159.                                     if(listFruitoreWSDL!=null) {
  2160.                                         for(int k=0; k<listFruitoreWSDL.length;k++){
  2161.                                             File fileWsdlFruitore = new File(fileInterno.getAbsolutePath() + File.separator +listFruitoreWSDL[k]);
  2162.                                             if(fileWsdlFruitore.delete()==false){
  2163.                                                 throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWsdlFruitore.getAbsolutePath() +"] per il servizio [" + idServizioOLD + "] non riuscita");
  2164.                                             }  
  2165.                                         }
  2166.                                     }
  2167.                                 }
  2168.                                 if(fileInterno.delete()==false){
  2169.                                     throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileInterno.getAbsolutePath() +"] per il servizio [" + idServizioOLD + "] non riuscita");
  2170.                                 }      
  2171.                             }
  2172.                         }
  2173.                         // Elimina vecchia directory dei WSDL
  2174.                         if(dirWSDL.delete()==false){
  2175.                             throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL del servizio ["+idServizioOLD + "] non riuscita");
  2176.                         }                  
  2177.                         // Elimino vecchi allegati
  2178.                         String[]listAllegati = dirAllegati.list();
  2179.                         if(listAllegati!=null) {
  2180.                             for(int j=0; j<listAllegati.length;j++){
  2181.                                 File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
  2182.                                 if(fileAllegati.delete()==false){
  2183.                                     throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
  2184.                                 }
  2185.                             }
  2186.                         }
  2187.                         // Elimina vecchia directory degli allegati
  2188.                         if(dirAllegati.delete()==false){
  2189.                             throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+idServizioOLD + "] non riuscita");
  2190.                         }
  2191.                         // Elimino vecche specificheSemiformali
  2192.                         String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
  2193.                         if(listSpecificheSemiformali!=null) {
  2194.                             for(int j=0; j<listSpecificheSemiformali.length;j++){
  2195.                                 File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
  2196.                                 if(fileSpecificheSemiformali.delete()==false){
  2197.                                     throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
  2198.                                 }
  2199.                             }
  2200.                         }
  2201.                         // Elimina vecchia directory delle specifiche semiformali
  2202.                         if(dirSpecificheSemiformali.delete()==false){
  2203.                             throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+idServizioOLD + "] non riuscita");
  2204.                         }
  2205.                         // Elimino vecchie specificheSicurezza
  2206.                         String[]listSpecificheSicurezza = dirSpecificheSicurezza.list();
  2207.                         if(listSpecificheSicurezza!=null) {
  2208.                             for(int j=0; j<listSpecificheSicurezza.length;j++){
  2209.                                 File fileSpecificheSicurezza = new File(dirSpecificheSicurezza.getAbsolutePath() + File.separator +listSpecificheSicurezza[j]);
  2210.                                 if(fileSpecificheSicurezza.delete()==false){
  2211.                                     throw new DriverRegistroServiziException("Eliminazione della specifica di sicurezza ["+ fileSpecificheSicurezza.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
  2212.                                 }
  2213.                             }
  2214.                         }
  2215.                         // Elimina vecchia directory delle specifiche di sicurezza
  2216.                         if(dirSpecificheSicurezza.delete()==false){
  2217.                             throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di sicurezza dell'accordo ["+idServizioOLD + "] non riuscita");
  2218.                         }
  2219.                         // Elimino vecchie specificheLivelliServizio
  2220.                         String[]listSpecificheLivelliServizio = dirSpecificheLivelliServizio.list();
  2221.                         if(listSpecificheLivelliServizio!=null) {
  2222.                             for(int j=0; j<listSpecificheLivelliServizio.length;j++){
  2223.                                 File fileSpecificheLivelliServizio = new File(dirSpecificheLivelliServizio.getAbsolutePath() + File.separator +listSpecificheLivelliServizio[j]);
  2224.                                 if(fileSpecificheLivelliServizio.delete()==false){
  2225.                                     throw new DriverRegistroServiziException("Eliminazione della specifica dei livelli di servizio ["+ fileSpecificheLivelliServizio.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
  2226.                                 }
  2227.                             }
  2228.                         }
  2229.                         // Elimina vecchia directory delle specifiche dei livelli di servizio
  2230.                         if(dirSpecificheLivelliServizio.delete()==false){
  2231.                             throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche dei livelli di servizio dell'accordo ["+idServizioOLD + "] non riuscita");
  2232.                         }
  2233.                        
  2234.                     }catch(Exception io){
  2235.                         throw new DriverRegistroServiziException("Eliminazione del servizio ["+idServizioOLD +"] non riuscita: "+io.toString());
  2236.                     }
  2237.                 }
  2238.             }

  2239.             //  Crea directory dei WSDL
  2240.             File dirWSDL = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR +idServizioNEW);
  2241.             File dirAllegati = new File(dirServiziSoggetto + CostantiXMLRepository.ALLEGATI_DIR + idServizioNEW);
  2242.             File dirSpecificheSemiformali = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizioNEW);
  2243.             File dirSpecificheSicurezza = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizioNEW);
  2244.             File dirSpecificheLivelliServizio = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizioNEW);
  2245.             String prefixUrlWSDL = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.WSDL_DIR +idServizioNEW+  CostantiXMLRepository.URL_SEPARATOR;
  2246.             String prefixUrlAllegato = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.ALLEGATI_DIR + idServizioNEW +  CostantiXMLRepository.URL_SEPARATOR;
  2247.             String prefixUrlSpecificaSemiformale = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizioNEW +  CostantiXMLRepository.URL_SEPARATOR;
  2248.             String prefixUrlSpecificaSicurezza = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizioNEW +  CostantiXMLRepository.URL_SEPARATOR;
  2249.             String prefixUrlSpecificaLivelliServizio = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizioNEW +  CostantiXMLRepository.URL_SEPARATOR;
  2250.             if(dirWSDL.exists()==false){
  2251.                 if(dirWSDL.mkdir()==false){
  2252.                     throw new DriverRegistroServiziException("Creazione della directory per i WSDL del servizio ["+idServizioNEW + "]");
  2253.                 }  
  2254.             } else {
  2255.                 // elimino vecchi wsdl

  2256.                 // implementativoErogatore
  2257.                 String implementativoErogatorePath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
  2258.                 File implementativoErogatoreWSDL = new File(implementativoErogatorePath);
  2259.                 if(implementativoErogatoreWSDL.exists()){
  2260.                     if(implementativoErogatoreWSDL.delete()==false){
  2261.                         throw new DriverRegistroServiziException("Eliminazione WSDL implementativo Erogatore del servizio ["+implementativoErogatorePath+ "] non riuscita");
  2262.                     }
  2263.                 }

  2264.                 // implementativoFruitore
  2265.                 String implementativoFruitorePath = dirWSDL.getAbsolutePath() + File.separator  + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
  2266.                 File implementativoFruitoreWSDL = new File(implementativoFruitorePath);
  2267.                 if(implementativoFruitoreWSDL.exists()){
  2268.                     if(implementativoFruitoreWSDL.delete()==false){
  2269.                         throw new DriverRegistroServiziException("Eliminazione WSDL implementativo Fruitore del servizio ["+implementativoFruitorePath+ "] non riuscita");
  2270.                     }
  2271.                 }
  2272.             }    
  2273.             // Gestione Allegati
  2274.             if(dirAllegati.exists()==false){
  2275.                 if(dirAllegati.mkdir()==false){
  2276.                     throw new DriverRegistroServiziException("Creazione della directory per gli allegati dell'accordo ["+idServizioNEW + "] non riuscita");
  2277.                 }  
  2278.             } else {
  2279.                 // elimino vecchi allegati
  2280.                 String [] files = dirAllegati.list();
  2281.                 if(files!=null){
  2282.                     for(int i=0; i<files.length; i++){
  2283.                         File file = new File(files[i]);
  2284.                         if(file.exists()){
  2285.                             if(file.delete()==false){
  2286.                                 throw new DriverRegistroServiziException("Eliminazione allegato ["+files[i]+ "] non riuscita");
  2287.                             }
  2288.                         }
  2289.                     }
  2290.                 }
  2291.             }
  2292.             // Gestione SpecificheSemiformali
  2293.             if(dirSpecificheSemiformali.exists()==false){
  2294.                 if(dirSpecificheSemiformali.mkdir()==false){
  2295.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche semiformali dell'accordo ["+idServizioNEW + "] non riuscita");
  2296.                 }  
  2297.             } else {
  2298.                 // elimino vecche specifiche semiformali
  2299.                 String [] files = dirSpecificheSemiformali.list();
  2300.                 if(files!=null){
  2301.                     for(int i=0; i<files.length; i++){
  2302.                         File file = new File(files[i]);
  2303.                         if(file.exists()){
  2304.                             if(file.delete()==false){
  2305.                                 throw new DriverRegistroServiziException("Eliminazione spacifica semiformale ["+files[i]+ "] non riuscita");
  2306.                             }
  2307.                         }
  2308.                     }
  2309.                 }
  2310.             }
  2311.             // Gestione SpecificheSicurezza
  2312.             if(dirSpecificheSicurezza.exists()==false){
  2313.                 if(dirSpecificheSicurezza.mkdir()==false){
  2314.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche di sicurezza dell'accordo ["+idServizioNEW + "] non riuscita");
  2315.                 }  
  2316.             } else {
  2317.                 // elimino vecche specifiche di sicurezza
  2318.                 String [] files = dirSpecificheSicurezza.list();
  2319.                 if(files!=null){
  2320.                     for(int i=0; i<files.length; i++){
  2321.                         File file = new File(files[i]);
  2322.                         if(file.exists()){
  2323.                             if(file.delete()==false){
  2324.                                 throw new DriverRegistroServiziException("Eliminazione spacifica di sicurezza ["+files[i]+ "] non riuscita");
  2325.                             }
  2326.                         }
  2327.                     }
  2328.                 }
  2329.             }
  2330.             // Gestione SpecificheLivelliServizio
  2331.             if(dirSpecificheLivelliServizio.exists()==false){
  2332.                 if(dirSpecificheLivelliServizio.mkdir()==false){
  2333.                     throw new DriverRegistroServiziException("Creazione della directory per le specifiche dei livelli di servizio dell'accordo ["+idServizioNEW + "] non riuscita");
  2334.                 }  
  2335.             } else {
  2336.                 // elimino vecche specifiche dei livelli di servizio
  2337.                 String [] files = dirSpecificheLivelliServizio.list();
  2338.                 if(files!=null){
  2339.                     for(int i=0; i<files.length; i++){
  2340.                         File file = new File(files[i]);
  2341.                         if(file.exists()){
  2342.                             if(file.delete()==false){
  2343.                                 throw new DriverRegistroServiziException("Eliminazione spacifica del livello di servizio ["+files[i]+ "] non riuscita");
  2344.                             }
  2345.                         }
  2346.                     }
  2347.                 }
  2348.             }

  2349.             // check directory dei WSDL dei fruitori
  2350.             String[]listWSDLFruitori = dirWSDL.list();
  2351.             if(listWSDLFruitori!=null) {
  2352.                 for(int j=0; j<listWSDLFruitori.length;j++){
  2353.                     File fileInterno = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDLFruitori[j]);
  2354.    
  2355.                     // Se e' una directory potra' contenere i wsdl di un fruitore
  2356.                     if(fileInterno.isDirectory()){
  2357.                         boolean definizioneTrovata = false;
  2358.                         for(int h=0; h<asps.sizeFruitoreList(); h++){
  2359.                             String idFruitore = asps.getFruitore(h).getTipo()+asps.getFruitore(h).getNome();
  2360.                             if(idFruitore.equals(fileInterno.getName())){
  2361.                                 definizioneTrovata = true;
  2362.                                 break;
  2363.                             }
  2364.                         }
  2365.    
  2366.                         // elimino i wsdl dei fruitori.
  2367.                         String[]listWSDLFruitoreEliminato = fileInterno.list();
  2368.                         if(listWSDLFruitoreEliminato!=null) {
  2369.                             for(int n=0; n<listWSDLFruitoreEliminato.length;n++){
  2370.                                 File fileWsdlFruitoreEliminato = new File(fileInterno.getAbsolutePath() + File.separator +listWSDLFruitoreEliminato[n]);
  2371.                                 if(fileWsdlFruitoreEliminato.delete()==false){
  2372.                                     throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWsdlFruitoreEliminato.getAbsolutePath() +"] per il servizio [" + idServizioNEW + "] (Fruitore) non riuscita");
  2373.                                 }  
  2374.                             }
  2375.                         }
  2376.    
  2377.                         // Elimino le directory dei fruitori che non sono piu' contenuti nel servizio.
  2378.                         if(definizioneTrovata == false){
  2379.                             if(fileInterno.delete()==false){
  2380.                                 throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileInterno.getAbsolutePath() +"] per il servizio [" + idServizioNEW + "] (Fruitore) non riuscita");
  2381.                             }
  2382.                         }
  2383.                     }
  2384.                 }
  2385.             }

  2386.             // aggiungo nuova definizione all'indice dei servizi
  2387.             IDServizio [] newImage = new IDServizio[nID.size()+1];
  2388.             int imageIndex = 0;
  2389.             for(; imageIndex<nID.size(); imageIndex++)
  2390.                 newImage[imageIndex] = nID.get(imageIndex);
  2391.             IDServizio newImageS = this.idServizioFactory.getIDServizioFromAccordo(asps);
  2392.             newImage[imageIndex] = newImageS;
  2393.             this.setContenutoIndexServizi(dirServiziSoggetto,newImage);
  2394.            
  2395.            
  2396.             String fileXML = dirServiziSoggetto+idServizioNEW+ ".xml";

  2397.             org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
  2398.             org.openspcoop2.core.registry.Soggetto  soggXML = new org.openspcoop2.core.registry.Soggetto();
  2399.             soggXML.setTipo(asps.getTipoSoggettoErogatore());
  2400.             soggXML.setNome(asps.getNomeSoggettoErogatore());

  2401.             //  WSDL implementativo Erogatore
  2402.             if( asps.getByteWsdlImplementativoErogatore() == null  )
  2403.                 asps.setWsdlImplementativoErogatore(CostantiXMLRepository.WSDL_UNDEFINED);
  2404.             else{
  2405.                 String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
  2406.                 generaFile(asps.getByteWsdlImplementativoErogatore(),path);
  2407.                 String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
  2408.                 asps.setWsdlImplementativoErogatore(url);
  2409.             }
  2410.             // WSDL implementativo Fruitore
  2411.             if( (asps.getByteWsdlImplementativoFruitore() == null))
  2412.                 asps.setWsdlImplementativoFruitore(CostantiXMLRepository.WSDL_UNDEFINED);
  2413.             else{
  2414.                 String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
  2415.                 generaFile(asps.getByteWsdlImplementativoFruitore(),path);
  2416.                 String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
  2417.                 asps.setWsdlImplementativoFruitore(url);
  2418.             }

  2419.             // Allegati
  2420.             for(int i=0; i<asps.sizeAllegatoList();i++){
  2421.                 String path = null;
  2422.                 if(asps.getAllegato(i).getFile().startsWith(prefixUrlAllegato)){
  2423.                     path = dirAllegati.getAbsolutePath() + File.separator + asps.getAllegato(i).getFile().substring(prefixUrlAllegato.length());
  2424.                 }else{
  2425.                     path = dirAllegati.getAbsolutePath() + File.separator + asps.getAllegato(i).getFile();
  2426.                 }
  2427.                 generaFile(asps.getAllegato(i).getByteContenuto(),path);
  2428.                 String url = prefixUrlAllegato + asps.getAllegato(i).getFile();
  2429.                 asps.getAllegato(i).setFile(url);
  2430.             }
  2431.            
  2432.             // SpecificheSemiformali
  2433.             for(int i=0; i<asps.sizeSpecificaSemiformaleList();i++){
  2434.                 String path = null;
  2435.                 if(asps.getSpecificaSemiformale(i).getFile().startsWith(prefixUrlSpecificaSemiformale)){
  2436.                     path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + asps.getSpecificaSemiformale(i).getFile().substring(prefixUrlSpecificaSemiformale.length());
  2437.                 }else{
  2438.                     path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + asps.getSpecificaSemiformale(i).getFile();
  2439.                 }
  2440.                 generaFile(asps.getSpecificaSemiformale(i).getByteContenuto(),path);
  2441.                 String url = prefixUrlSpecificaSemiformale + asps.getSpecificaSemiformale(i).getFile();
  2442.                 asps.getSpecificaSemiformale(i).setFile(url);
  2443.             }
  2444.            
  2445.             // SpecificheSicurezza
  2446.             for(int i=0; i<asps.sizeSpecificaSicurezzaList();i++){
  2447.                 String path = null;
  2448.                 if(asps.getSpecificaSicurezza(i).getFile().startsWith(prefixUrlSpecificaSicurezza)){
  2449.                     path = dirSpecificheSicurezza.getAbsolutePath() + File.separator + asps.getSpecificaSicurezza(i).getFile().substring(prefixUrlSpecificaSicurezza.length());
  2450.                 }else{
  2451.                     path = dirSpecificheSicurezza.getAbsolutePath() + File.separator + asps.getSpecificaSicurezza(i).getFile();
  2452.                 }
  2453.                 generaFile(asps.getSpecificaSicurezza(i).getByteContenuto(),path);
  2454.                 String url = prefixUrlSpecificaSicurezza + asps.getSpecificaSicurezza(i).getFile();
  2455.                 asps.getSpecificaSicurezza(i).setFile(url);
  2456.             }
  2457.            
  2458.             // SpecificheLivelliServizio
  2459.             for(int i=0; i<asps.sizeSpecificaLivelloServizioList();i++){
  2460.                 String path = null;
  2461.                 if(asps.getSpecificaLivelloServizio(i).getFile().startsWith(prefixUrlSpecificaLivelliServizio)){
  2462.                     path = dirSpecificheLivelliServizio.getAbsolutePath() + File.separator + asps.getSpecificaLivelloServizio(i).getFile().substring(prefixUrlSpecificaLivelliServizio.length());
  2463.                 }else{
  2464.                     path = dirSpecificheLivelliServizio.getAbsolutePath() + File.separator + asps.getSpecificaLivelloServizio(i).getFile();
  2465.                 }
  2466.                 generaFile(asps.getSpecificaLivelloServizio(i).getByteContenuto(),path);
  2467.                 String url = prefixUrlSpecificaLivelliServizio + asps.getSpecificaLivelloServizio(i).getFile();
  2468.                 asps.getSpecificaLivelloServizio(i).setFile(url);
  2469.             }
  2470.            
  2471.             // Fruitori
  2472.             for(int i=0;i<asps.sizeFruitoreList();i++){
  2473.                 Fruitore fr = asps.getFruitore(i);
  2474.                 String idFruitore = fr.getTipo() + fr.getNome();
  2475.                 File dirWSDLFruitore = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR +idServizioNEW + File.separator + idFruitore);
  2476.                 String prefixUrlWSDLFruitore = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.WSDL_DIR +idServizioNEW+  CostantiXMLRepository.URL_SEPARATOR + idFruitore + CostantiXMLRepository.URL_SEPARATOR;

  2477.                 // WSDL Fruitore
  2478.                 if(fr.getByteWsdlImplementativoErogatore()!=null || fr.getByteWsdlImplementativoFruitore()!=null){

  2479.                     //  Crea directory dei WSDL
  2480.                     if(dirWSDLFruitore.exists()==false){
  2481.                         if(dirWSDLFruitore.mkdir()==false){
  2482.                             throw new DriverRegistroServiziException("Creazione della directory per i WSDL del servizio (Fruitore "+idFruitore+") ["+idServizioNEW + "] fallita");
  2483.                         }  
  2484.                     }
  2485.                 }

  2486.                 //  WSDL implementativo Erogatore
  2487.                 if( fr.getByteWsdlImplementativoErogatore() == null  )
  2488.                     asps.getFruitore(i).setWsdlImplementativoErogatore(CostantiXMLRepository.WSDL_UNDEFINED);
  2489.                 else{
  2490.                     String path = dirWSDLFruitore.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
  2491.                     generaFile(fr.getByteWsdlImplementativoErogatore(),path);
  2492.                     String url = prefixUrlWSDLFruitore + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
  2493.                     asps.getFruitore(i).setWsdlImplementativoErogatore(url);
  2494.                 }
  2495.                 // WSDL implementativo Fruitore
  2496.                 if( (fr.getByteWsdlImplementativoFruitore() == null))
  2497.                     asps.getFruitore(i).setWsdlImplementativoFruitore(CostantiXMLRepository.WSDL_UNDEFINED);
  2498.                 else{
  2499.                     String path = dirWSDLFruitore.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
  2500.                     generaFile(fr.getByteWsdlImplementativoFruitore(),path);
  2501.                     String url = prefixUrlWSDLFruitore + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
  2502.                     asps.getFruitore(i).setWsdlImplementativoFruitore(url);
  2503.                 }

  2504.             }

  2505.             // generazione XML
  2506.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(asps); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
  2507.             soggXML.addAccordoServizioParteSpecifica(asps);
  2508.             registroXML.addSoggetto(soggXML);
  2509.             JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);

  2510.         }catch(DriverRegistroServiziException e){
  2511.             throw e;
  2512.         }catch(Exception e){
  2513.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del servizio ["+idServizioOLD+"]: "+e.getMessage(),e);
  2514.         }
  2515.     }  

  2516.     /**
  2517.      * Metodo che si occupa dell'eliminazione del servizio dal repository.
  2518.      *
  2519.      * @param idServ Identificativo del Servizio
  2520.      */  
  2521.     public void deleteAccordoServizioParteSpecifica(IDServizio idServ) throws DriverRegistroServiziException{

  2522.         if(idServ==null || idServ.getSoggettoErogatore()==null)
  2523.             throw new DriverRegistroServiziException("Alcuni parametri sono null");

  2524.         String idSoggetto = idServ.getSoggettoErogatore().getTipo()+
  2525.         idServ.getSoggettoErogatore().getNome();
  2526.         String idServizio = idServ.getTipo()+idServ.getNome()+idServ.getVersione();

  2527.         try {

  2528.             String dirSoggetto = this.pathPrefix+idSoggetto+File.separator;
  2529.             String dirServiziSoggetto = dirSoggetto + CostantiXMLRepository.SERVIZI + File.separator;

  2530.             // Elimino eventuale file di index
  2531.             if(this.existsIndexServizi(dirServiziSoggetto)){
  2532.                 IDServizio[]index = this.readIndexServiziFromFile(dirServiziSoggetto);
  2533.                 if(index!=null){
  2534.                     if(index.length==1){
  2535.                         this.deleteIndexServizi(dirServiziSoggetto);
  2536.                     }else{
  2537.                         IDServizio [] newImage = new IDServizio[index.length-1];
  2538.                         int j=0;
  2539.                         for(int i=0; i< index.length; i++){
  2540.                             if( !(index[i].getTipo().equals(idServ.getTipo()) &&
  2541.                                     index[i].getNome().equals(idServ.getNome()) &&
  2542.                                     index[i].getVersione().intValue() == idServ.getVersione().intValue()) ){
  2543.                                 newImage[j]=index[i];
  2544.                                 j++;
  2545.                             }
  2546.                         }
  2547.                         this.setContenutoIndexServizi(dirServiziSoggetto,newImage);
  2548.                     }
  2549.                 }
  2550.             }

  2551.             // Elimino servizi del soggetto
  2552.             File definizioneXML = new File(dirServiziSoggetto+idServizio+".xml");
  2553.             if(definizioneXML.delete() == false){
  2554.                 throw new DriverRegistroServiziException("Eliminazione XML del servizio ["+idServizio+"] erogato dal soggetto ["+
  2555.                         idSoggetto+"] non riuscita");
  2556.             }

  2557.             File dirWSDL = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR + idServizio);
  2558.             File dirAllegati = new File(dirServiziSoggetto + CostantiXMLRepository.ALLEGATI_DIR + idServizio);
  2559.             File dirSpecificheSemiformali = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizio);
  2560.             File dirSpecificheSicurezza = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizio);
  2561.             File dirSpecificheLivelliServizio = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizio);
  2562.            
  2563.             //  Elimino vecchi WSDL
  2564.             String[]listWSDL = dirWSDL.list();
  2565.             if(listWSDL!=null) {
  2566.                 for(int j=0; j<listWSDL.length;j++){
  2567.                     File fileInterno = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
  2568.                     if(fileInterno.isDirectory()){
  2569.                         // wsdl-implementativo fruitore-servizio
  2570.                         String[]listFruitoreWSDL = fileInterno.list();
  2571.                         if(listFruitoreWSDL!=null) {
  2572.                             for(int k=0; k<listFruitoreWSDL.length;k++){
  2573.                                 File fileWsdlFruitore = new File(fileInterno.getAbsolutePath() + File.separator +listFruitoreWSDL[k]);
  2574.                                 if(fileWsdlFruitore.delete()==false){
  2575.                                     throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWsdlFruitore.getAbsolutePath() +"] per il servizio [" + idServizio + "] non riuscita");
  2576.                                 }  
  2577.                             }
  2578.                         }
  2579.                     }
  2580.                     if(fileInterno.delete()==false){
  2581.                         throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileInterno.getAbsolutePath() +"] per il servizio [" + idServizio + "] non riuscita");
  2582.                     }
  2583.                 }
  2584.             }  
  2585.             // Elimina vecchia directory dei WSDL
  2586.             if(dirWSDL.delete()==false){
  2587.                 throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL del servizio ["+idServizio + "] non riuscita");
  2588.             }
  2589.            
  2590.             // Elimino vecchi allegati
  2591.             String[]listAllegati = dirAllegati.list();
  2592.             if(listAllegati!=null) {
  2593.                 for(int j=0; j<listAllegati.length;j++){
  2594.                     File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
  2595.                     if(fileAllegati.delete()==false){
  2596.                         throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
  2597.                     }
  2598.                 }
  2599.             }
  2600.             // Elimina vecchia directory degli allegati
  2601.             if(dirAllegati.delete()==false){
  2602.                 throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+idServizio + "] non riuscita");
  2603.             }
  2604.             // Elimino vecche specificheSemiformali
  2605.             String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
  2606.             if(listSpecificheSemiformali!=null) {
  2607.                 for(int j=0; j<listSpecificheSemiformali.length;j++){
  2608.                     File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
  2609.                     if(fileSpecificheSemiformali.delete()==false){
  2610.                         throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
  2611.                     }
  2612.                 }
  2613.             }
  2614.             // Elimina vecchia directory delle specifiche semiformali
  2615.             if(dirSpecificheSemiformali.delete()==false){
  2616.                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+idServizio + "] non riuscita");
  2617.             }
  2618.             // Elimino vecchie specificheSicurezza
  2619.             String[]listSpecificheSicurezza = dirSpecificheSicurezza.list();
  2620.             if(listSpecificheSicurezza!=null) {
  2621.                 for(int j=0; j<listSpecificheSicurezza.length;j++){
  2622.                     File fileSpecificheSicurezza = new File(dirSpecificheSicurezza.getAbsolutePath() + File.separator +listSpecificheSicurezza[j]);
  2623.                     if(fileSpecificheSicurezza.delete()==false){
  2624.                         throw new DriverRegistroServiziException("Eliminazione della specifica di sicurezza ["+ fileSpecificheSicurezza.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
  2625.                     }
  2626.                 }
  2627.             }
  2628.             // Elimina vecchia directory delle specifiche di sicurezza
  2629.             if(dirSpecificheSicurezza.delete()==false){
  2630.                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di sicurezza dell'accordo ["+idServizio + "] non riuscita");
  2631.             }
  2632.             // Elimino vecchie specificheLivelliServizio
  2633.             String[]listSpecificheLivelliServizio = dirSpecificheLivelliServizio.list();
  2634.             if(listSpecificheLivelliServizio!=null) {
  2635.                 for(int j=0; j<listSpecificheLivelliServizio.length;j++){
  2636.                     File fileSpecificheLivelliServizio = new File(dirSpecificheLivelliServizio.getAbsolutePath() + File.separator +listSpecificheLivelliServizio[j]);
  2637.                     if(fileSpecificheLivelliServizio.delete()==false){
  2638.                         throw new DriverRegistroServiziException("Eliminazione della specifica dei livelli di servizio ["+ fileSpecificheLivelliServizio.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
  2639.                     }
  2640.                 }
  2641.             }
  2642.             // Elimina vecchia directory delle specifiche dei livelli di servizio
  2643.             if(dirSpecificheLivelliServizio.delete()==false){
  2644.                 throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche dei livelli di servizio dell'accordo ["+idServizio + "] non riuscita");
  2645.             }

  2646.         }catch(DriverRegistroServiziException e){
  2647.             throw e;
  2648.         }catch(Exception e){
  2649.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'eliminazione XML del servizio ["+idServizio+"] erogato dal soggetto ["+
  2650.                     idSoggetto+"]: "+e.getMessage(),e);
  2651.         }
  2652.     }  

  2653.     /**
  2654.      * Lista di Servizi registrati
  2655.      *
  2656.      * @return lista di servizi registrati.
  2657.      *
  2658.      */  
  2659.     public AccordoServizioParteSpecifica[] getAccordiServiziParteSpecifica()throws DriverRegistroServiziException{

  2660.         AccordoServizioParteSpecifica [] serviziRegistrati = null;
  2661.         try {
  2662.             // Prendo prima i soggetti
  2663.             Soggetto [] soggettiRegistrati = this.getSoggetti();
  2664.             // Prendo dopodiche i servizi
  2665.             File dir = new File(this.pathPrefix);
  2666.             File[] soggetti = dir.listFiles();
  2667.             List<AccordoServizioParteSpecifica> servizi = new ArrayList<AccordoServizioParteSpecifica>();
  2668.             int indexSoggetto = 0;
  2669.             if(soggetti!=null){
  2670.                 for(int i=0; i<soggetti.length;i++){
  2671.                     if(soggetti[i].isDirectory() &&
  2672.                             !CostantiXMLRepository.ACCORDI_DI_SERVIZIO.equalsIgnoreCase(soggetti[i].getName()) &&
  2673.                             !CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE.equalsIgnoreCase(soggetti[i].getName()) &&
  2674.                             !CostantiXMLRepository.PORTE_DI_DOMINIO.equalsIgnoreCase(soggetti[i].getName())){
  2675.                         File dirServiziSoggetto = new File(soggetti[i].getAbsoluteFile() + File.separator +CostantiXMLRepository.SERVIZI);
  2676.                         File[] serviziSoggetto = dirServiziSoggetto.listFiles();
  2677.                         if(serviziSoggetto!=null){
  2678.                             for(int k=0; k<serviziSoggetto.length;k++){
  2679.                                 if(serviziSoggetto[k].isFile() && (this.isIndexServizi(serviziSoggetto[k])==false) ){
  2680.                                     org.openspcoop2.core.registry.RegistroServizi r =
  2681.                                         (org.openspcoop2.core.registry.RegistroServizi)  JaxbUtils.xmlToObj(serviziSoggetto[k].getAbsolutePath(),
  2682.                                                 org.openspcoop2.core.registry.RegistroServizi.class);
  2683.                                     if(r.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0){
  2684.                                         AccordoServizioParteSpecifica s = r.getSoggetto(0).getAccordoServizioParteSpecifica(0);
  2685.                                         s.setTipoSoggettoErogatore(soggettiRegistrati[indexSoggetto].getTipo());
  2686.                                         s.setNomeSoggettoErogatore(soggettiRegistrati[indexSoggetto].getNome());
  2687.                                         servizi.add(s);
  2688.                                     }
  2689.                                 }
  2690.                             }
  2691.                         }
  2692.                         indexSoggetto++;
  2693.                     }
  2694.                 }
  2695.             }
  2696.             if(servizi.size()>0){
  2697.                 serviziRegistrati = new AccordoServizioParteSpecifica[1];
  2698.                 serviziRegistrati =  servizi.toArray(serviziRegistrati);
  2699.             }
  2700.             return serviziRegistrati;
  2701.         }catch(Exception e){
  2702.             e.printStackTrace(System.err);
  2703.             throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei soggetti: "+e.getMessage(),e);
  2704.         }
  2705.     }
  2706. }