XMLLib.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.core.registry.driver.web;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDAccordoCooperazione;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.Gruppo;
import org.openspcoop2.core.registry.PortaDominio;
import org.openspcoop2.core.registry.Ruolo;
import org.openspcoop2.core.registry.Scope;
import org.openspcoop2.core.registry.Soggetto;
import org.openspcoop2.core.registry.constants.CostantiXMLRepository;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.utils.xml.JaxbUtils;
/**
* Classe utilizzata per creare/modificare/eliminare entita XML di un registro dei servizi OpenSPCoop.
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class XMLLib{
/* ******** F I E L D S P R I V A T I ******** */
/** --- Location del repository dove memorizzare i file XML associate alle entita create nel registro UDDI ---- */
private String pathPrefix;
/** --- URL Prefix utilizzato come prefisso da associare alle url memorizzate nelle entita create nell'UDDI
e contenenti le definizioni XML ------*/
private String urlPrefix;
// Factory
private IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
private IDServizioFactory idServizioFactory = IDServizioFactory.getInstance();
private org.openspcoop2.core.registry.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsRegistry = null;
/**
* Costruttore.
*
* @param path Contiene il path del repository necessario al registro dei servizi
* @param url URL Prefix utilizzato come prefisso da associare alle url memorizzate per i WSDL
*/
public XMLLib(String path,String url) throws DriverRegistroServiziException{
this.cleanerOpenSPCoop2ExtensionsRegistry = new org.openspcoop2.core.registry.utils.CleanerOpenSPCoop2Extensions();
if(path!=null){
if (!path.endsWith(File.separator))
this.pathPrefix= path + File.separator;
else
this.pathPrefix = path;
}
if(url!=null){
if (!url.endsWith(CostantiXMLRepository.URL_SEPARATOR))
this.urlPrefix= url + CostantiXMLRepository.URL_SEPARATOR;
else
this.urlPrefix = url;
}
if(path!=null){
try {
// Creazione/Controllo Esistenza directory accordo
File dir = new File(this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO);
if(dir.exists() == false){
if(dir.mkdir()==false){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di servizio ["+
this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+"]");
}
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception io){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di servizio ["+
this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+"]: "+io.getMessage());
}
try {
// Creazione/Controllo Esistenza directory accordo cooperazione
File dir = new File(this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE);
if(dir.exists() == false){
if(dir.mkdir()==false){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di cooperazione ["+
this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE+"]");
}
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception io){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per gli accordi di servizio ["+
this.pathPrefix+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+"]: "+io.getMessage());
}
try {
// Creazione/Controllo Esistenza directory porte di dominio
File dirPDD = new File(this.pathPrefix+CostantiXMLRepository.PORTE_DI_DOMINIO);
if(dirPDD.exists() == false){
if(dirPDD.mkdir()==false){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per le porte di dominio ["+
this.pathPrefix+CostantiXMLRepository.PORTE_DI_DOMINIO+"]");
}
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception io){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la creazione della directory per le porte di dominio ["+
this.pathPrefix+CostantiXMLRepository.PORTE_DI_DOMINIO+"]: "+io.getMessage());
}
}
}
/* ---------------- GENERAZIONE XML DA/A FILE ------------------------- */
/**
* Metodo che si occupa della generazione di un file a partire da un array di byte
* Sono richiesti interattivamente i parametri che identificano il file da generare e l'array di byte.
*
* @param date Array di Byte da trasformare in file.
* @param fileName Nome del File
*/
public void generaFile(byte[]date, String fileName) throws DriverRegistroServiziException{
FileOutputStream fos = null;
try{
File file = new File(fileName);
if(file.exists()){
if(!file.delete()) {
// ignore
}
}
fos =new FileOutputStream(fileName);
fos.write(date);
fos.close();
}catch(Exception e){
try{
if( fos != null )
fos.close();
} catch(Exception er) {
// close
}
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante il salvataggio del file ("+fileName+"): "+e.getMessage(),e);
}
}
/**
* Legge un indice dei servizi di un soggetto
*
* @param directoryServiziSoggetto
* @return L'indice dei servizi di un soggetto
* @throws DriverRegistroServiziException
*/
public String getContenutoIndexServizi( String directoryServiziSoggetto ) throws DriverRegistroServiziException{
String indexServizi = directoryServiziSoggetto;
if(directoryServiziSoggetto.endsWith(File.separator)==false){
indexServizi = directoryServiziSoggetto + File.separator;
}
indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
BufferedReader bf = null;
FileReader fr = null;
try{
File f = new File(indexServizi);
StringBuilder contenuto = new StringBuilder();
if(f.exists()){
if(f.isFile()==false){
throw new Exception("Non e' un file regolare");
}
fr = new FileReader(f);
bf = new BufferedReader(fr);
char[]buffer = new char[1024];
int byteLetti = -1;
while( (byteLetti = fr.read(buffer))!=-1){
contenuto.append(buffer,0,byteLetti);
}
}
if(contenuto.length()>0)
return contenuto.toString();
else
return null;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la elaborazione del file di index ("+indexServizi+"): "+e.getMessage(),e);
}
finally {
try{
if( fr != null )
fr.close();
} catch(Exception er) {
// close
}
try{
if( bf != null )
bf.close();
} catch(Exception er) {
// close
}
}
}
/**
* Genera l'indice dei servizi
*
* @param directoryServiziSoggetto
* @param contenuto
* @throws DriverRegistroServiziException
*/
private void setContenutoIndexServizi( String directoryServiziSoggetto , String contenuto ) throws DriverRegistroServiziException{
// index name
String indexServizi = directoryServiziSoggetto;
if(directoryServiziSoggetto.endsWith(File.separator)==false){
indexServizi = directoryServiziSoggetto + File.separator;
}
indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
if(contenuto==null)
throw new DriverRegistroServiziException("Contenuto da inserire nell'indice dei servizi is null");
// intestazione
String content = null;
if( contenuto.startsWith(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST)==false ){
content = CostantiXMLRepository.INDEX_SERVIZI_MANIFEST + contenuto;
}else{
content = contenuto;
}
FileOutputStream fos = null;
try{
File f = new File(indexServizi);
if(f.exists()){
if(!f.delete()) {
// ignore
}
}
fos = new FileOutputStream(f);
fos.write(content.getBytes());
fos.close();
}catch(Exception e){
try{
if( fos != null )
fos.close();
} catch(Exception er) {
// close
}
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'impostazione del file di index ("+indexServizi+"): "+e.getMessage(),e);
}
}
private void setContenutoIndexServizi(String directoryServiziSoggetto,IDServizio[]index)throws DriverRegistroServiziException {
// genero stringa
StringBuilder bf = new StringBuilder();
for(int i=0; i<index.length; i++){
bf.append(this.generaIndexServiziLine(index[i]));
}
this.setContenutoIndexServizi(directoryServiziSoggetto, bf.toString());
}
/**
* Genera la linea di un servizio nell'indice
* @return linea di un servizio nell'indice
*/
private String generaIndexServiziLine(IDServizio idS) throws DriverRegistroServiziException{
if(idS.getUriAccordoServizioParteComune()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] uri accordo is null");
}
if(idS.getTipo()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] tipo Servizio is null");
}
if(idS.getNome()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] nome Servizio is null");
}
if(idS.getVersione()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] versione Servizio is null");
}
if(idS.getSoggettoErogatore()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] soggetto Erogatore is null");
}
if(idS.getSoggettoErogatore().getTipo()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] tipo soggetto Erogatore is null");
}
if(idS.getSoggettoErogatore().getNome()==null){
throw new DriverRegistroServiziException("[generaIndexServiziLine] nome soggetto Erogatore is null");
}
return idS.getUriAccordoServizioParteComune() +CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+
idS.getSoggettoErogatore().getTipo()+"/"+idS.getSoggettoErogatore().getNome()+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+
idS.getTipo()+"/"+idS.getNome()+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+idS.getVersione()+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+
"tipologiaServizio("+idS.getTipologia().getValue()+")"+"\n";
}
private boolean existsIndexServizi(String directoryServiziSoggetto){
String indexServizi = directoryServiziSoggetto;
if(directoryServiziSoggetto.endsWith(File.separator)==false){
indexServizi = directoryServiziSoggetto + File.separator;
}
indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
File f = new File(indexServizi);
return f.exists();
}
private boolean isIndexServizi(File file)throws DriverRegistroServiziException{
FileInputStream fin = null;
ByteArrayOutputStream bout = null;
try{
fin = new FileInputStream(file);
byte[] readB = new byte[1024];
int letti =0;
bout = new ByteArrayOutputStream();
while( (letti=fin.read(readB))!=-1 ){
bout.write(readB,0,letti);
}
fin.close();
if(bout.size()>0 && bout.toString()!=null && bout.toString().startsWith(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST))
return true;
else
return false;
}catch(Exception e){
try{
if( fin != null )
fin.close();
} catch(Exception er) {
// close
}
try{
if( bout != null )
bout.close();
} catch(Exception er) {
// close
}
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante il check del file di index ("+file.getName()+"): "+e.getMessage(),e);
}
}
private void deleteIndexServizi(String directoryServiziSoggetto)throws DriverRegistroServiziException{
String indexServizi = directoryServiziSoggetto;
if(directoryServiziSoggetto.endsWith(File.separator)==false){
indexServizi = directoryServiziSoggetto + File.separator;
}
indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
try{
File f = new File(indexServizi);
if(f.exists()){
if (f.delete()==false){
throw new DriverRegistroServiziException("Eliminazione file di index ["+indexServizi+"] non riuscita");
}
}
}catch(DriverRegistroServiziException de){
throw de;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'eliminazione del file di index ("+indexServizi+"): "+e.getMessage(),e);
}
}
/**
* Legge un index dei servizi
*
* @param contenuto
* @return La lettura di un indice dei servizi come array di IDServizio
*/
public static IDServizio[] mappingIndexServizi(String contenuto)throws DriverRegistroServiziException{
XMLLib xmlLib = new XMLLib(null,null);
return xmlLib.readIndexServizi(contenuto);
}
/**
* Legge un index dei servizi
*
* @param directoryServiziSoggetto
* @return indice dei servizi
*/
private IDServizio[] readIndexServizi(String contenuto)throws DriverRegistroServiziException{
try{
if(contenuto.toString().startsWith(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST)==false){
throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop");
}
String cont = contenuto.replace(CostantiXMLRepository.INDEX_SERVIZI_MANIFEST,"");
StringTokenizer st = new StringTokenizer(cont,"\n");
List<IDServizio> ids = new ArrayList<IDServizio>();
while(st.hasMoreTokens()){
String line = null;
try{
line = st.nextToken();
}catch(Exception e){
break;
}
byte condizioneUscita = 0;
if( (line!=null) && (line.length()>0) && (line.getBytes()[0]==condizioneUscita) )
break;
String [] splitLine = null;
if(line!=null) {
splitLine = line.split(CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE);
}
if(splitLine==null){
throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read line '"+CostantiXMLRepository.INDEX_SERVIZI_SEPARATORE+"') ["+line+"]");
}else if(splitLine.length!=5){
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+"]");
}else if(splitLine[0]==null){
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]+"]");
}else if(splitLine[1]==null){
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]+"]");
}else if(splitLine[2]==null){
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]+"]");
}else if(splitLine[3]==null){
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]+"]");
}else if(splitLine[4]==null){
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]+"]");
}else if(splitLine[1].indexOf("/")==-1){
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]+"]");
}else if(splitLine[2].indexOf("/")==-1){
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]+"]");
}else if( (splitLine[4].equals("tipologiaServizio(normale)")==false) && (splitLine[4].equals("tipologiaServizio(correlato)")==false) ){
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]+"]");
}
// soggetto Erogatore
IDSoggetto idSoggettoErogatore = null;
String [] splitSoggetto = splitLine[1].split("/");
if(splitSoggetto==null || splitSoggetto.length!=2 || splitSoggetto[0]==null || splitSoggetto[1]==null){
throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read soggetto ':') ["+splitLine[1]+"]");
}
idSoggettoErogatore = new IDSoggetto(splitSoggetto[0], splitSoggetto[1]);
// servizio
String [] splitServizio = splitLine[2].split("/");
if(splitServizio==null || splitServizio.length!=2 || splitServizio[0]==null || splitServizio[1]==null){
throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read servizio ':') ["+splitLine[2]+"]");
}
String tipoServizio = splitServizio[0];
String nomeServizio = splitServizio[1];
// versioneServizio
Integer versioneServizio = null;
try{
versioneServizio = Integer.parseInt(splitLine[3]);
}catch(Exception e){
throw new Exception("Non e' un file index servizi del registro dei servizi di OpenSPCoop (read versioneServizio) ["+splitLine[3]+"]: " +e.getMessage(),e);
}
IDServizio idServ = this.idServizioFactory.getIDServizioFromValues(tipoServizio, nomeServizio, idSoggettoErogatore, versioneServizio);
// uri accordo
String uriAccordoServizioParteComune = splitLine[0];
idServ.setUriAccordoServizioParteComune(uriAccordoServizioParteComune);
// servizio correlato
if( splitLine[3].equals("tipologiaServizio(correlato)") )
idServ.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.CORRELATO);
else
idServ.setTipologia(org.openspcoop2.core.constants.TipologiaServizio.NORMALE);
ids.add(idServ);
}
if(ids.size()==0){
return null;
}else{
IDServizio [] rIDS = new IDServizio[1];
return ids.toArray(rIDS);
}
}catch(DriverRegistroServiziException de){
throw de;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la lettura del file di index: "+e.getMessage(),e);
}
}
/**
* Legge un file di index dei servizi
*
* @param directoryServiziSoggetto
* @return index dei servizi
*/
private IDServizio[] readIndexServiziFromFile(String directoryServiziSoggetto)throws DriverRegistroServiziException{
String indexServizi = directoryServiziSoggetto;
if(directoryServiziSoggetto.endsWith(File.separator)==false){
indexServizi = directoryServiziSoggetto + File.separator;
}
indexServizi = indexServizi + CostantiXMLRepository.INDEX_SERVIZI;
BufferedReader bf = null;
FileReader fr = null;
try{
File f = new File(indexServizi);
StringBuilder contenuto = new StringBuilder();
if(f.exists()){
if(f.isFile()==false){
throw new Exception("Non e' un file regolare");
}
fr = new FileReader(f);
bf = new BufferedReader(fr);
char[]buffer = new char[1024];
int letti=0;
while( (letti=fr.read(buffer))!=-1){
contenuto.append(buffer,0,letti);
}
}else{
throw new DriverRegistroServiziException("File di index non esistente");
}
return this.readIndexServizi(contenuto.toString());
}catch(DriverRegistroServiziException de){
throw de;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la lettura del file di index ("+indexServizi+"): "+e.getMessage(),e);
}finally{
try{
if( fr != null )
fr.close();
} catch(Exception er) {
// close
}
try{
if( bf != null )
bf.close();
} catch(Exception er) {
// close
}
}
}
/* ---------------- GENERAZIONE XML ACCORDO DI COOPERAZIONE ------------------------- */
public String mappingIDAccordoCooperazioneToFileName(IDAccordoCooperazione idAccordo)throws DriverRegistroServiziException{
return this.mappingUriToFileName_accordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromIDAccordo(idAccordo));
}
public String mappingUriToFileName_accordoCooperazione(String uriAccordo)throws DriverRegistroServiziException{
String tmp = uriAccordo.replaceAll("/", "_");
tmp = tmp.replaceAll(":", "_");
return tmp;
}
/**
* Metodo che controlla se l'accordo risulta gia' registrato
*
* @param idAccordo ID dell'accordo di cooperazione da creare/modificare
* @return true se l'accordo risulta registrato, false altrimenti.
*
*/
public boolean existsAccordoCooperazione(IDAccordoCooperazione idAccordo)throws DriverRegistroServiziException{
String fileNameAccordo = null;
try {
fileNameAccordo = mappingIDAccordoCooperazioneToFileName(idAccordo);
File fileXML = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + fileNameAccordo + ".xml");
File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.ALLEGATI_DIR +fileNameAccordo);
File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR +fileNameAccordo);
if( (fileXML.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE+") ["+fileNameAccordo+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione/modifica di un file XML a partire da un accordo di cooperazione.
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param idAccordo ID dell'accordo di cooperazione da creare/modificare
* @param accordo Dati dell'accordo di cooperazione da trasformare in XML.
*
*/
public void createAccordoCooperazione(IDAccordoCooperazione idAccordo,AccordoCooperazione accordo) throws DriverRegistroServiziException{
String fileNameAccordo = null;
try {
fileNameAccordo = mappingIDAccordoCooperazioneToFileName(idAccordo);
String accordoDir = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator;
String accordoOLD = fileNameAccordo;
String accordoNEW = mappingUriToFileName_accordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromAccordo(accordo));
if(accordoOLD.equals(accordoNEW)==false){
// Esiste gia' deve essere modificato il nome.
// Controllo esistenza per modifica
File fileXML = new File(accordoDir + accordoOLD + ".xml");
File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoOLD);
File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoOLD);
if( (fileXML.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
throw new DriverRegistroServiziException("Richiesta modifica di un accordo non registrato ["+accordoOLD + "]");
}
else{
try{
// elimino vecchia definizione Accordo Servizio
if(fileXML.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per l'accordo ["+fileXML.getAbsolutePath()+"] non riuscita");
}
// Elimino vecchi allegati
String[]listAllegati = dirAllegati.list();
if(listAllegati!=null) {
for(int j=0; j<listAllegati.length;j++){
File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
if(fileAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory degli allegati
if(dirAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+accordoOLD + "] non riuscita");
}
// Elimino vecche specificheSemiformali
String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
if(listSpecificheSemiformali!=null) {
for(int j=0; j<listSpecificheSemiformali.length;j++){
File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
if(fileSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche semiformali
if(dirSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+accordoOLD + "] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Rinominazione della directory/file per l'accordo ["+accordoOLD+ "] non riuscita: "+io.toString());
}
}
}
// Crea directory
File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW);
File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW);
String prefixUrlAllegato = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaSemiformale = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
// Gestione Allegati
if(dirAllegati.exists()==false){
if(dirAllegati.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per gli allegati dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecchi allegati
String [] files = dirAllegati.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione allegato ["+files[i]+ "] non riuscita");
}
}
}
}
}
// Gestione SpecificheSemiformali
if(dirSpecificheSemiformali.exists()==false){
if(dirSpecificheSemiformali.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche semiformali dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecche specifiche semiformali
String [] files = dirSpecificheSemiformali.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione spacifica semiformale ["+files[i]+ "] non riuscita");
}
}
}
}
}
// File che definisce l'accordo
String fileXML = accordoDir + accordoNEW + ".xml";
// Definizione accordo
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// Allegati
for(int i=0; i<accordo.sizeAllegatoList();i++){
String path = null;
if(accordo.getAllegato(i).getFile().startsWith(prefixUrlAllegato)){
path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile().substring(prefixUrlAllegato.length());
}else{
path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile();
}
generaFile(accordo.getAllegato(i).getByteContenuto(),path);
String url = prefixUrlAllegato + accordo.getAllegato(i).getFile();
accordo.getAllegato(i).setFile(url);
}
// SpecificheSemiformali
for(int i=0; i<accordo.sizeSpecificaSemiformaleList();i++){
String path = null;
if(accordo.getSpecificaSemiformale(i).getFile().startsWith(prefixUrlSpecificaSemiformale)){
path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile().substring(prefixUrlSpecificaSemiformale.length());
}else{
path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile();
}
generaFile(accordo.getSpecificaSemiformale(i).getByteContenuto(),path);
String url = prefixUrlSpecificaSemiformale + accordo.getSpecificaSemiformale(i).getFile();
accordo.getSpecificaSemiformale(i).setFile(url);
}
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
registroXML.addAccordoCooperazione(accordo);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML dell'accordo ["+fileNameAccordo+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione dell'accordo dal repository.
*
* @param idAccordo ID dell'accordo da eliminare
*/
public void deleteAccordoCooperazione(IDAccordoCooperazione idAccordo) throws DriverRegistroServiziException {
String fileNameAccordo = null;
try {
fileNameAccordo = mappingIDAccordoCooperazioneToFileName(idAccordo);
String fileXML = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + fileNameAccordo + ".xml";
File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.ALLEGATI_DIR + fileNameAccordo);
File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + fileNameAccordo);
// Elimino accordo
File accordo = new File(fileXML);
if(accordo.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML dell'accordo ["+fileNameAccordo+"] non riuscta");
}
// Elimino vecchi allegati
String[]listAllegati = dirAllegati.list();
if(listAllegati!=null) {
for(int j=0; j<listAllegati.length;j++){
File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
if(fileAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory degli allegati
if(dirAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+fileNameAccordo + "] non riuscita");
}
// Elimino vecche specificheSemiformali
String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
if(listSpecificheSemiformali!=null) {
for(int j=0; j<listSpecificheSemiformali.length;j++){
File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
if(fileSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche semiformali
if(dirSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+fileNameAccordo + "] non riuscita");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML dell'accordo ["+fileNameAccordo+"]: "+e.getMessage(),e);
}
}
/**
* Lista di accordi registrati
*
* @return lista di accordi registrati.
*
*/
public AccordoCooperazione[] getAccordiCooperazione()throws DriverRegistroServiziException{
AccordoCooperazione [] accordiRegistrati = null;
try {
File dir = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE);
if(dir.exists()==false)
return null;
File[] accordi = dir.listFiles();
int numAccordi = 0;
if(accordi!=null){
for(int i=0; i<accordi.length;i++){
if(accordi[i].isFile()){
numAccordi++;
}
}
}
if(numAccordi>0){
accordiRegistrati = new AccordoCooperazione[numAccordi];
for(int i=0,index=0; i<accordi.length;i++){
if(accordi[i].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(accordi[i].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
accordiRegistrati[index] = r.getAccordoCooperazione(0);
index++;
}
}
}
return accordiRegistrati;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca degli accordi di cooperazione: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML ACCORDO DI SERVIZIO ------------------------- */
public String mappingIDAccordoToFileName(IDAccordo idAccordo)throws DriverRegistroServiziException{
return this.mappingUriToFileName(this.idAccordoFactory.getUriFromIDAccordo(idAccordo));
}
public String mappingUriToFileName(String uriAccordo)throws DriverRegistroServiziException{
String tmp = uriAccordo.replaceAll("/", "_");
tmp = tmp.replaceAll(":", "_");
return tmp;
}
/**
* Metodo che controlla se l'accordo risulta gia' registrato
*
* @param idAccordo ID dell'accordo di servizio da creare/modificare
* @return true se l'accordo risulta registrato, false altrimenti.
*
*/
public boolean existsAccordoServizioParteComune(IDAccordo idAccordo)throws DriverRegistroServiziException{
String fileNameAccordo = null;
try {
fileNameAccordo = mappingIDAccordoToFileName(idAccordo);
File fileXML = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + fileNameAccordo + ".xml");
File dirWSDL = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.WSDL_DIR +fileNameAccordo);
File dirSpecificheConversazioni = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR +fileNameAccordo);
File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.ALLEGATI_DIR +fileNameAccordo);
File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR +fileNameAccordo);
if( (fileXML.exists()==false) || (dirWSDL.exists()==false) || (dirSpecificheConversazioni.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.ACCORDI_DI_SERVIZIO+") ["+fileNameAccordo+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione/modifica di un file XML a partire da un accordo di servizio.
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param idAccordo ID dell'accordo di servizio da creare/modificare
* @param accordo Dati dell'accordo di servizio da trasformare in XML.
*
*/
public void createAccordoServizioParteComune(IDAccordo idAccordo,AccordoServizioParteComune accordo) throws DriverRegistroServiziException{
String fileNameAccordo = null;
try {
fileNameAccordo = mappingIDAccordoToFileName(idAccordo);
String accordoDir = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator;
String accordoOLD = fileNameAccordo;
String accordoNEW = mappingUriToFileName(this.idAccordoFactory.getUriFromAccordo(accordo));
if(accordoOLD.equals(accordoNEW)==false){
// Esiste gia' deve essere modificato il nome.
// Controllo esistenza per modifica
File fileXML = new File(accordoDir + accordoOLD + ".xml");
File dirWSDL = new File(accordoDir + CostantiXMLRepository.WSDL_DIR + accordoOLD);
File dirSpecificheConversazioni = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + accordoOLD);
File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoOLD);
File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoOLD);
File dirSpecificheCoordinamento = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + accordoOLD);
if( (fileXML.exists()==false) || (dirWSDL.exists()==false) || (dirSpecificheConversazioni.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) ){
throw new DriverRegistroServiziException("Richiesta modifica di un accordo non registrato ["+accordoOLD + "]");
}
else{
try{
// elimino vecchia definizione Accordo Servizio
if(fileXML.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per l'accordo ["+fileXML.getAbsolutePath()+"] non riuscita");
}
// Elimino vecchi WSDL
String[]listWSDL = dirWSDL.list();
if(listWSDL!=null) {
for(int j=0; j<listWSDL.length;j++){
File fileWSDL = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
if(fileWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWSDL.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory dei WSDL
if(dirWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL dell'accordo ["+accordoOLD + "] non riuscita");
}
// Elimino vecche specofiche conversazione
String[]listSpecificheConversazione = dirSpecificheConversazioni.list();
if(listSpecificheConversazione!=null) {
for(int j=0; j<listSpecificheConversazione.length;j++){
File fileSpecificaConversazione = new File(dirSpecificheConversazioni.getAbsolutePath() + File.separator +listSpecificheConversazione[j]);
if(fileSpecificaConversazione.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file di specifica conversazione ["+ fileSpecificaConversazione.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche di conversazione
if(dirSpecificheConversazioni.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di conversazione dell'accordo ["+accordoOLD + "] non riuscita");
}
// Elimino vecchi allegati
String[]listAllegati = dirAllegati.list();
if(listAllegati!=null) {
for(int j=0; j<listAllegati.length;j++){
File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
if(fileAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory degli allegati
if(dirAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+accordoOLD + "] non riuscita");
}
// Elimino vecche specificheSemiformali
String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
if(listSpecificheSemiformali!=null) {
for(int j=0; j<listSpecificheSemiformali.length;j++){
File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
if(fileSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche semiformali
if(dirSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+accordoOLD + "] non riuscita");
}
// Gestione specifiche di coordinamento se esistenti
if(dirSpecificheCoordinamento.exists()){
// Elimino vecche specificheCoordinamento
String[]listSpecificheCoordinamento = dirSpecificheCoordinamento.list();
if(listSpecificheCoordinamento!=null) {
for(int j=0; j<listSpecificheCoordinamento.length;j++){
File fileSpecificheCoordinamento = new File(dirSpecificheCoordinamento.getAbsolutePath() + File.separator +listSpecificheCoordinamento[j]);
if(fileSpecificheCoordinamento.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica coordinamento ["+ fileSpecificheCoordinamento.getAbsolutePath() +"] per l'accordo [" + accordoOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche coordinamento
if(dirSpecificheCoordinamento.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche coordinamento dell'accordo ["+accordoOLD + "] non riuscita");
}
}
}catch(Exception io){
throw new DriverRegistroServiziException("Rinominazione della directory/file per l'accordo ["+accordoOLD+ "] non riuscita: "+io.toString());
}
}
}
// Crea directory dei WSDL
File dirWSDL = new File(accordoDir +CostantiXMLRepository.WSDL_DIR +accordoNEW);
File dirSpecificaConversazioni = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + accordoNEW);
File dirAllegati = new File(accordoDir + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW);
File dirSpecificheSemiformali = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW);
File dirSpecificheCoordinamento = new File(accordoDir + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + accordoNEW);
String prefixUrlWSDL = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.WSDL_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaConversazione = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlAllegato = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.ALLEGATI_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaSemiformale = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaCoordinamento = this.urlPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + accordoNEW + CostantiXMLRepository.URL_SEPARATOR;
// Gestione WSDL
if(dirWSDL.exists()==false){
if(dirWSDL.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per i WSDL dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecchi wsdl
// definitorio
String definitorioPath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_DEFINITORIO;
File definitorioWSDL = new File(definitorioPath);
if(definitorioWSDL.exists()){
if(definitorioWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione WSDL definitorio ["+definitorioPath+ "] non riuscita");
}
}
// concettuale
String concettualePath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_CONCETTUALE;
File concettualeWSDL = new File(concettualePath);
if(concettualeWSDL.exists()){
if(concettualeWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione WSDL concettuale ["+concettualePath+ "] non riuscita");
}
}
// logicoErogatore
String logicoErogatorePath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_LOGICO_EROGATORE;
File logicoErogatoreWSDL = new File(logicoErogatorePath);
if(logicoErogatoreWSDL.exists()){
if(logicoErogatoreWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione WSDL logico Erogatore ["+logicoErogatorePath+ "] non riuscita");
}
}
// logicoFruitore
String logicoFruitorePath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_LOGICO_FRUITORE;
File logicoFruitoreWSDL = new File(logicoFruitorePath);
if(logicoFruitoreWSDL.exists()){
if(logicoFruitoreWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione WSDL logico Fruitore ["+logicoFruitorePath+ "] non riuscita");
}
}
}
// Gestione Specifica Conversazioni
if(dirSpecificaConversazioni.exists()==false){
if(dirSpecificaConversazioni.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche delle conversazioni dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecchie specifiche conversazioni
// concettuale
String concettualePath = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_CONCETTUALE;
File concettuale = new File(concettualePath);
if(concettuale.exists()){
if(concettuale.delete()==false){
throw new DriverRegistroServiziException("Eliminazione specifica conversazione concettuale ["+concettualePath+ "] non riuscita");
}
}
// erogatore
String erogatorePath = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_EROGATORE;
File erogatore = new File(erogatorePath);
if(erogatore.exists()){
if(erogatore.delete()==false){
throw new DriverRegistroServiziException("Eliminazione specifica conversazione erogatore ["+erogatorePath+ "] non riuscita");
}
}
// fruitore
String fruitorePath = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_FRUITORE;
File fruitore = new File(fruitorePath);
if(fruitore.exists()){
if(fruitore.delete()==false){
throw new DriverRegistroServiziException("Eliminazione specifica conversazione fruitore ["+fruitorePath+ "] non riuscita");
}
}
}
// Gestione Allegati
if(dirAllegati.exists()==false){
if(dirAllegati.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per gli allegati dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecchi allegati
String [] files = dirAllegati.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione allegato ["+files[i]+ "] non riuscita");
}
}
}
}
}
// Gestione SpecificheSemiformali
if(dirSpecificheSemiformali.exists()==false){
if(dirSpecificheSemiformali.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche semiformali dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecche specifiche semiformali
String [] files = dirSpecificheSemiformali.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione spacifica semiformale ["+files[i]+ "] non riuscita");
}
}
}
}
}
// Gestione SpecificheCoordinamento
if(dirSpecificheCoordinamento.exists()==false){
if( accordo.getServizioComposto()!=null && dirSpecificheCoordinamento.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche di coordinamento dell'accordo ["+accordoNEW + "] non riuscita");
}
} else {
// elimino vecche specifiche di coordinamento
String [] files = dirSpecificheCoordinamento.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione spacifica di coordinamento ["+files[i]+ "] non riuscita");
}
}
}
}
}
// File che definisce l'accordo
String fileXML = accordoDir + accordoNEW + ".xml";
// Definizione accordo
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// Definizione WSDL
// WSDLDefinitorio
if( accordo.getByteWsdlDefinitorio() == null )
accordo.setWsdlDefinitorio(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_DEFINITORIO;
generaFile(accordo.getByteWsdlDefinitorio(),path);
String url = prefixUrlWSDL+ CostantiXMLRepository.WSDL_DEFINITORIO;
accordo.setWsdlDefinitorio(url);
}
// WSDLConcettuale
if( accordo.getByteWsdlConcettuale() == null )
accordo.setWsdlConcettuale(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_CONCETTUALE;
generaFile(accordo.getByteWsdlConcettuale(),path);
String url = prefixUrlWSDL+ CostantiXMLRepository.WSDL_CONCETTUALE;
accordo.setWsdlConcettuale(url);
}
// WSDL Logico Erogatore
if( accordo.getByteWsdlLogicoErogatore() == null )
accordo.setWsdlLogicoErogatore(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_LOGICO_EROGATORE;
generaFile(accordo.getByteWsdlLogicoErogatore(),path);
String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_LOGICO_EROGATORE;
accordo.setWsdlLogicoErogatore(url);
}
// WSDL Logico Fruitore
if( (accordo.getByteWsdlLogicoFruitore() == null))
accordo.setWsdlLogicoFruitore(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_LOGICO_FRUITORE;
generaFile(accordo.getByteWsdlLogicoFruitore(),path);
String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_LOGICO_FRUITORE;
accordo.setWsdlLogicoFruitore(url);
}
// SpecificaConversazioneConcettuale
if( accordo.getByteSpecificaConversazioneConcettuale() == null )
accordo.setSpecificaConversazioneConcettuale(CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_UNDEFINED);
else{
String path = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_CONCETTUALE;
generaFile(accordo.getByteSpecificaConversazioneConcettuale(),path);
String url = prefixUrlSpecificaConversazione+ CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_CONCETTUALE;
accordo.setSpecificaConversazioneConcettuale(url);
}
// SpecificaConversazioneErogatore
if( accordo.getByteSpecificaConversazioneErogatore() == null )
accordo.setSpecificaConversazioneErogatore(CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_UNDEFINED);
else{
String path = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_EROGATORE;
generaFile(accordo.getByteSpecificaConversazioneErogatore(),path);
String url = prefixUrlSpecificaConversazione + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_EROGATORE;
accordo.setSpecificaConversazioneErogatore(url);
}
// SpecificaConversazioneFruitore
if( (accordo.getByteSpecificaConversazioneFruitore() == null))
accordo.setSpecificaConversazioneFruitore(CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_UNDEFINED);
else{
String path = dirSpecificaConversazioni.getAbsolutePath() + File.separator + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_FRUITORE;
generaFile(accordo.getByteSpecificaConversazioneFruitore(),path);
String url = prefixUrlSpecificaConversazione + CostantiXMLRepository.SPECIFICA_CONVERSAZIONE_FRUITORE;
accordo.setSpecificaConversazioneFruitore(url);
}
// Allegati
for(int i=0; i<accordo.sizeAllegatoList();i++){
String path = null;
if(accordo.getAllegato(i).getFile().startsWith(prefixUrlAllegato)){
path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile().substring(prefixUrlAllegato.length());
}else{
path = dirAllegati.getAbsolutePath() + File.separator + accordo.getAllegato(i).getFile();
}
generaFile(accordo.getAllegato(i).getByteContenuto(),path);
String url = prefixUrlAllegato + accordo.getAllegato(i).getFile();
accordo.getAllegato(i).setFile(url);
}
// SpecificheSemiformali
for(int i=0; i<accordo.sizeSpecificaSemiformaleList();i++){
String path = null;
if(accordo.getSpecificaSemiformale(i).getFile().startsWith(prefixUrlSpecificaSemiformale)){
path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile().substring(prefixUrlSpecificaSemiformale.length());
}else{
path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + accordo.getSpecificaSemiformale(i).getFile();
}
generaFile(accordo.getSpecificaSemiformale(i).getByteContenuto(),path);
String url = prefixUrlSpecificaSemiformale + accordo.getSpecificaSemiformale(i).getFile();
accordo.getSpecificaSemiformale(i).setFile(url);
}
// Specifiche di coordinamento
if(accordo.getServizioComposto()!=null){
for(int i=0; i<accordo.getServizioComposto().sizeSpecificaCoordinamentoList();i++){
String path = null;
if(accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile().startsWith(prefixUrlSpecificaCoordinamento)){
path = dirSpecificheCoordinamento.getAbsolutePath() + File.separator + accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile().substring(prefixUrlSpecificaCoordinamento.length());
}else{
path = dirSpecificheCoordinamento.getAbsolutePath() + File.separator + accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile();
}
generaFile(accordo.getServizioComposto().getSpecificaCoordinamento(i).getByteContenuto(),path);
String url = prefixUrlSpecificaCoordinamento + accordo.getServizioComposto().getSpecificaCoordinamento(i).getFile();
accordo.getServizioComposto().getSpecificaCoordinamento(i).setFile(url);
}
}
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
registroXML.addAccordoServizioParteComune(accordo);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML dell'accordo ["+fileNameAccordo+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione dell'accordo dal repository.
*
* @param idAccordo ID dell'accordo da eliminare
*/
public void deleteAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException {
String fileNameAccordo = null;
try {
fileNameAccordo = mappingIDAccordoToFileName(idAccordo);
String fileXML = this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + fileNameAccordo + ".xml";
File dirWSDL = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.WSDL_DIR + fileNameAccordo);
File dirSpecificheConversazione = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_CONVERSAZIONI_DIR + fileNameAccordo);
File dirAllegati = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.ALLEGATI_DIR + fileNameAccordo);
File dirSpecificheSemiformali = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + fileNameAccordo);
File dirSpecificheCoordinamento = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO + File.separator + CostantiXMLRepository.SPECIFICHE_COORDINAMENTO_DIR + fileNameAccordo);
// Elimino accordo
File accordo = new File(fileXML);
if(accordo.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML dell'accordo ["+fileNameAccordo+"] non riuscta");
}
// Elimino vecchi WSDL
String[]listWSDL = dirWSDL.list();
if(listWSDL!=null) {
for(int j=0; j<listWSDL.length;j++){
File fileWSDL = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
if(fileWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+fileWSDL.getAbsolutePath()+"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory dei WSDL
if(dirWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL dell'accordo ["+fileNameAccordo + "] non riuscita");
}
// Elimino vecchie specifiche conversazione
String[]listSpecificheConversazione = dirSpecificheConversazione.list();
if(listSpecificheConversazione!=null) {
for(int j=0; j<listSpecificheConversazione.length;j++){
File fileSpecificaConversazione = new File(dirSpecificheConversazione.getAbsolutePath() + File.separator +listSpecificheConversazione[j]);
if(fileSpecificaConversazione.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file specifica di conversazione ["+ fileSpecificaConversazione.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche di conversazione
if(dirSpecificheConversazione.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di conversazione dell'accordo ["+fileNameAccordo + "] non riuscita");
}
// Elimino vecchi allegati
String[]listAllegati = dirAllegati.list();
if(listAllegati!=null) {
for(int j=0; j<listAllegati.length;j++){
File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
if(fileAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory degli allegati
if(dirAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+fileNameAccordo + "] non riuscita");
}
// Elimino vecche specificheSemiformali
String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
if(listSpecificheSemiformali!=null) {
for(int j=0; j<listSpecificheSemiformali.length;j++){
File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
if(fileSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche semiformali
if(dirSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+fileNameAccordo + "] non riuscita");
}
// Gestione specifiche di coordinamento se esistenti
if(dirSpecificheCoordinamento.exists()){
// Elimino vecche specificheCoordinamento
String[]listSpecificheCoordinamento = dirSpecificheCoordinamento.list();
if(listSpecificheCoordinamento!=null) {
for(int j=0; j<listSpecificheCoordinamento.length;j++){
File fileSpecificheCoordinamento = new File(dirSpecificheCoordinamento.getAbsolutePath() + File.separator +listSpecificheCoordinamento[j]);
if(fileSpecificheCoordinamento.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica coordinamento ["+ fileSpecificheCoordinamento.getAbsolutePath() +"] per l'accordo [" + fileNameAccordo + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche coordinamento
if(dirSpecificheCoordinamento.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche coordinamento dell'accordo ["+fileNameAccordo + "] non riuscita");
}
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML dell'accordo ["+fileNameAccordo+"]: "+e.getMessage(),e);
}
}
/**
* Lista di accordi registrati
*
* @return lista di accordi registrati.
*
*/
public AccordoServizioParteComune[] getAccordiServizioParteComune()throws DriverRegistroServiziException{
AccordoServizioParteComune [] accordiRegistrati = null;
try {
File dir = new File(this.pathPrefix + CostantiXMLRepository.ACCORDI_DI_SERVIZIO);
if(dir.exists()==false)
return null;
File[] accordi = dir.listFiles();
int numAccordi = 0;
if(accordi!=null){
for(int i=0; i<accordi.length;i++){
if(accordi[i].isFile()){
numAccordi++;
}
}
}
if(numAccordi>0){
accordiRegistrati = new AccordoServizioParteComune[numAccordi];
for(int i=0,index=0; i<accordi.length;i++){
if(accordi[i].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(accordi[i].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
accordiRegistrati[index] = r.getAccordoServizioParteComune(0);
index++;
}
}
}
return accordiRegistrati;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca degli accordi di servizio: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML PORTE DI DOMINIO ------------------------- */
/**
* Metodo che controlla se la porta di dominio risulta gia' registrata
*
* @param nome Nome della porta di dominio da creare/modificare
* @return true se la porta di dominio risulta registrata, false altrimenti.
*
*/
public boolean existsPortaDominio(String nome)throws DriverRegistroServiziException{
try {
File fileXML = new File(this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + File.separator + nome + ".xml");
if( (fileXML.exists()==false) ){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.PORTE_DI_DOMINIO+") ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione/modifica di un file XML a partire da una porta di dominio.
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param nome Nome della porta di dominio da creare/modificare
* @param pdd Dati della porta di dominio da trasformare in XML.
*
*/
public void createPortaDominio(String nome,PortaDominio pdd) throws DriverRegistroServiziException{
try {
String pddDir = this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + File.separator;
// Controllo esistenza per modifica
String fileXML = pddDir + nome + ".xml";
File fileXMLF = new File(fileXML);
if( fileXMLF.exists() ){
// richiesta modifica
// elimino vecchia definizione Porta di Dominio
try{
if(fileXMLF.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per la porta di dominio ["+fileXMLF.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per la porta di dominio ["+nome+ "] non riuscita: "+io.toString());
}
}
// Definizione porta di dominio
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(pdd);
registroXML.addPortaDominio(pdd);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML della porta di dominio ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione della porta di dominio dal repository.
*
* @param nome Nome della porta di dominio da eliminare
*/
public void deletePortaDominio(String nome) throws DriverRegistroServiziException {
try {
String fileXML = this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO + File.separator + nome + ".xml";
// Elimino porta di dominio
File pdd = new File(fileXML);
if(pdd.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML della porta di dominio ["+nome+"] non riuscta");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML della porta di dominio ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Lista delle porte di dominio registrate
*
* @return lista delle porte di dominio registrate
*
*/
public PortaDominio[] getPorteDominio()throws DriverRegistroServiziException{
PortaDominio [] pddRegistrate = null;
try {
File dir = new File(this.pathPrefix + CostantiXMLRepository.PORTE_DI_DOMINIO);
if(dir.exists()==false)
return null;
File[] porteDiDominio = dir.listFiles();
int numPorteDiDominio = 0;
if(porteDiDominio!=null){
for(int i=0; i<porteDiDominio.length;i++){
if(porteDiDominio[i].isFile()){
numPorteDiDominio++;
}
}
}
if(numPorteDiDominio>0){
pddRegistrate = new PortaDominio[numPorteDiDominio];
for(int i=0,index=0; i<porteDiDominio.length;i++){
if(porteDiDominio[i].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(porteDiDominio[i].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
pddRegistrate[index] = r.getPortaDominio(0);
index++;
}
}
}
return pddRegistrate;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca delle porte di dominio: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML GRUPPI ------------------------- */
/**
* Metodo che controlla se il gruppo risulta gia' registrato
*
* @param nome Nome del gruppo da creare/modificare
* @return true se il gruppo risulta registrato, false altrimenti.
*
*/
public boolean existsGruppo(String nome)throws DriverRegistroServiziException{
try {
File fileXML = new File(this.pathPrefix + CostantiXMLRepository.GRUPPI + File.separator + nome + ".xml");
if( (fileXML.exists()==false) ){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.GRUPPI+") ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione/modifica di un file XML a partire da un gruppo
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param nome Nome del gruppo da creare/modificare
* @param gruppo Dati del gruppo da trasformare in XML.
*
*/
public void createGruppo(String nome,Gruppo gruppo) throws DriverRegistroServiziException{
try {
String gruppiDir = this.pathPrefix + CostantiXMLRepository.GRUPPI + File.separator;
// Controllo esistenza per modifica
String fileXML = gruppiDir + nome + ".xml";
File fileXMLF = new File(fileXML);
if( fileXMLF.exists() ){
// richiesta modifica
// elimino vecchia definizione Porta di Dominio
try{
if(fileXMLF.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il gruppo ["+fileXMLF.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il gruppo ["+nome+ "] non riuscita: "+io.toString());
}
}
// Definizione gruppo
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(gruppo);
registroXML.addGruppo(gruppo);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del gruppo ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione del gruppo dal repository.
*
* @param nome Nome del gruppo da eliminare
*/
public void deleteGruppo(String nome) throws DriverRegistroServiziException {
try {
String fileXML = this.pathPrefix + CostantiXMLRepository.GRUPPI + File.separator + nome + ".xml";
// Elimino gruppo
File gruppo = new File(fileXML);
if(gruppo.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del gruppo ["+nome+"] non riuscta");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML del gruppo ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Lista dei gruppi registrati
*
* @return lista dei gruppi registrati
*
*/
public Gruppo[] getGruppi()throws DriverRegistroServiziException{
Gruppo [] gruppiRegistrate = null;
try {
File dir = new File(this.pathPrefix + CostantiXMLRepository.GRUPPI);
if(dir.exists()==false)
return null;
File[] gruppi = dir.listFiles();
int numGruppi = 0;
if(gruppi!=null){
for(int i=0; i<gruppi.length;i++){
if(gruppi[i].isFile()){
numGruppi++;
}
}
}
if(numGruppi>0){
gruppiRegistrate = new Gruppo[numGruppi];
for(int i=0,index=0; i<gruppi.length;i++){
if(gruppi[i].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(gruppi[i].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
gruppiRegistrate[index] = r.getGruppo(0);
index++;
}
}
}
return gruppiRegistrate;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei gruppi: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML RUOLI ------------------------- */
/**
* Metodo che controlla se il ruolo risulta gia' registrato
*
* @param nome Nome del ruolo da creare/modificare
* @return true se il ruolo risulta registrato, false altrimenti.
*
*/
public boolean existsRuolo(String nome)throws DriverRegistroServiziException{
try {
File fileXML = new File(this.pathPrefix + CostantiXMLRepository.RUOLI + File.separator + nome + ".xml");
if( (fileXML.exists()==false) ){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.RUOLI+") ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione/modifica di un file XML a partire da un ruolo
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param nome Nome del ruolo da creare/modificare
* @param ruolo Dati del ruolo da trasformare in XML.
*
*/
public void createRuolo(String nome,Ruolo ruolo) throws DriverRegistroServiziException{
try {
String ruoliDir = this.pathPrefix + CostantiXMLRepository.RUOLI + File.separator;
// Controllo esistenza per modifica
String fileXML = ruoliDir + nome + ".xml";
File fileXMLF = new File(fileXML);
if( fileXMLF.exists() ){
// richiesta modifica
// elimino vecchia definizione Porta di Dominio
try{
if(fileXMLF.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il ruolo ["+fileXMLF.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il ruolo ["+nome+ "] non riuscita: "+io.toString());
}
}
// Definizione ruolo
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(ruolo);
registroXML.addRuolo(ruolo);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del ruolo ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione del ruolo dal repository.
*
* @param nome Nome del ruolo da eliminare
*/
public void deleteRuolo(String nome) throws DriverRegistroServiziException {
try {
String fileXML = this.pathPrefix + CostantiXMLRepository.RUOLI + File.separator + nome + ".xml";
// Elimino ruolo
File ruolo = new File(fileXML);
if(ruolo.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del ruolo ["+nome+"] non riuscta");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML del ruolo ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Lista dei ruoli registrati
*
* @return lista dei ruoli registrati
*
*/
public Ruolo[] getRuoli()throws DriverRegistroServiziException{
Ruolo [] ruoliRegistrate = null;
try {
File dir = new File(this.pathPrefix + CostantiXMLRepository.RUOLI);
if(dir.exists()==false)
return null;
File[] ruoli = dir.listFiles();
int numRuoli = 0;
if(ruoli!=null){
for(int i=0; i<ruoli.length;i++){
if(ruoli[i].isFile()){
numRuoli++;
}
}
}
if(numRuoli>0){
ruoliRegistrate = new Ruolo[numRuoli];
for(int i=0,index=0; i<ruoli.length;i++){
if(ruoli[i].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(ruoli[i].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
ruoliRegistrate[index] = r.getRuolo(0);
index++;
}
}
}
return ruoliRegistrate;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei ruoli: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML SCOPE ------------------------- */
/**
* Metodo che controlla se il scope risulta gia' registrato
*
* @param nome Nome del scope da creare/modificare
* @return true se il scope risulta registrato, false altrimenti.
*
*/
public boolean existsScope(String nome)throws DriverRegistroServiziException{
try {
File fileXML = new File(this.pathPrefix + CostantiXMLRepository.SCOPE + File.separator + nome + ".xml");
if( (fileXML.exists()==false) ){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca ("+CostantiXMLRepository.SCOPE+") ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione/modifica di un file XML a partire da un scope
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param nome Nome del scope da creare/modificare
* @param scope Dati del scope da trasformare in XML.
*
*/
public void createScope(String nome,Scope scope) throws DriverRegistroServiziException{
try {
String scopeDir = this.pathPrefix + CostantiXMLRepository.SCOPE + File.separator;
// Controllo esistenza per modifica
String fileXML = scopeDir + nome + ".xml";
File fileXMLF = new File(fileXML);
if( fileXMLF.exists() ){
// richiesta modifica
// elimino vecchia definizione Porta di Dominio
try{
if(fileXMLF.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il scope ["+fileXMLF.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il scope ["+nome+ "] non riuscita: "+io.toString());
}
}
// Definizione scope
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(scope);
registroXML.addScope(scope);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del scope ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione del scope dal repository.
*
* @param nome Nome del scope da eliminare
*/
public void deleteScope(String nome) throws DriverRegistroServiziException {
try {
String fileXML = this.pathPrefix + CostantiXMLRepository.SCOPE + File.separator + nome + ".xml";
// Elimino scope
File scope = new File(fileXML);
if(scope.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del scope ["+nome+"] non riuscta");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLlib] Riscontrato errore durante l'eliminazione XML del scope ["+nome+"]: "+e.getMessage(),e);
}
}
/**
* Lista dei scope registrati
*
* @return lista dei scope registrati
*
*/
public Scope[] getScope()throws DriverRegistroServiziException{
Scope [] scopeRegistrate = null;
try {
File dir = new File(this.pathPrefix + CostantiXMLRepository.SCOPE);
if(dir.exists()==false)
return null;
File[] scope = dir.listFiles();
int numScope = 0;
if(scope!=null){
for(int i=0; i<scope.length;i++){
if(scope[i].isFile()){
numScope++;
}
}
}
if(numScope>0){
scopeRegistrate = new Scope[numScope];
for(int i=0,index=0; i<scope.length;i++){
if(scope[i].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(scope[i].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
scopeRegistrate[index] = r.getScope(0);
index++;
}
}
}
return scopeRegistrate;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei scope: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML SOGGETTO ------------------------- */
/**
* Metodo che controlla se il soggetto risulta gia' registrato
*
* @param idSogg id del soggetto
* @return true se il soggetto risulta registrato, false altrimenti.
*/
public boolean existsSoggetto(IDSoggetto idSogg) throws DriverRegistroServiziException{
if(idSogg==null)
throw new DriverRegistroServiziException("Alcuni parametri sono null");
String idSoggetto = idSogg.getTipo() + idSogg.getNome();
try {
File dirSoggetto = new File(this.pathPrefix+idSoggetto);
return dirSoggetto.exists();
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca del soggetto ["+idSoggetto+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione di un file XML a partire da un soggetto.
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param idSogg id del soggetto da creare/modificare
* @param soggetto Dati del Soggetto da trasformare in XML.
*/
public void createSoggetto(IDSoggetto idSogg,Soggetto soggetto) throws DriverRegistroServiziException{
if(idSogg==null || soggetto==null)
throw new DriverRegistroServiziException("Alcuni parametri sono null");
String idSoggettoOLD = idSogg.getTipo() + idSogg.getNome();
String idSoggettoNEW = soggetto.getTipo() + soggetto.getNome();
try {
// Creazione/Controllo Esistenza directory soggetto
if(idSoggettoOLD.equals(idSoggettoNEW)){
// Controllo esistenza o creazione
File dir = new File(this.pathPrefix+idSoggettoNEW);
if(dir.exists() == false){
try{
if(dir.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per il soggetto ["+dir.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Creazione della directory per il soggetto ["+dir.getAbsolutePath()+"] non riuscita: "+io.toString());
}
}
}else{
// esiste gia deve essere rinominato.
// Controllo esistenza o creazione
File dir = new File(this.pathPrefix+idSoggettoOLD);
if(dir.exists() == false){
throw new DriverRegistroServiziException("Modifica di un soggetto non registrato ["+dir.getAbsolutePath()+"] non riuscita");
}
else{
File newdir = new File(this.pathPrefix+idSoggettoNEW);
try{
// Rinomina directory
if(dir.renameTo(newdir)==false){
throw new DriverRegistroServiziException("Rinominazione della directory per il soggetto ["+dir.getAbsolutePath()+"] in ["+newdir.getAbsolutePath()+"] non riuscita");
}
// elimino vecchia definizione
File oldXML = new File(this.pathPrefix+idSoggettoNEW+File.separator+idSoggettoOLD+".xml");
if(oldXML.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il soggetto ["+oldXML.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Rinominazione della directory per il soggetto ["+dir.getAbsolutePath()+"] in ["+newdir.getAbsolutePath()+"] non riuscita: "+io.toString());
}
}
}
String dirSoggetto = this.pathPrefix + idSoggettoNEW + File.separator;
// Creazione directory servizio
String serviceDir = dirSoggetto + CostantiXMLRepository.SERVIZI;
File dirS = new File(serviceDir);
if(dirS.exists() == false){
try{
if(dirS.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per i servizi del soggetto ["+dirS.getAbsolutePath()+"] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Creazione della directory per i servizi del soggetto ["+dirS.getAbsolutePath()+"] non riuscita: "+io.toString());
}
}
String fileXML = dirSoggetto + idSoggettoNEW + ".xml";
// Definizione soggetto
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(soggetto);
registroXML.addSoggetto(soggetto);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del soggetto ["+idSoggettoOLD+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione del soggetto dal repository.
*
* @param idSogg id del soggetto da eliminare
*/
public void deleteSoggetto(IDSoggetto idSogg) throws DriverRegistroServiziException{
if(idSogg==null)
throw new DriverRegistroServiziException("Alcuni parametri sono null");
String idSoggetto = idSogg.getTipo() + idSogg.getNome();
try {
String dirSoggetto = this.pathPrefix + idSoggetto + File.separator;
// Elimino servizi del soggetto
File dirS = new File(dirSoggetto + CostantiXMLRepository.SERVIZI);
File[] dirSserv = dirS.listFiles();
if(dirSserv!=null) {
for(int i=0; i<dirSserv.length;i++){
if(dirSserv[i].delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione definizione servizio ["+dirSserv[i].getAbsolutePath()+"]) non riuscita");
}
}
}
// Elimino directory servizio
if(dirS.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione directory servizi ["+dirS.getAbsolutePath()+"]) non riuscita");
}
// Elimino definizione soggetto
File defSoggetto = new File(dirSoggetto + idSoggetto + ".xml");
if(defSoggetto.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione xml soggetto ["+defSoggetto.getAbsolutePath()+"]) non riuscita");
}
// Elimino directory soggetto
File dir = new File(this.pathPrefix+idSoggetto);
if(dir.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del soggetto ["+idSoggetto+"] (eliminazione directory soggetto ["+dir.getAbsolutePath()+"]) non riuscita");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'eliminazione XML del soggetto ["+idSoggetto+"]: "+e.getMessage(),e);
}
}
/**
* Lista di Soggetti registrati
*
* @return lista di soggetti registrati.
*
*/
public Soggetto[] getSoggetti()throws DriverRegistroServiziException{
Soggetto [] soggettiRegistrati = null;
try {
File dir = new File(this.pathPrefix);
if(dir.exists()==false)
return null;
File[] soggetti = dir.listFiles();
int numSoggetti = 0;
if(soggetti!=null){
for(int i=0; i<soggetti.length;i++){
if(soggetti[i].isDirectory() &&
!CostantiXMLRepository.ACCORDI_DI_SERVIZIO.equalsIgnoreCase(soggetti[i].getName()) &&
!CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE.equalsIgnoreCase(soggetti[i].getName()) &&
!CostantiXMLRepository.PORTE_DI_DOMINIO.equalsIgnoreCase(soggetti[i].getName())){
numSoggetti++;
}
}
}
if(numSoggetti>0){
soggettiRegistrati = new Soggetto[numSoggetti];
for(int i=0,index=0; i<soggetti.length;i++){
if(soggetti[i].isDirectory() &&
!CostantiXMLRepository.ACCORDI_DI_SERVIZIO.equalsIgnoreCase(soggetti[i].getName()) &&
!CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE.equalsIgnoreCase(soggetti[i].getName()) &&
!CostantiXMLRepository.PORTE_DI_DOMINIO.equalsIgnoreCase(soggetti[i].getName())){
File[] fs = soggetti[i].listFiles();
if(fs!=null) {
for(int j=0; j<fs.length;j++){
if(fs[j].isFile()){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(fs[j].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
soggettiRegistrati[index] = r.getSoggetto(0);
index++;
break;
}
}
}
}
}
}
return soggettiRegistrati;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei soggetti: "+e.getMessage(),e);
}
}
/* ---------------- GENERAZIONE XML SERVIZIO ------------------------- */
/**
* Metodo che controlla se il servizio risulta gia' registrato
*
* @param idServ Identificativo del Servizio
* @return true se il servizio risulta registrato, false altrimenti.
*/
public boolean existsAccordoServizioParteSpecifica(IDServizio idServ) throws DriverRegistroServiziException{
if(idServ==null || idServ.getSoggettoErogatore()==null)
throw new DriverRegistroServiziException("Alcuni parametri sono null");
String idSoggetto = idServ.getSoggettoErogatore().getTipo()+
idServ.getSoggettoErogatore().getNome();
String idServizio = idServ.getTipo()+idServ.getNome()+idServ.getVersione();
try {
File definizioneXML = new File(this.pathPrefix+idSoggetto+File.separator+CostantiXMLRepository.SERVIZI
+File.separator+idServizio+ ".xml");
File dirWSDL = new File(this.pathPrefix + idSoggetto+File.separator+CostantiXMLRepository.SERVIZI
+File.separator+CostantiXMLRepository.WSDL_DIR +idServizio);
if( (definizioneXML.exists()==false) || (dirWSDL.exists()==false)){
return false;
}else
return true;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca del servizio ["+idServizio+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa della generazione di un file XML a partire da un servizio.
* Sono richiesti interattivamente i parametri che identificano il file XML da generare.
*
* @param idServ Identificativo del Servizio
* @param asps Dati del Servizio da trasformare in XML.
*/
public void createAccordoServizioParteSpecifica(IDServizio idServ,AccordoServizioParteSpecifica asps) throws DriverRegistroServiziException{
if(idServ==null || idServ.getSoggettoErogatore()==null || asps==null)
throw new DriverRegistroServiziException("Alcuni parametri sono null");
String idSoggetto = idServ.getSoggettoErogatore().getTipo()+
idServ.getSoggettoErogatore().getNome();
String idServizioOLD = idServ.getTipo()+idServ.getNome()+idServ.getVersione();
String idServizioNEW = asps.getTipo() + asps.getNome() + asps.getVersione();
String dirSoggetto = this.pathPrefix+idSoggetto+File.separator;
String dirServiziSoggetto = dirSoggetto + CostantiXMLRepository.SERVIZI + File.separator;
try {
// contenuto index dei servizi
List<IDServizio> nID = new ArrayList<IDServizio>();
if(this.existsIndexServizi(dirServiziSoggetto)){
// elimino vecchia definizione
IDServizio [] oldImage = this.readIndexServiziFromFile(dirServiziSoggetto);
for(int i=0; i< oldImage.length; i++){
if( !(oldImage[i].getTipo().equals(idServ.getTipo()) &&
oldImage[i].getNome().equals(idServ.getNome()) &&
oldImage[i].getVersione().intValue() == idServ.getVersione().intValue()) ){
nID.add(oldImage[i]);
}
}
}
// esiste gia deve essere rinominato, eliminando il vecchio.
if(idServizioOLD.equals(idServizioNEW) == false){
// Esiste gia' deve essere modificato il nome.
// Controllo esistenza servizio per modifica
File definizioneXML = new File(dirServiziSoggetto+idServizioOLD+ ".xml");
File dirWSDL = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR + idServizioOLD);
File dirAllegati = new File(dirServiziSoggetto + CostantiXMLRepository.ALLEGATI_DIR + idServizioOLD);
File dirSpecificheSemiformali = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizioOLD);
File dirSpecificheSicurezza = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizioOLD);
File dirSpecificheLivelliServizio = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizioOLD);
if( (definizioneXML.exists()==false) || (dirWSDL.exists()==false) || (dirAllegati.exists()==false) || (dirSpecificheSemiformali.exists()==false) || (dirSpecificheSicurezza.exists()==false) || (dirSpecificheLivelliServizio.exists()==false)){
throw new DriverRegistroServiziException("Modifica di un servizio non registrato ["+idServizioOLD + "] non riuscita");
}
else{
try{
// Controllo esistenza o creazione
if(definizioneXML.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della vecchia definizione per il servizio ["+definizioneXML.getAbsolutePath()+"] non riuscita");
}
// Elimino vecchi WSDL
String[]listWSDL = dirWSDL.list();
if(listWSDL!=null) {
for(int j=0; j<listWSDL.length;j++){
File fileInterno = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
if(fileInterno.isDirectory()){
// wsdl-implementativo fruitore-servizio
String[]listFruitoreWSDL = fileInterno.list();
if(listFruitoreWSDL!=null) {
for(int k=0; k<listFruitoreWSDL.length;k++){
File fileWsdlFruitore = new File(fileInterno.getAbsolutePath() + File.separator +listFruitoreWSDL[k]);
if(fileWsdlFruitore.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWsdlFruitore.getAbsolutePath() +"] per il servizio [" + idServizioOLD + "] non riuscita");
}
}
}
}
if(fileInterno.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileInterno.getAbsolutePath() +"] per il servizio [" + idServizioOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory dei WSDL
if(dirWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL del servizio ["+idServizioOLD + "] non riuscita");
}
// Elimino vecchi allegati
String[]listAllegati = dirAllegati.list();
if(listAllegati!=null) {
for(int j=0; j<listAllegati.length;j++){
File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
if(fileAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory degli allegati
if(dirAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+idServizioOLD + "] non riuscita");
}
// Elimino vecche specificheSemiformali
String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
if(listSpecificheSemiformali!=null) {
for(int j=0; j<listSpecificheSemiformali.length;j++){
File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
if(fileSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche semiformali
if(dirSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+idServizioOLD + "] non riuscita");
}
// Elimino vecchie specificheSicurezza
String[]listSpecificheSicurezza = dirSpecificheSicurezza.list();
if(listSpecificheSicurezza!=null) {
for(int j=0; j<listSpecificheSicurezza.length;j++){
File fileSpecificheSicurezza = new File(dirSpecificheSicurezza.getAbsolutePath() + File.separator +listSpecificheSicurezza[j]);
if(fileSpecificheSicurezza.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica di sicurezza ["+ fileSpecificheSicurezza.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche di sicurezza
if(dirSpecificheSicurezza.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di sicurezza dell'accordo ["+idServizioOLD + "] non riuscita");
}
// Elimino vecchie specificheLivelliServizio
String[]listSpecificheLivelliServizio = dirSpecificheLivelliServizio.list();
if(listSpecificheLivelliServizio!=null) {
for(int j=0; j<listSpecificheLivelliServizio.length;j++){
File fileSpecificheLivelliServizio = new File(dirSpecificheLivelliServizio.getAbsolutePath() + File.separator +listSpecificheLivelliServizio[j]);
if(fileSpecificheLivelliServizio.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica dei livelli di servizio ["+ fileSpecificheLivelliServizio.getAbsolutePath() +"] per l'accordo [" + idServizioOLD + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche dei livelli di servizio
if(dirSpecificheLivelliServizio.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche dei livelli di servizio dell'accordo ["+idServizioOLD + "] non riuscita");
}
}catch(Exception io){
throw new DriverRegistroServiziException("Eliminazione del servizio ["+idServizioOLD +"] non riuscita: "+io.toString());
}
}
}
// Crea directory dei WSDL
File dirWSDL = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR +idServizioNEW);
File dirAllegati = new File(dirServiziSoggetto + CostantiXMLRepository.ALLEGATI_DIR + idServizioNEW);
File dirSpecificheSemiformali = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizioNEW);
File dirSpecificheSicurezza = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizioNEW);
File dirSpecificheLivelliServizio = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizioNEW);
String prefixUrlWSDL = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.WSDL_DIR +idServizioNEW+ CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlAllegato = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.ALLEGATI_DIR + idServizioNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaSemiformale = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizioNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaSicurezza = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizioNEW + CostantiXMLRepository.URL_SEPARATOR;
String prefixUrlSpecificaLivelliServizio = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizioNEW + CostantiXMLRepository.URL_SEPARATOR;
if(dirWSDL.exists()==false){
if(dirWSDL.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per i WSDL del servizio ["+idServizioNEW + "]");
}
} else {
// elimino vecchi wsdl
// implementativoErogatore
String implementativoErogatorePath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
File implementativoErogatoreWSDL = new File(implementativoErogatorePath);
if(implementativoErogatoreWSDL.exists()){
if(implementativoErogatoreWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione WSDL implementativo Erogatore del servizio ["+implementativoErogatorePath+ "] non riuscita");
}
}
// implementativoFruitore
String implementativoFruitorePath = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
File implementativoFruitoreWSDL = new File(implementativoFruitorePath);
if(implementativoFruitoreWSDL.exists()){
if(implementativoFruitoreWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione WSDL implementativo Fruitore del servizio ["+implementativoFruitorePath+ "] non riuscita");
}
}
}
// Gestione Allegati
if(dirAllegati.exists()==false){
if(dirAllegati.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per gli allegati dell'accordo ["+idServizioNEW + "] non riuscita");
}
} else {
// elimino vecchi allegati
String [] files = dirAllegati.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione allegato ["+files[i]+ "] non riuscita");
}
}
}
}
}
// Gestione SpecificheSemiformali
if(dirSpecificheSemiformali.exists()==false){
if(dirSpecificheSemiformali.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche semiformali dell'accordo ["+idServizioNEW + "] non riuscita");
}
} else {
// elimino vecche specifiche semiformali
String [] files = dirSpecificheSemiformali.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione spacifica semiformale ["+files[i]+ "] non riuscita");
}
}
}
}
}
// Gestione SpecificheSicurezza
if(dirSpecificheSicurezza.exists()==false){
if(dirSpecificheSicurezza.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche di sicurezza dell'accordo ["+idServizioNEW + "] non riuscita");
}
} else {
// elimino vecche specifiche di sicurezza
String [] files = dirSpecificheSicurezza.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione spacifica di sicurezza ["+files[i]+ "] non riuscita");
}
}
}
}
}
// Gestione SpecificheLivelliServizio
if(dirSpecificheLivelliServizio.exists()==false){
if(dirSpecificheLivelliServizio.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per le specifiche dei livelli di servizio dell'accordo ["+idServizioNEW + "] non riuscita");
}
} else {
// elimino vecche specifiche dei livelli di servizio
String [] files = dirSpecificheLivelliServizio.list();
if(files!=null){
for(int i=0; i<files.length; i++){
File file = new File(files[i]);
if(file.exists()){
if(file.delete()==false){
throw new DriverRegistroServiziException("Eliminazione spacifica del livello di servizio ["+files[i]+ "] non riuscita");
}
}
}
}
}
// check directory dei WSDL dei fruitori
String[]listWSDLFruitori = dirWSDL.list();
if(listWSDLFruitori!=null) {
for(int j=0; j<listWSDLFruitori.length;j++){
File fileInterno = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDLFruitori[j]);
// Se e' una directory potra' contenere i wsdl di un fruitore
if(fileInterno.isDirectory()){
boolean definizioneTrovata = false;
for(int h=0; h<asps.sizeFruitoreList(); h++){
String idFruitore = asps.getFruitore(h).getTipo()+asps.getFruitore(h).getNome();
if(idFruitore.equals(fileInterno.getName())){
definizioneTrovata = true;
break;
}
}
// elimino i wsdl dei fruitori.
String[]listWSDLFruitoreEliminato = fileInterno.list();
if(listWSDLFruitoreEliminato!=null) {
for(int n=0; n<listWSDLFruitoreEliminato.length;n++){
File fileWsdlFruitoreEliminato = new File(fileInterno.getAbsolutePath() + File.separator +listWSDLFruitoreEliminato[n]);
if(fileWsdlFruitoreEliminato.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWsdlFruitoreEliminato.getAbsolutePath() +"] per il servizio [" + idServizioNEW + "] (Fruitore) non riuscita");
}
}
}
// Elimino le directory dei fruitori che non sono piu' contenuti nel servizio.
if(definizioneTrovata == false){
if(fileInterno.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileInterno.getAbsolutePath() +"] per il servizio [" + idServizioNEW + "] (Fruitore) non riuscita");
}
}
}
}
}
// aggiungo nuova definizione all'indice dei servizi
IDServizio [] newImage = new IDServizio[nID.size()+1];
int imageIndex = 0;
for(; imageIndex<nID.size(); imageIndex++)
newImage[imageIndex] = nID.get(imageIndex);
IDServizio newImageS = this.idServizioFactory.getIDServizioFromAccordo(asps);
newImage[imageIndex] = newImageS;
this.setContenutoIndexServizi(dirServiziSoggetto,newImage);
String fileXML = dirServiziSoggetto+idServizioNEW+ ".xml";
org.openspcoop2.core.registry.RegistroServizi registroXML = new org.openspcoop2.core.registry.RegistroServizi();
org.openspcoop2.core.registry.Soggetto soggXML = new org.openspcoop2.core.registry.Soggetto();
soggXML.setTipo(asps.getTipoSoggettoErogatore());
soggXML.setNome(asps.getNomeSoggettoErogatore());
// WSDL implementativo Erogatore
if( asps.getByteWsdlImplementativoErogatore() == null )
asps.setWsdlImplementativoErogatore(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
generaFile(asps.getByteWsdlImplementativoErogatore(),path);
String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
asps.setWsdlImplementativoErogatore(url);
}
// WSDL implementativo Fruitore
if( (asps.getByteWsdlImplementativoFruitore() == null))
asps.setWsdlImplementativoFruitore(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDL.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
generaFile(asps.getByteWsdlImplementativoFruitore(),path);
String url = prefixUrlWSDL + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
asps.setWsdlImplementativoFruitore(url);
}
// Allegati
for(int i=0; i<asps.sizeAllegatoList();i++){
String path = null;
if(asps.getAllegato(i).getFile().startsWith(prefixUrlAllegato)){
path = dirAllegati.getAbsolutePath() + File.separator + asps.getAllegato(i).getFile().substring(prefixUrlAllegato.length());
}else{
path = dirAllegati.getAbsolutePath() + File.separator + asps.getAllegato(i).getFile();
}
generaFile(asps.getAllegato(i).getByteContenuto(),path);
String url = prefixUrlAllegato + asps.getAllegato(i).getFile();
asps.getAllegato(i).setFile(url);
}
// SpecificheSemiformali
for(int i=0; i<asps.sizeSpecificaSemiformaleList();i++){
String path = null;
if(asps.getSpecificaSemiformale(i).getFile().startsWith(prefixUrlSpecificaSemiformale)){
path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + asps.getSpecificaSemiformale(i).getFile().substring(prefixUrlSpecificaSemiformale.length());
}else{
path = dirSpecificheSemiformali.getAbsolutePath() + File.separator + asps.getSpecificaSemiformale(i).getFile();
}
generaFile(asps.getSpecificaSemiformale(i).getByteContenuto(),path);
String url = prefixUrlSpecificaSemiformale + asps.getSpecificaSemiformale(i).getFile();
asps.getSpecificaSemiformale(i).setFile(url);
}
// SpecificheSicurezza
for(int i=0; i<asps.sizeSpecificaSicurezzaList();i++){
String path = null;
if(asps.getSpecificaSicurezza(i).getFile().startsWith(prefixUrlSpecificaSicurezza)){
path = dirSpecificheSicurezza.getAbsolutePath() + File.separator + asps.getSpecificaSicurezza(i).getFile().substring(prefixUrlSpecificaSicurezza.length());
}else{
path = dirSpecificheSicurezza.getAbsolutePath() + File.separator + asps.getSpecificaSicurezza(i).getFile();
}
generaFile(asps.getSpecificaSicurezza(i).getByteContenuto(),path);
String url = prefixUrlSpecificaSicurezza + asps.getSpecificaSicurezza(i).getFile();
asps.getSpecificaSicurezza(i).setFile(url);
}
// SpecificheLivelliServizio
for(int i=0; i<asps.sizeSpecificaLivelloServizioList();i++){
String path = null;
if(asps.getSpecificaLivelloServizio(i).getFile().startsWith(prefixUrlSpecificaLivelliServizio)){
path = dirSpecificheLivelliServizio.getAbsolutePath() + File.separator + asps.getSpecificaLivelloServizio(i).getFile().substring(prefixUrlSpecificaLivelliServizio.length());
}else{
path = dirSpecificheLivelliServizio.getAbsolutePath() + File.separator + asps.getSpecificaLivelloServizio(i).getFile();
}
generaFile(asps.getSpecificaLivelloServizio(i).getByteContenuto(),path);
String url = prefixUrlSpecificaLivelliServizio + asps.getSpecificaLivelloServizio(i).getFile();
asps.getSpecificaLivelloServizio(i).setFile(url);
}
// Fruitori
for(int i=0;i<asps.sizeFruitoreList();i++){
Fruitore fr = asps.getFruitore(i);
String idFruitore = fr.getTipo() + fr.getNome();
File dirWSDLFruitore = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR +idServizioNEW + File.separator + idFruitore);
String prefixUrlWSDLFruitore = this.urlPrefix + idSoggetto + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.SERVIZI + CostantiXMLRepository.URL_SEPARATOR + CostantiXMLRepository.WSDL_DIR +idServizioNEW+ CostantiXMLRepository.URL_SEPARATOR + idFruitore + CostantiXMLRepository.URL_SEPARATOR;
// WSDL Fruitore
if(fr.getByteWsdlImplementativoErogatore()!=null || fr.getByteWsdlImplementativoFruitore()!=null){
// Crea directory dei WSDL
if(dirWSDLFruitore.exists()==false){
if(dirWSDLFruitore.mkdir()==false){
throw new DriverRegistroServiziException("Creazione della directory per i WSDL del servizio (Fruitore "+idFruitore+") ["+idServizioNEW + "] fallita");
}
}
}
// WSDL implementativo Erogatore
if( fr.getByteWsdlImplementativoErogatore() == null )
asps.getFruitore(i).setWsdlImplementativoErogatore(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDLFruitore.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
generaFile(fr.getByteWsdlImplementativoErogatore(),path);
String url = prefixUrlWSDLFruitore + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_EROGATORE;
asps.getFruitore(i).setWsdlImplementativoErogatore(url);
}
// WSDL implementativo Fruitore
if( (fr.getByteWsdlImplementativoFruitore() == null))
asps.getFruitore(i).setWsdlImplementativoFruitore(CostantiXMLRepository.WSDL_UNDEFINED);
else{
String path = dirWSDLFruitore.getAbsolutePath() + File.separator + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
generaFile(fr.getByteWsdlImplementativoFruitore(),path);
String url = prefixUrlWSDLFruitore + CostantiXMLRepository.WSDL_IMPLEMENTATIVO_FRUITORE;
asps.getFruitore(i).setWsdlImplementativoFruitore(url);
}
}
// generazione XML
this.cleanerOpenSPCoop2ExtensionsRegistry.clean(asps); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
soggXML.addAccordoServizioParteSpecifica(asps);
registroXML.addSoggetto(soggXML);
JaxbUtils.objToXml(fileXML,org.openspcoop2.core.registry.RegistroServizi.class,registroXML);
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'elaborazione XML del servizio ["+idServizioOLD+"]: "+e.getMessage(),e);
}
}
/**
* Metodo che si occupa dell'eliminazione del servizio dal repository.
*
* @param idServ Identificativo del Servizio
*/
public void deleteAccordoServizioParteSpecifica(IDServizio idServ) throws DriverRegistroServiziException{
if(idServ==null || idServ.getSoggettoErogatore()==null)
throw new DriverRegistroServiziException("Alcuni parametri sono null");
String idSoggetto = idServ.getSoggettoErogatore().getTipo()+
idServ.getSoggettoErogatore().getNome();
String idServizio = idServ.getTipo()+idServ.getNome()+idServ.getVersione();
try {
String dirSoggetto = this.pathPrefix+idSoggetto+File.separator;
String dirServiziSoggetto = dirSoggetto + CostantiXMLRepository.SERVIZI + File.separator;
// Elimino eventuale file di index
if(this.existsIndexServizi(dirServiziSoggetto)){
IDServizio[]index = this.readIndexServiziFromFile(dirServiziSoggetto);
if(index!=null){
if(index.length==1){
this.deleteIndexServizi(dirServiziSoggetto);
}else{
IDServizio [] newImage = new IDServizio[index.length-1];
int j=0;
for(int i=0; i< index.length; i++){
if( !(index[i].getTipo().equals(idServ.getTipo()) &&
index[i].getNome().equals(idServ.getNome()) &&
index[i].getVersione().intValue() == idServ.getVersione().intValue()) ){
newImage[j]=index[i];
j++;
}
}
this.setContenutoIndexServizi(dirServiziSoggetto,newImage);
}
}
}
// Elimino servizi del soggetto
File definizioneXML = new File(dirServiziSoggetto+idServizio+".xml");
if(definizioneXML.delete() == false){
throw new DriverRegistroServiziException("Eliminazione XML del servizio ["+idServizio+"] erogato dal soggetto ["+
idSoggetto+"] non riuscita");
}
File dirWSDL = new File(dirServiziSoggetto + CostantiXMLRepository.WSDL_DIR + idServizio);
File dirAllegati = new File(dirServiziSoggetto + CostantiXMLRepository.ALLEGATI_DIR + idServizio);
File dirSpecificheSemiformali = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SEMIFORMALI_DIR + idServizio);
File dirSpecificheSicurezza = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_SICUREZZA_DIR + idServizio);
File dirSpecificheLivelliServizio = new File(dirServiziSoggetto + CostantiXMLRepository.SPECIFICHE_LIVELLI_SERVIZIO_DIR + idServizio);
// Elimino vecchi WSDL
String[]listWSDL = dirWSDL.list();
if(listWSDL!=null) {
for(int j=0; j<listWSDL.length;j++){
File fileInterno = new File(dirWSDL.getAbsolutePath() + File.separator +listWSDL[j]);
if(fileInterno.isDirectory()){
// wsdl-implementativo fruitore-servizio
String[]listFruitoreWSDL = fileInterno.list();
if(listFruitoreWSDL!=null) {
for(int k=0; k<listFruitoreWSDL.length;k++){
File fileWsdlFruitore = new File(fileInterno.getAbsolutePath() + File.separator +listFruitoreWSDL[k]);
if(fileWsdlFruitore.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileWsdlFruitore.getAbsolutePath() +"] per il servizio [" + idServizio + "] non riuscita");
}
}
}
}
if(fileInterno.delete()==false){
throw new DriverRegistroServiziException("Eliminazione del file wsdl ["+ fileInterno.getAbsolutePath() +"] per il servizio [" + idServizio + "] non riuscita");
}
}
}
// Elimina vecchia directory dei WSDL
if(dirWSDL.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per i WSDL del servizio ["+idServizio + "] non riuscita");
}
// Elimino vecchi allegati
String[]listAllegati = dirAllegati.list();
if(listAllegati!=null) {
for(int j=0; j<listAllegati.length;j++){
File fileAllegati = new File(dirAllegati.getAbsolutePath() + File.separator +listAllegati[j]);
if(fileAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione dell'allegato ["+ fileAllegati.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
}
}
}
// Elimina vecchia directory degli allegati
if(dirAllegati.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per gli allegati dell'accordo ["+idServizio + "] non riuscita");
}
// Elimino vecche specificheSemiformali
String[]listSpecificheSemiformali = dirSpecificheSemiformali.list();
if(listSpecificheSemiformali!=null) {
for(int j=0; j<listSpecificheSemiformali.length;j++){
File fileSpecificheSemiformali = new File(dirSpecificheSemiformali.getAbsolutePath() + File.separator +listSpecificheSemiformali[j]);
if(fileSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica semiformale ["+ fileSpecificheSemiformali.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche semiformali
if(dirSpecificheSemiformali.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche semiformali dell'accordo ["+idServizio + "] non riuscita");
}
// Elimino vecchie specificheSicurezza
String[]listSpecificheSicurezza = dirSpecificheSicurezza.list();
if(listSpecificheSicurezza!=null) {
for(int j=0; j<listSpecificheSicurezza.length;j++){
File fileSpecificheSicurezza = new File(dirSpecificheSicurezza.getAbsolutePath() + File.separator +listSpecificheSicurezza[j]);
if(fileSpecificheSicurezza.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica di sicurezza ["+ fileSpecificheSicurezza.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche di sicurezza
if(dirSpecificheSicurezza.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche di sicurezza dell'accordo ["+idServizio + "] non riuscita");
}
// Elimino vecchie specificheLivelliServizio
String[]listSpecificheLivelliServizio = dirSpecificheLivelliServizio.list();
if(listSpecificheLivelliServizio!=null) {
for(int j=0; j<listSpecificheLivelliServizio.length;j++){
File fileSpecificheLivelliServizio = new File(dirSpecificheLivelliServizio.getAbsolutePath() + File.separator +listSpecificheLivelliServizio[j]);
if(fileSpecificheLivelliServizio.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della specifica dei livelli di servizio ["+ fileSpecificheLivelliServizio.getAbsolutePath() +"] per l'accordo [" + idServizio + "] non riuscita");
}
}
}
// Elimina vecchia directory delle specifiche dei livelli di servizio
if(dirSpecificheLivelliServizio.delete()==false){
throw new DriverRegistroServiziException("Eliminazione della directory per le specifiche dei livelli di servizio dell'accordo ["+idServizio + "] non riuscita");
}
}catch(DriverRegistroServiziException e){
throw e;
}catch(Exception e){
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante l'eliminazione XML del servizio ["+idServizio+"] erogato dal soggetto ["+
idSoggetto+"]: "+e.getMessage(),e);
}
}
/**
* Lista di Servizi registrati
*
* @return lista di servizi registrati.
*
*/
public AccordoServizioParteSpecifica[] getAccordiServiziParteSpecifica()throws DriverRegistroServiziException{
AccordoServizioParteSpecifica [] serviziRegistrati = null;
try {
// Prendo prima i soggetti
Soggetto [] soggettiRegistrati = this.getSoggetti();
// Prendo dopodiche i servizi
File dir = new File(this.pathPrefix);
File[] soggetti = dir.listFiles();
List<AccordoServizioParteSpecifica> servizi = new ArrayList<AccordoServizioParteSpecifica>();
int indexSoggetto = 0;
if(soggetti!=null){
for(int i=0; i<soggetti.length;i++){
if(soggetti[i].isDirectory() &&
!CostantiXMLRepository.ACCORDI_DI_SERVIZIO.equalsIgnoreCase(soggetti[i].getName()) &&
!CostantiXMLRepository.ACCORDI_DI_COOPERAZIONE.equalsIgnoreCase(soggetti[i].getName()) &&
!CostantiXMLRepository.PORTE_DI_DOMINIO.equalsIgnoreCase(soggetti[i].getName())){
File dirServiziSoggetto = new File(soggetti[i].getAbsoluteFile() + File.separator +CostantiXMLRepository.SERVIZI);
File[] serviziSoggetto = dirServiziSoggetto.listFiles();
if(serviziSoggetto!=null){
for(int k=0; k<serviziSoggetto.length;k++){
if(serviziSoggetto[k].isFile() && (this.isIndexServizi(serviziSoggetto[k])==false) ){
org.openspcoop2.core.registry.RegistroServizi r =
(org.openspcoop2.core.registry.RegistroServizi) JaxbUtils.xmlToObj(serviziSoggetto[k].getAbsolutePath(),
org.openspcoop2.core.registry.RegistroServizi.class);
if(r.getSoggetto(0).sizeAccordoServizioParteSpecificaList()>0){
AccordoServizioParteSpecifica s = r.getSoggetto(0).getAccordoServizioParteSpecifica(0);
s.setTipoSoggettoErogatore(soggettiRegistrati[indexSoggetto].getTipo());
s.setNomeSoggettoErogatore(soggettiRegistrati[indexSoggetto].getNome());
servizi.add(s);
}
}
}
}
indexSoggetto++;
}
}
}
if(servizi.size()>0){
serviziRegistrati = new AccordoServizioParteSpecifica[1];
serviziRegistrati = servizi.toArray(serviziRegistrati);
}
return serviziRegistrati;
}catch(Exception e){
e.printStackTrace(System.err);
throw new DriverRegistroServiziException("[XMLLib] Riscontrato errore durante la ricerca dei soggetti: "+e.getMessage(),e);
}
}
}