XMLUtils.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 it.gov.spcoop.sica.dao.driver;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import javax.activation.FileDataSource;
import org.slf4j.Logger;
import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopContext;
import org.openspcoop2.utils.io.ZipUtilities;
import org.openspcoop2.utils.resources.FileSystemUtilities;
import it.gov.spcoop.sica.dao.AccordoCooperazione;
import it.gov.spcoop.sica.dao.AccordoServizioComposto;
import it.gov.spcoop.sica.dao.AccordoServizioParteComune;
import it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica;
import it.gov.spcoop.sica.dao.Costanti;
import it.gov.spcoop.sica.dao.Documento;
import it.gov.spcoop.sica.firma.Firma;
import it.gov.spcoop.sica.manifest.AccordoServizio;
import it.gov.spcoop.sica.manifest.ServizioComposto;
import it.gov.spcoop.sica.manifest.SpecificaConversazione;
import it.gov.spcoop.sica.manifest.SpecificaInterfaccia;
import it.gov.spcoop.sica.manifest.SpecificaPortiAccesso;
import it.gov.spcoop.sica.manifest.driver.XMLUtilsException;
/**
* Classe utilizzata per lavorare sui package di un accordo di servizio o di cooperazione
*
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class XMLUtils {
private SICAtoOpenSPCoopContext sicaToOpenSPCoopContext = null;
private Logger log = null;
public XMLUtils(SICAtoOpenSPCoopContext sContext,Logger log){
this.sicaToOpenSPCoopContext = sContext;
this.log = log;
}
/* ----- Unmarshall Manifest dell'accordo di servizio parte comune ----- */
/**
* Ritorna la rappresentazione java di un accordo di servizio parte comune
*
* @param zip byte[]
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteComune getAccordoServizioParteComune(byte[] zip) throws XMLUtilsException{
File tmp = null;
FileOutputStream fout = null;
try{
tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_COMUNE);
fout = new FileOutputStream(tmp);
fout.write(zip);
fout.flush();
fout.close();
return getAccordoServizioParteComune(tmp);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// ignore
}
try {
if(tmp!=null) {
if(!tmp.delete()) {
// ignore
}
}
}catch(Exception eClose){
// ignore
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte comune
*
* @param fileName File
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteComune getAccordoServizioParteComune(String fileName) throws XMLUtilsException{
return getAccordoServizioParteComune(new File(fileName));
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte comune
*
* @param zip File
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteComune getAccordoServizioParteComune(File zip) throws XMLUtilsException{
ZipFile zipFile = null;
try{
zipFile = new ZipFile(zip);
return getAccordoServizioParteComune(zipFile);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipFile!=null)
zipFile.close();
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte comune
*
* @param m InputStream
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteComune getAccordoServizioParteComune(InputStream m) throws XMLUtilsException{
ByteArrayOutputStream bout = null;
try{
bout = new ByteArrayOutputStream();
byte[]read = new byte[1024];
int letti = 0;
while( (letti=m.read(read))>=0 ){
bout.write(read, 0, letti);
}
bout.flush();
bout.close();
m.close();
return getAccordoServizioParteComune(bout.toByteArray());
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(bout!=null){
bout.close();
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte comune
*
* @param zip File
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteComune getAccordoServizioParteComune(ZipFile zip) throws XMLUtilsException{
try{
AccordoServizioParteComune archivio = new AccordoServizioParteComune();
String rootDir = null;
/* Primo giro per catturare il Manifest */
it.gov.spcoop.sica.manifest.AccordoServizioParteComune parteComune = null;
Enumeration<?> e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("VERIFICARE NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+rootDir+Costanti.MANIFESTO_XML+"]==["+entryName+"]");
if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO!");
InputStream inputStream = zip.getInputStream(zipEntry);
AccordoServizio manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoAS(this.log,inputStream);
parteComune = manifesto.getParteComune();
if(parteComune==null){
throw new Exception("Manifest Parte Comune non presente");
}
inputStream.close();
archivio.setManifesto(manifesto);
break;
}
}
}
if(parteComune==null){
throw new Exception("Manifest Parte Comune non presente");
}
/* Lettura informazioni dal manifest */
String interfacciaConcettuale = Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL;
String interfaccialogicoErogatore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL;
String interfaccialogicoFruitore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL;
String conversazioneConcettuale = Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL;
String conversazionelogicoErogatore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL;
String conversazionelogicoFruitore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL;
if(parteComune.getSpecificaInterfaccia()!=null){
SpecificaInterfaccia interfaccia = parteComune.getSpecificaInterfaccia();
if(interfaccia.getInterfacciaConcettuale()!=null){
interfacciaConcettuale = ZipUtilities.getBaseName(interfaccia.getInterfacciaConcettuale().getBase());
}
if(interfaccia.getInterfacciaLogicaLatoErogatore()!=null){
interfaccialogicoErogatore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoErogatore().getBase());
}
if(interfaccia.getInterfacciaLogicaLatoFruitore()!=null){
interfaccialogicoFruitore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoFruitore().getBase());
}
}
if(parteComune.getSpecificaConversazione()!=null){
SpecificaConversazione conversazione = parteComune.getSpecificaConversazione();
if(conversazione.getConversazioneConcettuale()!=null){
conversazioneConcettuale = ZipUtilities.getBaseName(conversazione.getConversazioneConcettuale().getBase());
}
if(conversazione.getConversazioneLogicaLatoErogatore()!=null){
conversazionelogicoErogatore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoErogatore().getBase());
}
if(conversazione.getConversazioneLogicaLatoFruitore()!=null){
conversazionelogicoFruitore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoFruitore().getBase());
}
}
/* Identificazione altri campi */
e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
//System.out.println("FILE NAME: "+entryName);
//System.out.println("SIZE: "+entry.getSize());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("VERIFICARE NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+entryName+"]");
if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
//System.out.println(".PROJECT: NIENTE DA GESTIRE");
}
else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
//System.out.println("FIRMA!");
Firma firma = new Firma();
archivio.setFirma(firma);
}
else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO! SCARTO");
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR)) ){
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
String dir = rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar;
if((dir+conversazioneConcettuale).equals(entryName)){
//System.out.println("CONVERSAZIONE CONCETTUALE WSBL!");
archivio.setConversazioneConcettuale(d);
}
else if((dir+conversazionelogicoErogatore).equals(entryName)){
//System.out.println("CONVERSAZIONE LOGICA EROGATORE WSBL!");
archivio.setConversazioneLogicaErogatore(d);
}
else if((dir+conversazionelogicoFruitore).equals(entryName)){
//System.out.println("CONVERSAZIONE LOGICA FRUITORE WSBL!");
archivio.setConversazioneLogicaFruitore(d);
}
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR)) ){
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
String dir = rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar;
if((dir+interfacciaConcettuale).equals(entryName)){
//System.out.println("INTERFACCIA CONCETTUALE WSDL!");
archivio.setInterfacciaConcettuale(d);
}
else if((dir+interfaccialogicoErogatore).equals(entryName)){
//System.out.println("INTERFACCIA LOGICA EROGATORE WSDL!");
archivio.setInterfacciaLogicaLatoErogatore(d);
}
else if((dir+interfaccialogicoFruitore).equals(entryName)){
//System.out.println("INTERFACCIA LOGICA FRUITORE WSDL!");
archivio.setInterfacciaLogicaLatoFruitore(d);
}
}
else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
//System.out.println("ALLEGATO");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addAllegato(d);
// Validazione XSD delle informazioni egov
if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
}else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
}
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
//System.out.println("SPECIFICASEMIFORMALE");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaSemiformale(d);
// Validazione XSD delle informazioni egov
if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
}else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
}
}
}
}
// check
if(archivio.getManifesto()==null){
throw new Exception("Manifesto non presente");
}
// Metto a posto i tipi (le estensioni dei files possono essere diverse)
if(archivio.getManifesto().getSpecificaSemiformale()!=null){
for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaSemiformale(j).setTipo(tipo);
}
}
}
}
return archivio;
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
/* ----- Marshall dell'accordo di servizio parte comune----- */
public void generateAccordoServizioParteComune(AccordoServizioParteComune manifesto,File file) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(file);
generateAccordoServizioParteComune(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public void generateAccordoServizioParteComune(AccordoServizioParteComune manifesto,String fileName) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(fileName);
generateAccordoServizioParteComune(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public byte[] generateAccordoServizioParteComune(AccordoServizioParteComune manifesto) throws XMLUtilsException{
try{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
generateAccordoServizioParteComune(manifesto,bout);
bout.flush();
bout.close();
return bout.toByteArray();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
public void generateAccordoServizioParteComune(AccordoServizioParteComune manifesto,OutputStream out) throws XMLUtilsException{
boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
ZipOutputStream zipOut = null;
try{
zipOut = new ZipOutputStream(out);
String rootDir = "";
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
// .project
if(generaSICAClientProjectFile){
String nomeProgettoEclipse = manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_COMUNE;
String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
zipOut.write(projectContenuto.getBytes());
}
// firma
if(manifesto.getFirma()!=null){
byte[] firma = manifesto.getFirma().getBytes();
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
zipOut.write(firma);
}
// manifest
byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoAS(manifesto.getManifesto(),includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
zipOut.write(manifestoBytes);
// Specifica Interfaccia
boolean specificaInterfaccia = false;
if(manifesto.getInterfacciaConcettuale()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL));
zipOut.write(manifesto.getInterfacciaConcettuale().getContenuto());
specificaInterfaccia = true;
}
if(manifesto.getInterfacciaLogicaLatoErogatore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL));
zipOut.write(manifesto.getInterfacciaLogicaLatoErogatore().getContenuto());
specificaInterfaccia = true;
}
if(manifesto.getInterfacciaLogicaLatoFruitore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL));
zipOut.write(manifesto.getInterfacciaLogicaLatoFruitore().getContenuto());
specificaInterfaccia = true;
}
if(!specificaInterfaccia){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar));
}
// Specifica Conversazioni
boolean specificaConversazione = false;
if(manifesto.getConversazioneConcettuale()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL));
zipOut.write(manifesto.getConversazioneConcettuale().getContenuto());
specificaConversazione = true;
}
if(manifesto.getConversazioneLogicaErogatore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL));
zipOut.write(manifesto.getConversazioneLogicaErogatore().getContenuto());
specificaConversazione = true;
}
if(manifesto.getConversazioneLogicaFruitore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL));
zipOut.write(manifesto.getConversazioneLogicaFruitore().getContenuto());
specificaConversazione = true;
}
if(!specificaConversazione){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar));
}
// Allegati
boolean allegati = manifesto.sizeAllegati()>0;
for(int i=0; i<manifesto.sizeAllegati(); i++){
Documento allegato = manifesto.getAllegato(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
zipOut.write(allegato.getContenuto());
}
if(!allegati){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
}
// Specifiche semiformali
boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
Documento doc = manifesto.getSpecificaSemiformale(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheSemiformali){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
}
zipOut.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipOut!=null)
zipOut.close();
}catch(Exception eClose){
// close
}
}
}
/* ----- Unmarshall Manifest dell'accordo di servizio parte specifica----- */
/**
* Ritorna la rappresentazione java di un accordo di servizio parte specifica
*
* @param zip byte[]
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(byte[] zip) throws XMLUtilsException{
File tmp = null;
FileOutputStream fout = null;
try{
tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_SPECIFICA);
fout = new FileOutputStream(tmp);
fout.write(zip);
fout.flush();
fout.close();
return getAccordoServizioParteSpecifica(tmp);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// ignore
}
try {
if(tmp!=null) {
if(!tmp.delete()) {
// ignore
}
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte specifica
*
* @param fileName File
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(String fileName) throws XMLUtilsException{
return getAccordoServizioParteSpecifica(new File(fileName));
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte specifica
*
* @param zip File
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(File zip) throws XMLUtilsException{
ZipFile zipFile = null;
try{
zipFile = new ZipFile(zip);
return getAccordoServizioParteSpecifica(zipFile);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipFile!=null)
zipFile.close();
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte specifica
*
* @param m InputStream
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(InputStream m) throws XMLUtilsException{
ByteArrayOutputStream bout = null;
try{
bout = new ByteArrayOutputStream();
byte[]read = new byte[1024];
int letti = 0;
while( (letti=m.read(read))>=0 ){
bout.write(read, 0, letti);
}
bout.flush();
bout.close();
m.close();
return getAccordoServizioParteSpecifica(bout.toByteArray());
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(bout!=null){
bout.close();
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio parte specifica
*
* @param zip File
* @return ManifestoAS
* @throws XMLUtilsException
*/
public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(ZipFile zip) throws XMLUtilsException{
try{
AccordoServizioParteSpecifica archivio = new AccordoServizioParteSpecifica();
String rootDir = null;
/* Primo giro per catturare il Manifest */
it.gov.spcoop.sica.manifest.AccordoServizioParteSpecifica parteSpecifica = null;
Enumeration<?> e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
//System.out.println("FILE NAME: "+entryName);
//System.out.println("SIZE: "+entry.getSize());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+entryName+"]");
if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO!");
InputStream inputStream = zip.getInputStream(zipEntry);
AccordoServizio manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoAS(this.log,inputStream);
parteSpecifica = manifesto.getParteSpecifica();
if(parteSpecifica==null){
throw new Exception("Manifest Parte Specifica non presente");
}
inputStream.close();
archivio.setManifesto(manifesto);
break;
}
}
}
if(parteSpecifica==null){
throw new Exception("Manifest Parte Specifica non presente");
}
/* Lettura informazioni dal manifest */
String interfacciaPortiAccessoErogatore = Costanti.SPECIFICA_PORTI_ACCESSO_EROGATORE_WSDL;
String interfacciaPortiAccessoFruitore = Costanti.SPECIFICA_PORTI_ACCESSO_FRUITORE_WSDL;
if(parteSpecifica.getSpecificaPortiAccesso()!=null){
SpecificaPortiAccesso portiAccesso = parteSpecifica.getSpecificaPortiAccesso();
if(portiAccesso.getPortiAccessoErogatore()!=null){
interfacciaPortiAccessoErogatore = ZipUtilities.getBaseName(portiAccesso.getPortiAccessoErogatore().getBase());
}
if(portiAccesso.getPortiAccessoFruitore()!=null){
interfacciaPortiAccessoFruitore = ZipUtilities.getBaseName(portiAccesso.getPortiAccessoFruitore().getBase());
}
}
/* Identificazione altri campi */
e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
//System.out.println("FILE NAME: "+entryName);
//System.out.println("SIZE: "+entry.getSize());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+entryName+"]");
if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
//System.out.println(".PROJECT: NIENTE DA GESTIRE");
}
else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
//System.out.println("FIRMA!");
Firma firma = new Firma();
archivio.setFirma(firma);
}
else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO SCARTO!");
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR)) ){
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
String dir = rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar;
if((dir+interfacciaPortiAccessoErogatore).equals(entryName)){
//System.out.println("PORTI ACCESSO EROGATORE WSBL!");
archivio.setPortiAccessoErogatore(d);
}
else if((dir+interfacciaPortiAccessoFruitore).equals(entryName)){
//System.out.println("PORTI ACCESSO FRUITORE WSBL!");
archivio.setPortiAccessoFruitore(d);
}
}
else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
//System.out.println("ALLEGATO");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addAllegato(d);
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
//System.out.println("SPECIFICA SEMIFORMALE");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaSemiformale(d);
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_LIVELLI_SERVIZIO_DIR)) ){
//System.out.println("SPECIFICA LIVELLO SERVIZIO");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaLivelloServizio(d);
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SICUREZZA_DIR)) ){
//System.out.println("SPECIFICA SICUREZZA");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaSicurezza(d);
}
}
}
// check
if(archivio.getManifesto()==null){
throw new Exception("Manifesto non presente");
}
// Metto a posto i tipi (le estensioni dei files possono essere diverse)
if(archivio.getManifesto().getSpecificaSemiformale()!=null){
for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaSemiformale(j).setTipo(tipo);
}
}
}
}
if(archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio()!=null){
for(int i=0; i<archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio().sizeDocumentoLivelloServizioList(); i++){
String fileName = archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio().getDocumentoLivelloServizio(i).getBase();
String tipo = archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio().getDocumentoLivelloServizio(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheLivelliServizio(); j++){
if(fileName.equals(archivio.getSpecificaLivelloServizio(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaLivelloServizio(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaLivelloServizio(j).setTipo(tipo);
}
}
}
}
if(archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza()!=null){
for(int i=0; i<archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza().sizeDocumentoSicurezzaList(); i++){
String fileName = archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza().getDocumentoSicurezza(i).getBase();
String tipo = archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza().getDocumentoSicurezza(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheSicurezza(); j++){
if(fileName.equals(archivio.getSpecificaSicurezza(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaSicurezza(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaSicurezza(j).setTipo(tipo);
}
}
}
}
return archivio;
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
/* ----- Marshall dell'accordo di servizio parte specifica----- */
public void generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto,File file) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(file);
generateAccordoServizioParteSpecifica(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public void generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto,String fileName) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(fileName);
generateAccordoServizioParteSpecifica(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public byte[] generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto) throws XMLUtilsException{
try{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
generateAccordoServizioParteSpecifica(manifesto,bout);
bout.flush();
bout.close();
return bout.toByteArray();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
public void generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto,OutputStream out) throws XMLUtilsException{
boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
ZipOutputStream zipOut = null;
try{
zipOut = new ZipOutputStream(out);
String rootDir = "";
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
// .project
if(generaSICAClientProjectFile){
String nomeProgettoEclipse = manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_SPECIFICA;
String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
zipOut.write(projectContenuto.getBytes());
}
// firma
if(manifesto.getFirma()!=null){
byte[] firma = manifesto.getFirma().getBytes();
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
zipOut.write(firma);
}
// manifest
byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoAS(manifesto.getManifesto(),includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
zipOut.write(manifestoBytes);
// Specifica Porti Accesso
boolean specificaPortiAccesso = false;
if(manifesto.getPortiAccessoErogatore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar+Costanti.SPECIFICA_PORTI_ACCESSO_EROGATORE_WSDL));
zipOut.write(manifesto.getPortiAccessoErogatore().getContenuto());
specificaPortiAccesso = true;
}
if(manifesto.getPortiAccessoFruitore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar+Costanti.SPECIFICA_PORTI_ACCESSO_FRUITORE_WSDL));
zipOut.write(manifesto.getPortiAccessoFruitore().getContenuto());
specificaPortiAccesso = true;
}
if(!specificaPortiAccesso){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar));
}
// Allegati
boolean allegati = manifesto.sizeAllegati()>0;
for(int i=0; i<manifesto.sizeAllegati(); i++){
Documento allegato = manifesto.getAllegato(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
zipOut.write(allegato.getContenuto());
}
if(!allegati){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
}
// Specifiche Livelli Servizio
boolean specificheLivelliServizio = manifesto.sizeSpecificheLivelliServizio()>0;
for(int i=0; i<manifesto.sizeSpecificheLivelliServizio(); i++){
Documento doc = manifesto.getSpecificaLivelloServizio(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_LIVELLI_SERVIZIO_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheLivelliServizio){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_LIVELLI_SERVIZIO_DIR+File.separatorChar));
}
// Specifiche semiformali
boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
Documento doc = manifesto.getSpecificaSemiformale(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheSemiformali){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
}
// Specifiche sicurezza
boolean specificheSicurezza = manifesto.sizeSpecificheSicurezza()>0;
for(int i=0; i<manifesto.sizeSpecificheSicurezza(); i++){
Documento doc = manifesto.getSpecificaSicurezza(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SICUREZZA_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheSicurezza){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SICUREZZA_DIR+File.separatorChar));
}
zipOut.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipOut!=null)
zipOut.close();
}catch(Exception eClose){
// close
}
}
}
/* ----- Unmarshall Manifest dell'accordo di cooperazione ----- */
/**
* Ritorna la rappresentazione java di un accordo di cooperazione
*
* @param zip byte[]
* @return ManifestoAC
* @throws XMLUtilsException
*/
public AccordoCooperazione getAccordoCooperazione(byte[] zip) throws XMLUtilsException{
File tmp = null;
FileOutputStream fout = null;
try{
tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_COOPERAZIONE);
fout = new FileOutputStream(tmp);
fout.write(zip);
fout.flush();
fout.close();
return getAccordoCooperazione(tmp);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// ignore
}
try {
if(tmp!=null) {
if(!tmp.delete()) {
// ignore
}
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di cooperazione
*
* @param fileName File
* @return ManifestoAC
* @throws XMLUtilsException
*/
public AccordoCooperazione getAccordoCooperazione(String fileName) throws XMLUtilsException{
return getAccordoCooperazione(new File(fileName));
}
/**
* Ritorna la rappresentazione java di un accordo di cooperazione
*
* @param zip File
* @return ManifestoAC
* @throws XMLUtilsException
*/
public AccordoCooperazione getAccordoCooperazione(File zip) throws XMLUtilsException{
ZipFile zipFile = null;
try{
zipFile = new ZipFile(zip);
return getAccordoCooperazione(zipFile);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipFile!=null)
zipFile.close();
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di cooperazione
*
* @param m InputStream
* @return ManifestoAC
* @throws XMLUtilsException
*/
public AccordoCooperazione getAccordoCooperazione(InputStream m) throws XMLUtilsException{
ByteArrayOutputStream bout = null;
try{
bout = new ByteArrayOutputStream();
byte[]read = new byte[1024];
int letti = 0;
while( (letti=m.read(read))>=0 ){
bout.write(read, 0, letti);
}
bout.flush();
bout.close();
m.close();
return getAccordoCooperazione(bout.toByteArray());
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(bout!=null){
bout.close();
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di cooperazione
*
* @param zip File
* @return ManifestoAC
* @throws XMLUtilsException
*/
public AccordoCooperazione getAccordoCooperazione(ZipFile zip) throws XMLUtilsException{
try{
AccordoCooperazione archivio = new AccordoCooperazione();
String rootDir = null;
Enumeration<?> e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
//System.out.println("FILE NAME: "+entryName);
//System.out.println("SIZE: "+entry.getSize());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+entryName+"]");
if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
//System.out.println(".PROJECT: NIENTE DA GESTIRE");
}
else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
//System.out.println("FIRMA!");
Firma firma = new Firma();
archivio.setFirma(firma);
}
else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO!");
InputStream inputStream = zip.getInputStream(zipEntry);
it.gov.spcoop.sica.manifest.AccordoCooperazione manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoAC(this.log,inputStream);
inputStream.close();
archivio.setManifesto(manifesto);
}
else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
//System.out.println("ALLEGATO");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addAllegato(d);
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
//System.out.println("SPECIFICA SEMIFORMALE");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaSemiformale(d);
}
}
}
// check
if(archivio.getManifesto()==null){
throw new Exception("Manifesto non presente");
}
// Metto a posto i tipi (le estensioni dei files possono essere diverse)
if(archivio.getManifesto().getSpecificaSemiformale()!=null){
for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaSemiformale(j).setTipo(tipo);
}
}
}
}
return archivio;
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
/* ----- Marshall dell'accordo di cooperazione ----- */
public void generateAccordoCooperazione(AccordoCooperazione manifesto,File file) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(file);
generateAccordoCooperazione(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public void generateAccordoCooperazione(AccordoCooperazione manifesto,String fileName) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(fileName);
generateAccordoCooperazione(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public byte[] generateAccordoCooperazione(AccordoCooperazione manifesto) throws XMLUtilsException{
try{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
generateAccordoCooperazione(manifesto,bout);
bout.flush();
bout.close();
return bout.toByteArray();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
public void generateAccordoCooperazione(AccordoCooperazione manifesto,OutputStream out) throws XMLUtilsException{
boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
ZipOutputStream zipOut = null;
try{
zipOut = new ZipOutputStream(out);
String rootDir = "";
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
// .project
if(generaSICAClientProjectFile){
String nomeProgettoEclipse = manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_COOPERAZIONE;
String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
zipOut.write(projectContenuto.getBytes());
}
// firma
if(manifesto.getFirma()!=null){
byte[] firma = manifesto.getFirma().getBytes();
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
zipOut.write(firma);
}
// manifest
byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoAC(manifesto.getManifesto(),includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
zipOut.write(manifestoBytes);
// Allegati
boolean allegati = manifesto.sizeAllegati()>0;
for(int i=0; i<manifesto.sizeAllegati(); i++){
Documento allegato = manifesto.getAllegato(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
zipOut.write(allegato.getContenuto());
}
if(!allegati){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
}
// Specifiche semiformali
boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
Documento doc = manifesto.getSpecificaSemiformale(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheSemiformali){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
}
zipOut.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipOut!=null)
zipOut.close();
}catch(Exception eClose){
// close
}
}
}
/* ----- Unmarshall Manifest dell'accordo di servizio composto ----- */
/**
* Ritorna la rappresentazione java di un accordo di servizio composto
*
* @param zip byte[]
* @return ManifestoSC
* @throws XMLUtilsException
*/
public AccordoServizioComposto getAccordoServizioComposto(byte[] zip) throws XMLUtilsException{
File tmp = null;
FileOutputStream fout = null;
try{
tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_SERVIZIO_COMPOSTO);
fout = new FileOutputStream(tmp);
fout.write(zip);
fout.flush();
fout.close();
return getAccordoServizioComposto(tmp);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// ignore
}
try {
if(tmp!=null) {
if(!tmp.delete()) {
// ignore
}
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio composto
*
* @param fileName File
* @return ManifestoSC
* @throws XMLUtilsException
*/
public AccordoServizioComposto getAccordoServizioComposto(String fileName) throws XMLUtilsException{
return getAccordoServizioComposto(new File(fileName));
}
/**
* Ritorna la rappresentazione java di un accordo di servizio composto
*
* @param zip File
* @return ManifestoSC
* @throws XMLUtilsException
*/
public AccordoServizioComposto getAccordoServizioComposto(File zip) throws XMLUtilsException{
ZipFile zipFile = null;
try{
zipFile = new ZipFile(zip);
return getAccordoServizioComposto(zipFile);
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipFile!=null)
zipFile.close();
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio composto
*
* @param m InputStream
* @return ManifestoSC
* @throws XMLUtilsException
*/
public AccordoServizioComposto getAccordoServizioComposto(InputStream m) throws XMLUtilsException{
ByteArrayOutputStream bout = null;
try{
bout = new ByteArrayOutputStream();
byte[]read = new byte[1024];
int letti = 0;
while( (letti=m.read(read))>=0 ){
bout.write(read, 0, letti);
}
bout.flush();
bout.close();
m.close();
return getAccordoServizioComposto(bout.toByteArray());
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(bout!=null){
bout.close();
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un accordo di servizio composto
*
* @param zip File
* @return ManifestoSC
* @throws XMLUtilsException
*/
public AccordoServizioComposto getAccordoServizioComposto(ZipFile zip) throws XMLUtilsException{
try{
AccordoServizioComposto archivio = new AccordoServizioComposto();
String rootDir = null;
/* Primo giro per catturare il Manifest */
ServizioComposto manifesto = null;
Enumeration<?> e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
//System.out.println("FILE NAME: "+entryName);
//System.out.println("SIZE: "+entry.getSize());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+entryName+"]");
if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO!");
InputStream inputStream = zip.getInputStream(zipEntry);
manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoSC(this.log,inputStream);
inputStream.close();
archivio.setManifesto(manifesto);
break;
}
}
}
if(manifesto==null){
throw new Exception("Manifest ServizioComposto non presente");
}
/* Lettura informazioni dal manifest */
String interfacciaConcettuale = Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL;
String interfaccialogicoErogatore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL;
String interfaccialogicoFruitore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL;
String conversazioneConcettuale = Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL;
String conversazionelogicoErogatore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL;
String conversazionelogicoFruitore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL;
if(manifesto.getSpecificaInterfaccia()!=null){
SpecificaInterfaccia interfaccia = manifesto.getSpecificaInterfaccia();
if(interfaccia.getInterfacciaConcettuale()!=null){
interfacciaConcettuale = ZipUtilities.getBaseName(interfaccia.getInterfacciaConcettuale().getBase());
}
if(interfaccia.getInterfacciaLogicaLatoErogatore()!=null){
interfaccialogicoErogatore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoErogatore().getBase());
}
if(interfaccia.getInterfacciaLogicaLatoFruitore()!=null){
interfaccialogicoFruitore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoFruitore().getBase());
}
}
if(manifesto.getSpecificaConversazione()!=null){
SpecificaConversazione conversazione = manifesto.getSpecificaConversazione();
if(conversazione.getConversazioneConcettuale()!=null){
conversazioneConcettuale = ZipUtilities.getBaseName(conversazione.getConversazioneConcettuale().getBase());
}
if(conversazione.getConversazioneLogicaLatoErogatore()!=null){
conversazionelogicoErogatore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoErogatore().getBase());
}
if(conversazione.getConversazioneLogicaLatoFruitore()!=null){
conversazionelogicoFruitore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoFruitore().getBase());
}
}
/* Identificazione altri campi */
e = zip.entries();
while(e.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry)e.nextElement();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
//System.out.println("FILE NAME: "+entryName);
//System.out.println("SIZE: "+entry.getSize());
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
//System.out.println("ENTRY ["+entryName+"]");
if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
//System.out.println(".PROJECT: NIENTE DA GESTIRE");
}
else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
//System.out.println("FIRMA!");
Firma firma = new Firma();
archivio.setFirma(firma);
}
else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
//System.out.println("MANIFESTO SCARTO!");
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR)) ){
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
String dir = rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar;
if((dir+conversazioneConcettuale).equals(entryName)){
//System.out.println("CONVERSAZIONE CONCETTUALE WSBL!");
archivio.setConversazioneConcettuale(d);
}
else if((dir+conversazionelogicoErogatore).equals(entryName)){
//System.out.println("CONVERSAZIONE LOGICA EROGATORE WSBL!");
archivio.setConversazioneLogicaErogatore(d);
}
else if((dir+conversazionelogicoFruitore).equals(entryName)){
//System.out.println("CONVERSAZIONE LOGICA FRUITORE WSBL!");
archivio.setConversazioneLogicaFruitore(d);
}
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR)) ){
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
String dir = rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar;
if((dir+interfacciaConcettuale).equals(entryName)){
//System.out.println("INTERFACCIA CONCETTUALE WSDL!");
archivio.setInterfacciaConcettuale(d);
}
else if((dir+interfaccialogicoErogatore).equals(entryName)){
//System.out.println("INTERFACCIA LOGICA EROGATORE WSDL!");
archivio.setInterfacciaLogicaLatoErogatore(d);
}
else if((dir+interfaccialogicoFruitore).equals(entryName)){
//System.out.println("INTERFACCIA LOGICA FRUITORE WSDL!");
archivio.setInterfacciaLogicaLatoFruitore(d);
}
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_COORDINAMENTO_DIR)) ){
//System.out.println("COORDINAMENTO!");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaCoordinamento(d);
}
else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
//System.out.println("ALLEGATO");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addAllegato(d);
// Validazione XSD delle informazioni egov
if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
}else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
}
}
else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
//System.out.println("SPECIFICA SEMIFORMALE");
InputStream inputStream = zip.getInputStream(zipEntry);
Documento d = new Documento(nome,tipo,inputStream);
inputStream.close();
archivio.addSpecificaSemiformale(d);
// Validazione XSD delle informazioni egov
if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
}else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
}
}
}
}
// check
if(archivio.getManifesto()==null){
throw new Exception("Manifesto non presente");
}
// Metto a posto i tipi (le estensioni dei files possono essere diverse)
if(archivio.getManifesto().getSpecificaSemiformale()!=null){
for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaSemiformale(j).setTipo(tipo);
}
}
}
}
if(archivio.getManifesto().getSpecificaCoordinamento()!=null){
for(int i=0; i<archivio.getManifesto().getSpecificaCoordinamento().sizeDocumentoCoordinamentoList(); i++){
String fileName = archivio.getManifesto().getSpecificaCoordinamento().getDocumentoCoordinamento(i).getBase();
String tipo = archivio.getManifesto().getSpecificaCoordinamento().getDocumentoCoordinamento(i).getTipo();
for(int j=0; j<archivio.sizeSpecificheCoordinamento(); j++){
if(fileName.equals(archivio.getSpecificaCoordinamento(j).getNome())){
//System.out.println("Metto a posto da ["+archivio.getSpecificaCoordinamento(j).getTipo()+"] a ["+tipo+"]");
archivio.getSpecificaCoordinamento(j).setTipo(tipo);
}
}
}
}
return archivio;
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
/* ----- Marshall dell'accordo di servizio composto----- */
public void generateAccordoServizioComposto(AccordoServizioComposto manifesto,File file) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(file);
generateAccordoServizioComposto(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public void generateAccordoServizioComposto(AccordoServizioComposto manifesto,String fileName) throws XMLUtilsException{
FileOutputStream fout = null;
try{
fout = new FileOutputStream(fileName);
generateAccordoServizioComposto(manifesto,fout);
fout.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
}catch(Exception eClose){
// close
}
}
}
public byte[] generateAccordoServizioComposto(AccordoServizioComposto manifesto) throws XMLUtilsException{
try{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
generateAccordoServizioComposto(manifesto,bout);
bout.flush();
bout.close();
return bout.toByteArray();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}
}
public void generateAccordoServizioComposto(AccordoServizioComposto manifesto,OutputStream out) throws XMLUtilsException{
boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
ZipOutputStream zipOut = null;
try{
zipOut = new ZipOutputStream(out);
String rootDir = "";
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
// .project
if(generaSICAClientProjectFile){
String nomeProgettoEclipse = manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_COMPOSTO;
String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
zipOut.write(projectContenuto.getBytes());
}
// firma
if(manifesto.getFirma()!=null){
byte[] firma = manifesto.getFirma().getBytes();
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
zipOut.write(firma);
}
// manifest
byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoSC(manifesto.getManifesto(),includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
zipOut.write(manifestoBytes);
// Specifica Interfaccia
boolean specificaInterfaccia = false;
if(manifesto.getInterfacciaConcettuale()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL));
zipOut.write(manifesto.getInterfacciaConcettuale().getContenuto());
specificaInterfaccia = true;
}
if(manifesto.getInterfacciaLogicaLatoErogatore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL));
zipOut.write(manifesto.getInterfacciaLogicaLatoErogatore().getContenuto());
specificaInterfaccia = true;
}
if(manifesto.getInterfacciaLogicaLatoFruitore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL));
zipOut.write(manifesto.getInterfacciaLogicaLatoFruitore().getContenuto());
specificaInterfaccia = true;
}
if(!specificaInterfaccia){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar));
}
// Specifica Conversazioni
boolean specificaConversazioni = false;
if(manifesto.getConversazioneConcettuale()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL));
zipOut.write(manifesto.getConversazioneConcettuale().getContenuto());
specificaConversazioni = true;
}
if(manifesto.getConversazioneLogicaErogatore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL));
zipOut.write(manifesto.getConversazioneLogicaErogatore().getContenuto());
specificaConversazioni = true;
}
if(manifesto.getConversazioneLogicaFruitore()!=null){
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL));
zipOut.write(manifesto.getConversazioneLogicaFruitore().getContenuto());
specificaConversazioni = true;
}
if(!specificaConversazioni){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar));
}
// SpecificaCoordinamento
boolean specificheCoordinameno = manifesto.sizeSpecificheCoordinamento()>0;
for(int i=0; i<manifesto.sizeSpecificheCoordinamento(); i++){
Documento doc = manifesto.getSpecificaCoordinamento(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_COORDINAMENTO_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheCoordinameno){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_COORDINAMENTO_DIR+File.separatorChar));
}
// Allegati
boolean allegati = manifesto.sizeAllegati()>0;
for(int i=0; i<manifesto.sizeAllegati(); i++){
Documento allegato = manifesto.getAllegato(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
zipOut.write(allegato.getContenuto());
}
if(!allegati){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
}
// Specifiche semiformali
boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
Documento doc = manifesto.getSpecificaSemiformale(i);
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
zipOut.write(doc.getContenuto());
}
if(!specificheSemiformali){
// La directory deve cmq esistere, al massimo sara' vuota
zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
}
zipOut.flush();
}catch(Exception e){
throw new XMLUtilsException(e.getMessage(),e);
}finally{
try{
if(zipOut!=null)
zipOut.close();
}catch(Exception eClose){
// close
}
}
}
}