ZIPWriteUtils.java

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

  20. package org.openspcoop2.protocol.basic.archive;

  21. import java.io.ByteArrayOutputStream;
  22. import java.io.File;
  23. import java.io.FileOutputStream;
  24. import java.io.IOException;
  25. import java.io.OutputStream;
  26. import java.lang.reflect.Method;
  27. import java.util.ArrayList;
  28. import java.util.HashMap;
  29. import java.util.List;
  30. import java.util.Map;
  31. import java.util.zip.ZipEntry;
  32. import java.util.zip.ZipOutputStream;

  33. import org.openspcoop2.core.config.Configurazione;
  34. import org.openspcoop2.core.config.PortaApplicativa;
  35. import org.openspcoop2.core.config.PortaDelegata;
  36. import org.openspcoop2.core.config.ServizioApplicativo;
  37. import org.openspcoop2.core.config.driver.ExtendedInfoManager;
  38. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  39. import org.openspcoop2.core.id.IDAccordo;
  40. import org.openspcoop2.core.id.IDAccordoCooperazione;
  41. import org.openspcoop2.core.id.IDServizio;
  42. import org.openspcoop2.core.id.IDSoggetto;
  43. import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
  44. import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
  45. import org.openspcoop2.core.registry.AccordoCooperazione;
  46. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  47. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  48. import org.openspcoop2.core.registry.Azione;
  49. import org.openspcoop2.core.registry.Documento;
  50. import org.openspcoop2.core.registry.Fruitore;
  51. import org.openspcoop2.core.registry.Gruppo;
  52. import org.openspcoop2.core.registry.Operation;
  53. import org.openspcoop2.core.registry.PortType;
  54. import org.openspcoop2.core.registry.PortaDominio;
  55. import org.openspcoop2.core.registry.ProtocolProperty;
  56. import org.openspcoop2.core.registry.Resource;
  57. import org.openspcoop2.core.registry.Ruolo;
  58. import org.openspcoop2.core.registry.Scope;
  59. import org.openspcoop2.generic_project.exception.SerializerException;
  60. import org.openspcoop2.protocol.basic.Costanti;
  61. import org.openspcoop2.protocol.sdk.ProtocolException;
  62. import org.openspcoop2.protocol.sdk.archive.Archive;
  63. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoCooperazione;
  64. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioComposto;
  65. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteComune;
  66. import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
  67. import org.openspcoop2.protocol.sdk.archive.ArchiveActivePolicy;
  68. import org.openspcoop2.protocol.sdk.archive.ArchiveAllarme;
  69. import org.openspcoop2.protocol.sdk.archive.ArchiveAttributeAuthority;
  70. import org.openspcoop2.protocol.sdk.archive.ArchiveConfigurationPolicy;
  71. import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
  72. import org.openspcoop2.protocol.sdk.archive.ArchiveGruppo;
  73. import org.openspcoop2.protocol.sdk.archive.ArchivePdd;
  74. import org.openspcoop2.protocol.sdk.archive.ArchivePluginArchivio;
  75. import org.openspcoop2.protocol.sdk.archive.ArchivePluginClasse;
  76. import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
  77. import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
  78. import org.openspcoop2.protocol.sdk.archive.ArchiveRuolo;
  79. import org.openspcoop2.protocol.sdk.archive.ArchiveScope;
  80. import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
  81. import org.openspcoop2.protocol.sdk.archive.ArchiveSoggetto;
  82. import org.openspcoop2.protocol.sdk.archive.ArchiveTokenPolicy;
  83. import org.openspcoop2.protocol.sdk.archive.ArchiveUrlInvocazioneRegola;
  84. import org.openspcoop2.protocol.sdk.constants.ArchiveVersion;
  85. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  86. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  87. import org.slf4j.Logger;

  88. /**    
  89.  * ZIPWriteUtils
  90.  *
  91.  * @author Poli Andrea (poli@link.it)
  92.  * @author $Author$
  93.  * @version $Rev$, $Date$
  94.  */
  95. public class ZIPWriteUtils {

  96.     protected Logger log = null;
  97.    
  98.     protected IRegistryReader registryReader;
  99.     protected IConfigIntegrationReader configIntegrationReader;

  100.     private org.openspcoop2.core.registry.utils.serializer.JaxbSerializer jaxbRegistrySerializer = null;
  101.     private org.openspcoop2.core.config.utils.serializer.JaxbSerializer jaxbConfigSerializer = null;
  102.     private org.openspcoop2.core.plugins.utils.serializer.JaxbSerializer jaxbPluginSerializer = null;
  103.     private org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbSerializer jaxbControlloTrafficoSerializer = null;
  104.     private org.openspcoop2.core.allarmi.utils.serializer.JaxbSerializer jaxbAllarmeSerializer = null;
  105.     private org.openspcoop2.core.registry.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsRegistry = null;
  106.     private org.openspcoop2.core.config.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsConfig = null;
  107.     private org.openspcoop2.core.plugins.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsPlugin = null;
  108.     private org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsControlloTraffico = null;
  109.     private org.openspcoop2.core.allarmi.utils.CleanerOpenSPCoop2Extensions cleanerOpenSPCoop2ExtensionsAllarme = null;
  110.    
  111.    
  112.     public ZIPWriteUtils(Logger log,IRegistryReader registryReader,IConfigIntegrationReader configIntegrationReader) throws ProtocolException{
  113.         this.log = log;
  114.        
  115.         this.registryReader = registryReader;
  116.         this.configIntegrationReader = configIntegrationReader;
  117.        
  118.         this.jaxbRegistrySerializer = new org.openspcoop2.core.registry.utils.serializer.JaxbSerializer();
  119.         this.jaxbConfigSerializer = new org.openspcoop2.core.config.utils.serializer.JaxbSerializer();
  120.         this.jaxbPluginSerializer = new org.openspcoop2.core.plugins.utils.serializer.JaxbSerializer();
  121.         this.jaxbControlloTrafficoSerializer = new org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbSerializer();
  122.         this.jaxbAllarmeSerializer = new org.openspcoop2.core.allarmi.utils.serializer.JaxbSerializer();
  123.         this.cleanerOpenSPCoop2ExtensionsRegistry = new org.openspcoop2.core.registry.utils.CleanerOpenSPCoop2Extensions();
  124.         this.cleanerOpenSPCoop2ExtensionsConfig = new org.openspcoop2.core.config.utils.CleanerOpenSPCoop2Extensions();
  125.         this.cleanerOpenSPCoop2ExtensionsPlugin = new org.openspcoop2.core.plugins.utils.CleanerOpenSPCoop2Extensions();
  126.         this.cleanerOpenSPCoop2ExtensionsControlloTraffico = new org.openspcoop2.core.controllo_traffico.utils.CleanerOpenSPCoop2Extensions();
  127.         this.cleanerOpenSPCoop2ExtensionsAllarme = new org.openspcoop2.core.allarmi.utils.CleanerOpenSPCoop2Extensions();
  128.        
  129.     }
  130.    
  131.    
  132.    

  133.    
  134.    
  135.    
  136.     // ---------- Marshall ----------------
  137.    
  138.     public void generateArchive(Archive archive,File file) throws ProtocolException{
  139.         FileOutputStream fout = null;
  140.         try{
  141.             fout = new FileOutputStream(file);
  142.             generateArchive(archive,fout);
  143.             fout.flush();
  144.         }catch(Exception e){
  145.             throw new ProtocolException(e.getMessage(),e);
  146.         }finally{
  147.             try{
  148.                 if(fout!=null)
  149.                     fout.close();
  150.             }catch(Exception eClose){
  151.                 // close
  152.             }
  153.         }
  154.     }
  155.    
  156.     public void generateArchive(Archive archive,String fileName) throws ProtocolException{
  157.         FileOutputStream fout = null;
  158.         try{
  159.             fout = new FileOutputStream(fileName);
  160.             generateArchive(archive,fout);
  161.             fout.flush();
  162.         }catch(Exception e){
  163.             throw new ProtocolException(e.getMessage(),e);
  164.         }finally{
  165.             try{
  166.                 if(fout!=null)
  167.                     fout.close();
  168.             }catch(Exception eClose){
  169.                 // close
  170.             }
  171.         }
  172.     }
  173.    
  174.     public byte[] generateArchive(Archive archive) throws ProtocolException{
  175.         try{
  176.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  177.             generateArchive(archive,bout);
  178.             bout.flush();
  179.             bout.close();
  180.             return bout.toByteArray();
  181.         }catch(Exception e){
  182.             throw new ProtocolException(e.getMessage(),e);
  183.         }
  184.     }


  185.    
  186.     private void write(ZipOutputStream zipOut,String elemento,Object idElemento,SerializationType serializationType,Object object) throws ProtocolException{
  187.         try{
  188.             Method method = null;
  189.             byte[]bytes = null;
  190.             switch (serializationType) {
  191.             case REGISTRY:
  192.                 method = this.jaxbRegistrySerializer.getClass().getMethod("toByteArray", object.getClass());
  193.                 bytes = (byte[]) method.invoke(this.jaxbRegistrySerializer, object);
  194.                 break;
  195.             case CONFIG:
  196.                 method = this.jaxbConfigSerializer.getClass().getMethod("toByteArray", object.getClass());
  197.                 bytes = (byte[]) method.invoke(this.jaxbConfigSerializer, object);
  198.                 break;
  199.             case PLUGIN:
  200.                 method = this.jaxbPluginSerializer.getClass().getMethod("toByteArray", object.getClass());
  201.                 bytes = (byte[]) method.invoke(this.jaxbPluginSerializer, object);
  202.                 break;
  203.             case CONTROLLO_TRAFFICO:
  204.                 method = this.jaxbControlloTrafficoSerializer.getClass().getMethod("toByteArray", object.getClass());
  205.                 bytes = (byte[]) method.invoke(this.jaxbControlloTrafficoSerializer, object);
  206.                 break;
  207.             case ALLARME:
  208.                 method = this.jaxbAllarmeSerializer.getClass().getMethod("toByteArray", object.getClass());
  209.                 bytes = (byte[]) method.invoke(this.jaxbAllarmeSerializer, object);
  210.                 break;
  211.             }
  212.             if(bytes!=null) {
  213.                 zipOut.write(bytes);
  214.             }
  215.         }catch(Exception e){
  216.             String xml = null;
  217.             try{
  218.                 Method method = object.getClass().getMethod("toXml_Jaxb");
  219.                 xml = (String) method.invoke(object);
  220.             }catch(Exception eDebug){
  221.                 this.log.error("Errore durante il recupero della struttura xml: "+eDebug,eDebug);
  222.                 throw new ProtocolException("["+elemento+"]["+idElemento+"]: "+e.getMessage(),e);
  223.             }
  224.             throw new ProtocolException("["+elemento+"]["+idElemento+"] ("+xml+"): "+e.getMessage(),e);
  225.         }
  226.     }
  227.    
  228.     public void generateArchive(Archive archive,OutputStream out) throws ProtocolException{
  229.        
  230.         ZipOutputStream zipOut = null;
  231.         try{
  232.             zipOut = new ZipOutputStream(out);

  233.             String rootPackageDir = "";
  234.             // Il codice dopo fissa il problema di inserire una directory nel package.
  235.             // Commentare la riga sotto per ripristinare il vecchio comportamento.
  236.             rootPackageDir = Costanti.OPENSPCOOP2_ARCHIVE_ROOT_DIR+File.separatorChar;
  237.            
  238.             // ExtendedInfoManager
  239.             ExtendedInfoManager extendedInfoManager = ExtendedInfoManager.getInstance();
  240.            
  241.             // version
  242.             String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_VERSION_FILE_NAME;
  243.             zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  244.             zipOut.write(ArchiveVersion.getContentFileVersion(org.openspcoop2.utils.Costanti.OPENSPCOOP2_PRODUCT_VERSION).getBytes());
  245.            
  246.             // configurazione
  247.             if(archive.getConfigurazionePdD()!=null){
  248.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_CONFIGURAZIONE_DIR+File.separatorChar+
  249.                         Costanti.OPENSPCOOP2_ARCHIVE_CONFIGURAZIONE_FILE_NAME;
  250.                 zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  251.                 Configurazione configurazionePdD = archive.getConfigurazionePdD();
  252.                 while(configurazionePdD.sizeGenericPropertiesList()>0) {
  253.                     configurazionePdD.removeGenericProperties(0); // le generic properties non sono tutte da esportare. Ad es. le informazioni sulla installazione no. Le altre sono gestite sotto come token policy
  254.                 }
  255.                 this.cleanerOpenSPCoop2ExtensionsConfig.clean(configurazionePdD);
  256.                 write(zipOut, "ConfigurazionePdD", "", SerializationType.CONFIG, configurazionePdD);
  257.             }
  258.            
  259.             // configurazione - url di invocazione
  260.             if(archive.getConfigurazionePdD_urlInvocazione()!=null){
  261.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_URL_INVOCAZIONE_DIR+File.separatorChar+
  262.                         Costanti.OPENSPCOOP2_ARCHIVE_URL_INVOCAZIONE_CONFIG_FILE_NAME;
  263.                 zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  264.                 org.openspcoop2.core.config.ConfigurazioneUrlInvocazione configurazioneUrlInvocazione = archive.getConfigurazionePdD_urlInvocazione();
  265.                 this.cleanerOpenSPCoop2ExtensionsConfig.clean(configurazioneUrlInvocazione);
  266.                 write(zipOut, "ConfigurazionePdD_UrlInvocazione", "", SerializationType.CONFIG, configurazioneUrlInvocazione);
  267.             }
  268.            
  269.             // configurazione - url di invocazione - regole
  270.             if(archive.getConfigurazionePdD_urlInvocazione_regole()!=null && archive.getConfigurazionePdD_urlInvocazione_regole().size()>0){
  271.                 for (int i = 0; i < archive.getConfigurazionePdD_urlInvocazione_regole().size(); i++) {
  272.                     ArchiveUrlInvocazioneRegola archiveUrlRegola = archive.getConfigurazionePdD_urlInvocazione_regole().get(i);
  273.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_URL_INVOCAZIONE_DIR+File.separatorChar+
  274.                             Costanti.OPENSPCOOP2_ARCHIVE_URL_INVOCAZIONE_REGOLE_DIR+File.separatorChar+
  275.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveUrlRegola.getNome())+".xml";
  276.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  277.                     org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola regola = archiveUrlRegola.getRegola();
  278.                     this.cleanerOpenSPCoop2ExtensionsConfig.clean(regola);
  279.                     write(zipOut, "ConfigurazionePdD_UrlInvocazione_regola", archiveUrlRegola.getNome(), SerializationType.CONFIG, regola);
  280.                 }
  281.             }
  282.            
  283.             // extendedConfigurazione
  284.             if(archive.getConfigurazionePdD()!=null && archive.getConfigurazionePdD().sizeExtendedInfoList()>0){
  285.                 String prefix = Costanti.OPENSPCOOP2_ARCHIVE_CONFIGURAZIONE_DIR+File.separatorChar+
  286.                         Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_DIR+File.separatorChar;
  287.                 for (int i = 0; i < archive.getConfigurazionePdD().sizeExtendedInfoList(); i++) {
  288.                     nomeFile = prefix+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_NAME+(i+1)+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_EXT;
  289.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  290.                     String className = null;
  291.                     try{
  292.                         Object o = archive.getConfigurazionePdD().getExtendedInfo(i);
  293.                         className = o.getClass().getName();
  294.                         zipOut.write(extendedInfoManager.newInstanceExtendedInfoConfigurazione().serialize(this.log,archive.getConfigurazionePdD(),o));
  295.                     }catch(Exception e){
  296.                         throw new ProtocolException("[ConfigurazionePdDExt][Posizione-"+i+"] ("+className+"): "+e.getMessage(),e);
  297.                     }
  298.                 }
  299.             }
  300.                        
  301.             // controlloTraffico
  302.             if(archive.getControlloTraffico_configurazione()!=null){
  303.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_DIR+File.separatorChar+
  304.                         Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_CONFIGURAZIONE_FILE_NAME;
  305.                 zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  306.                 org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazioneCC = archive.getControlloTraffico_configurazione();
  307.                 this.cleanerOpenSPCoop2ExtensionsControlloTraffico.clean(configurazioneCC);
  308.                 write(zipOut, "ControlloTraffico_Configurazione", "", SerializationType.CONTROLLO_TRAFFICO, configurazioneCC);
  309.             }
  310.            
  311.             // controlloTraffico (configurationPolicy)
  312.             if(archive.getControlloTraffico_configurationPolicies()!=null && archive.getControlloTraffico_configurationPolicies().size()>0){
  313.                 for (int i = 0; i < archive.getControlloTraffico_configurationPolicies().size(); i++) {
  314.                     ArchiveConfigurationPolicy archiveCC = archive.getControlloTraffico_configurationPolicies().get(i);
  315.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_DIR+File.separatorChar+
  316.                             Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_CONFIG_POLICY_DIR+File.separatorChar+
  317.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveCC.getNomePolicy())+".xml";
  318.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  319.                     org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy policy = archiveCC.getPolicy();
  320.                     this.cleanerOpenSPCoop2ExtensionsControlloTraffico.clean(policy);
  321.                     write(zipOut, "ControlloTraffico_ConfigurazionePolicy", archiveCC.getNomePolicy(), SerializationType.CONTROLLO_TRAFFICO, policy);
  322.                 }
  323.             }
  324.            
  325.             // controlloTraffico (activePolicy)
  326.             if(archive.getControlloTraffico_activePolicies()!=null && archive.getControlloTraffico_activePolicies().size()>0){
  327.                 for (int i = 0; i < archive.getControlloTraffico_activePolicies().size(); i++) {
  328.                     ArchiveActivePolicy archiveCC = archive.getControlloTraffico_activePolicies().get(i);
  329.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_DIR+File.separatorChar+
  330.                             Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_ACTIVE_POLICY_DIR+File.separatorChar+
  331.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveCC.getPolicy().getIdActivePolicy())+".xml";
  332.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  333.                     org.openspcoop2.core.controllo_traffico.AttivazionePolicy policy = archiveCC.getPolicy();
  334.                     this.cleanerOpenSPCoop2ExtensionsControlloTraffico.clean(policy);
  335.                     write(zipOut, "ControlloTraffico_AttivazionePolicy", archiveCC.getPolicy().getIdActivePolicy(), SerializationType.CONTROLLO_TRAFFICO, policy);
  336.                 }
  337.             }
  338.            
  339.             // allarmi
  340.             if(archive.getAllarmi()!=null && archive.getAllarmi().size()>0){
  341.                 for (int i = 0; i < archive.getAllarmi().size(); i++) {
  342.                     ArchiveAllarme archiveAllarme = archive.getAllarmi().get(i);
  343.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ALLARMI_DIR+File.separatorChar+
  344.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveAllarme.getAllarme().getNome())+".xml";
  345.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  346.                     org.openspcoop2.core.allarmi.Allarme allarme = archiveAllarme.getAllarme();
  347.                     this.cleanerOpenSPCoop2ExtensionsAllarme.clean(allarme);
  348.                     write(zipOut, "Allarme", archiveAllarme.getAllarme().getNome(), SerializationType.ALLARME, allarme);
  349.                 }
  350.             }
  351.            
  352.             // tokenPolicy (validation)
  353.             if(archive.getToken_validation_policies()!=null && archive.getToken_validation_policies().size()>0){
  354.                 for (int i = 0; i < archive.getToken_validation_policies().size(); i++) {
  355.                     ArchiveTokenPolicy archiveTP = archive.getToken_validation_policies().get(i);
  356.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_DIR+File.separatorChar+
  357.                             Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_VALIDATION_DIR+File.separatorChar+
  358.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveTP.getNomePolicy())+".xml";
  359.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  360.                     org.openspcoop2.core.config.GenericProperties policy = archiveTP.getPolicy();
  361.                     this.cleanerOpenSPCoop2ExtensionsConfig.clean(policy);
  362.                     write(zipOut, "TokenPolicy_Validation", archiveTP.getNomePolicy(), SerializationType.CONFIG, policy);
  363.                 }
  364.             }
  365.            
  366.             // tokenPolicy (retrieve)
  367.             if(archive.getToken_retrieve_policies()!=null && archive.getToken_retrieve_policies().size()>0){
  368.                 for (int i = 0; i < archive.getToken_retrieve_policies().size(); i++) {
  369.                     ArchiveTokenPolicy archiveTP = archive.getToken_retrieve_policies().get(i);
  370.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_DIR+File.separatorChar+
  371.                             Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_RETRIEVE_DIR+File.separatorChar+
  372.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveTP.getNomePolicy())+".xml";
  373.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  374.                     org.openspcoop2.core.config.GenericProperties policy = archiveTP.getPolicy();
  375.                     this.cleanerOpenSPCoop2ExtensionsConfig.clean(policy);
  376.                     write(zipOut, "TokenPolicy_Retrieve", archiveTP.getNomePolicy(), SerializationType.CONFIG, policy);
  377.                 }
  378.             }
  379.            
  380.             // attribute authority
  381.             if(archive.getAttributeAuthorities()!=null && archive.getAttributeAuthorities().size()>0){
  382.                 for (int i = 0; i < archive.getAttributeAuthorities().size(); i++) {
  383.                     ArchiveAttributeAuthority archiveAA = archive.getAttributeAuthorities().get(i);
  384.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ATTRIBUTE_AUTHORITY_DIR+File.separatorChar+
  385.                             Costanti.OPENSPCOOP2_ARCHIVE_ATTRIBUTE_AUTHORITY_RETRIEVE_DIR+File.separatorChar+
  386.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveAA.getNomePolicy())+".xml";
  387.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  388.                     org.openspcoop2.core.config.GenericProperties policy = archiveAA.getPolicy();
  389.                     this.cleanerOpenSPCoop2ExtensionsConfig.clean(policy);
  390.                     write(zipOut, "AttributeAuthority_Retrieve", archiveAA.getNomePolicy(), SerializationType.CONFIG, policy);
  391.                 }
  392.             }
  393.            
  394.             // plugins (classi)
  395.             if(archive.getPlugin_classi()!=null && archive.getPlugin_classi().size()>0){
  396.                 for (int i = 0; i < archive.getPlugin_classi().size(); i++) {
  397.                     ArchivePluginClasse archivePC = archive.getPlugin_classi().get(i);
  398.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_DIR+File.separatorChar+
  399.                             Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_CLASSI_DIR+File.separatorChar+
  400.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archivePC.getTipoPlugin())+"_"+ZIPUtils.convertNameToSistemaOperativoCompatible(archivePC.getTipo())+".xml";
  401.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  402.                     org.openspcoop2.core.plugins.Plugin plugin = archivePC.getPlugin();
  403.                     this.cleanerOpenSPCoop2ExtensionsPlugin.clean(plugin);
  404.                     write(zipOut, "Plugin_Classe", archivePC.getTipoPlugin()+"_"+archivePC.getTipo(), SerializationType.PLUGIN, plugin);
  405.                 }
  406.             }
  407.            
  408.             // plugins (archivi)
  409.             if(archive.getPlugin_archivi()!=null && archive.getPlugin_archivi().size()>0){
  410.                 for (int i = 0; i < archive.getPlugin_archivi().size(); i++) {
  411.                     ArchivePluginArchivio archivePA = archive.getPlugin_archivi().get(i);
  412.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_DIR+File.separatorChar+
  413.                             Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_ARCHIVI_DIR+File.separatorChar+
  414.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archivePA.getNome())+".xml";
  415.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  416.                     org.openspcoop2.core.config.RegistroPlugin plugin = archivePA.getPlugin();
  417.                     this.cleanerOpenSPCoop2ExtensionsConfig.clean(plugin);
  418.                     write(zipOut, "Plugin_Archivio", archivePA.getNome(), SerializationType.CONFIG, plugin);
  419.                 }
  420.             }
  421.            
  422.             // porteDominio
  423.             if(archive.getPdd()!=null && archive.getPdd().size()>0){
  424.                 for (int i = 0; i < archive.getPdd().size(); i++) {
  425.                     ArchivePdd archivePdd = archive.getPdd().get(i);
  426.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_PORTE_DOMINIO_DIR+File.separatorChar+
  427.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archivePdd.getNomePdd())+".xml";
  428.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  429.                     PortaDominio pdd = archivePdd.getPortaDominio();
  430.                     this.cleanerOpenSPCoop2ExtensionsRegistry.clean(pdd);
  431.                     write(zipOut, "PortaDominio", archivePdd.getNomePdd(), SerializationType.REGISTRY, pdd);
  432.                 }
  433.             }

  434.             // gruppi
  435.             if(archive.getGruppi()!=null && archive.getGruppi().size()>0){
  436.                 for (int i = 0; i < archive.getGruppi().size(); i++) {
  437.                     ArchiveGruppo archiveGruppo = archive.getGruppi().get(i);
  438.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_GRUPPI_DIR+File.separatorChar+
  439.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveGruppo.getIdGruppo().getNome())+".xml";
  440.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  441.                     Gruppo gruppo = archiveGruppo.getGruppo();
  442.                     this.cleanerOpenSPCoop2ExtensionsRegistry.clean(gruppo);
  443.                     write(zipOut, "Gruppo", archiveGruppo.getIdGruppo().getNome(), SerializationType.REGISTRY, gruppo);
  444.                 }
  445.             }
  446.            
  447.             // ruoli
  448.             if(archive.getRuoli()!=null && archive.getRuoli().size()>0){
  449.                 for (int i = 0; i < archive.getRuoli().size(); i++) {
  450.                     ArchiveRuolo archiveRuolo = archive.getRuoli().get(i);
  451.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_RUOLI_DIR+File.separatorChar+
  452.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveRuolo.getIdRuolo().getNome())+".xml";
  453.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  454.                     Ruolo ruolo = archiveRuolo.getRuolo();
  455.                     this.cleanerOpenSPCoop2ExtensionsRegistry.clean(ruolo);
  456.                     write(zipOut, "Ruolo", archiveRuolo.getIdRuolo().getNome(), SerializationType.REGISTRY, ruolo);
  457.                 }
  458.             }
  459.            
  460.             // scope
  461.             if(archive.getScope()!=null && archive.getScope().size()>0){
  462.                 for (int i = 0; i < archive.getScope().size(); i++) {
  463.                     ArchiveScope archiveScope = archive.getScope().get(i);
  464.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_SCOPE_DIR+File.separatorChar+
  465.                             ZIPUtils.convertNameToSistemaOperativoCompatible(archiveScope.getIdScope().getNome())+".xml";
  466.                     zipOut.putNextEntry(new ZipEntry(rootPackageDir+nomeFile));
  467.                     Scope scope = archiveScope.getScope();
  468.                     this.cleanerOpenSPCoop2ExtensionsRegistry.clean(scope);
  469.                     write(zipOut, "Scope", archiveScope.getIdScope().getNome(), SerializationType.REGISTRY, scope);
  470.                 }
  471.             }
  472.            
  473.             // soggetti
  474.             Map<String, Archive> archiveMapIntoSoggetti = archiveMapIntoSoggetti(archive);
  475.             List<String> listaSoggetti = new ArrayList<>();
  476.             listaSoggetti.addAll(archiveMapIntoSoggetti.keySet());
  477.             java.util.Collections.sort(listaSoggetti);
  478.             for (String idSoggettoAsString : listaSoggetti) {
  479.                
  480.                 IDSoggetto idSoggetto = new IDSoggetto(idSoggettoAsString.split("/")[0], idSoggettoAsString.split("/")[1]);
  481.                
  482.                 Archive archiveListaOggettiSoggetto = archiveMapIntoSoggetti.get(idSoggettoAsString);
  483.                
  484.                 // il converName sui soggetti serve a poco, visto che devono essere simpleName (solo caratteri e numeri)
  485.                 String rootDir = rootPackageDir + Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+File.separatorChar+
  486.                         ZIPUtils.convertNameToSistemaOperativoCompatible(idSoggetto.getTipo())+"_"+
  487.                         ZIPUtils.convertNameToSistemaOperativoCompatible(idSoggetto.getNome())+File.separatorChar;
  488.                
  489.                 // Dati Identificativi
  490.                 String datiIdentificativiSoggetto = idSoggetto.toFormatString();
  491.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_FILE_NAME_ID;
  492.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  493.                 zipOut.write(datiIdentificativiSoggetto.getBytes());
  494.                
  495.                 // definizione soggetto
  496.                 if(archiveListaOggettiSoggetto.getSoggetti()!=null && archiveListaOggettiSoggetto.getSoggetti().size()>0){
  497.                    
  498.                     // puo' esistere al massimo una definizione del soggetto, avendo fatto una group by logica.
  499.                     ArchiveSoggetto archiveSoggetto = archiveListaOggettiSoggetto.getSoggetti().get(0);
  500.                                                            
  501.                     if(archiveSoggetto.getSoggettoRegistro()!=null){
  502.                        
  503.                         // protocolProperties
  504.                         Map<String, byte[]> protocolPropertiesList = new HashMap<>();
  505.                         for (ProtocolProperty pp : archiveSoggetto.getSoggettoRegistro().getProtocolPropertyList()) {
  506.                             if(pp.getByteFile()==null) {
  507.                                 continue;
  508.                             }
  509.                             if(pp.getFile()==null){
  510.                                 throw new ProtocolException("ProtocolProperties ["+pp.getName()+"] senza nome file");
  511.                             }
  512.                             ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.SOGGETTO;
  513.                             String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+pp.getName(); // uso la property name che è univoca
  514.                             protocolPropertiesList.put(id, pp.getByteFile());
  515.                             pp.setByteFile(null);
  516.                         }
  517.                        
  518.                         // Soggetto
  519.                         nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_FILE_NAME_REGISTRO;
  520.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  521.                         org.openspcoop2.core.registry.Soggetto soggettoRegistro = archiveSoggetto.getSoggettoRegistro();
  522.                         this.cleanerOpenSPCoop2ExtensionsRegistry.clean(soggettoRegistro);
  523.                         write(zipOut, "SoggettoRegistro", archiveSoggetto.getIdSoggetto(), SerializationType.REGISTRY, soggettoRegistro);
  524.                        
  525.                         // protocolProperties
  526.                         if(protocolPropertiesList.size()>0){
  527.                             int indexPP = 1;
  528.                             for (String id : protocolPropertiesList.keySet()) {
  529.                                
  530.                                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  531.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  532.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  533.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  534.                                 zipOut.write(id.getBytes());
  535.                                
  536.                                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  537.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  538.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  539.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  540.                                 zipOut.write(protocolPropertiesList.get(id));
  541.                                
  542.                                 indexPP++;
  543.                             }
  544.                         }
  545.                     }
  546.                     if(archiveSoggetto.getSoggettoConfigurazione()!=null){
  547.                         nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_FILE_NAME_CONFIG;
  548.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  549.                         org.openspcoop2.core.config.Soggetto soggettoConfigurazione = archiveSoggetto.getSoggettoConfigurazione();
  550.                         this.cleanerOpenSPCoop2ExtensionsConfig.clean(soggettoConfigurazione);
  551.                         write(zipOut, "SoggettoConfigurazione", archiveSoggetto.getIdSoggetto(), SerializationType.CONFIG, soggettoConfigurazione);
  552.                     }
  553.                 }
  554.                
  555.                 // serviziApplicativi
  556.                 if(archiveListaOggettiSoggetto.getServiziApplicativi()!=null && archiveListaOggettiSoggetto.getServiziApplicativi().size()>0){
  557.                     for (int i = 0; i < archiveListaOggettiSoggetto.getServiziApplicativi().size(); i++) {
  558.                         ArchiveServizioApplicativo archiveServizioApplicativo = archiveListaOggettiSoggetto.getServiziApplicativi().get(i);
  559.                        
  560.                         // protocolProperties
  561.                         Map<String, byte[]> protocolPropertiesList = new HashMap<>();
  562.                         for (org.openspcoop2.core.config.ProtocolProperty pp : archiveServizioApplicativo.getServizioApplicativo().getProtocolPropertyList()) {
  563.                             if(pp.getByteFile()==null) {
  564.                                 continue;
  565.                             }
  566.                             if(pp.getFile()==null){
  567.                                 throw new ProtocolException("ProtocolProperties ["+pp.getName()+"] senza nome file");
  568.                             }
  569.                             ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.SERVIZIO_APPLICATIVO;
  570.                             String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+pp.getName(); // uso la property name che è univoca
  571.                             protocolPropertiesList.put(id, pp.getByteFile());
  572.                             pp.setByteFile(null);
  573.                         }
  574.                        
  575.                         // Applicativo
  576.                         String nomeFileSA = Costanti.OPENSPCOOP2_ARCHIVE_SERVIZI_APPLICATIVI_DIR+File.separatorChar+
  577.                                 ZIPUtils.convertNameToSistemaOperativoCompatible(archiveServizioApplicativo.getIdServizioApplicativo().getNome());
  578.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFileSA+".xml"));
  579.                         ServizioApplicativo servizioApplicativo = archiveServizioApplicativo.getServizioApplicativo();
  580.                         this.cleanerOpenSPCoop2ExtensionsConfig.clean(servizioApplicativo);
  581.                         write(zipOut, "ServizioApplicativo", archiveServizioApplicativo.getIdServizioApplicativo(), SerializationType.CONFIG, servizioApplicativo);
  582.                        
  583.                         // protocolProperties
  584.                         if(protocolPropertiesList.size()>0){
  585.                             int indexPP = 1;
  586.                             for (String id : protocolPropertiesList.keySet()) {
  587.                                
  588.                                 String nomeFilePP = nomeFileSA+File.separatorChar+
  589.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  590.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  591.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  592.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFilePP));
  593.                                 zipOut.write(id.getBytes());
  594.                                
  595.                                 nomeFilePP = nomeFileSA+File.separatorChar+
  596.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  597.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  598.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  599.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFilePP));
  600.                                 zipOut.write(protocolPropertiesList.get(id));
  601.                                
  602.                                 indexPP++;
  603.                             }
  604.                         }
  605.                     }
  606.                 }
  607.                
  608.                 // porteDelegate
  609.                 if(archiveListaOggettiSoggetto.getPorteDelegate()!=null && archiveListaOggettiSoggetto.getPorteDelegate().size()>0){
  610.                     for (int i = 0; i < archiveListaOggettiSoggetto.getPorteDelegate().size(); i++) {
  611.                        
  612.                         // portaDelegata
  613.                         ArchivePortaDelegata archivePortaDelegata = archiveListaOggettiSoggetto.getPorteDelegate().get(i);
  614.                         nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_PORTE_DELEGATE_DIR+File.separatorChar+
  615.                                 ZIPUtils.convertNameToSistemaOperativoCompatible(archivePortaDelegata.getIdPortaDelegata().getNome())+".xml";
  616.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  617.                         PortaDelegata portaDelegata = archivePortaDelegata.getPortaDelegata();
  618.                         this.cleanerOpenSPCoop2ExtensionsConfig.clean(portaDelegata);
  619.                         write(zipOut, "PortaDelegata", archivePortaDelegata.getIdPortaDelegata(), SerializationType.CONFIG, portaDelegata);
  620.                        
  621.                         // extended porteDelegata
  622.                         if(archivePortaDelegata.getPortaDelegata()!=null && archivePortaDelegata.getPortaDelegata().sizeExtendedInfoList()>0){
  623.                             String prefix = Costanti.OPENSPCOOP2_ARCHIVE_PORTE_DELEGATE_DIR+File.separatorChar+
  624.                                     Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_DIR+File.separatorChar+
  625.                                     ZIPUtils.convertNameToSistemaOperativoCompatible(archivePortaDelegata.getIdPortaDelegata().getNome())+
  626.                                     File.separatorChar;
  627.                             for (int k = 0; k < archivePortaDelegata.getPortaDelegata().sizeExtendedInfoList(); k++) {
  628.                                 nomeFile = prefix+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_NAME+(k+1)+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_EXT;
  629.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  630.                                 String className = null;
  631.                                 try{
  632.                                     Object o = archivePortaDelegata.getPortaDelegata().getExtendedInfo(k);
  633.                                     className = o.getClass().getName();
  634.                                     zipOut.write(extendedInfoManager.newInstanceExtendedInfoPortaDelegata().serialize(this.log,archivePortaDelegata.getPortaDelegata(),o));
  635.                                 }catch(Exception e){
  636.                                     throw new ProtocolException("[PortaDelegataExt]["+archivePortaDelegata.getIdPortaDelegata()+"][Posizione-"+i+"] ("+className+"): "+e.getMessage(),e);
  637.                                 }
  638.                             }
  639.                         }
  640.                     }
  641.                 }
  642.                
  643.                 // porteApplicative
  644.                 if(archiveListaOggettiSoggetto.getPorteApplicative()!=null && archiveListaOggettiSoggetto.getPorteApplicative().size()>0){
  645.                     for (int i = 0; i < archiveListaOggettiSoggetto.getPorteApplicative().size(); i++) {
  646.                        
  647.                         // portaApplicativa
  648.                         ArchivePortaApplicativa archivePortaApplicativa = archiveListaOggettiSoggetto.getPorteApplicative().get(i);
  649.                         nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_PORTE_APPLICATIVE_DIR+File.separatorChar+
  650.                                 ZIPUtils.convertNameToSistemaOperativoCompatible(archivePortaApplicativa.getIdPortaApplicativa().getNome())+".xml";
  651.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  652.                         PortaApplicativa portaApplicativa = archivePortaApplicativa.getPortaApplicativa();
  653.                         this.cleanerOpenSPCoop2ExtensionsConfig.clean(portaApplicativa);
  654.                         write(zipOut, "PortaApplicativa", archivePortaApplicativa.getIdPortaApplicativa(), SerializationType.CONFIG, portaApplicativa);
  655.                        
  656.                         // extended portaApplicativa
  657.                         if(archivePortaApplicativa.getPortaApplicativa()!=null && archivePortaApplicativa.getPortaApplicativa().sizeExtendedInfoList()>0){
  658.                             String prefix = Costanti.OPENSPCOOP2_ARCHIVE_PORTE_APPLICATIVE_DIR+File.separatorChar+
  659.                                     Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_DIR+File.separatorChar+
  660.                                     ZIPUtils.convertNameToSistemaOperativoCompatible(archivePortaApplicativa.getIdPortaApplicativa().getNome())+
  661.                                     File.separatorChar;
  662.                             for (int k = 0; k < archivePortaApplicativa.getPortaApplicativa().sizeExtendedInfoList(); k++) {
  663.                                 nomeFile = prefix+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_NAME+(k+1)+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_EXT;
  664.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  665.                                 String className = null;
  666.                                 try{
  667.                                     Object o = archivePortaApplicativa.getPortaApplicativa().getExtendedInfo(k);
  668.                                     className = o.getClass().getName();
  669.                                     zipOut.write(extendedInfoManager.newInstanceExtendedInfoPortaApplicativa().serialize(this.log,archivePortaApplicativa.getPortaApplicativa(),o));
  670.                                 }catch(Exception e){
  671.                                     throw new ProtocolException("[PortaApplicativaExt]["+archivePortaApplicativa.getIdPortaApplicativa()+"][Posizione-"+i+"] ("+className+"): "+e.getMessage(),e);
  672.                                 }
  673.                             }
  674.                         }
  675.                     }
  676.                 }
  677.                
  678.                 // accordiServizioParteComune
  679.                 if(archiveListaOggettiSoggetto.getAccordiServizioParteComune()!=null && archiveListaOggettiSoggetto.getAccordiServizioParteComune().size()>0){
  680.                     for (int i = 0; i < archiveListaOggettiSoggetto.getAccordiServizioParteComune().size(); i++) {
  681.                         ArchiveAccordoServizioParteComune archiveAccordo = archiveListaOggettiSoggetto.getAccordiServizioParteComune().get(i);
  682.                         AccordoServizioParteComune accordo = archiveAccordo.getAccordoServizioParteComune();
  683.                         IDAccordo idAccordo = archiveAccordo.getIdAccordoServizioParteComune();
  684.                         this.saveAccordo(accordo, idAccordo, false, rootDir, zipOut);
  685.                     }
  686.                 }
  687.                
  688.                 // accordiServizioParteSpecifica
  689.                 Map<String, String> map_IdApsScritti_nomeFileSystem = new HashMap<>();
  690.                 if(archiveListaOggettiSoggetto.getAccordiServizioParteSpecifica()!=null && archiveListaOggettiSoggetto.getAccordiServizioParteSpecifica().size()>0){
  691.                     for (int i = 0; i < archiveListaOggettiSoggetto.getAccordiServizioParteSpecifica().size(); i++) {
  692.                         ArchiveAccordoServizioParteSpecifica archiveAccordo = archiveListaOggettiSoggetto.getAccordiServizioParteSpecifica().get(i);
  693.                         AccordoServizioParteSpecifica accordo = archiveAccordo.getAccordoServizioParteSpecifica();
  694.                         IDServizio idAccordo = archiveAccordo.getIdAccordoServizioParteSpecifica();
  695.                         this.saveAccordo(accordo, idAccordo, archiveAccordo.getMappingPorteApplicativeAssociate(), rootDir, zipOut, map_IdApsScritti_nomeFileSystem);
  696.                     }
  697.                 }
  698.                
  699.                 // accordiCooperazione
  700.                 if(archiveListaOggettiSoggetto.getAccordiCooperazione()!=null && archiveListaOggettiSoggetto.getAccordiCooperazione().size()>0){
  701.                     for (int i = 0; i < archiveListaOggettiSoggetto.getAccordiCooperazione().size(); i++) {
  702.                         ArchiveAccordoCooperazione archiveAccordo = archiveListaOggettiSoggetto.getAccordiCooperazione().get(i);
  703.                         AccordoCooperazione accordo = archiveAccordo.getAccordoCooperazione();
  704.                         IDAccordoCooperazione idAccordo = archiveAccordo.getIdAccordoCooperazione();
  705.                         this.saveAccordo(accordo, idAccordo, rootDir, zipOut);
  706.                     }
  707.                 }
  708.                
  709.                 // accordiServizioComposto
  710.                 if(archiveListaOggettiSoggetto.getAccordiServizioComposto()!=null && archiveListaOggettiSoggetto.getAccordiServizioComposto().size()>0){
  711.                     for (int i = 0; i < archiveListaOggettiSoggetto.getAccordiServizioComposto().size(); i++) {
  712.                         ArchiveAccordoServizioParteComune archiveAccordo = archiveListaOggettiSoggetto.getAccordiServizioComposto().get(i);
  713.                         AccordoServizioParteComune accordo = archiveAccordo.getAccordoServizioParteComune();
  714.                         IDAccordo idAccordo = archiveAccordo.getIdAccordoServizioParteComune();
  715.                         this.saveAccordo(accordo, idAccordo, true, rootDir, zipOut);
  716.                     }
  717.                 }

  718.                 // accordiFruitori
  719.                 if(archiveListaOggettiSoggetto.getAccordiFruitori()!=null && archiveListaOggettiSoggetto.getAccordiFruitori().size()>0){
  720.                     for (int i = 0; i < archiveListaOggettiSoggetto.getAccordiFruitori().size(); i++) {
  721.                         ArchiveFruitore archiveFruitore = archiveListaOggettiSoggetto.getAccordiFruitori().get(i);
  722.                        
  723.                         String dirAsps = null;
  724.                        
  725.                         String idAps = archiveFruitore.getIdAccordoServizioParteSpecifica().getNome()+" "+archiveFruitore.getIdAccordoServizioParteSpecifica().getVersione();
  726.                         if(map_IdApsScritti_nomeFileSystem.containsKey(idAps)==false){
  727.                            
  728.                             dirAsps=Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR+File.separatorChar+
  729.                                     ZIPUtils.convertNameToSistemaOperativoCompatible(archiveFruitore.getIdAccordoServizioParteSpecifica().getNome())+"_"+
  730.                                     archiveFruitore.getIdAccordoServizioParteSpecifica().getVersione()+
  731.                                     File.separatorChar;
  732.                            
  733.                             // serializzo identificativo accordo servizio parte specifica (servira' per il fruitore)
  734.                             nomeFile = dirAsps + Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME;
  735.                             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  736.                             String identificativo = idAps;
  737.                             zipOut.write(identificativo.getBytes());
  738.                            
  739.                             map_IdApsScritti_nomeFileSystem.put(idAps,dirAsps);
  740.                         }
  741.                         else{
  742.                             dirAsps = map_IdApsScritti_nomeFileSystem.get(idAps);
  743.                         }
  744.                        
  745.                         Fruitore fruitore = archiveFruitore.getFruitore();          
  746.                        
  747.                         // protocolProperties (devo rimuovere campo bytes)
  748.                         Map<String, byte[]> protocolPropertiesList = new HashMap<>();
  749.                         if(fruitore.sizeProtocolPropertyList()>0) {
  750.                             for (ProtocolProperty pp : fruitore.getProtocolPropertyList()) {
  751.                                 if(pp.getByteFile()==null) {
  752.                                     continue;
  753.                                 }
  754.                                 if(pp.getFile()==null){
  755.                                     throw new ProtocolException("ProtocolProperties ["+pp.getName()+"] senza nome file");
  756.                                 }
  757.                                 ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.FRUITORE;
  758.                                 String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+pp.getName(); // uso la property name che è univoca
  759.                                 protocolPropertiesList.put(id, pp.getByteFile());
  760.                                 pp.setByteFile(null);
  761.                             }
  762.                         }
  763.                        
  764.                         // il converName sui soggetti serve a poco, visto che devono essere simpleName (solo caratteri e numeri)
  765.                         // Fruitore
  766.                         String nomeFruitore = dirAsps +
  767.                                 Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar+
  768.                                 ZIPUtils.convertNameToSistemaOperativoCompatible(archiveFruitore.getIdSoggettoFruitore().getTipo())+"_"+
  769.                                 ZIPUtils.convertNameToSistemaOperativoCompatible(archiveFruitore.getIdSoggettoFruitore().getNome());
  770.                        
  771.                         // Dati Identificativi fruitore
  772.                         String datiIdentificativiFruitore = archiveFruitore.getIdSoggettoFruitore().toFormatString();
  773.                         nomeFile = nomeFruitore+".id";
  774.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  775.                         zipOut.write(datiIdentificativiFruitore.getBytes());
  776.                        
  777.                         // fruitore.xml
  778.                         nomeFile = nomeFruitore+".xml";
  779.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  780.                         this.cleanerOpenSPCoop2ExtensionsRegistry.clean(fruitore);
  781.                         write(zipOut, "Fruitore", archiveFruitore.getIdSoggettoFruitore().toString()+" di "+
  782.                                 archiveFruitore.getIdAccordoServizioParteSpecifica().toString(), SerializationType.REGISTRY, fruitore);
  783.                        
  784.                         // protocolProperties
  785.                         if(protocolPropertiesList.size()>0){
  786.                             int indexPP = 1;
  787.                             for (String id : protocolPropertiesList.keySet()) {
  788.                                
  789.                                 nomeFile = nomeFruitore+File.separatorChar+
  790.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  791.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  792.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  793.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  794.                                 zipOut.write(id.getBytes());
  795.                                
  796.                                 nomeFile = nomeFruitore+File.separatorChar+
  797.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  798.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  799.                                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  800.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  801.                                 zipOut.write(protocolPropertiesList.get(id));
  802.                                
  803.                                 indexPP++;
  804.                             }
  805.                         }
  806.                        
  807.                         // PortaDelegata Associata
  808.                         if(archiveFruitore.getMappingPorteDelegateAssociate()!=null){
  809.                             for (int j = 0; j < archiveFruitore.getMappingPorteDelegateAssociate().size(); j++) {
  810.                                 String nomeFilePDAssociata = nomeFruitore+File.separatorChar+
  811.                                         (j+1)+
  812.                                         Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_MAPPING_PD_SUFFIX;
  813.                                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFilePDAssociata));
  814.                                 MappingFruizionePortaDelegata mappingPortaDelegataAssociata = archiveFruitore.getMappingPorteDelegateAssociate().get(j);
  815.                                 // Non serializzo l'ìd del servizio e  l'id del fruiotre, poiche' sono gia' dentro la fruizione del servizio
  816.                                 String id = mappingPortaDelegataAssociata.getNome() + " " +
  817.                                         mappingPortaDelegataAssociata.getIdPortaDelegata().getNome() + " " +
  818.                                         mappingPortaDelegataAssociata.isDefault()+ " " +
  819.                                         mappingPortaDelegataAssociata.getDescrizione();
  820.                                 zipOut.write(id.getBytes());    
  821.                             }
  822.                         }
  823.                     }
  824.                 }
  825.                
  826.             }
  827.            
  828.             zipOut.flush();

  829.         }catch(Exception e){
  830.             throw new ProtocolException(e.getMessage(),e);
  831.         }finally{
  832.             try{
  833.                 if(zipOut!=null)
  834.                     zipOut.close();
  835.             }catch(Exception eClose){
  836.                 // close
  837.             }
  838.         }
  839.     }
  840.    
  841.     private Map<String, Archive> archiveMapIntoSoggetti(Archive archive) throws ProtocolException{
  842.        
  843.         Map<String, Archive> archiveMapIntoSoggetti = new HashMap<String, Archive>();
  844.        
  845.         // raccolgo soggetti
  846.         if(archive.getSoggetti()!=null && archive.getSoggetti().size()>0){
  847.             for (int i = 0; i < archive.getSoggetti().size(); i++) {
  848.                 ArchiveSoggetto archiveSoggetto = archive.getSoggetti().get(i);
  849.                 IDSoggetto idSoggetto = archiveSoggetto.getIdSoggetto();
  850.                 Archive archiveListaOggettiSoggetti = null;
  851.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  852.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  853.                 }
  854.                 else{
  855.                     archiveListaOggettiSoggetti = new Archive();
  856.                 }
  857.                 archiveListaOggettiSoggetti.getSoggetti().add(archiveSoggetto);
  858.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  859.             }
  860.         }
  861.        
  862.         // raccolgo serviziApplicativi
  863.         if(archive.getServiziApplicativi()!=null && archive.getServiziApplicativi().size()>0){
  864.             for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
  865.                 ArchiveServizioApplicativo archiveServizioApplicativo = archive.getServiziApplicativi().get(i);
  866.                 IDSoggetto idSoggetto = archiveServizioApplicativo.getIdSoggettoProprietario();
  867.                 Archive archiveListaOggettiSoggetti = null;
  868.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  869.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  870.                 }
  871.                 else{
  872.                     archiveListaOggettiSoggetti = new Archive();
  873.                 }
  874.                 archiveListaOggettiSoggetti.getServiziApplicativi().add(archiveServizioApplicativo);
  875.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  876.             }
  877.         }
  878.        
  879.         // raccolgo porteDelegate
  880.         if(archive.getPorteDelegate()!=null && archive.getPorteDelegate().size()>0){
  881.             for (int i = 0; i < archive.getPorteDelegate().size(); i++) {
  882.                 ArchivePortaDelegata archivePortaDelegata = archive.getPorteDelegate().get(i);
  883.                 IDSoggetto idSoggetto = archivePortaDelegata.getIdSoggettoProprietario();
  884.                 Archive archiveListaOggettiSoggetti = null;
  885.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  886.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  887.                 }
  888.                 else{
  889.                     archiveListaOggettiSoggetti = new Archive();
  890.                 }
  891.                 archiveListaOggettiSoggetti.getPorteDelegate().add(archivePortaDelegata);
  892.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  893.             }
  894.         }
  895.        
  896.         // raccolgo porteApplicative
  897.         if(archive.getPorteApplicative()!=null && archive.getPorteApplicative().size()>0){
  898.             for (int i = 0; i < archive.getPorteApplicative().size(); i++) {
  899.                 ArchivePortaApplicativa archivePortaApplicativa = archive.getPorteApplicative().get(i);
  900.                 IDSoggetto idSoggetto = archivePortaApplicativa.getIdSoggettoProprietario();
  901.                 Archive archiveListaOggettiSoggetti = null;
  902.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  903.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  904.                 }
  905.                 else{
  906.                     archiveListaOggettiSoggetti = new Archive();
  907.                 }
  908.                 archiveListaOggettiSoggetti.getPorteApplicative().add(archivePortaApplicativa);
  909.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  910.             }
  911.         }
  912.        
  913.         // raccolgo accordiServizioParteComune
  914.         if(archive.getAccordiServizioParteComune()!=null && archive.getAccordiServizioParteComune().size()>0){
  915.             for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
  916.                 ArchiveAccordoServizioParteComune archiveAccordo = archive.getAccordiServizioParteComune().get(i);
  917.                 IDSoggetto idSoggetto = archiveAccordo.getIdSoggettoReferente();
  918.                 Archive archiveListaOggettiSoggetti = null;
  919.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  920.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  921.                 }
  922.                 else{
  923.                     archiveListaOggettiSoggetti = new Archive();
  924.                 }
  925.                 archiveListaOggettiSoggetti.getAccordiServizioParteComune().add(archiveAccordo);
  926.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  927.             }
  928.         }
  929.        
  930.         // raccolgo accordiServizioComposto
  931.         if(archive.getAccordiServizioComposto()!=null && archive.getAccordiServizioComposto().size()>0){
  932.             for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
  933.                 ArchiveAccordoServizioComposto archiveAccordo = archive.getAccordiServizioComposto().get(i);
  934.                 IDSoggetto idSoggetto = archiveAccordo.getIdSoggettoReferente();
  935.                 Archive archiveListaOggettiSoggetti = null;
  936.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  937.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  938.                 }
  939.                 else{
  940.                     archiveListaOggettiSoggetti = new Archive();
  941.                 }
  942.                 archiveListaOggettiSoggetti.getAccordiServizioComposto().add(archiveAccordo);
  943.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  944.             }
  945.         }
  946.        
  947.         // raccolgo accordiServizioParteSpecifica
  948.         if(archive.getAccordiServizioParteSpecifica()!=null && archive.getAccordiServizioParteSpecifica().size()>0){
  949.             for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  950.                 ArchiveAccordoServizioParteSpecifica archiveAccordo = archive.getAccordiServizioParteSpecifica().get(i);
  951.                 IDSoggetto idSoggetto = archiveAccordo.getIdSoggettoErogatore();
  952.                 Archive archiveListaOggettiSoggetti = null;
  953.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  954.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  955.                 }
  956.                 else{
  957.                     archiveListaOggettiSoggetti = new Archive();
  958.                 }
  959.                 archiveListaOggettiSoggetti.getAccordiServizioParteSpecifica().add(archiveAccordo);
  960.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  961.             }
  962.         }
  963.        
  964.         // raccolgo accordiCooperazione
  965.         if(archive.getAccordiCooperazione()!=null && archive.getAccordiCooperazione().size()>0){
  966.             for (int i = 0; i < archive.getAccordiCooperazione().size(); i++) {
  967.                 ArchiveAccordoCooperazione archiveAccordo = archive.getAccordiCooperazione().get(i);
  968.                 IDSoggetto idSoggetto = archiveAccordo.getIdSoggettoReferente();
  969.                 Archive archiveListaOggettiSoggetti = null;
  970.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  971.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  972.                 }
  973.                 else{
  974.                     archiveListaOggettiSoggetti = new Archive();
  975.                 }
  976.                 archiveListaOggettiSoggetti.getAccordiCooperazione().add(archiveAccordo);
  977.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  978.             }
  979.         }
  980.        
  981.         // raccolgo fruizioni
  982.         if(archive.getAccordiFruitori()!=null && archive.getAccordiFruitori().size()>0){
  983.             for (int i = 0; i < archive.getAccordiFruitori().size(); i++) {
  984.                 ArchiveFruitore archiveFruitore = archive.getAccordiFruitori().get(i);
  985.                 IDSoggetto idSoggetto = archiveFruitore.getIdAccordoServizioParteSpecifica().getSoggettoErogatore();
  986.                 Archive archiveListaOggettiSoggetti = null;
  987.                 if(archiveMapIntoSoggetti.containsKey(idSoggetto.toString())){
  988.                     archiveListaOggettiSoggetti = archiveMapIntoSoggetti.remove(idSoggetto.toString());
  989.                 }
  990.                 else{
  991.                     archiveListaOggettiSoggetti = new Archive();
  992.                 }
  993.                 archiveListaOggettiSoggetti.getAccordiFruitori().add(archiveFruitore);
  994.                 archiveMapIntoSoggetti.put(idSoggetto.toString(), archiveListaOggettiSoggetti);
  995.             }
  996.         }
  997.        
  998.         return archiveMapIntoSoggetti;
  999.     }
  1000.    
  1001.     private void saveAccordo(AccordoServizioParteComune accordo, IDAccordo idAccordo, boolean servizioComposto, String parentDir, ZipOutputStream zipOut) throws IOException, SerializerException, ProtocolException{
  1002.        
  1003.         String nomeAccordo = null;
  1004.         try{
  1005.             String nomeDefinizione = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_FILE_NAME;
  1006.             nomeAccordo =  Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR;
  1007.             if(servizioComposto){
  1008.                 nomeDefinizione = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_FILE_NAME;
  1009.                 nomeAccordo = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR;
  1010.             }
  1011.            
  1012.             String rootDir = parentDir + nomeAccordo+File.separatorChar+
  1013.                     ZIPUtils.convertNameToSistemaOperativoCompatible(idAccordo.getNome())+"_"+
  1014.                     idAccordo.getVersione()+File.separatorChar;
  1015.            
  1016.             // raccolta elementi
  1017.            
  1018.             byte[]wsdlInterfacciaDefinitoria = accordo.getByteWsdlDefinitorio();
  1019.             accordo.setByteWsdlDefinitorio(null);
  1020.             byte[]wsdlInterfacciaConcettuale = accordo.getByteWsdlConcettuale();
  1021.             accordo.setByteWsdlConcettuale(null);
  1022.             byte[]wsdlInterfacciaLogicaErogatore = accordo.getByteWsdlLogicoErogatore();
  1023.             accordo.setByteWsdlLogicoErogatore(null);
  1024.             byte[]wsdlInterfacciaLogicaFruitore = accordo.getByteWsdlLogicoFruitore();
  1025.             accordo.setByteWsdlLogicoFruitore(null);
  1026.            
  1027.             byte[]specificaConversazioneConcettuale = accordo.getByteSpecificaConversazioneConcettuale();
  1028.             accordo.setSpecificaConversazioneConcettuale(null);
  1029.             byte[]specificaConversazioneLogicaErogatore = accordo.getByteSpecificaConversazioneErogatore();
  1030.             accordo.setSpecificaConversazioneErogatore(null);
  1031.             byte[]specificaConversazioneLogicaFruitore = accordo.getByteSpecificaConversazioneFruitore();
  1032.             accordo.setSpecificaConversazioneFruitore(null);
  1033.            
  1034.             Map<String, byte[]> allegatiList = new HashMap<>();
  1035.             for (Documento documento : accordo.getAllegatoList()) {
  1036.                 if(documento.getFile()==null){
  1037.                     throw new ProtocolException("Allegato senza nome file");
  1038.                 }
  1039.                 if(documento.getByteContenuto()==null){
  1040.                     throw new ProtocolException("Allegato["+documento.getFile()+"] senza contenuto");
  1041.                 }
  1042.                 if(documento.getTipo()==null){
  1043.                     throw new ProtocolException("Allegato["+documento.getFile()+"] senza tipo");
  1044.                 }
  1045.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1046.                 allegatiList.put(id, documento.getByteContenuto());
  1047.                 documento.setByteContenuto(null);
  1048.             }
  1049.            
  1050.             Map<String, byte[]> specificaSemiformaleList = new HashMap<>();
  1051.             for (Documento documento : accordo.getSpecificaSemiformaleList()) {
  1052.                 if(documento.getFile()==null){
  1053.                     throw new ProtocolException("SpecificaSemiformale senza nome file");
  1054.                 }
  1055.                 if(documento.getByteContenuto()==null){
  1056.                     throw new ProtocolException("SpecificaSemiformale["+documento.getFile()+"] senza contenuto");
  1057.                 }
  1058.                 if(documento.getTipo()==null){
  1059.                     throw new ProtocolException("SpecificaSemiformale["+documento.getFile()+"] senza tipo");
  1060.                 }
  1061.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1062.                 specificaSemiformaleList.put(id, documento.getByteContenuto());
  1063.                 documento.setByteContenuto(null);
  1064.             }
  1065.            
  1066.             Map<String, byte[]> specificaCoordinamentoList = new HashMap<>();
  1067.             if(servizioComposto){
  1068.                 for (Documento documento : accordo.getServizioComposto().getSpecificaCoordinamentoList()) {
  1069.                     if(documento.getFile()==null){
  1070.                         throw new ProtocolException("SpecificaCoordinamento senza nome file");
  1071.                     }
  1072.                     if(documento.getByteContenuto()==null){
  1073.                         throw new ProtocolException("SpecificaCoordinamento["+documento.getFile()+"] senza contenuto");
  1074.                     }
  1075.                     if(documento.getTipo()==null){
  1076.                         throw new ProtocolException("SpecificaCoordinamento["+documento.getFile()+"] senza tipo");
  1077.                     }
  1078.                     String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1079.                     specificaCoordinamentoList.put(id, documento.getByteContenuto());
  1080.                     documento.setByteContenuto(null);
  1081.                 }
  1082.             }
  1083.            
  1084.             Map<String, byte[]> protocolPropertiesList = new HashMap<>();
  1085.             for (ProtocolProperty pp : accordo.getProtocolPropertyList()) {
  1086.                 if(pp.getByteFile()==null) {
  1087.                     continue;
  1088.                 }
  1089.                 if(pp.getFile()==null){
  1090.                     throw new ProtocolException("ProtocolProperties ["+pp.getName()+"] senza nome file");
  1091.                 }
  1092.                 ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE;
  1093.                 String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+pp.getName(); // uso la property name che è univoca
  1094.                 protocolPropertiesList.put(id, pp.getByteFile());
  1095.                 pp.setByteFile(null);
  1096.             }
  1097.             if(accordo.sizeAzioneList()>0) {
  1098.                 for (Azione az : accordo.getAzioneList()) {
  1099.                     for (ProtocolProperty pp : az.getProtocolPropertyList()) {
  1100.                         if(pp.getByteFile()==null) {
  1101.                             continue;
  1102.                         }
  1103.                         if(pp.getFile()==null){
  1104.                             throw new ProtocolException("ProtocolProperties (azione:"+az.getNome()+") ["+pp.getName()+"] senza nome file");
  1105.                         }
  1106.                         ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.AZIONE_ACCORDO;
  1107.                         String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+
  1108.                                 az.getNome()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+ // uso il nome dell'azione che e' univoco
  1109.                                 pp.getName(); // uso la property name che è univoca
  1110.                         protocolPropertiesList.put(id, pp.getByteFile());
  1111.                         pp.setByteFile(null);
  1112.                     }
  1113.                 }
  1114.             }
  1115.             if(accordo.sizePortTypeList()>0) {
  1116.                 for (PortType pt : accordo.getPortTypeList()) {
  1117.                     for (ProtocolProperty pp : pt.getProtocolPropertyList()) {
  1118.                         if(pp.getByteFile()==null) {
  1119.                             continue;
  1120.                         }
  1121.                         if(pp.getFile()==null){
  1122.                             throw new ProtocolException("ProtocolProperties (pt:"+pt.getNome()+") ["+pp.getName()+"] senza nome file");
  1123.                         }
  1124.                         ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.PORT_TYPE;
  1125.                         String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+
  1126.                                 pt.getNome()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+ // uso il nome del port type che e' univoco
  1127.                                 pp.getName(); // uso la property name che è univoca
  1128.                         protocolPropertiesList.put(id, pp.getByteFile());
  1129.                         pp.setByteFile(null);
  1130.                     }
  1131.                     if(pt.sizeAzioneList()>0) {
  1132.                         for (Operation op : pt.getAzioneList()) {
  1133.                             for (ProtocolProperty pp : op.getProtocolPropertyList()) {
  1134.                                 if(pp.getByteFile()==null) {
  1135.                                     continue;
  1136.                                 }
  1137.                                 if(pp.getFile()==null){
  1138.                                     throw new ProtocolException("ProtocolProperties (op:"+op.getNome()+") ["+pp.getName()+"] senza nome file");
  1139.                                 }
  1140.                                 ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.OPERATION;
  1141.                                 String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+
  1142.                                         op.getNome()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+ // uso il nome dell'operation che e' univoco
  1143.                                         pp.getName(); // uso la property name che è univoca
  1144.                                 protocolPropertiesList.put(id, pp.getByteFile());
  1145.                                 pp.setByteFile(null);
  1146.                             }
  1147.                         }
  1148.                     }
  1149.                 }
  1150.             }
  1151.             if(accordo.sizeResourceList()>0) {
  1152.                 for (Resource resource : accordo.getResourceList()) {
  1153.                     for (ProtocolProperty pp : resource.getProtocolPropertyList()) {
  1154.                         if(pp.getByteFile()==null) {
  1155.                             continue;
  1156.                         }
  1157.                         if(pp.getFile()==null){
  1158.                             throw new ProtocolException("ProtocolProperties (resource:"+resource.getNome()+") ["+pp.getName()+"] senza nome file");
  1159.                         }
  1160.                         ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.RESOURCE;
  1161.                         String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+
  1162.                                 resource.getNome()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+ // uso il nome della risorsa che e' univoco
  1163.                                 pp.getName(); // uso la property name che è univoca
  1164.                         protocolPropertiesList.put(id, pp.getByteFile());
  1165.                         pp.setByteFile(null);
  1166.                     }
  1167.                 }
  1168.             }
  1169.            
  1170.             // id
  1171.             String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME;
  1172.             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1173.             String identificativo = accordo.getNome()+" "+accordo.getVersione();
  1174.             zipOut.write(identificativo.getBytes());
  1175.            
  1176.             // definizione
  1177.             nomeFile = nomeDefinizione;
  1178.             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1179.             // write(zipOut, nomeDefinizione, idAccordo, true, accordo); viene effettuato il catch di tutto il metodo saveAccordo
  1180.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
  1181.             zipOut.write(this.jaxbRegistrySerializer.toByteArray(accordo));
  1182.            
  1183.             // wsdl
  1184.             if(wsdlInterfacciaDefinitoria!=null){
  1185.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+
  1186.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_INTERFACCIA_DEFINITORIA;
  1187.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1188.                 zipOut.write(wsdlInterfacciaDefinitoria);
  1189.             }
  1190.             if(wsdlInterfacciaConcettuale!=null){
  1191.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+
  1192.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL;
  1193.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1194.                 zipOut.write(wsdlInterfacciaConcettuale);
  1195.             }
  1196.             if(wsdlInterfacciaLogicaErogatore!=null){
  1197.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+
  1198.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_EROGATORE_WSDL;
  1199.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1200.                 zipOut.write(wsdlInterfacciaLogicaErogatore);
  1201.             }
  1202.             if(wsdlInterfacciaLogicaFruitore!=null){
  1203.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+
  1204.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_FRUITORE_WSDL;
  1205.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1206.                 zipOut.write(wsdlInterfacciaLogicaFruitore);
  1207.             }
  1208.            
  1209.             // specificaConversazione
  1210.             if(specificaConversazioneConcettuale!=null){
  1211.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_CONVERSAZIONI+File.separatorChar+
  1212.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_CONCETTUALE;
  1213.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1214.                 zipOut.write(specificaConversazioneConcettuale);
  1215.             }
  1216.             if(specificaConversazioneLogicaErogatore!=null){
  1217.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_CONVERSAZIONI+File.separatorChar+
  1218.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_EROGATORE;
  1219.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1220.                 zipOut.write(specificaConversazioneLogicaErogatore);
  1221.             }
  1222.             if(specificaConversazioneLogicaFruitore!=null){
  1223.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_CONVERSAZIONI+File.separatorChar+
  1224.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_FRUITORE;
  1225.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1226.                 zipOut.write(specificaConversazioneLogicaFruitore);
  1227.             }
  1228.            
  1229.             // Permit '.'
  1230.             List<Character> listCharacterPermit = new ArrayList<Character>();
  1231.             listCharacterPermit.add('.');
  1232.            
  1233.             // allegati
  1234.             if(allegatiList.size()>0){
  1235.                 int index = 1;
  1236.                 for (String id : allegatiList.keySet()) {
  1237.                    
  1238.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar+
  1239.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1240.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1241.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1242.                     zipOut.write(id.getBytes());
  1243.                    
  1244.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar+
  1245.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1246.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1247.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1248.                     zipOut.write(allegatiList.get(id));
  1249.                    
  1250.                     index++;
  1251.                 }
  1252.             }
  1253.            
  1254.             // specificaSemiformale
  1255.             if(specificaSemiformaleList.size()>0){
  1256.                 int index = 1;
  1257.                 for (String id : specificaSemiformaleList.keySet()) {
  1258.                    
  1259.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar+
  1260.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1261.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1262.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1263.                     zipOut.write(id.getBytes());
  1264.                    
  1265.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar+
  1266.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1267.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1268.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1269.                     zipOut.write(specificaSemiformaleList.get(id));
  1270.                    
  1271.                     index++;
  1272.                 }
  1273.             }
  1274.            
  1275.             // specificaCoordinamento
  1276.             if(servizioComposto){
  1277.                 if(specificaCoordinamentoList.size()>0){
  1278.                     int index = 1;
  1279.                     for (String id : specificaCoordinamentoList.keySet()) {
  1280.                        
  1281.                         nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_COORDINAMENTO+File.separatorChar+
  1282.                                 Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1283.                                 Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1284.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1285.                         zipOut.write(id.getBytes());
  1286.                        
  1287.                         nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_COORDINAMENTO+File.separatorChar+
  1288.                                 Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1289.                                 Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1290.                         zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1291.                         zipOut.write(specificaCoordinamentoList.get(id));
  1292.                        
  1293.                         index++;
  1294.                     }
  1295.                 }
  1296.             }
  1297.            
  1298.             // protocolProperties
  1299.             if(protocolPropertiesList.size()>0){
  1300.                 int indexPP = 1;
  1301.                 for (String id : protocolPropertiesList.keySet()) {
  1302.                    
  1303.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  1304.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  1305.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1306.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1307.                     zipOut.write(id.getBytes());
  1308.                    
  1309.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  1310.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  1311.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1312.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1313.                     zipOut.write(protocolPropertiesList.get(id));
  1314.                    
  1315.                     indexPP++;
  1316.                 }
  1317.             }
  1318.            
  1319.         }catch(Exception e){
  1320.             String xml = null;
  1321.             try{
  1322.                 xml = accordo.toXml();
  1323.             }catch(Exception eDebug){
  1324.                 this.log.error("Errore durante il recupero della struttura xml: "+eDebug,eDebug);
  1325.                 throw new ProtocolException("["+nomeAccordo+"]["+idAccordo+"]: "+e.getMessage(),e);
  1326.             }
  1327.             throw new ProtocolException("["+nomeAccordo+"]["+idAccordo+"] ("+xml+"): "+e.getMessage(),e);
  1328.         }
  1329.     }
  1330.    
  1331.     private void saveAccordo(AccordoServizioParteSpecifica accordo, IDServizio idServizio, List<MappingErogazionePortaApplicativa> mappingPorteApplicativeAssociate,
  1332.             String parentDir, ZipOutputStream zipOut,
  1333.             Map<String, String> map_IdApsScritti_nomeFileSystem) throws IOException, SerializerException, ProtocolException{
  1334.        
  1335.         try{
  1336.             String aspsDir = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR+File.separatorChar+
  1337.                     ZIPUtils.convertNameToSistemaOperativoCompatible(idServizio.getTipo())+"_"+
  1338.                     ZIPUtils.convertNameToSistemaOperativoCompatible(idServizio.getNome())+"_"+
  1339.                     idServizio.getVersione()+File.separatorChar;
  1340.             String rootDir = parentDir + aspsDir;
  1341.            
  1342.             String keyMap = accordo.getNome()+" "+accordo.getVersione();
  1343.             map_IdApsScritti_nomeFileSystem.put(keyMap, aspsDir);
  1344.            
  1345.             // raccolta elementi
  1346.            
  1347.             byte[]wsdlInterfacciaImplementativaErogatore = accordo.getByteWsdlImplementativoErogatore();
  1348.             accordo.setByteWsdlImplementativoErogatore(null);
  1349.             byte[]wsdlInterfacciaImplementativaFruitore = accordo.getByteWsdlImplementativoFruitore();
  1350.             accordo.setByteWsdlImplementativoFruitore(null);
  1351.            
  1352.             Map<String, byte[]> allegatiList = new HashMap<>();
  1353.             for (Documento documento : accordo.getAllegatoList()) {
  1354.                 if(documento.getFile()==null){
  1355.                     throw new ProtocolException("Allegato senza nome file");
  1356.                 }
  1357.                 if(documento.getByteContenuto()==null){
  1358.                     throw new ProtocolException("Allegato["+documento.getFile()+"] senza contenuto");
  1359.                 }
  1360.                 if(documento.getTipo()==null){
  1361.                     throw new ProtocolException("Allegato["+documento.getFile()+"] senza tipo");
  1362.                 }
  1363.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1364.                 allegatiList.put(id, documento.getByteContenuto());
  1365.                 documento.setByteContenuto(null);
  1366.             }
  1367.            
  1368.             Map<String, byte[]> specificaSemiformaleList = new HashMap<>();
  1369.             for (Documento documento : accordo.getSpecificaSemiformaleList()) {
  1370.                 if(documento.getFile()==null){
  1371.                     throw new ProtocolException("SpecificaSemiformale senza nome file");
  1372.                 }
  1373.                 if(documento.getByteContenuto()==null){
  1374.                     throw new ProtocolException("SpecificaSemiformale["+documento.getFile()+"] senza contenuto");
  1375.                 }
  1376.                 if(documento.getTipo()==null){
  1377.                     throw new ProtocolException("SpecificaSemiformale["+documento.getFile()+"] senza tipo");
  1378.                 }
  1379.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1380.                 specificaSemiformaleList.put(id, documento.getByteContenuto());
  1381.                 documento.setByteContenuto(null);
  1382.             }
  1383.            
  1384.             Map<String, byte[]> specificaLivelloServizioList = new HashMap<>();
  1385.             for (Documento documento : accordo.getSpecificaLivelloServizioList()) {
  1386.                 if(documento.getFile()==null){
  1387.                     throw new ProtocolException("SpecificaLivelloServizio senza nome file");
  1388.                 }
  1389.                 if(documento.getByteContenuto()==null){
  1390.                     throw new ProtocolException("SpecificaLivelloServizio["+documento.getFile()+"] senza contenuto");
  1391.                 }
  1392.                 if(documento.getTipo()==null){
  1393.                     throw new ProtocolException("SpecificaLivelloServizio["+documento.getFile()+"] senza tipo");
  1394.                 }
  1395.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1396.                 specificaLivelloServizioList.put(id, documento.getByteContenuto());
  1397.                 documento.setByteContenuto(null);
  1398.             }
  1399.            
  1400.             Map<String, byte[]> specificaSicurezzaList = new HashMap<>();
  1401.             for (Documento documento : accordo.getSpecificaSicurezzaList()) {
  1402.                 if(documento.getFile()==null){
  1403.                     throw new ProtocolException("SpecificaSicurezza senza nome file");
  1404.                 }
  1405.                 if(documento.getByteContenuto()==null){
  1406.                     throw new ProtocolException("SpecificaSicurezza["+documento.getFile()+"] senza contenuto");
  1407.                 }
  1408.                 if(documento.getTipo()==null){
  1409.                     throw new ProtocolException("SpecificaSicurezza["+documento.getFile()+"] senza tipo");
  1410.                 }
  1411.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1412.                 specificaSicurezzaList.put(id, documento.getByteContenuto());
  1413.                 documento.setByteContenuto(null);
  1414.             }
  1415.            
  1416.             Map<String, byte[]> protocolPropertiesList = new HashMap<>();
  1417.             for (ProtocolProperty pp : accordo.getProtocolPropertyList()) {
  1418.                 if(pp.getByteFile()==null) {
  1419.                     continue;
  1420.                 }
  1421.                 if(pp.getFile()==null){
  1422.                     throw new ProtocolException("ProtocolProperties ["+pp.getName()+"] senza nome file");
  1423.                 }
  1424.                 ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA;
  1425.                 String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+pp.getName(); // uso la property name che è univoca
  1426.                 protocolPropertiesList.put(id, pp.getByteFile());
  1427.                 pp.setByteFile(null);
  1428.             }
  1429.            
  1430.             List<Fruitore> listFruitore = new ArrayList<Fruitore>();
  1431.             while(accordo.sizeFruitoreList()>0){
  1432.                 listFruitore.add(accordo.removeFruitore(0));
  1433.             }
  1434.            
  1435.             // id
  1436.             String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME;
  1437.             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1438.             String identificativo = accordo.getTipo()+" "+accordo.getNome()+" "+accordo.getVersione();
  1439.             zipOut.write(identificativo.getBytes());
  1440.            
  1441.             // definizione
  1442.             nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_FILE_NAME;
  1443.             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1444.             //write(zipOut, "accordoServizioParteSpecifica", idAccordo, true, accordo); viene effettuato il catch di tutto il metodo saveAccordo
  1445.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
  1446.             zipOut.write(this.jaxbRegistrySerializer.toByteArray(accordo));
  1447.            
  1448.             // wsdl
  1449.             if(wsdlInterfacciaImplementativaErogatore!=null){
  1450.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+
  1451.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_EROGATORE_WSDL;
  1452.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1453.                 zipOut.write(wsdlInterfacciaImplementativaErogatore);
  1454.             }
  1455.             if(wsdlInterfacciaImplementativaFruitore!=null){
  1456.                 nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+
  1457.                         Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_FRUITORE_WSDL;
  1458.                 zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1459.                 zipOut.write(wsdlInterfacciaImplementativaFruitore);
  1460.             }
  1461.            
  1462.             // Permit '.'
  1463.             List<Character> listCharacterPermit = new ArrayList<Character>();
  1464.             listCharacterPermit.add('.');
  1465.            
  1466.             // allegati
  1467.             if(allegatiList.size()>0){
  1468.                 int index = 1;
  1469.                 for (String id : allegatiList.keySet()) {
  1470.                    
  1471.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar+
  1472.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1473.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1474.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1475.                     zipOut.write(id.getBytes());
  1476.                    
  1477.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar+
  1478.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1479.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1480.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1481.                     zipOut.write(allegatiList.get(id));
  1482.                    
  1483.                     index++;
  1484.                 }
  1485.             }
  1486.            
  1487.             // specificaSemiformale
  1488.             if(specificaSemiformaleList.size()>0){
  1489.                 int index = 1;
  1490.                 for (String id : specificaSemiformaleList.keySet()) {
  1491.                    
  1492.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar+
  1493.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1494.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1495.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1496.                     zipOut.write(id.getBytes());
  1497.                    
  1498.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar+
  1499.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1500.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1501.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1502.                     zipOut.write(specificaSemiformaleList.get(id));
  1503.                    
  1504.                     index++;
  1505.                 }
  1506.             }
  1507.            
  1508.             // specificaLivelloServizio
  1509.             if(specificaLivelloServizioList.size()>0){
  1510.                 int index = 1;
  1511.                 for (String id : specificaLivelloServizioList.keySet()) {
  1512.                    
  1513.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_LIVELLI_SERVIZIO+File.separatorChar+
  1514.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1515.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1516.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1517.                     zipOut.write(id.getBytes());
  1518.                    
  1519.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_LIVELLI_SERVIZIO+File.separatorChar+
  1520.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1521.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1522.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1523.                     zipOut.write(specificaLivelloServizioList.get(id));
  1524.                    
  1525.                     index++;
  1526.                 }
  1527.             }
  1528.            
  1529.             // specificaSicurezza
  1530.             if(specificaSicurezzaList.size()>0){
  1531.                 int index = 1;
  1532.                 for (String id : specificaSicurezzaList.keySet()) {
  1533.                    
  1534.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SICUREZZA+File.separatorChar+
  1535.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1536.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1537.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1538.                     zipOut.write(id.getBytes());
  1539.                    
  1540.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SICUREZZA+File.separatorChar+
  1541.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1542.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1543.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1544.                     zipOut.write(specificaSicurezzaList.get(id));
  1545.                    
  1546.                     index++;
  1547.                 }
  1548.             }
  1549.            
  1550.             // protocolProperties
  1551.             if(protocolPropertiesList.size()>0){
  1552.                 int indexPP = 1;
  1553.                 for (String id : protocolPropertiesList.keySet()) {
  1554.                    
  1555.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  1556.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  1557.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1558.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1559.                     zipOut.write(id.getBytes());
  1560.                    
  1561.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  1562.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  1563.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1564.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1565.                     zipOut.write(protocolPropertiesList.get(id));
  1566.                    
  1567.                     indexPP++;
  1568.                 }
  1569.             }
  1570.            
  1571.             // fruitori (questo caso non dovrebbe essere presente, ci dovrebbe invece essere l'archiveFruitore)
  1572.             if(listFruitore.size()>0){
  1573.                 for (Fruitore fruitore : listFruitore) {
  1574.                     // il converName sui soggetti serve a poco, visto che devono essere simpleName (solo caratteri e numeri)
  1575.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar+
  1576.                             ZIPUtils.convertNameToSistemaOperativoCompatible(fruitore.getTipo())+"_"+
  1577.                             ZIPUtils.convertNameToSistemaOperativoCompatible(fruitore.getNome())+".xml";
  1578.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1579.                     this.cleanerOpenSPCoop2ExtensionsRegistry.clean(fruitore);
  1580.                     zipOut.write(this.jaxbRegistrySerializer.toByteArray(fruitore));
  1581.                 }
  1582.             }
  1583.            
  1584.             // PortaApplicativa Associata
  1585.             if(mappingPorteApplicativeAssociate!=null){
  1586.                 for (int i = 0; i < mappingPorteApplicativeAssociate.size(); i++) {
  1587.                     String nomeFilePAAssociata = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_MAPPING+File.separatorChar+
  1588.                             (i+1)+
  1589.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_MAPPING_PA_SUFFIX;
  1590.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFilePAAssociata));
  1591.                     MappingErogazionePortaApplicativa mappingPortaApplicativaAssociata = mappingPorteApplicativeAssociate.get(i);
  1592.                     // Non serializzo l'ìd del servizio, poiche' sono gia' dentro il servizio
  1593.                     String id = mappingPortaApplicativaAssociata.getNome() + " " +
  1594.                             mappingPortaApplicativaAssociata.getIdPortaApplicativa().getNome() + " " +
  1595.                             mappingPortaApplicativaAssociata.isDefault() + " " +
  1596.                             mappingPortaApplicativaAssociata.getDescrizione();
  1597.                     zipOut.write(id.getBytes());    
  1598.                 }
  1599.             }
  1600.                        
  1601.         }catch(Exception e){
  1602.             String xml = null;
  1603.             try{
  1604.                 xml = accordo.toXml();
  1605.             }catch(Exception eDebug){
  1606.                 this.log.error("Errore durante il recupero della struttura xml: "+eDebug,eDebug);
  1607.                 throw new ProtocolException("[AccordoServizioParteSpecifica]["+idServizio+"]: "+e.getMessage(),e);
  1608.             }
  1609.             throw new ProtocolException("[AccordoServizioParteSpecifica]["+idServizio+"] ("+xml+"): "+e.getMessage(),e);
  1610.         }

  1611.     }
  1612.    
  1613.     private void saveAccordo(AccordoCooperazione accordo, IDAccordoCooperazione idAccordo, String parentDir, ZipOutputStream zipOut) throws IOException, SerializerException, ProtocolException{
  1614.        
  1615.         try{
  1616.        
  1617.             String rootDir = parentDir + Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR+File.separatorChar+
  1618.                     ZIPUtils.convertNameToSistemaOperativoCompatible(idAccordo.getNome())+"_"+
  1619.                     idAccordo.getVersione()+File.separatorChar;
  1620.            
  1621.             // raccolta elementi
  1622.            
  1623.             Map<String, byte[]> allegatiList = new HashMap<>();
  1624.             for (Documento documento : accordo.getAllegatoList()) {
  1625.                 if(documento.getFile()==null){
  1626.                     throw new ProtocolException("Allegato senza nome file");
  1627.                 }
  1628.                 if(documento.getByteContenuto()==null){
  1629.                     throw new ProtocolException("Allegato["+documento.getFile()+"] senza contenuto");
  1630.                 }
  1631.                 if(documento.getTipo()==null){
  1632.                     throw new ProtocolException("Allegato["+documento.getFile()+"] senza tipo");
  1633.                 }
  1634.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1635.                 allegatiList.put(id, documento.getByteContenuto());
  1636.                 documento.setByteContenuto(null);
  1637.             }
  1638.            
  1639.             Map<String, byte[]> specificaSemiformaleList = new HashMap<>();
  1640.             for (Documento documento : accordo.getSpecificaSemiformaleList()) {
  1641.                 if(documento.getFile()==null){
  1642.                     throw new ProtocolException("SpecificaSemiformale senza nome file");
  1643.                 }
  1644.                 if(documento.getByteContenuto()==null){
  1645.                     throw new ProtocolException("SpecificaSemiformale["+documento.getFile()+"] senza contenuto");
  1646.                 }
  1647.                 if(documento.getTipo()==null){
  1648.                     throw new ProtocolException("SpecificaSemiformale["+documento.getFile()+"] senza tipo");
  1649.                 }
  1650.                 String id = documento.getTipo()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+documento.getFile();
  1651.                 specificaSemiformaleList.put(id, documento.getByteContenuto());
  1652.                 documento.setByteContenuto(null);
  1653.             }
  1654.            
  1655.             Map<String, byte[]> protocolPropertiesList = new HashMap<>();
  1656.             for (ProtocolProperty pp : accordo.getProtocolPropertyList()) {
  1657.                 if(pp.getByteFile()==null) {
  1658.                     continue;
  1659.                 }
  1660.                 if(pp.getFile()==null){
  1661.                     throw new ProtocolException("ProtocolProperties ["+pp.getName()+"] senza nome file");
  1662.                 }
  1663.                 ProprietariProtocolProperty tipologiaProprietarioProtocolProperty = ProprietariProtocolProperty.ACCORDO_COOPERAZIONE;
  1664.                 String id = tipologiaProprietarioProtocolProperty.name()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR+pp.getName(); // uso la property name che è univoca
  1665.                 protocolPropertiesList.put(id, pp.getByteFile());
  1666.                 pp.setByteFile(null);
  1667.             }
  1668.            
  1669.             // id
  1670.             String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME;
  1671.             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1672.             String identificativo = accordo.getNome()+" "+accordo.getVersione();
  1673.             zipOut.write(identificativo.getBytes());
  1674.            
  1675.             // definizione
  1676.             nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_FILE_NAME;
  1677.             zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1678.             //write(zipOut, "accordoCooperazione", idAccordo, true, accordo); viene effettuato il catch di tutto il metodo saveAccordo
  1679.             this.cleanerOpenSPCoop2ExtensionsRegistry.clean(accordo); // NOTA: vengono eliminati anche tutti i campi contenenti bytes. Comunque li ho letti prima
  1680.             zipOut.write(this.jaxbRegistrySerializer.toByteArray(accordo));
  1681.            
  1682.             // Permit '.'
  1683.             List<Character> listCharacterPermit = new ArrayList<Character>();
  1684.             listCharacterPermit.add('.');
  1685.            
  1686.             // allegati
  1687.             if(allegatiList.size()>0){
  1688.                 int index = 1;
  1689.                 for (String id : allegatiList.keySet()) {
  1690.                    
  1691.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar+
  1692.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1693.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1694.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1695.                     zipOut.write(id.getBytes());
  1696.                    
  1697.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar+
  1698.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1699.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1700.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1701.                     zipOut.write(allegatiList.get(id));
  1702.                    
  1703.                     index++;
  1704.                 }
  1705.             }
  1706.            
  1707.             // specificaSemiformale
  1708.             if(specificaSemiformaleList.size()>0){
  1709.                 int index = 1;
  1710.                 for (String id : specificaSemiformaleList.keySet()) {
  1711.                    
  1712.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar+
  1713.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1714.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1715.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1716.                     zipOut.write(id.getBytes());
  1717.                    
  1718.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar+
  1719.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+index+
  1720.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1721.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1722.                     zipOut.write(specificaSemiformaleList.get(id));
  1723.                    
  1724.                     index++;
  1725.                 }
  1726.             }
  1727.            
  1728.             // protocolProperties
  1729.             if(protocolPropertiesList.size()>0){
  1730.                 int indexPP = 1;
  1731.                 for (String id : protocolPropertiesList.keySet()) {
  1732.                    
  1733.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  1734.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  1735.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID;
  1736.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1737.                     zipOut.write(id.getBytes());
  1738.                    
  1739.                     nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar+
  1740.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_PREFIX+indexPP+
  1741.                             Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT;
  1742.                     zipOut.putNextEntry(new ZipEntry(rootDir+nomeFile));
  1743.                     zipOut.write(protocolPropertiesList.get(id));
  1744.                    
  1745.                     indexPP++;
  1746.                 }
  1747.             }
  1748.        
  1749.         }catch(Exception e){
  1750.             String xml = null;
  1751.             try{
  1752.                 xml = accordo.toXml();
  1753.             }catch(Exception eDebug){
  1754.                 this.log.error("Errore durante il recupero della struttura xml: "+eDebug,eDebug);
  1755.                 throw new ProtocolException("[AccordoCooperazione]["+idAccordo+"]: "+e.getMessage(),e);
  1756.             }
  1757.             throw new ProtocolException("[AccordoCooperazione]["+idAccordo+"] ("+xml+"): "+e.getMessage(),e);
  1758.         }
  1759.     }
  1760. }

  1761. enum SerializationType {
  1762.    
  1763.     CONFIG, REGISTRY, PLUGIN, CONTROLLO_TRAFFICO, ALLARME
  1764.    
  1765. }