XMLUtils.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */



  20. package it.gov.spcoop.sica.dao.driver;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.File;
  23. import java.io.FileOutputStream;
  24. import java.io.InputStream;
  25. import java.io.OutputStream;
  26. import java.util.Enumeration;
  27. import java.util.zip.ZipEntry;
  28. import java.util.zip.ZipFile;
  29. import java.util.zip.ZipOutputStream;

  30. import javax.activation.FileDataSource;

  31. import org.slf4j.Logger;
  32. import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopContext;
  33. import org.openspcoop2.utils.io.ZipUtilities;
  34. import org.openspcoop2.utils.resources.FileSystemUtilities;

  35. import it.gov.spcoop.sica.dao.AccordoCooperazione;
  36. import it.gov.spcoop.sica.dao.AccordoServizioComposto;
  37. import it.gov.spcoop.sica.dao.AccordoServizioParteComune;
  38. import it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica;
  39. import it.gov.spcoop.sica.dao.Costanti;
  40. import it.gov.spcoop.sica.dao.Documento;
  41. import it.gov.spcoop.sica.firma.Firma;
  42. import it.gov.spcoop.sica.manifest.AccordoServizio;
  43. import it.gov.spcoop.sica.manifest.ServizioComposto;
  44. import it.gov.spcoop.sica.manifest.SpecificaConversazione;
  45. import it.gov.spcoop.sica.manifest.SpecificaInterfaccia;
  46. import it.gov.spcoop.sica.manifest.SpecificaPortiAccesso;
  47. import it.gov.spcoop.sica.manifest.driver.XMLUtilsException;



  48. /**
  49.  * Classe utilizzata per lavorare sui package di un accordo di servizio o di cooperazione
  50.  *
  51.  *
  52.  * @author Poli Andrea (apoli@link.it)
  53.  * @author $Author$
  54.  * @version $Rev$, $Date$
  55.  */

  56. public class XMLUtils  {

  57.    
  58.    
  59.     private SICAtoOpenSPCoopContext sicaToOpenSPCoopContext = null;
  60.     private Logger log = null;
  61.     public XMLUtils(SICAtoOpenSPCoopContext sContext,Logger log){
  62.         this.sicaToOpenSPCoopContext = sContext;
  63.         this.log = log;
  64.     }
  65.    
  66.    
  67.    
  68.    
  69.    
  70.    
  71.    
  72.     /* ----- Unmarshall Manifest dell'accordo di servizio parte comune ----- */
  73.    
  74.     /**
  75.      * Ritorna la rappresentazione java di un accordo di servizio parte comune
  76.      *
  77.      * @param zip byte[]
  78.      * @return ManifestoAS
  79.      * @throws XMLUtilsException
  80.      */
  81.     public AccordoServizioParteComune getAccordoServizioParteComune(byte[] zip) throws XMLUtilsException{
  82.         File tmp = null;
  83.         FileOutputStream fout = null;
  84.         try{
  85.             tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_COMUNE);
  86.            
  87.             fout = new FileOutputStream(tmp);
  88.             fout.write(zip);
  89.             fout.flush();
  90.             fout.close();
  91.            
  92.             return getAccordoServizioParteComune(tmp);
  93.            
  94.         }catch(Exception e){
  95.             throw new XMLUtilsException(e.getMessage(),e);
  96.         }finally{
  97.             try{
  98.                 if(fout!=null)
  99.                     fout.close();
  100.             }catch(Exception eClose){
  101.                 // ignore
  102.             }
  103.             try {
  104.                 if(tmp!=null) {
  105.                     if(!tmp.delete()) {
  106.                         // ignore
  107.                     }
  108.                 }
  109.             }catch(Exception eClose){
  110.                 // ignore
  111.             }
  112.         }
  113.        
  114.     }
  115.    
  116.     /**
  117.      * Ritorna la rappresentazione java di un accordo di servizio parte comune
  118.      *
  119.      * @param fileName File
  120.      * @return ManifestoAS
  121.      * @throws XMLUtilsException
  122.      */
  123.     public AccordoServizioParteComune getAccordoServizioParteComune(String fileName) throws XMLUtilsException{
  124.         return getAccordoServizioParteComune(new File(fileName));
  125.     }
  126.    
  127.     /**
  128.      * Ritorna la rappresentazione java di un accordo di servizio parte comune
  129.      *
  130.      * @param zip File
  131.      * @return ManifestoAS
  132.      * @throws XMLUtilsException
  133.      */
  134.     public AccordoServizioParteComune getAccordoServizioParteComune(File zip) throws XMLUtilsException{
  135.         ZipFile zipFile = null;
  136.         try{
  137.             zipFile = new ZipFile(zip);
  138.             return getAccordoServizioParteComune(zipFile);
  139.         }catch(Exception e){
  140.             throw new XMLUtilsException(e.getMessage(),e);
  141.         }finally{
  142.             try{
  143.                 if(zipFile!=null)
  144.                     zipFile.close();
  145.             }catch(Exception eClose){
  146.                 // close
  147.             }
  148.         }
  149.     }
  150.        
  151.     /**
  152.      * Ritorna la rappresentazione java di un accordo di servizio parte comune
  153.      *
  154.      * @param m InputStream
  155.      * @return ManifestoAS
  156.      * @throws XMLUtilsException
  157.      */
  158.     public AccordoServizioParteComune getAccordoServizioParteComune(InputStream m) throws XMLUtilsException{
  159.         ByteArrayOutputStream bout = null;
  160.         try{
  161.             bout = new ByteArrayOutputStream();
  162.             byte[]read = new byte[1024];
  163.             int letti = 0;
  164.             while( (letti=m.read(read))>=0 ){
  165.                 bout.write(read, 0, letti);
  166.             }
  167.             bout.flush();
  168.             bout.close();
  169.             m.close();
  170.            
  171.             return getAccordoServizioParteComune(bout.toByteArray());
  172.            
  173.         }catch(Exception e){
  174.             throw new XMLUtilsException(e.getMessage(),e);
  175.         }finally{
  176.             try{
  177.                 if(bout!=null){
  178.                     bout.close();
  179.                 }
  180.             }catch(Exception eClose){
  181.                 // close
  182.             }
  183.         }
  184.     }
  185.    
  186.     /**
  187.      * Ritorna la rappresentazione java di un accordo di servizio parte comune
  188.      *
  189.      * @param zip File
  190.      * @return ManifestoAS
  191.      * @throws XMLUtilsException
  192.      */
  193.     public AccordoServizioParteComune getAccordoServizioParteComune(ZipFile zip) throws XMLUtilsException{
  194.         try{
  195.             AccordoServizioParteComune archivio = new AccordoServizioParteComune();
  196.            
  197.             String rootDir = null;
  198.            
  199.             /* Primo giro per catturare il Manifest */
  200.             it.gov.spcoop.sica.manifest.AccordoServizioParteComune parteComune = null;
  201.             Enumeration<?> e = zip.entries();
  202.             while(e.hasMoreElements()) {
  203.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  204.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
  205.                
  206.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  207.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  208.                 if(rootDir==null){
  209.                     // Calcolo ROOT DIR
  210.                     rootDir=ZipUtilities.getRootDir(entryName);
  211.                 }
  212.                
  213.                 if(zipEntry.isDirectory()) {
  214.                     continue; // directory
  215.                 }
  216.                 else {
  217.                     FileDataSource fds = new FileDataSource(entryName);
  218.                     String nome = fds.getName();
  219.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  220.                     tipo = tipo.toUpperCase();
  221.                     //System.out.println("VERIFICARE NAME["+nome+"] TIPO["+tipo+"]");
  222.                    
  223.                     //System.out.println("ENTRY ["+rootDir+Costanti.MANIFESTO_XML+"]==["+entryName+"]");
  224.                     if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  225.                         //System.out.println("MANIFESTO!");
  226.                         InputStream inputStream = zip.getInputStream(zipEntry);
  227.                         AccordoServizio manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoAS(this.log,inputStream);
  228.                         parteComune = manifesto.getParteComune();
  229.                         if(parteComune==null){
  230.                             throw new Exception("Manifest Parte Comune non presente");
  231.                         }
  232.                         inputStream.close();
  233.                         archivio.setManifesto(manifesto);
  234.                         break;
  235.                     }
  236.                 }
  237.             }
  238.             if(parteComune==null){
  239.                 throw new Exception("Manifest Parte Comune non presente");
  240.             }
  241.            
  242.            
  243.             /* Lettura informazioni dal manifest */
  244.             String interfacciaConcettuale = Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL;
  245.             String interfaccialogicoErogatore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL;
  246.             String interfaccialogicoFruitore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL;
  247.             String conversazioneConcettuale = Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL;
  248.             String conversazionelogicoErogatore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL;
  249.             String conversazionelogicoFruitore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL;
  250.             if(parteComune.getSpecificaInterfaccia()!=null){
  251.                 SpecificaInterfaccia interfaccia = parteComune.getSpecificaInterfaccia();
  252.                 if(interfaccia.getInterfacciaConcettuale()!=null){
  253.                     interfacciaConcettuale = ZipUtilities.getBaseName(interfaccia.getInterfacciaConcettuale().getBase());
  254.                 }
  255.                 if(interfaccia.getInterfacciaLogicaLatoErogatore()!=null){
  256.                     interfaccialogicoErogatore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoErogatore().getBase());
  257.                 }
  258.                 if(interfaccia.getInterfacciaLogicaLatoFruitore()!=null){
  259.                     interfaccialogicoFruitore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoFruitore().getBase());
  260.                 }
  261.             }
  262.             if(parteComune.getSpecificaConversazione()!=null){
  263.                 SpecificaConversazione conversazione = parteComune.getSpecificaConversazione();
  264.                 if(conversazione.getConversazioneConcettuale()!=null){
  265.                     conversazioneConcettuale = ZipUtilities.getBaseName(conversazione.getConversazioneConcettuale().getBase());
  266.                 }
  267.                 if(conversazione.getConversazioneLogicaLatoErogatore()!=null){
  268.                     conversazionelogicoErogatore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoErogatore().getBase());
  269.                 }
  270.                 if(conversazione.getConversazioneLogicaLatoFruitore()!=null){
  271.                     conversazionelogicoFruitore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoFruitore().getBase());
  272.                 }
  273.             }
  274.            
  275.            
  276.             /* Identificazione altri campi */
  277.             e = zip.entries();
  278.             while(e.hasMoreElements()) {
  279.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  280.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
  281.                
  282.                 //System.out.println("FILE NAME:  "+entryName);
  283.                 //System.out.println("SIZE:  "+entry.getSize());

  284.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  285.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  286.                 if(rootDir==null){
  287.                     // Calcolo ROOT DIR
  288.                     rootDir=ZipUtilities.getRootDir(entryName);
  289.                 }
  290.                
  291.                 if(zipEntry.isDirectory()) {
  292.                     continue; // directory
  293.                 }
  294.                 else {
  295.                     FileDataSource fds = new FileDataSource(entryName);
  296.                     String nome = fds.getName();
  297.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  298.                     tipo = tipo.toUpperCase();
  299.                     //System.out.println("VERIFICARE NAME["+nome+"] TIPO["+tipo+"]");
  300.                    
  301.                     //System.out.println("ENTRY ["+entryName+"]");
  302.                     if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
  303.                         //System.out.println(".PROJECT: NIENTE DA GESTIRE");
  304.                     }  
  305.                     else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
  306.                         //System.out.println("FIRMA!");
  307.                         Firma firma = new Firma();
  308.                         archivio.setFirma(firma);
  309.                     }  
  310.                     else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  311.                         //System.out.println("MANIFESTO! SCARTO");
  312.                     }      
  313.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR)) ){
  314.                         InputStream inputStream = zip.getInputStream(zipEntry);
  315.                         Documento d = new Documento(nome,tipo,inputStream);
  316.                         inputStream.close();
  317.                         String dir = rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar;
  318.                         if((dir+conversazioneConcettuale).equals(entryName)){
  319.                             //System.out.println("CONVERSAZIONE CONCETTUALE WSBL!");
  320.                             archivio.setConversazioneConcettuale(d);
  321.                         }
  322.                         else if((dir+conversazionelogicoErogatore).equals(entryName)){
  323.                             //System.out.println("CONVERSAZIONE LOGICA EROGATORE WSBL!");
  324.                             archivio.setConversazioneLogicaErogatore(d);
  325.                         }
  326.                         else if((dir+conversazionelogicoFruitore).equals(entryName)){
  327.                             //System.out.println("CONVERSAZIONE LOGICA FRUITORE WSBL!");
  328.                             archivio.setConversazioneLogicaFruitore(d);
  329.                         }

  330.                     }
  331.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR)) ){
  332.                         InputStream inputStream = zip.getInputStream(zipEntry);
  333.                         Documento d = new Documento(nome,tipo,inputStream);
  334.                         inputStream.close();
  335.                         String dir = rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar;
  336.                         if((dir+interfacciaConcettuale).equals(entryName)){
  337.                             //System.out.println("INTERFACCIA CONCETTUALE WSDL!");
  338.                             archivio.setInterfacciaConcettuale(d);
  339.                         }
  340.                         else if((dir+interfaccialogicoErogatore).equals(entryName)){
  341.                             //System.out.println("INTERFACCIA LOGICA EROGATORE WSDL!");
  342.                             archivio.setInterfacciaLogicaLatoErogatore(d);
  343.                         }
  344.                         else if((dir+interfaccialogicoFruitore).equals(entryName)){
  345.                             //System.out.println("INTERFACCIA LOGICA FRUITORE WSDL!");
  346.                             archivio.setInterfacciaLogicaLatoFruitore(d);
  347.                         }
  348.                     }
  349.                     else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
  350.                         //System.out.println("ALLEGATO");
  351.                         InputStream inputStream = zip.getInputStream(zipEntry);
  352.                         Documento d = new Documento(nome,tipo,inputStream);
  353.                         inputStream.close();
  354.                         archivio.addAllegato(d);
  355.                        
  356.                         // Validazione XSD delle informazioni egov
  357.                         if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  358.                             it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  359.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
  360.                         }else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  361.                             it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  362.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
  363.                         }
  364.                     }
  365.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
  366.                         //System.out.println("SPECIFICASEMIFORMALE");
  367.                         InputStream inputStream = zip.getInputStream(zipEntry);                    
  368.                         Documento d = new Documento(nome,tipo,inputStream);
  369.                         inputStream.close();
  370.                         archivio.addSpecificaSemiformale(d);
  371.                        
  372.                         // Validazione XSD delle informazioni egov
  373.                         if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  374.                             it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  375.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
  376.                         }else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  377.                             it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  378.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
  379.                         }
  380.                     }
  381.                 }
  382.                
  383.    
  384.             }
  385.            
  386.             // check
  387.             if(archivio.getManifesto()==null){
  388.                 throw new Exception("Manifesto non presente");
  389.             }
  390.            
  391.             // Metto a posto i tipi (le estensioni dei files possono essere diverse)
  392.             if(archivio.getManifesto().getSpecificaSemiformale()!=null){
  393.                 for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  394.                     String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
  395.                     String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
  396.                     for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
  397.                         if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
  398.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
  399.                             archivio.getSpecificaSemiformale(j).setTipo(tipo);
  400.                         }
  401.                     }
  402.                 }
  403.             }
  404.            
  405.             return archivio;

  406.         }catch(Exception e){
  407.             throw new XMLUtilsException(e.getMessage(),e);
  408.         }
  409.     }
  410.    
  411.    
  412.    
  413.    
  414.    
  415.    
  416.    
  417.     /* ----- Marshall dell'accordo di servizio parte comune----- */
  418.     public void generateAccordoServizioParteComune(AccordoServizioParteComune manifesto,File file) throws XMLUtilsException{
  419.         FileOutputStream fout = null;
  420.         try{
  421.             fout = new FileOutputStream(file);
  422.             generateAccordoServizioParteComune(manifesto,fout);
  423.             fout.flush();
  424.         }catch(Exception e){
  425.             throw new XMLUtilsException(e.getMessage(),e);
  426.         }finally{
  427.             try{
  428.                 if(fout!=null)
  429.                     fout.close();
  430.             }catch(Exception eClose){
  431.                 // close
  432.             }
  433.         }
  434.     }
  435.    
  436.     public void generateAccordoServizioParteComune(AccordoServizioParteComune manifesto,String fileName) throws XMLUtilsException{
  437.         FileOutputStream fout = null;
  438.         try{
  439.             fout = new FileOutputStream(fileName);
  440.             generateAccordoServizioParteComune(manifesto,fout);
  441.             fout.flush();
  442.         }catch(Exception e){
  443.             throw new XMLUtilsException(e.getMessage(),e);
  444.         }finally{
  445.             try{
  446.                 if(fout!=null)
  447.                     fout.close();
  448.             }catch(Exception eClose){
  449.                 // close
  450.             }
  451.         }
  452.     }
  453.    
  454.     public byte[] generateAccordoServizioParteComune(AccordoServizioParteComune manifesto) throws XMLUtilsException{
  455.         try{
  456.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  457.             generateAccordoServizioParteComune(manifesto,bout);
  458.             bout.flush();
  459.             bout.close();
  460.             return bout.toByteArray();
  461.         }catch(Exception e){
  462.             throw new XMLUtilsException(e.getMessage(),e);
  463.         }
  464.     }

  465.     public void generateAccordoServizioParteComune(AccordoServizioParteComune manifesto,OutputStream out) throws XMLUtilsException{
  466.        
  467.         boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
  468.         boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
  469.         boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
  470.        
  471.         ZipOutputStream zipOut = null;
  472.         try{
  473.             zipOut = new ZipOutputStream(out);

  474.             String rootDir = "";
  475.             // Il codice dopo fissa il problema di inserire una directory nel package.
  476.             // Commentare la riga sotto per ripristinare il vecchio comportamento.
  477.             rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
  478.            
  479.             // .project
  480.             if(generaSICAClientProjectFile){
  481.                 String nomeProgettoEclipse =  manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_COMUNE;
  482.                 String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
  483.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
  484.                 zipOut.write(projectContenuto.getBytes());
  485.             }
  486.            
  487.             // firma
  488.             if(manifesto.getFirma()!=null){
  489.                 byte[] firma = manifesto.getFirma().getBytes();
  490.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
  491.                 zipOut.write(firma);
  492.             }
  493.            
  494.             // manifest
  495.             byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoAS(manifesto.getManifesto(),includiInfoRegistroGenerale, lunghezzaNomeAccordoLimitata);
  496.             zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
  497.             zipOut.write(manifestoBytes);
  498.            
  499.             // Specifica Interfaccia
  500.             boolean specificaInterfaccia = false;
  501.             if(manifesto.getInterfacciaConcettuale()!=null){
  502.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL));
  503.                 zipOut.write(manifesto.getInterfacciaConcettuale().getContenuto());
  504.                 specificaInterfaccia = true;
  505.             }
  506.             if(manifesto.getInterfacciaLogicaLatoErogatore()!=null){
  507.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL));
  508.                 zipOut.write(manifesto.getInterfacciaLogicaLatoErogatore().getContenuto());
  509.                 specificaInterfaccia = true;
  510.             }
  511.             if(manifesto.getInterfacciaLogicaLatoFruitore()!=null){
  512.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL));
  513.                 zipOut.write(manifesto.getInterfacciaLogicaLatoFruitore().getContenuto());
  514.                 specificaInterfaccia = true;
  515.             }
  516.             if(!specificaInterfaccia){
  517.                 // La directory deve cmq esistere, al massimo sara' vuota
  518.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar));
  519.             }
  520.            
  521.             // Specifica Conversazioni
  522.             boolean specificaConversazione = false;
  523.             if(manifesto.getConversazioneConcettuale()!=null){
  524.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL));
  525.                 zipOut.write(manifesto.getConversazioneConcettuale().getContenuto());
  526.                 specificaConversazione = true;
  527.             }
  528.             if(manifesto.getConversazioneLogicaErogatore()!=null){
  529.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL));
  530.                 zipOut.write(manifesto.getConversazioneLogicaErogatore().getContenuto());
  531.                 specificaConversazione = true;
  532.             }
  533.             if(manifesto.getConversazioneLogicaFruitore()!=null){
  534.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL));
  535.                 zipOut.write(manifesto.getConversazioneLogicaFruitore().getContenuto());
  536.                 specificaConversazione = true;
  537.             }
  538.             if(!specificaConversazione){
  539.                 // La directory deve cmq esistere, al massimo sara' vuota
  540.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar));
  541.             }
  542.            
  543.             // Allegati
  544.             boolean allegati = manifesto.sizeAllegati()>0;
  545.             for(int i=0; i<manifesto.sizeAllegati(); i++){
  546.                 Documento allegato = manifesto.getAllegato(i);
  547.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
  548.                 zipOut.write(allegato.getContenuto());
  549.             }
  550.             if(!allegati){
  551.                 // La directory deve cmq esistere, al massimo sara' vuota
  552.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
  553.             }
  554.            
  555.             // Specifiche semiformali
  556.             boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
  557.             for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
  558.                 Documento doc = manifesto.getSpecificaSemiformale(i);
  559.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
  560.                 zipOut.write(doc.getContenuto());
  561.             }
  562.             if(!specificheSemiformali){
  563.                 // La directory deve cmq esistere, al massimo sara' vuota
  564.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
  565.             }
  566.            
  567.             zipOut.flush();

  568.         }catch(Exception e){
  569.             throw new XMLUtilsException(e.getMessage(),e);
  570.         }finally{
  571.             try{
  572.                 if(zipOut!=null)
  573.                     zipOut.close();
  574.             }catch(Exception eClose){
  575.                 // close
  576.             }
  577.         }
  578.     }
  579.    
  580.    
  581.    
  582.    
  583.    
  584.    
  585.    
  586.    
  587.    
  588.    
  589.    
  590.    
  591.    
  592.    
  593.    
  594.    
  595.    
  596.    
  597.     /* ----- Unmarshall Manifest dell'accordo di servizio parte specifica----- */
  598.    
  599.     /**
  600.      * Ritorna la rappresentazione java di un accordo di servizio parte specifica
  601.      *
  602.      * @param zip byte[]
  603.      * @return ManifestoAS
  604.      * @throws XMLUtilsException
  605.      */
  606.     public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(byte[] zip) throws XMLUtilsException{
  607.         File tmp = null;
  608.         FileOutputStream fout = null;
  609.         try{
  610.             tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  611.            
  612.             fout = new FileOutputStream(tmp);
  613.             fout.write(zip);
  614.             fout.flush();
  615.             fout.close();
  616.            
  617.             return getAccordoServizioParteSpecifica(tmp);
  618.            
  619.         }catch(Exception e){
  620.             throw new XMLUtilsException(e.getMessage(),e);
  621.         }finally{
  622.             try{
  623.                 if(fout!=null)
  624.                     fout.close();
  625.             }catch(Exception eClose){
  626.                 // ignore
  627.             }
  628.             try {
  629.                 if(tmp!=null) {
  630.                     if(!tmp.delete()) {
  631.                         // ignore
  632.                     }
  633.                 }
  634.             }catch(Exception eClose){
  635.                 // close
  636.             }
  637.         }
  638.        
  639.     }
  640.    
  641.     /**
  642.      * Ritorna la rappresentazione java di un accordo di servizio parte specifica
  643.      *
  644.      * @param fileName File
  645.      * @return ManifestoAS
  646.      * @throws XMLUtilsException
  647.      */
  648.     public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(String fileName) throws XMLUtilsException{
  649.         return getAccordoServizioParteSpecifica(new File(fileName));
  650.     }
  651.    
  652.     /**
  653.      * Ritorna la rappresentazione java di un accordo di servizio parte specifica
  654.      *
  655.      * @param zip File
  656.      * @return ManifestoAS
  657.      * @throws XMLUtilsException
  658.      */
  659.     public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(File zip) throws XMLUtilsException{
  660.         ZipFile zipFile = null;
  661.         try{
  662.             zipFile = new ZipFile(zip);
  663.             return getAccordoServizioParteSpecifica(zipFile);
  664.         }catch(Exception e){
  665.             throw new XMLUtilsException(e.getMessage(),e);
  666.         }finally{
  667.             try{
  668.                 if(zipFile!=null)
  669.                     zipFile.close();
  670.             }catch(Exception eClose){
  671.                 // close
  672.             }
  673.         }
  674.     }
  675.        
  676.     /**
  677.      * Ritorna la rappresentazione java di un accordo di servizio parte specifica
  678.      *
  679.      * @param m InputStream
  680.      * @return ManifestoAS
  681.      * @throws XMLUtilsException
  682.      */
  683.     public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(InputStream m) throws XMLUtilsException{
  684.         ByteArrayOutputStream bout = null;
  685.         try{
  686.             bout = new ByteArrayOutputStream();
  687.             byte[]read = new byte[1024];
  688.             int letti = 0;
  689.             while( (letti=m.read(read))>=0 ){
  690.                 bout.write(read, 0, letti);
  691.             }
  692.             bout.flush();
  693.             bout.close();
  694.             m.close();
  695.            
  696.             return getAccordoServizioParteSpecifica(bout.toByteArray());
  697.            
  698.         }catch(Exception e){
  699.             throw new XMLUtilsException(e.getMessage(),e);
  700.         }finally{
  701.             try{
  702.                 if(bout!=null){
  703.                     bout.close();
  704.                 }
  705.             }catch(Exception eClose){
  706.                 // close
  707.             }
  708.         }
  709.     }
  710.    
  711.     /**
  712.      * Ritorna la rappresentazione java di un accordo di servizio parte specifica
  713.      *
  714.      * @param zip File
  715.      * @return ManifestoAS
  716.      * @throws XMLUtilsException
  717.      */
  718.     public AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(ZipFile zip) throws XMLUtilsException{
  719.         try{
  720.             AccordoServizioParteSpecifica archivio = new AccordoServizioParteSpecifica();
  721.            
  722.             String rootDir = null;
  723.            
  724.             /* Primo giro per catturare il Manifest */
  725.             it.gov.spcoop.sica.manifest.AccordoServizioParteSpecifica parteSpecifica = null;
  726.             Enumeration<?> e = zip.entries();
  727.             while(e.hasMoreElements()) {
  728.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  729.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
  730.                
  731.                 //System.out.println("FILE NAME:  "+entryName);
  732.                 //System.out.println("SIZE:  "+entry.getSize());
  733.                    
  734.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  735.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  736.                 if(rootDir==null){
  737.                     // Calcolo ROOT DIR
  738.                     rootDir=ZipUtilities.getRootDir(entryName);
  739.                 }
  740.                
  741.                 if(zipEntry.isDirectory()) {
  742.                     continue; // directory
  743.                 }
  744.                 else {
  745.                     FileDataSource fds = new FileDataSource(entryName);
  746.                     String nome = fds.getName();
  747.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  748.                     tipo = tipo.toUpperCase();
  749.                     //System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
  750.                    
  751.                     //System.out.println("ENTRY ["+entryName+"]");
  752.                     if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  753.                         //System.out.println("MANIFESTO!");
  754.                         InputStream inputStream = zip.getInputStream(zipEntry);
  755.                         AccordoServizio manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoAS(this.log,inputStream);
  756.                         parteSpecifica = manifesto.getParteSpecifica();
  757.                         if(parteSpecifica==null){
  758.                             throw new Exception("Manifest Parte Specifica non presente");
  759.                         }
  760.                         inputStream.close();
  761.                         archivio.setManifesto(manifesto);
  762.                         break;
  763.                     }
  764.                 }
  765.             }
  766.             if(parteSpecifica==null){
  767.                 throw new Exception("Manifest Parte Specifica non presente");
  768.             }
  769.            
  770.            
  771.             /* Lettura informazioni dal manifest */
  772.             String interfacciaPortiAccessoErogatore = Costanti.SPECIFICA_PORTI_ACCESSO_EROGATORE_WSDL;
  773.             String interfacciaPortiAccessoFruitore = Costanti.SPECIFICA_PORTI_ACCESSO_FRUITORE_WSDL;
  774.             if(parteSpecifica.getSpecificaPortiAccesso()!=null){
  775.                 SpecificaPortiAccesso portiAccesso = parteSpecifica.getSpecificaPortiAccesso();
  776.                 if(portiAccesso.getPortiAccessoErogatore()!=null){
  777.                     interfacciaPortiAccessoErogatore = ZipUtilities.getBaseName(portiAccesso.getPortiAccessoErogatore().getBase());
  778.                 }
  779.                 if(portiAccesso.getPortiAccessoFruitore()!=null){
  780.                     interfacciaPortiAccessoFruitore = ZipUtilities.getBaseName(portiAccesso.getPortiAccessoFruitore().getBase());
  781.                 }
  782.             }
  783.            
  784.            
  785.             /* Identificazione altri campi */
  786.             e = zip.entries();
  787.             while(e.hasMoreElements()) {
  788.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  789.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
  790.                                
  791.                 //System.out.println("FILE NAME:  "+entryName);
  792.                 //System.out.println("SIZE:  "+entry.getSize());
  793.                    
  794.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  795.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  796.                 if(rootDir==null){
  797.                     // Calcolo ROOT DIR
  798.                     rootDir=ZipUtilities.getRootDir(entryName);
  799.                 }
  800.                
  801.                 if(zipEntry.isDirectory()) {
  802.                     continue; // directory
  803.                 }
  804.                 else {
  805.                     FileDataSource fds = new FileDataSource(entryName);
  806.                     String nome = fds.getName();
  807.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  808.                     tipo = tipo.toUpperCase();
  809.                     //System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
  810.                    
  811.                     //System.out.println("ENTRY ["+entryName+"]");
  812.                     if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
  813.                         //System.out.println(".PROJECT: NIENTE DA GESTIRE");
  814.                     }  
  815.                     else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
  816.                         //System.out.println("FIRMA!");
  817.                         Firma firma = new Firma();
  818.                         archivio.setFirma(firma);
  819.                     }          
  820.                     else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  821.                         //System.out.println("MANIFESTO SCARTO!");
  822.                     }
  823.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR)) ){
  824.                         InputStream inputStream = zip.getInputStream(zipEntry);
  825.                         Documento d = new Documento(nome,tipo,inputStream);
  826.                         inputStream.close();
  827.                         String dir = rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar;
  828.                         if((dir+interfacciaPortiAccessoErogatore).equals(entryName)){
  829.                             //System.out.println("PORTI ACCESSO EROGATORE WSBL!");
  830.                             archivio.setPortiAccessoErogatore(d);
  831.                         }
  832.                         else if((dir+interfacciaPortiAccessoFruitore).equals(entryName)){
  833.                             //System.out.println("PORTI ACCESSO FRUITORE WSBL!");
  834.                             archivio.setPortiAccessoFruitore(d);
  835.                         }
  836.                     }
  837.                     else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
  838.                         //System.out.println("ALLEGATO");
  839.                         InputStream inputStream = zip.getInputStream(zipEntry);
  840.                         Documento d = new Documento(nome,tipo,inputStream);
  841.                         inputStream.close();
  842.                         archivio.addAllegato(d);
  843.                     }
  844.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
  845.                         //System.out.println("SPECIFICA SEMIFORMALE");
  846.                         InputStream inputStream = zip.getInputStream(zipEntry);
  847.                         Documento d = new Documento(nome,tipo,inputStream);
  848.                         inputStream.close();
  849.                         archivio.addSpecificaSemiformale(d);
  850.                     }
  851.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_LIVELLI_SERVIZIO_DIR)) ){
  852.                         //System.out.println("SPECIFICA LIVELLO SERVIZIO");
  853.                         InputStream inputStream = zip.getInputStream(zipEntry);
  854.                         Documento d = new Documento(nome,tipo,inputStream);
  855.                         inputStream.close();
  856.                         archivio.addSpecificaLivelloServizio(d);
  857.                     }
  858.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SICUREZZA_DIR)) ){
  859.                         //System.out.println("SPECIFICA SICUREZZA");
  860.                         InputStream inputStream = zip.getInputStream(zipEntry);
  861.                         Documento d = new Documento(nome,tipo,inputStream);
  862.                         inputStream.close();
  863.                         archivio.addSpecificaSicurezza(d);
  864.                     }
  865.                 }
  866.                
  867.    
  868.             }
  869.            
  870.             // check
  871.             if(archivio.getManifesto()==null){
  872.                 throw new Exception("Manifesto non presente");
  873.             }
  874.            
  875.             // Metto a posto i tipi (le estensioni dei files possono essere diverse)
  876.             if(archivio.getManifesto().getSpecificaSemiformale()!=null){
  877.                 for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  878.                     String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
  879.                     String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
  880.                     for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
  881.                         if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
  882.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
  883.                             archivio.getSpecificaSemiformale(j).setTipo(tipo);
  884.                         }
  885.                     }
  886.                 }
  887.             }
  888.             if(archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio()!=null){
  889.                 for(int i=0; i<archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio().sizeDocumentoLivelloServizioList(); i++){
  890.                     String fileName = archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio().getDocumentoLivelloServizio(i).getBase();
  891.                     String tipo = archivio.getManifesto().getParteSpecifica().getSpecificaLivelliServizio().getDocumentoLivelloServizio(i).getTipo();
  892.                     for(int j=0; j<archivio.sizeSpecificheLivelliServizio(); j++){
  893.                         if(fileName.equals(archivio.getSpecificaLivelloServizio(j).getNome())){
  894.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaLivelloServizio(j).getTipo()+"] a ["+tipo+"]");
  895.                             archivio.getSpecificaLivelloServizio(j).setTipo(tipo);
  896.                         }
  897.                     }
  898.                 }
  899.             }
  900.             if(archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza()!=null){
  901.                 for(int i=0; i<archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza().sizeDocumentoSicurezzaList(); i++){
  902.                     String fileName = archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza().getDocumentoSicurezza(i).getBase();
  903.                     String tipo = archivio.getManifesto().getParteSpecifica().getSpecificaSicurezza().getDocumentoSicurezza(i).getTipo();
  904.                     for(int j=0; j<archivio.sizeSpecificheSicurezza(); j++){
  905.                         if(fileName.equals(archivio.getSpecificaSicurezza(j).getNome())){
  906.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaSicurezza(j).getTipo()+"] a ["+tipo+"]");
  907.                             archivio.getSpecificaSicurezza(j).setTipo(tipo);
  908.                         }
  909.                     }
  910.                 }
  911.             }
  912.            
  913.             return archivio;

  914.         }catch(Exception e){
  915.             throw new XMLUtilsException(e.getMessage(),e);
  916.         }
  917.     }
  918.    
  919.    
  920.    
  921.    
  922.    
  923.    
  924.    
  925.     /* ----- Marshall dell'accordo di servizio parte specifica----- */
  926.     public void generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto,File file) throws XMLUtilsException{
  927.         FileOutputStream fout = null;
  928.         try{
  929.             fout = new FileOutputStream(file);
  930.             generateAccordoServizioParteSpecifica(manifesto,fout);
  931.             fout.flush();
  932.         }catch(Exception e){
  933.             throw new XMLUtilsException(e.getMessage(),e);
  934.         }finally{
  935.             try{
  936.                 if(fout!=null)
  937.                     fout.close();
  938.             }catch(Exception eClose){
  939.                 // close
  940.             }
  941.         }
  942.     }
  943.    
  944.     public void generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto,String fileName) throws XMLUtilsException{
  945.         FileOutputStream fout = null;
  946.         try{
  947.             fout = new FileOutputStream(fileName);
  948.             generateAccordoServizioParteSpecifica(manifesto,fout);
  949.             fout.flush();
  950.         }catch(Exception e){
  951.             throw new XMLUtilsException(e.getMessage(),e);
  952.         }finally{
  953.             try{
  954.                 if(fout!=null)
  955.                     fout.close();
  956.             }catch(Exception eClose){
  957.                 // close
  958.             }
  959.         }
  960.     }
  961.    
  962.     public byte[] generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto) throws XMLUtilsException{
  963.         try{
  964.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  965.             generateAccordoServizioParteSpecifica(manifesto,bout);
  966.             bout.flush();
  967.             bout.close();
  968.             return bout.toByteArray();
  969.         }catch(Exception e){
  970.             throw new XMLUtilsException(e.getMessage(),e);
  971.         }
  972.     }

  973.     public void generateAccordoServizioParteSpecifica(AccordoServizioParteSpecifica manifesto,OutputStream out) throws XMLUtilsException{
  974.        
  975.         boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
  976.         boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
  977.         boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
  978.        
  979.         ZipOutputStream zipOut = null;
  980.         try{
  981.             zipOut = new ZipOutputStream(out);

  982.             String rootDir = "";
  983.             // Il codice dopo fissa il problema di inserire una directory nel package.
  984.             // Commentare la riga sotto per ripristinare il vecchio comportamento.
  985.             rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
  986.            
  987.             // .project
  988.             if(generaSICAClientProjectFile){
  989.                 String nomeProgettoEclipse =  manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_SPECIFICA;
  990.                 String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
  991.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
  992.                 zipOut.write(projectContenuto.getBytes());
  993.             }
  994.            
  995.             // firma
  996.             if(manifesto.getFirma()!=null){
  997.                 byte[] firma = manifesto.getFirma().getBytes();
  998.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
  999.                 zipOut.write(firma);
  1000.             }
  1001.            
  1002.             // manifest
  1003.             byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoAS(manifesto.getManifesto(),includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata);
  1004.             zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
  1005.             zipOut.write(manifestoBytes);
  1006.            
  1007.             // Specifica Porti Accesso
  1008.             boolean specificaPortiAccesso = false;
  1009.             if(manifesto.getPortiAccessoErogatore()!=null){
  1010.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar+Costanti.SPECIFICA_PORTI_ACCESSO_EROGATORE_WSDL));
  1011.                 zipOut.write(manifesto.getPortiAccessoErogatore().getContenuto());
  1012.                 specificaPortiAccesso = true;
  1013.             }
  1014.             if(manifesto.getPortiAccessoFruitore()!=null){
  1015.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar+Costanti.SPECIFICA_PORTI_ACCESSO_FRUITORE_WSDL));
  1016.                 zipOut.write(manifesto.getPortiAccessoFruitore().getContenuto());
  1017.                 specificaPortiAccesso = true;
  1018.             }
  1019.             if(!specificaPortiAccesso){
  1020.                 // La directory deve cmq esistere, al massimo sara' vuota
  1021.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_PORTI_ACCESSO_DIR+File.separatorChar));
  1022.             }
  1023.            
  1024.             // Allegati
  1025.             boolean allegati = manifesto.sizeAllegati()>0;
  1026.             for(int i=0; i<manifesto.sizeAllegati(); i++){
  1027.                 Documento allegato = manifesto.getAllegato(i);
  1028.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
  1029.                 zipOut.write(allegato.getContenuto());
  1030.             }
  1031.             if(!allegati){
  1032.                 // La directory deve cmq esistere, al massimo sara' vuota
  1033.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
  1034.             }
  1035.            
  1036.             // Specifiche Livelli Servizio
  1037.             boolean specificheLivelliServizio = manifesto.sizeSpecificheLivelliServizio()>0;
  1038.             for(int i=0; i<manifesto.sizeSpecificheLivelliServizio(); i++){
  1039.                 Documento doc = manifesto.getSpecificaLivelloServizio(i);
  1040.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_LIVELLI_SERVIZIO_DIR+File.separatorChar+doc.getNome()));
  1041.                 zipOut.write(doc.getContenuto());
  1042.             }
  1043.             if(!specificheLivelliServizio){
  1044.                 // La directory deve cmq esistere, al massimo sara' vuota
  1045.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_LIVELLI_SERVIZIO_DIR+File.separatorChar));
  1046.             }
  1047.            
  1048.             // Specifiche semiformali
  1049.             boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
  1050.             for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
  1051.                 Documento doc = manifesto.getSpecificaSemiformale(i);
  1052.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
  1053.                 zipOut.write(doc.getContenuto());
  1054.             }
  1055.             if(!specificheSemiformali){
  1056.                 // La directory deve cmq esistere, al massimo sara' vuota
  1057.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
  1058.             }
  1059.            
  1060.             // Specifiche sicurezza
  1061.             boolean specificheSicurezza = manifesto.sizeSpecificheSicurezza()>0;
  1062.             for(int i=0; i<manifesto.sizeSpecificheSicurezza(); i++){
  1063.                 Documento doc = manifesto.getSpecificaSicurezza(i);
  1064.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SICUREZZA_DIR+File.separatorChar+doc.getNome()));
  1065.                 zipOut.write(doc.getContenuto());
  1066.             }
  1067.             if(!specificheSicurezza){
  1068.                 // La directory deve cmq esistere, al massimo sara' vuota
  1069.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SICUREZZA_DIR+File.separatorChar));
  1070.             }
  1071.            
  1072.             zipOut.flush();

  1073.         }catch(Exception e){
  1074.             throw new XMLUtilsException(e.getMessage(),e);
  1075.         }finally{
  1076.             try{
  1077.                 if(zipOut!=null)
  1078.                     zipOut.close();
  1079.             }catch(Exception eClose){
  1080.                 // close
  1081.             }
  1082.         }
  1083.     }
  1084.    
  1085.    
  1086.    
  1087.    
  1088.    
  1089.    
  1090.    
  1091.    
  1092.    
  1093.    
  1094.    
  1095.    
  1096.    
  1097.    
  1098.    
  1099.    
  1100.    
  1101.    
  1102.    
  1103.    
  1104.    
  1105.    
  1106.     /* ----- Unmarshall Manifest dell'accordo di cooperazione ----- */
  1107.    
  1108.     /**
  1109.      * Ritorna la rappresentazione java di un accordo di cooperazione
  1110.      *
  1111.      * @param zip byte[]
  1112.      * @return ManifestoAC
  1113.      * @throws XMLUtilsException
  1114.      */
  1115.     public AccordoCooperazione getAccordoCooperazione(byte[] zip) throws XMLUtilsException{
  1116.         File tmp = null;
  1117.         FileOutputStream fout = null;
  1118.         try{
  1119.             tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_COOPERAZIONE);
  1120.            
  1121.             fout = new FileOutputStream(tmp);
  1122.             fout.write(zip);
  1123.             fout.flush();
  1124.             fout.close();
  1125.            
  1126.             return getAccordoCooperazione(tmp);
  1127.            
  1128.         }catch(Exception e){
  1129.             throw new XMLUtilsException(e.getMessage(),e);
  1130.         }finally{
  1131.             try{
  1132.                 if(fout!=null)
  1133.                     fout.close();
  1134.             }catch(Exception eClose){
  1135.                 // ignore
  1136.             }
  1137.             try {
  1138.                 if(tmp!=null) {
  1139.                     if(!tmp.delete()) {
  1140.                         // ignore
  1141.                     }
  1142.                 }
  1143.             }catch(Exception eClose){
  1144.                 // close
  1145.             }
  1146.         }
  1147.        
  1148.     }
  1149.    
  1150.     /**
  1151.      * Ritorna la rappresentazione java di un accordo di cooperazione
  1152.      *
  1153.      * @param fileName File
  1154.      * @return ManifestoAC
  1155.      * @throws XMLUtilsException
  1156.      */
  1157.     public AccordoCooperazione getAccordoCooperazione(String fileName) throws XMLUtilsException{
  1158.         return getAccordoCooperazione(new File(fileName));
  1159.     }
  1160.    
  1161.     /**
  1162.      * Ritorna la rappresentazione java di un accordo di cooperazione
  1163.      *
  1164.      * @param zip File
  1165.      * @return ManifestoAC
  1166.      * @throws XMLUtilsException
  1167.      */
  1168.     public AccordoCooperazione getAccordoCooperazione(File zip) throws XMLUtilsException{
  1169.         ZipFile zipFile = null;
  1170.         try{
  1171.             zipFile = new ZipFile(zip);
  1172.             return getAccordoCooperazione(zipFile);
  1173.         }catch(Exception e){
  1174.             throw new XMLUtilsException(e.getMessage(),e);
  1175.         }finally{
  1176.             try{
  1177.                 if(zipFile!=null)
  1178.                     zipFile.close();
  1179.             }catch(Exception eClose){
  1180.                 // close
  1181.             }
  1182.         }
  1183.     }
  1184.        
  1185.     /**
  1186.      * Ritorna la rappresentazione java di un accordo di cooperazione
  1187.      *
  1188.      * @param m InputStream
  1189.      * @return ManifestoAC
  1190.      * @throws XMLUtilsException
  1191.      */
  1192.     public AccordoCooperazione getAccordoCooperazione(InputStream m) throws XMLUtilsException{
  1193.         ByteArrayOutputStream bout = null;
  1194.         try{
  1195.             bout = new ByteArrayOutputStream();
  1196.             byte[]read = new byte[1024];
  1197.             int letti = 0;
  1198.             while( (letti=m.read(read))>=0 ){
  1199.                 bout.write(read, 0, letti);
  1200.             }
  1201.             bout.flush();
  1202.             bout.close();
  1203.             m.close();
  1204.            
  1205.             return getAccordoCooperazione(bout.toByteArray());
  1206.            
  1207.         }catch(Exception e){
  1208.             throw new XMLUtilsException(e.getMessage(),e);
  1209.         }finally{
  1210.             try{
  1211.                 if(bout!=null){
  1212.                     bout.close();
  1213.                 }
  1214.             }catch(Exception eClose){
  1215.                 // close
  1216.             }
  1217.         }
  1218.     }
  1219.    
  1220.     /**
  1221.      * Ritorna la rappresentazione java di un accordo di cooperazione
  1222.      *
  1223.      * @param zip File
  1224.      * @return ManifestoAC
  1225.      * @throws XMLUtilsException
  1226.      */
  1227.     public AccordoCooperazione getAccordoCooperazione(ZipFile zip) throws XMLUtilsException{
  1228.         try{
  1229.             AccordoCooperazione archivio = new AccordoCooperazione();
  1230.            
  1231.             String rootDir = null;
  1232.            
  1233.             Enumeration<?> e = zip.entries();
  1234.             while(e.hasMoreElements()) {
  1235.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  1236.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
  1237.                                
  1238.                 //System.out.println("FILE NAME:  "+entryName);
  1239.                 //System.out.println("SIZE:  "+entry.getSize());
  1240.                    
  1241.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  1242.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  1243.                 if(rootDir==null){
  1244.                     // Calcolo ROOT DIR
  1245.                     rootDir=ZipUtilities.getRootDir(entryName);
  1246.                 }
  1247.                
  1248.                 if(zipEntry.isDirectory()) {
  1249.                     continue; // directory
  1250.                 }
  1251.                 else {
  1252.                     FileDataSource fds = new FileDataSource(entryName);
  1253.                     String nome = fds.getName();
  1254.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  1255.                     tipo = tipo.toUpperCase();
  1256.                     //System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
  1257.                    
  1258.                     //System.out.println("ENTRY ["+entryName+"]");
  1259.                     if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
  1260.                         //System.out.println(".PROJECT: NIENTE DA GESTIRE");
  1261.                     }  
  1262.                     else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
  1263.                         //System.out.println("FIRMA!");
  1264.                         Firma firma = new Firma();
  1265.                         archivio.setFirma(firma);
  1266.                     }          
  1267.                     else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  1268.                         //System.out.println("MANIFESTO!");
  1269.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1270.                         it.gov.spcoop.sica.manifest.AccordoCooperazione manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoAC(this.log,inputStream);
  1271.                         inputStream.close();
  1272.                         archivio.setManifesto(manifesto);
  1273.                     }
  1274.                     else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
  1275.                         //System.out.println("ALLEGATO");
  1276.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1277.                         Documento d = new Documento(nome,tipo,inputStream);
  1278.                         inputStream.close();
  1279.                         archivio.addAllegato(d);
  1280.                     }
  1281.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
  1282.                         //System.out.println("SPECIFICA SEMIFORMALE");
  1283.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1284.                         Documento d = new Documento(nome,tipo,inputStream);
  1285.                         inputStream.close();
  1286.                         archivio.addSpecificaSemiformale(d);
  1287.                     }
  1288.                 }
  1289.                
  1290.    
  1291.             }
  1292.            
  1293.             // check
  1294.             if(archivio.getManifesto()==null){
  1295.                 throw new Exception("Manifesto non presente");
  1296.             }
  1297.            
  1298.             // Metto a posto i tipi (le estensioni dei files possono essere diverse)
  1299.             if(archivio.getManifesto().getSpecificaSemiformale()!=null){
  1300.                 for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  1301.                     String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
  1302.                     String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
  1303.                     for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
  1304.                         if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
  1305.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
  1306.                             archivio.getSpecificaSemiformale(j).setTipo(tipo);
  1307.                         }
  1308.                     }
  1309.                 }
  1310.             }
  1311.            
  1312.             return archivio;

  1313.         }catch(Exception e){
  1314.             throw new XMLUtilsException(e.getMessage(),e);
  1315.         }
  1316.     }
  1317.    
  1318.    
  1319.    
  1320.    
  1321.    
  1322.    
  1323.    
  1324.     /* ----- Marshall dell'accordo di cooperazione ----- */
  1325.     public void generateAccordoCooperazione(AccordoCooperazione manifesto,File file) throws XMLUtilsException{
  1326.         FileOutputStream fout = null;
  1327.         try{
  1328.             fout = new FileOutputStream(file);
  1329.             generateAccordoCooperazione(manifesto,fout);
  1330.             fout.flush();
  1331.         }catch(Exception e){
  1332.             throw new XMLUtilsException(e.getMessage(),e);
  1333.         }finally{
  1334.             try{
  1335.                 if(fout!=null)
  1336.                     fout.close();
  1337.             }catch(Exception eClose){
  1338.                 // close
  1339.             }
  1340.         }
  1341.     }
  1342.    
  1343.     public void generateAccordoCooperazione(AccordoCooperazione manifesto,String fileName) throws XMLUtilsException{
  1344.         FileOutputStream fout = null;
  1345.         try{
  1346.             fout = new FileOutputStream(fileName);
  1347.             generateAccordoCooperazione(manifesto,fout);
  1348.             fout.flush();
  1349.         }catch(Exception e){
  1350.             throw new XMLUtilsException(e.getMessage(),e);
  1351.         }finally{
  1352.             try{
  1353.                 if(fout!=null)
  1354.                     fout.close();
  1355.             }catch(Exception eClose){
  1356.                 // close
  1357.             }
  1358.         }
  1359.     }
  1360.    
  1361.     public byte[] generateAccordoCooperazione(AccordoCooperazione manifesto) throws XMLUtilsException{
  1362.         try{
  1363.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  1364.             generateAccordoCooperazione(manifesto,bout);
  1365.             bout.flush();
  1366.             bout.close();
  1367.             return bout.toByteArray();
  1368.         }catch(Exception e){
  1369.             throw new XMLUtilsException(e.getMessage(),e);
  1370.         }
  1371.     }

  1372.     public void generateAccordoCooperazione(AccordoCooperazione manifesto,OutputStream out) throws XMLUtilsException{
  1373.        
  1374.         boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
  1375.         boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
  1376.         boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
  1377.        
  1378.         ZipOutputStream zipOut = null;
  1379.         try{
  1380.             zipOut = new ZipOutputStream(out);

  1381.             String rootDir = "";
  1382.             // Il codice dopo fissa il problema di inserire una directory nel package.
  1383.             // Commentare la riga sotto per ripristinare il vecchio comportamento.
  1384.             rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
  1385.            
  1386.             // .project
  1387.             if(generaSICAClientProjectFile){
  1388.                 String nomeProgettoEclipse =  manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_COOPERAZIONE;
  1389.                 String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
  1390.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
  1391.                 zipOut.write(projectContenuto.getBytes());
  1392.             }
  1393.            
  1394.             // firma
  1395.             if(manifesto.getFirma()!=null){
  1396.                 byte[] firma = manifesto.getFirma().getBytes();
  1397.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
  1398.                 zipOut.write(firma);
  1399.             }
  1400.            
  1401.             // manifest
  1402.             byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoAC(manifesto.getManifesto(),includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata);
  1403.             zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
  1404.             zipOut.write(manifestoBytes);
  1405.            
  1406.             // Allegati
  1407.             boolean allegati = manifesto.sizeAllegati()>0;
  1408.             for(int i=0; i<manifesto.sizeAllegati(); i++){
  1409.                 Documento allegato = manifesto.getAllegato(i);
  1410.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
  1411.                 zipOut.write(allegato.getContenuto());
  1412.             }
  1413.             if(!allegati){
  1414.                 // La directory deve cmq esistere, al massimo sara' vuota
  1415.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
  1416.             }
  1417.            
  1418.             // Specifiche semiformali
  1419.             boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
  1420.             for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
  1421.                 Documento doc = manifesto.getSpecificaSemiformale(i);
  1422.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
  1423.                 zipOut.write(doc.getContenuto());
  1424.             }
  1425.             if(!specificheSemiformali){
  1426.                 // La directory deve cmq esistere, al massimo sara' vuota
  1427.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
  1428.             }
  1429.            
  1430.             zipOut.flush();

  1431.         }catch(Exception e){
  1432.             throw new XMLUtilsException(e.getMessage(),e);
  1433.         }finally{
  1434.             try{
  1435.                 if(zipOut!=null)
  1436.                     zipOut.close();
  1437.             }catch(Exception eClose){
  1438.                 // close
  1439.             }
  1440.         }
  1441.     }
  1442.    
  1443.    
  1444.    
  1445.    
  1446.    
  1447.    
  1448.    
  1449.    
  1450.    
  1451.    
  1452.    
  1453.    
  1454.    
  1455.    
  1456.    
  1457.    
  1458.    
  1459.    
  1460.    
  1461.     /* ----- Unmarshall Manifest dell'accordo di servizio composto ----- */
  1462.    
  1463.     /**
  1464.      * Ritorna la rappresentazione java di un accordo di servizio composto
  1465.      *
  1466.      * @param zip byte[]
  1467.      * @return ManifestoSC
  1468.      * @throws XMLUtilsException
  1469.      */
  1470.     public  AccordoServizioComposto getAccordoServizioComposto(byte[] zip) throws XMLUtilsException{
  1471.         File tmp = null;
  1472.         FileOutputStream fout = null;
  1473.         try{
  1474.             tmp = FileSystemUtilities.createTempFile("sica", Costanti.ESTENSIONE_ACCORDO_SERVIZIO_COMPOSTO);
  1475.            
  1476.             fout = new FileOutputStream(tmp);
  1477.             fout.write(zip);
  1478.             fout.flush();
  1479.             fout.close();
  1480.            
  1481.             return getAccordoServizioComposto(tmp);
  1482.            
  1483.         }catch(Exception e){
  1484.             throw new XMLUtilsException(e.getMessage(),e);
  1485.         }finally{
  1486.             try{
  1487.                 if(fout!=null)
  1488.                     fout.close();
  1489.             }catch(Exception eClose){
  1490.                 // ignore
  1491.             }
  1492.             try {
  1493.                 if(tmp!=null) {
  1494.                     if(!tmp.delete()) {
  1495.                         // ignore
  1496.                     }
  1497.                 }
  1498.             }catch(Exception eClose){
  1499.                 // close
  1500.             }
  1501.         }
  1502.        
  1503.     }
  1504.    
  1505.     /**
  1506.      * Ritorna la rappresentazione java di un accordo di servizio composto
  1507.      *
  1508.      * @param fileName File
  1509.      * @return ManifestoSC
  1510.      * @throws XMLUtilsException
  1511.      */
  1512.     public AccordoServizioComposto getAccordoServizioComposto(String fileName) throws XMLUtilsException{
  1513.         return getAccordoServizioComposto(new File(fileName));
  1514.     }
  1515.    
  1516.     /**
  1517.      * Ritorna la rappresentazione java di un accordo di servizio composto
  1518.      *
  1519.      * @param zip File
  1520.      * @return ManifestoSC
  1521.      * @throws XMLUtilsException
  1522.      */
  1523.     public AccordoServizioComposto getAccordoServizioComposto(File zip) throws XMLUtilsException{
  1524.         ZipFile zipFile = null;
  1525.         try{
  1526.             zipFile = new ZipFile(zip);
  1527.             return getAccordoServizioComposto(zipFile);
  1528.         }catch(Exception e){
  1529.             throw new XMLUtilsException(e.getMessage(),e);
  1530.         }finally{
  1531.             try{
  1532.                 if(zipFile!=null)
  1533.                     zipFile.close();
  1534.             }catch(Exception eClose){
  1535.                 // close
  1536.             }
  1537.         }
  1538.     }
  1539.        
  1540.     /**
  1541.      * Ritorna la rappresentazione java di un accordo di servizio composto
  1542.      *
  1543.      * @param m InputStream
  1544.      * @return ManifestoSC
  1545.      * @throws XMLUtilsException
  1546.      */
  1547.     public AccordoServizioComposto getAccordoServizioComposto(InputStream m) throws XMLUtilsException{
  1548.         ByteArrayOutputStream bout = null;
  1549.         try{
  1550.             bout = new ByteArrayOutputStream();
  1551.             byte[]read = new byte[1024];
  1552.             int letti = 0;
  1553.             while( (letti=m.read(read))>=0 ){
  1554.                 bout.write(read, 0, letti);
  1555.             }
  1556.             bout.flush();
  1557.             bout.close();
  1558.             m.close();
  1559.            
  1560.             return getAccordoServizioComposto(bout.toByteArray());
  1561.            
  1562.         }catch(Exception e){
  1563.             throw new XMLUtilsException(e.getMessage(),e);
  1564.         }finally{
  1565.             try{
  1566.                 if(bout!=null){
  1567.                     bout.close();
  1568.                 }
  1569.             }catch(Exception eClose){
  1570.                 // close
  1571.             }
  1572.         }
  1573.     }
  1574.    
  1575.     /**
  1576.      * Ritorna la rappresentazione java di un accordo di servizio composto
  1577.      *
  1578.      * @param zip File
  1579.      * @return ManifestoSC
  1580.      * @throws XMLUtilsException
  1581.      */
  1582.     public AccordoServizioComposto getAccordoServizioComposto(ZipFile zip) throws XMLUtilsException{
  1583.         try{
  1584.             AccordoServizioComposto archivio = new AccordoServizioComposto();
  1585.            
  1586.             String rootDir = null;
  1587.            
  1588.             /* Primo giro per catturare il Manifest */
  1589.             ServizioComposto manifesto = null;
  1590.             Enumeration<?> e = zip.entries();
  1591.             while(e.hasMoreElements()) {
  1592.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  1593.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());          
  1594.                
  1595.                 //System.out.println("FILE NAME:  "+entryName);
  1596.                 //System.out.println("SIZE:  "+entry.getSize());
  1597.                    
  1598.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  1599.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  1600.                 if(rootDir==null){
  1601.                     // Calcolo ROOT DIR
  1602.                     rootDir=ZipUtilities.getRootDir(entryName);
  1603.                 }
  1604.                
  1605.                 if(zipEntry.isDirectory()) {
  1606.                     continue; // directory
  1607.                 }
  1608.                 else {
  1609.                     FileDataSource fds = new FileDataSource(entryName);
  1610.                     String nome = fds.getName();
  1611.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  1612.                     tipo = tipo.toUpperCase();
  1613.                     //System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
  1614.                    
  1615.                     //System.out.println("ENTRY ["+entryName+"]");
  1616.                     if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  1617.                         //System.out.println("MANIFESTO!");
  1618.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1619.                         manifesto = it.gov.spcoop.sica.manifest.driver.XMLUtils.getManifestoSC(this.log,inputStream);
  1620.                         inputStream.close();
  1621.                         archivio.setManifesto(manifesto);
  1622.                         break;
  1623.                     }
  1624.                 }
  1625.             }
  1626.             if(manifesto==null){
  1627.                 throw new Exception("Manifest ServizioComposto non presente");
  1628.             }
  1629.            
  1630.            
  1631.             /* Lettura informazioni dal manifest */
  1632.             String interfacciaConcettuale = Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL;
  1633.             String interfaccialogicoErogatore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL;
  1634.             String interfaccialogicoFruitore = Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL;
  1635.             String conversazioneConcettuale = Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL;
  1636.             String conversazionelogicoErogatore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL;
  1637.             String conversazionelogicoFruitore = Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL;
  1638.             if(manifesto.getSpecificaInterfaccia()!=null){
  1639.                 SpecificaInterfaccia interfaccia = manifesto.getSpecificaInterfaccia();
  1640.                 if(interfaccia.getInterfacciaConcettuale()!=null){
  1641.                     interfacciaConcettuale = ZipUtilities.getBaseName(interfaccia.getInterfacciaConcettuale().getBase());
  1642.                 }
  1643.                 if(interfaccia.getInterfacciaLogicaLatoErogatore()!=null){
  1644.                     interfaccialogicoErogatore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoErogatore().getBase());
  1645.                 }
  1646.                 if(interfaccia.getInterfacciaLogicaLatoFruitore()!=null){
  1647.                     interfaccialogicoFruitore = ZipUtilities.getBaseName(interfaccia.getInterfacciaLogicaLatoFruitore().getBase());
  1648.                 }
  1649.             }
  1650.             if(manifesto.getSpecificaConversazione()!=null){
  1651.                 SpecificaConversazione conversazione = manifesto.getSpecificaConversazione();
  1652.                 if(conversazione.getConversazioneConcettuale()!=null){
  1653.                     conversazioneConcettuale = ZipUtilities.getBaseName(conversazione.getConversazioneConcettuale().getBase());
  1654.                 }
  1655.                 if(conversazione.getConversazioneLogicaLatoErogatore()!=null){
  1656.                     conversazionelogicoErogatore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoErogatore().getBase());
  1657.                 }
  1658.                 if(conversazione.getConversazioneLogicaLatoFruitore()!=null){
  1659.                     conversazionelogicoFruitore = ZipUtilities.getBaseName(conversazione.getConversazioneLogicaLatoFruitore().getBase());
  1660.                 }
  1661.             }
  1662.            
  1663.            
  1664.             /* Identificazione altri campi */
  1665.             e = zip.entries();
  1666.             while(e.hasMoreElements()) {
  1667.                 ZipEntry zipEntry = (ZipEntry)e.nextElement();
  1668.                 String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
  1669.                                
  1670.                 //System.out.println("FILE NAME:  "+entryName);
  1671.                 //System.out.println("SIZE:  "+entry.getSize());
  1672.                    
  1673.                 // Il codice dopo fissa il problema di inserire una directory nel package.
  1674.                 // Commentare la riga sotto per ripristinare il vecchio comportamento.
  1675.                 if(rootDir==null){
  1676.                     // Calcolo ROOT DIR
  1677.                     rootDir=ZipUtilities.getRootDir(entryName);
  1678.                 }
  1679.                
  1680.                 if(zipEntry.isDirectory()) {
  1681.                     continue; // directory
  1682.                 }
  1683.                 else {
  1684.                     FileDataSource fds = new FileDataSource(entryName);
  1685.                     String nome = fds.getName();
  1686.                     String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
  1687.                     tipo = tipo.toUpperCase();
  1688.                     //System.out.println("NAME["+nome+"] TIPO["+tipo+"]");
  1689.                    
  1690.                     //System.out.println("ENTRY ["+entryName+"]");
  1691.                     if((rootDir+Costanti.PROJECT_CLIENT_SICA).equals(entryName)){
  1692.                         //System.out.println(".PROJECT: NIENTE DA GESTIRE");
  1693.                     }  
  1694.                     else if((rootDir+Costanti.FIRMA_XML).equals(entryName)){
  1695.                         //System.out.println("FIRMA!");
  1696.                         Firma firma = new Firma();
  1697.                         archivio.setFirma(firma);
  1698.                     }          
  1699.                     else if((rootDir+Costanti.MANIFESTO_XML).equals(entryName)){
  1700.                         //System.out.println("MANIFESTO SCARTO!");
  1701.                     }
  1702.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR)) ){
  1703.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1704.                         Documento d = new Documento(nome,tipo,inputStream);
  1705.                         inputStream.close();
  1706.                         String dir = rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar;
  1707.                         if((dir+conversazioneConcettuale).equals(entryName)){
  1708.                             //System.out.println("CONVERSAZIONE CONCETTUALE WSBL!");
  1709.                             archivio.setConversazioneConcettuale(d);
  1710.                         }
  1711.                         else if((dir+conversazionelogicoErogatore).equals(entryName)){
  1712.                             //System.out.println("CONVERSAZIONE LOGICA EROGATORE WSBL!");
  1713.                             archivio.setConversazioneLogicaErogatore(d);
  1714.                         }
  1715.                         else if((dir+conversazionelogicoFruitore).equals(entryName)){
  1716.                             //System.out.println("CONVERSAZIONE LOGICA FRUITORE WSBL!");
  1717.                             archivio.setConversazioneLogicaFruitore(d);
  1718.                         }
  1719.                     }
  1720.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR)) ){
  1721.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1722.                         Documento d = new Documento(nome,tipo,inputStream);
  1723.                         inputStream.close();
  1724.                         String dir = rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar;
  1725.                         if((dir+interfacciaConcettuale).equals(entryName)){
  1726.                             //System.out.println("INTERFACCIA CONCETTUALE WSDL!");
  1727.                             archivio.setInterfacciaConcettuale(d);
  1728.                         }
  1729.                         else if((dir+interfaccialogicoErogatore).equals(entryName)){
  1730.                             //System.out.println("INTERFACCIA LOGICA EROGATORE WSDL!");
  1731.                             archivio.setInterfacciaLogicaLatoErogatore(d);
  1732.                         }
  1733.                         else if((dir+interfaccialogicoFruitore).equals(entryName)){
  1734.                             //System.out.println("INTERFACCIA LOGICA FRUITORE WSDL!");
  1735.                             archivio.setInterfacciaLogicaLatoFruitore(d);
  1736.                         }
  1737.                     }
  1738.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_COORDINAMENTO_DIR)) ){
  1739.                         //System.out.println("COORDINAMENTO!");
  1740.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1741.                         Documento d = new Documento(nome,tipo,inputStream);
  1742.                         inputStream.close();
  1743.                         archivio.addSpecificaCoordinamento(d);
  1744.                     }
  1745.                     else if(entryName.startsWith((rootDir+Costanti.ALLEGATI_DIR)) ){
  1746.                         //System.out.println("ALLEGATO");
  1747.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1748.                         Documento d = new Documento(nome,tipo,inputStream);
  1749.                         inputStream.close();
  1750.                         archivio.addAllegato(d);
  1751.                        
  1752.                         // Validazione XSD delle informazioni egov
  1753.                         if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  1754.                             it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  1755.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
  1756.                         }else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  1757.                             it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  1758.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
  1759.                         }
  1760.                     }
  1761.                     else if(entryName.startsWith((rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR)) ){
  1762.                         //System.out.println("SPECIFICA SEMIFORMALE");
  1763.                         InputStream inputStream = zip.getInputStream(zipEntry);
  1764.                         Documento d = new Documento(nome,tipo,inputStream);
  1765.                         inputStream.close();
  1766.                         archivio.addSpecificaSemiformale(d);
  1767.                        
  1768.                         // Validazione XSD delle informazioni egov
  1769.                         if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  1770.                             it.cnipa.collprofiles.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  1771.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpDisabled_childUnqualified());
  1772.                         }else if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(d.getContenuto())){
  1773.                             it.gov.spcoop.sica.wscp.driver.XMLUtils.getDichiarazioneEGov(this.log,d.getContenuto(),
  1774.                                     this.sicaToOpenSPCoopContext.isInformazioniEGov_wscpEnabled_childUnqualified());
  1775.                         }
  1776.                     }
  1777.                 }
  1778.                
  1779.    
  1780.             }
  1781.            
  1782.             // check
  1783.             if(archivio.getManifesto()==null){
  1784.                 throw new Exception("Manifesto non presente");
  1785.             }
  1786.            
  1787.             // Metto a posto i tipi (le estensioni dei files possono essere diverse)
  1788.             if(archivio.getManifesto().getSpecificaSemiformale()!=null){
  1789.                 for(int i=0; i<archivio.getManifesto().getSpecificaSemiformale().sizeDocumentoSemiformaleList(); i++){
  1790.                     String fileName = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getBase();
  1791.                     String tipo = archivio.getManifesto().getSpecificaSemiformale().getDocumentoSemiformale(i).getTipo();
  1792.                     for(int j=0; j<archivio.sizeSpecificheSemiformali(); j++){
  1793.                         if(fileName.equals(archivio.getSpecificaSemiformale(j).getNome())){
  1794.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaSemiformale(j).getTipo()+"] a ["+tipo+"]");
  1795.                             archivio.getSpecificaSemiformale(j).setTipo(tipo);
  1796.                         }
  1797.                     }
  1798.                 }
  1799.             }
  1800.             if(archivio.getManifesto().getSpecificaCoordinamento()!=null){
  1801.                 for(int i=0; i<archivio.getManifesto().getSpecificaCoordinamento().sizeDocumentoCoordinamentoList(); i++){
  1802.                     String fileName = archivio.getManifesto().getSpecificaCoordinamento().getDocumentoCoordinamento(i).getBase();
  1803.                     String tipo = archivio.getManifesto().getSpecificaCoordinamento().getDocumentoCoordinamento(i).getTipo();
  1804.                     for(int j=0; j<archivio.sizeSpecificheCoordinamento(); j++){
  1805.                         if(fileName.equals(archivio.getSpecificaCoordinamento(j).getNome())){
  1806.                             //System.out.println("Metto a posto da ["+archivio.getSpecificaCoordinamento(j).getTipo()+"] a ["+tipo+"]");
  1807.                             archivio.getSpecificaCoordinamento(j).setTipo(tipo);
  1808.                         }
  1809.                     }
  1810.                 }
  1811.             }
  1812.            
  1813.             return archivio;

  1814.         }catch(Exception e){
  1815.             throw new XMLUtilsException(e.getMessage(),e);
  1816.         }
  1817.     }
  1818.    
  1819.    
  1820.    
  1821.    
  1822.    
  1823.    
  1824.    
  1825.     /* ----- Marshall dell'accordo di servizio composto----- */
  1826.     public void generateAccordoServizioComposto(AccordoServizioComposto manifesto,File file) throws XMLUtilsException{
  1827.         FileOutputStream fout = null;
  1828.         try{
  1829.             fout = new FileOutputStream(file);
  1830.             generateAccordoServizioComposto(manifesto,fout);
  1831.             fout.flush();
  1832.         }catch(Exception e){
  1833.             throw new XMLUtilsException(e.getMessage(),e);
  1834.         }finally{
  1835.             try{
  1836.                 if(fout!=null)
  1837.                     fout.close();
  1838.             }catch(Exception eClose){
  1839.                 // close
  1840.             }
  1841.         }
  1842.     }
  1843.    
  1844.     public void generateAccordoServizioComposto(AccordoServizioComposto manifesto,String fileName) throws XMLUtilsException{
  1845.         FileOutputStream fout = null;
  1846.         try{
  1847.             fout = new FileOutputStream(fileName);
  1848.             generateAccordoServizioComposto(manifesto,fout);
  1849.             fout.flush();
  1850.         }catch(Exception e){
  1851.             throw new XMLUtilsException(e.getMessage(),e);
  1852.         }finally{
  1853.             try{
  1854.                 if(fout!=null)
  1855.                     fout.close();
  1856.             }catch(Exception eClose){
  1857.                 // close
  1858.             }
  1859.         }
  1860.     }
  1861.    
  1862.     public byte[] generateAccordoServizioComposto(AccordoServizioComposto manifesto) throws XMLUtilsException{
  1863.         try{
  1864.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  1865.             generateAccordoServizioComposto(manifesto,bout);
  1866.             bout.flush();
  1867.             bout.close();
  1868.             return bout.toByteArray();
  1869.         }catch(Exception e){
  1870.             throw new XMLUtilsException(e.getMessage(),e);
  1871.         }
  1872.     }

  1873.     public void generateAccordoServizioComposto(AccordoServizioComposto manifesto,OutputStream out) throws XMLUtilsException{
  1874.        
  1875.         boolean generaSICAClientProjectFile = this.sicaToOpenSPCoopContext.isSICAClient_generaProject();
  1876.         boolean includiInfoRegistroGenerale = this.sicaToOpenSPCoopContext.isSICAClient_includiInfoRegistroGenerale();
  1877.         boolean lunghezzaNomeAccordoLimitata = this.sicaToOpenSPCoopContext.isSICAClient_nomeAccordo_32CaratteriMax();
  1878.        
  1879.         ZipOutputStream zipOut = null;
  1880.         try{
  1881.             zipOut = new ZipOutputStream(out);

  1882.             String rootDir = "";
  1883.             // Il codice dopo fissa il problema di inserire una directory nel package.
  1884.             // Commentare la riga sotto per ripristinare il vecchio comportamento.
  1885.             rootDir = manifesto.getManifesto().getNome()+File.separatorChar;
  1886.            
  1887.             // .project
  1888.             if(generaSICAClientProjectFile){
  1889.                 String nomeProgettoEclipse =  manifesto.getManifesto().getNome() + "_" + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_COMPOSTO;
  1890.                 String projectContenuto = Costanti.PROJECT_CLIENT_SICA_CONTENUTO.replace(Costanti.PROJECT_CLIENT_SICA_KEY_NOME, nomeProgettoEclipse);
  1891.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.PROJECT_CLIENT_SICA));
  1892.                 zipOut.write(projectContenuto.getBytes());
  1893.             }
  1894.            
  1895.             // firma
  1896.             if(manifesto.getFirma()!=null){
  1897.                 byte[] firma = manifesto.getFirma().getBytes();
  1898.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.FIRMA_XML));
  1899.                 zipOut.write(firma);
  1900.             }
  1901.            
  1902.             // manifest
  1903.             byte[] manifestoBytes = it.gov.spcoop.sica.manifest.driver.XMLUtils.generateManifestoSC(manifesto.getManifesto(),includiInfoRegistroGenerale,lunghezzaNomeAccordoLimitata);
  1904.             zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.MANIFESTO_XML));
  1905.             zipOut.write(manifestoBytes);
  1906.            
  1907.             // Specifica Interfaccia
  1908.             boolean specificaInterfaccia = false;
  1909.             if(manifesto.getInterfacciaConcettuale()!=null){
  1910.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_CONCETTUALE_WSDL));
  1911.                 zipOut.write(manifesto.getInterfacciaConcettuale().getContenuto());
  1912.                 specificaInterfaccia = true;
  1913.             }
  1914.             if(manifesto.getInterfacciaLogicaLatoErogatore()!=null){
  1915.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_EROGATORE_WSDL));
  1916.                 zipOut.write(manifesto.getInterfacciaLogicaLatoErogatore().getContenuto());
  1917.                 specificaInterfaccia = true;
  1918.             }
  1919.             if(manifesto.getInterfacciaLogicaLatoFruitore()!=null){
  1920.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar+Costanti.SPECIFICA_INTERFACCIA_LOGICA_FRUITORE_WSDL));
  1921.                 zipOut.write(manifesto.getInterfacciaLogicaLatoFruitore().getContenuto());
  1922.                 specificaInterfaccia = true;
  1923.             }
  1924.             if(!specificaInterfaccia){
  1925.                 // La directory deve cmq esistere, al massimo sara' vuota
  1926.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_INTERFACCIA_DIR+File.separatorChar));
  1927.             }
  1928.            
  1929.             // Specifica Conversazioni
  1930.             boolean specificaConversazioni = false;
  1931.             if(manifesto.getConversazioneConcettuale()!=null){
  1932.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_CONCETTUALE_WSBL));
  1933.                 zipOut.write(manifesto.getConversazioneConcettuale().getContenuto());
  1934.                 specificaConversazioni = true;
  1935.             }
  1936.             if(manifesto.getConversazioneLogicaErogatore()!=null){
  1937.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_EROGATORE_WSBL));
  1938.                 zipOut.write(manifesto.getConversazioneLogicaErogatore().getContenuto());
  1939.                 specificaConversazioni = true;
  1940.             }
  1941.             if(manifesto.getConversazioneLogicaFruitore()!=null){
  1942.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar+Costanti.SPECIFICA_CONVERSAZIONE_LOGICA_LATO_FRUITORE_WSBL));
  1943.                 zipOut.write(manifesto.getConversazioneLogicaFruitore().getContenuto());
  1944.                 specificaConversazioni = true;
  1945.             }
  1946.             if(!specificaConversazioni){
  1947.                 // La directory deve cmq esistere, al massimo sara' vuota
  1948.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_CONVERSAZIONE_DIR+File.separatorChar));
  1949.             }
  1950.            
  1951.             // SpecificaCoordinamento
  1952.             boolean specificheCoordinameno = manifesto.sizeSpecificheCoordinamento()>0;
  1953.             for(int i=0; i<manifesto.sizeSpecificheCoordinamento(); i++){
  1954.                 Documento doc = manifesto.getSpecificaCoordinamento(i);
  1955.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_COORDINAMENTO_DIR+File.separatorChar+doc.getNome()));
  1956.                 zipOut.write(doc.getContenuto());
  1957.             }
  1958.             if(!specificheCoordinameno){
  1959.                 // La directory deve cmq esistere, al massimo sara' vuota
  1960.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_COORDINAMENTO_DIR+File.separatorChar));
  1961.             }
  1962.            
  1963.             // Allegati
  1964.             boolean allegati = manifesto.sizeAllegati()>0;
  1965.             for(int i=0; i<manifesto.sizeAllegati(); i++){
  1966.                 Documento allegato = manifesto.getAllegato(i);
  1967.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar+allegato.getNome()));
  1968.                 zipOut.write(allegato.getContenuto());
  1969.             }
  1970.             if(!allegati){
  1971.                 // La directory deve cmq esistere, al massimo sara' vuota
  1972.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.ALLEGATI_DIR+File.separatorChar));
  1973.             }
  1974.            
  1975.             // Specifiche semiformali
  1976.             boolean specificheSemiformali = manifesto.sizeSpecificheSemiformali()>0;
  1977.             for(int i=0; i<manifesto.sizeSpecificheSemiformali(); i++){
  1978.                 Documento doc = manifesto.getSpecificaSemiformale(i);
  1979.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar+doc.getNome()));
  1980.                 zipOut.write(doc.getContenuto());
  1981.             }
  1982.             if(!specificheSemiformali){
  1983.                 // La directory deve cmq esistere, al massimo sara' vuota
  1984.                 zipOut.putNextEntry(new ZipEntry(rootDir+Costanti.SPECIFICA_SEMIFORMALE_DIR+File.separatorChar));
  1985.             }
  1986.            
  1987.             zipOut.flush();

  1988.         }catch(Exception e){
  1989.             throw new XMLUtilsException(e.getMessage(),e);
  1990.         }finally{
  1991.             try{
  1992.                 if(zipOut!=null)
  1993.                     zipOut.close();
  1994.             }catch(Exception eClose){
  1995.                 // close
  1996.             }
  1997.         }
  1998.     }
  1999. }